我正在研究一个简单的电弧注入漏洞,其中这个特定的字符串为我提供了我想要跳转的地方所需的地址:Á^F@^@
。这是地址0x004006c1
(我使用的是64位英特尔处理器,因此x86-64采用小端序排列)。
当我将此字符串Á^F@^@
作为我的函数中易受攻击的gets()
例程的输入并使用gdb
检查地址时,地址将被修改为0x00400681
而不是0x004006c1
。我不太清楚为什么会这样。此外,有没有办法轻松地为gets
的{{1}}例程提供十六进制值?我尝试过做stdin
之类的操作,但不是按原样选择121351...12312\xc1\x06\x40\x00
,而是将单个字符转换为十六进制,因此我得到类似\xc1
的内容(十六进制为\和x,然后是c和1)的十六进制。
感谢任何帮助,谢谢!
答案 0 :(得分:2)
您可以将原始字节放入某个文件中并将其直接传送到您的应用程序中。
$ path/to/my_app <raw_binary_data
或者,您可以将应用程序包装在shell脚本中,该脚本将转义的十六进制字节转换为相应的字节值。 echo
实用程序将在命令行上设置-e
开关时执行此操作,例如:
$ echo '\x48\x65\x6c\x6c\x6f'
\x48\x65\x6c\x6c\x6f
$ echo -e '\x48\x65\x6c\x6c\x6f'
Hello
您可以使用此功能处理应用程序的输入,如下所示:
while read -r line; do echo -e $line; done | path/to/my_app
要终止输入,请尝试按 Control D 或 Control C 。