3

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

4

2 回答 2

1

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

于 2013-01-08T15:41:00.010 回答
-1

首先,跟踪您平台的字节序。如果您认为您的位顺序正确,但您仍然收到格式错误的输入,则可能是您的 shell/文本编辑器不是二进制安全的。您最好使用允许您将数据直接写入任意进程的标准输入管道的子进程库,在 Python 等脚本语言中编写针对此缺陷的漏洞利用。

于 2012-07-10T23:18:51.000 回答