我正在尝试通过以下教程学习如何进行缓冲区溢出:http://www.ouah.org/readmeneu.htm但我无法使漏洞利用起作用。
来源,exploit.c:http://pastebin.com/b95G2KK7和server.c:http://pastebin.com/PM4GdcT7。正在使用的shellcode是http://pastebin.com/fuGgDeAH。
我修改了exploit.c和server.c以使它们运行。 用-fno-stack-protector编译server.c并将/ proc / sys / kernel / randomize_va_space设置为0.另外我测试了shellcode(gcc shellcode.c -z execstack; ./a.out; netcat 127.0.0.1 64713)它有效。
根据我的理解,exploit.c执行以下操作:
所以我加载gdb并运行服务器程序。 执行漏洞利用程序时,它会产生分段错误并返回正确的RET地址。
编程接收信号SIGSEGV,分段故障。 0xbffff620在? ()
(gdb)'x / 400bx $ esp-200'的输出可以在网址上看到:http://pastebin.com/bCqphFNn它看起来是正确的..
不幸的是,该程序没有在127.0.0.1 64713上打开一个端口。
(gdb)show stack告诉我:
eip = 0xbffff620;保存了eip 0x90909090
由帧调用0xbffff62c
Arglist在0xbffff62c,args:
当地人在0xbffff62c,前一帧的sp是0xbffff628
保存的寄存器:
ebp at 0xbffff620,eip at 0xbffff624
我不确定现在该如何继续;我怎样才能使漏洞利用起作用?我错过了什么?
*已更新*
我使用(-g)和(-z execstack)选项编译了server.c.当从gdb工作时:漏洞似乎有用(它在64713上打开一个端口)。但是当我尝试使用nc或telnet连接到该端口时,server.c接收到一个SIGSEGV信号(在0xbffff6fc上);端口64713仍处于打开状态,但不响应任何命令..
没有gdb:执行./exploit时,server.c仍会收到分段错误。没有打开端口。