首页 > 解决方案 > 在没有 NUL 终止字符串的情况下编写缓冲区溢出漏洞

问题描述

我有以下汇编代码全局_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)。

标签: cassemblynasmobjdump

解决方案


推荐阅读