提问人:Emily 提问时间:7/30/2023 更新时间:7/30/2023 访问量:92
如何通过 stdin 输入 shellcode,该 shellcode 将作为 shellcode 读取,而不是 stdin 中的字符串文本?
How can I input shellcode via stdin that will be read as shellcode instead of a string literal from stdin?
问:
我正在进行(合法的)二进制开发实践,并且有一个易受攻击的缓冲区,我正在尝试将特定的内存地址写入其中。但是,用户输入是通过 stdin 的 fgets 收集的,当我输入输入时,它不会被解析为字节,而是被解析为字符串文字。
这就是我试图传递的内容: 啊啊啊
尝试了原始方法,并且 AAAAAAAAAAAAAAA$'\x20\x3d\x00\x00\x01',似乎没有任何效果
答:
0赞
ikegami
7/30/2023
#1
从 stdin 读取时,您将获得提供给 stdin 的确切字节。(至少在二进制模式下。在文本模式下,您可能会在 Windows 中获得一些 0D 0A ⇒ 0A 翻译。
听起来您想提供以下字节(以十六进制表示):
41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 20 3D 00 00 01
若要提供这些字节,可以使用以下任一方法:
perl -e'print pack "H*", "41414141414141414141414141414141203D000001"'
perl -e'print "AAAAAAAAAAAAAAAA =\x00\x00\x01"'
printf 'AAAAAAAAAAAAAAAA =\x00\x00\x01'
(有人评论说,并非所有支持十六进制转义。printf
您可以使用 验证输出的字节是否正确。od -t x1
$ printf 'AAAAAAAAAAAAAAAA =\x00\x00\x01' | od -t x1
0000000 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
0000020 20 3d 00 00 01
0000025
评论
print 'AAAAA\x20\x3d' | ./cmd
printf
$''
$'\x00'
'\x00'
$'\x00'
hexdump -C
xxd
xxd -r