缓冲区溢出漏洞可与 gdb 一起使用,但并非没有

信息安全 缓冲区溢出 开发开发
2021-08-16 07:41:47

我正在学习缓冲区溢出,并且正在开发我的第一个漏洞。

有一个服务器进程侦听套接字并为每个客户端分叉一个新进程。子进程有一个我正在利用的缓冲区溢出漏洞。

如果我使用 gdb 启动服务器,我的漏洞利用工作有效,但是如果我只是在没有 gdb 的情况下启动服务器,则在运行漏洞利用代码时会出现段错误。

我的问题是 - gdb 是否会自动停用某些保护机制,例如 aslr/stack 保护等?这种行为的可能解释是什么?

我已经用 -zexecstack -fno-stack-protector 编译了服务器,如果没有 gdb,我仍然无法利用它。

这是在 debian x86 上。通过使用 gdb 运行服务器,我的意思是我运行“gdb server”,然后在 gdb 控制台中键入“run”,没有断点或其他任何内容。这样我的利用就成功了(向我的服务器发出 curl 请求)

2个回答

GDB 使用调试钩子 + 它旨在使用调试符号并处理它们,它会改变实际行为。所以 - 很明显,一些工件肯定会出现

每个代码博客

从 GDB 版本 7 开始,首次出现在带有 Karmic 的 Ubuntu(Ubuntu 9.10)中,ASLR 被关闭(通过 ADDR_NO_RANDOMIZE 个性标志)用于调试进程。如果您想更真实地了解进程在内存中的显示方式,则必须在 gdb 中“设置禁用随机化关闭”。