无法打印的输入在GDB中未正确处理

时间:2018-07-25 20:02:51

标签: c gdb scanf

我正在试验缓冲区溢出漏洞,并且有一个给定的(已编译)C程序,该程序使用scanf将用户输入的数据读取到缓冲区中,而无需进行必要的防止溢出检查。我相信我几乎已经弄清楚了如何利用这一点,但是我目前无法调试我的方法,因为在使用GDB进行调试时,我无法弄清楚如何将不可打印的输入字符传递给易受攻击的程序。

通过阅读此处的文档和其他答案,应该很容易做到这一点,方法是将输入字节写入文件,然后将该文件作为输入传递给GDB,例如:(gdb) r < input.txt。但是奇怪的是,当我在调用scanf之后检查内存中易受攻击的缓冲区的内容时,除了第一个字节(即\xa1之外,其内容与输入字节序列完全不同。 )。我已经尝试过对只包含ASCII字符的文件进行同样的操作,在这种情况下,调用scanf之后的缓冲区内容与文件内容匹配。

我在这里不知所措,这可能是GDB的问题吗?还是一些scanf的特色? (我没有C程序的源代码。)

编辑:我在下面添加了hexdump -C input.txt的结果。

00000000  a1 0d 84 04 08 e0 ff 90  90 90 90 90 90 90 90 90  |................|
00000010  90 90 90 90 90 90 90 90  90 90 90 90 90 90 90 90  |................|
*
000000d0  48 d6 ff ff 48 d6 ff ff  0a                       |H...H....|
000000d9

0 个答案:

没有答案