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

时间:2012-03-17 17:34:48

标签: security exploit

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

2 个答案:

答案 0 :(得分:1)

复制 - 粘贴二进制数据是命中注定的。您是否尝试使用输入重定向直接从文件中将输入提供给测试程序?

答案 1 :(得分:-1)

首先跟踪您平台的Endianness。如果您认为您的位数顺序正确,但仍然输入格式错误,则可能是您的shell / text编辑器不是二进制安全的。您最好使用Subprocess库在脚本语言(如Python)中编写漏洞利用漏洞,该库允许您将数据直接写入任意进程的stdin管道。