在没有NUL终止字符串的情况下编写缓冲区溢出漏洞

时间:2019-03-10 19:17:18

标签: c assembly nasm objdump

我具有以下全局汇编代码_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会适当增加al值,但是inc eaxinc 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),所以它不起作用。

0 个答案:

没有答案