我有一个受害者程序(具有缓冲区溢出漏洞):它使用 gets() 写入固定大小的缓冲区。
假设我将 shellcode 放入文件 SC.然后我跑
$ ./victim < SC
Input your data:
$
shellcode 似乎不起作用的原因是这样的:SC 被重定向到受害者,注入 shellcode,导致 shell 生成,但生成的 shell 发现其 stdin 已关闭,因此立即退出。
我尝试expect
过注射,但expect
炮弹生成后会爆炸。
似乎唯一实用的方法是将 shellcode 放入鼠标的粘贴缓冲区中,这样我就可以注入它,同时保留键盘作为输入设备。但我不知道如何将二进制数据放入我的粘贴缓冲区中。
关于如何解决这个问题有什么想法吗?
答案1
这个问题的解决方案(有人在相同的上下文中遇到过)在这里: https://stackoverflow.com/questions/8509045/execve-bin-sh-0-0-in-a-pipe
答案2
您可以使用一个简单的脚本来实现这一点,在该脚本中打印特殊字符。
例如,在 Perl 中,您可以通过指定其十六进制代码来打印任何字符。例如:
perl -e 'print "\x54\x0A"'
打印一个“T”,后跟一个新行。
然后,您可以复制打印的文本,即使它不可见。当然,您的终端必须处于原始模式。