我需要用包含 0x08 的特定值溢出缓冲区。如果我使用echo -ne "AA\x08A"
,则输出为AA
,因为退格符和一个 A 被删除了。
我如何将此值复制到易受攻击的程序的输入中?我希望它在 GBD 中,这样我就可以随后检查堆栈。
答案1
如果我使用 echo -ne "AA\x08A",则输出为 AA,因为退格字符和一个 A 被删除了。
它之所以看起来像这样,是因为您将输出打印到终端,而退格键在这种情况下具有特殊含义:删除前一个字符,类似于按键盘上的退格键时实现的效果。这意味着它将显示第一个 A、第二个 A,删除第二个 A,然后在第一个 A 后返回并显示第 4 个字符,即 A:
$ echo -ne "AA\x08A"
AA
但实际上它会打印所有 4 个八位字节 - 显示hd
(或hexdump
或xxd
...)将显示:
$ echo -ne "AA\x08A" | hd
00000000 41 41 08 41 |AA.A|
并且相同的 4 个字符也将打印到任何其他程序,例如易受攻击的程序或某些 perl 脚本:
$ echo -ne "AA\x08A" | perl -e 'print unpack("H*",<STDIN>),"\n"'
41410841