如何将 BS 字符(0x08)复制到 GDB 中的输入以造成缓冲区溢出?

如何将 BS 字符(0x08)复制到 GDB 中的输入以造成缓冲区溢出?

我需要用包含 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(或hexdumpxxd...)将显示:

 $ 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

相关内容