我正在学习软件安全课程,我们目前正在学习缓冲区溢出以及它们是如何被利用的。我有一个我知道如何利用的程序,但我似乎无法这样做,因为我必须编写它不允许我编写的十六进制。
我需要编写从以下位置生成的数据:
perl -e 'print "A"x48; print "\x1b\x88\x04\x08";'
但是,我无法将该输出重定向到命令行参数,因为程序以交互方式运行。从历史上看,我曾使用 xclip 将其复制到剪贴板,然后将其粘贴到正在运行的应用程序中,但由于某种原因,这个十六进制序列不允许我使用 xclip 来复制它(它显示没有任何内容被复制)。
例如:
perl -e 'print "A"x48; print "\x1b\x88\x04\x08";' | xclip -sel clip
如果之后我按 ctrl+V,则不会粘贴任何内容。如果我只是从终端窗口复制并粘贴输出,则会粘贴错误的十六进制(我假设这是因为十六进制不是可见的 ASCII)。
我的问题是:GDB 是否有办法让我将这样的生成文本插入到交互式运行程序中?
我知道如果可利用程序采用命令行参数,我可以这样做:
run $(perl -e 'print "A"x48; print "\x1b\x88\x04\x08";')
但由于它不通过 cli 参数运行,因此无法使用。
任何帮助都是极好的!