Недавно я работал над шеллкодами. Я написал шелл-код для создания оболочки с помощью execve syscall.
Вот код сборки:
global _start
section .text
_start:
jmp Shellcode
Execve:
xor rax, rax
; Get the address of the string
pop rdi
; Convert the A -> 0x0 to null terminate the string
mov [rdi +7], byte ah
; Copy the address of the string in RDI to BBBBBBBB
mov [rdi +8], rdi
; Copy the NULL 0x0000000000000000 -> CCCCCCCC
mov [rdi +16], rax
; Setup the addresses
lea rsi, [rdi +8]
lea rdx, [rdi +16]
add rax, 59
syscall
Shellcode:
call Execve
shell_string : db "/bin/shABBBBBBBBCCCCCCCC"
Я компилирую этот код с помощью this.
#P4#
#P5#
Когда я запускаю эту программу, она выдает ошибку сегментации. Я загрузил эту программу в gdb, и она выдает ошибку сегментации в инструкции * mov [rdi +7], byte ah*. Я пытаюсь посмотреть значение регистра rax и ah, но gdb говорит, что к нему невозможно получить доступ. Я использую 64-битную ОС Ubuntu 14.04 в виртуальной коробке. Я новичок в этом. Я не знаю, как это исправить.
shell_string
находится в разделе.text
, который, скорее всего, будет доступен только для чтения. - person Michael   schedule 24.08.2015