Написание эксплойтов о переполнении буфера без завершенных строк NUL - PullRequest
0 голосов
/ 10 марта 2019

У меня есть следующий код сборки global _start

section .text

_start:
    jmp call
pop:
    pop ecx                     ; ECX = address of hello
    xor eax, eax                ; EAX = 0
    xor al, al                   ; EAX = 4 (int 0x80 sys_write)
    inc al
    inc al
    inc al
    inc al
    xor ebx, ebx
    inc ebx                    //Does not work inside exploit
    xor edx, edx
    mov dl, hellolen            ; EDX = length of hello string
    int 0x80

    ; Terminate program
    xor eax, eax
    inc eax                    //Does not work inside exploit
    xor ebx, ebx                ; EBX = return value of 0
    int 0x80
call:
    call pop
    hello: db "Hello World!Ho are you!!!!!"
hellolen equ $-hello

Приведенный выше код работает правильно и выдает правильные результаты при независимом запуске.

Но когда я беру objdump того же самого и пытаюсь выполнить переполнение буфера, я получаю следующие проблемы.

Здесь inc al правильно увеличивает все значения, но inc eax или inc ebx

Может быть потому, что в objdump это показывает inc al -> fe c0 inc ebx -> 43 // некоторый однобайтовый номер

Я также попробовал следующие способы обновления eax и ebx

xor ebx, ebx
xor bl, bl
inc bl
movsx ebx, bl
;inc ebx

Но здесь код операции movsx равен 0x0f, и он не работает, так как я сталкиваюсь со строкой, заканчивающейся нулем (\ x0x \ x0f).

...