Ошибка инструкции mov в шеллкоде

Недавно я работал над шеллкодами. Я написал шелл-код для создания оболочки с помощью 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 в виртуальной коробке. Я новичок в этом. Я не знаю, как это исправить.


person Gökhan Okumuş    schedule 24.08.2015    source источник
comment
Вам не разрешено писать в текстовом сегменте. Это функция безопасности, усложняющая написание эксплойтов. :-)   -  person Bo Persson    schedule 24.08.2015
comment
Ваш shell_string находится в разделе .text, который, скорее всего, будет доступен только для чтения.   -  person Michael    schedule 24.08.2015
comment
Спасибо за ваши советы. Когда я использую это в стеке, он отлично работает.   -  person Gökhan Okumuş    schedule 24.08.2015