2

我正在尝试通过在 gdb 中使用 run < inputfile 重定向输入(以获取)来解决 DVL 上的特定漏洞

我可以成功溢出程序,但是在将十六进制值附加到字符串时遇到问题。我尝试了引号,将 mem addr 的值转换为 ascii 和各种转义尝试(\,\,\),但没有运气

输入文件示例:AAAA\x42

在上面的示例中,反斜杠似乎被读取为 ascii char (5c) 并且值 42 保留在堆栈中(奇怪?)。

如何在 gdb 输入文件中指定一个十六进制值?

谢谢

4

1 回答 1

4

使用 perl!:)

reader@hacking:~/booksrc $ ./overflow_example $(perl -e 'print "A"x30')

使用 'e' 选项 perl 将评估以下命令,并且围绕所有内容将 perl 的输出视为字符串。所以上面的命令等同于:

reader@hacking:~/booksrc $ ./overflow_example AAAAAAAAAAAAAAAAAAAAAAAAA

(在字符串后添加 x30 将重复 30 次)。当然 perl 接受其他带有符号的十六进制值\x??。还有一个词,连接字符串使用点:

reader@hacking:~/booksrc $ perl -e 'print "A"x20 . "BCD" . "\x61\x66\x67\x69" ;'
AAAAAAAAAAAAAAAAAAAABCDafgi

因此,您可以在输入文件中重定向 perl 的输出,或者在运行程序时直接在 gdb 中调用 perl。

于 2011-02-16T16:18:08.710 回答