2

我正在尝试按照本教程学习如何进行缓冲区溢出: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 执行以下操作:

  1. 用 NOP 填充缓冲区
  2. 将 shellcode 放在缓冲区的中间
  3. 用所需的 RET (0xbfff620) 填充缓冲区的末尾
  4. 发送缓冲区(包括 shellcode)
  5. 然后程序的 RET 应该执行 shellcode

所以我加载 gdb 并运行服务器程序。执行漏洞利用程序时,它会给出分段错误并返回正确的 RET 地址。

程序收到信号 SIGSEGV,分段错误。0xbffff620 在 ?? ()

(gdb) 'x/400bx $esp-200' 的输出可以在以下网址看到:http://pastebin.com/bCqphFNn看起来是正确的..

不幸的是,该程序没有在 127.0.0.1 64713 上打开端口。

(gdb) 显示堆栈向我显示:

eip = 0xbffff620;保存eip 0x90909090

在 0xbffff62c 帧调用

0xbffff62c 处的参数列表,参数:

0xbffff62c 处的局部变量,前一帧的 sp 为 0xbffff628

保存的寄存器:

ebp 在 0xbffff620,eip 在 0xbffff624

我不确定现在如何继续;我怎样才能让漏洞利用?我错过了什么?

* 更新 *

我已经使用 (-g) 和 (-z execstack) 选项编译了 server.c。从 gdb 工作时:漏洞似乎确实有效(它在 64713 上打开了一个端口)。但是当我尝试使用 nc 或 telnet 连接到该端口时,server.c 会收到一个 SIGSEGV 信号(在 0xbffff6fc 上);端口 64713 仍然打开但不响应任何命令..

没有 gdb:执行 ./exploit 时,server.c 仍然收到分段错误。没有打开端口。

4

0 回答 0