我正在尝试(出于学习目的)使用面向返回的编程(ROP)技术来利用get()函数的漏洞。目标程序是一个Windows控制台应用程序,它在某个时刻请求一些输入,然后使用get()将输入存储在本地的80个字符长度的数组中。
我创建了一个文件,其开头包含80个'a‘字符+一些额外字符+ 0x5da06c48地址,用于覆盖旧的EIP指针。
我在文本编辑器中打开该文件,并将内容作为输入复制粘贴到控制台中。我使用IDA Pro (或OllyDbg)在gets()函数返回后立即设置断点,并注意到地址已损坏-它被设置为0x3fa03f48 (两个3f替换)。
我也尝试过其他地址-其中一些运行良好,但大多数情况下地址被损坏(有时字符丢失或被替换,有时被截断)。
如何克服这个问题?任何建议都将受到高度赞赏!
发布于 2013-01-08 23:41:00
发布于 2012-07-11 07:18:51
首先,跟踪您的平台的Endianness。如果您认为您的位的顺序是正确的,但仍然得到格式错误的输入,则可能是您的shell/文本编辑器不是二进制安全的。您最好使用Subprocess库,使用允许您将数据直接写入任意进程的标准输入管道的脚本语言编写利用此缺陷的漏洞。
https://stackoverflow.com/questions/9752190
复制相似问题