具有gets()ROP漏洞的Windows控制台应用程序



我正在尝试(出于学习目的)使用面向返回编程(ROP)技术利用gets()函数漏洞。目标程序是一个Windows控制台应用程序,它在某个时刻请求一些输入,然后使用gets()将输入存储在本地80个字符长的数组中。
我创建了一个文件,其中开头包含80个"a"字符+一些额外字符+0x5da06c48地址,用于覆盖旧的EIP指针。
我在文本编辑器中打开文件,并将内容复制粘贴到控制台中作为输入。我使用IDA Pro(或OllyDbg)在gets()函数返回后立即设置了一个断点,并注意到地址已损坏-它被设置为0x3fa03f48(两个3f替换)。
我也尝试过其他地址,其中一部分效果很好,但大多数时候地址都被损坏了(有时字符丢失或被替换,有时被截断)。
如何克服这个问题?任何建议都将不胜感激!

复制粘贴二进制数据是偶然的。您是否尝试过使用输入重定向直接从文件将输入输入到测试程序中?

首先要跟踪平台的持久性。如果您认为您的位顺序正确,但仍然收到格式错误的输入,则可能是您的shell/文本编辑器不安全。您最好在Python等脚本语言中编写一个利用此漏洞的漏洞,使用子进程库可以将数据直接写入任意进程的stdin管道。

最新更新