我见过人们实现此目标的一种方法是调用
python -c 'print("\x00\xFF\xAB")'
并将输出管道传递给被测程序。有没有办法只使用Bash shell而不使用Python?#1 楼
使用echo -e
并通过管道传递到程序的输入。示例:
echo -e "\x41\x42\x43\x44" | <executable>
将ABCD编写为输入。
编辑:
您可以传递空字节
评论
您介意添加一个示例,说明如何将字节作为参数传递给可执行文件吗?
–伍德罗·巴洛
4月20日14:04
将echo -e命令放在可执行文件名称的后面,并用反引号(())引起来。在此方法中也可以使用空字节。 (但是,换行符会打断字符串)
– Yotamz
4月20日15:40
@Yotamz yikes ...反引号?那是1990年代。放下反引号,并使用$(...)来躲避一旦开始嵌套反引号时就发生的逃避的噩梦...参数中是否可以使用空字节?我发现这令人惊讶,因为它们被视为零终止。您可以证实这一说法吗?
– 0xC0000022L♦
4月23日下午6:39
是的,使用ls进行了尝试,即使假定它以字符串结尾,echo -e“ \ x2E \ x2E”(ls ..)的工作原理也与具有echo“ \ x2E \ x00 \ x2E”的ls相同。我希望后者被视为“ \ x2E”并列出当前文件夹,但事实并非如此。不过,我同意你在反引号上的转义。
– Yotamz
4月23日8:14
#2 楼
如果需要空字节,则可以将它们写入文件,并将该文件用作程序的输入,例如:echo -e -n“ \ x00 \ xFF \ xAB”> file.bin
程序
还可以使用
xxd
将十六进制转换为二进制:回显“ 00 FF AB” | xxd -r -p |程序
评论
支持使用xxd –无需反斜杠,使用起来更加方便。
–赫尔曼
4月19日下午21:55
评论
您可以使用“ printf \ xbb”,在其中用所需的字节替换“ bb”。唯一的问题是,您不能以这种方式传递空字节。啊,谢谢,您知道我该如何传递空字节吗?
不幸的是,我没有。 :/
@ bart1e谢谢,我认为没有办法做到这一点。对于空字节,我可能必须手动运行execve并传递我认为的args。
@ bart1e:您可以使用printf打印NUL字节。您只是无法将它们保存在变量中。