发送二进制数据到 gets()

发送二进制数据到 gets()

我有一个受害者程序(具有缓冲区溢出漏洞):它使用 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”,后跟一个新行。

然后,您可以复制打印的文本,即使它不可见。当然,您的终端必须处于原始模式。

相关内容