Bil*_*low 5 bash hex stdin character-encoding
我想非ASCII字符(写0xfe,0xed等),以一个程序的标准输入。
有很多类似的问题,但我没有找到答案,因为:
echo什么的在 OS X¹ 上,您可以测试:
nm - -
Run Code Online (Sandbox Code Playgroud)
我想将目标文件魔术字节(例如0xfeedface)写入nm使用标准输入,以便我可以看到它的行为方式并且可以重新编码。
如果我使用管道,则第二个参数-(即stdin)将永远不会匹配任何字节,因为所有标准输入都将转到第一个。当使用终端而不是管道时,我可以输入Ctrl + D第一个“关闭”,第二个开始读取。
我尝试使用Ctrl + Shift + UOS X 的 Unicode 十六进制输入,但它不起作用——我无法用它写出所需的字符。
我也尝试过使用剪贴板,pbcopy但它无法读取/粘贴非 ASCII 或非 unicode 字符。
我怎样才能实现我的目标?
不要犹豫编辑,因为这是一个难以表达的问题。
¹nm在 linux 上不处理stdin。
你可以回应你想要的十六进制代码到一个文件中。
echo -e -n '\xde\xad\xbe\xef\xde\xad\xbe\xef' >/tmp/yo
Run Code Online (Sandbox Code Playgroud)
或者
echo -en \\xde\\xad\\xbe\\xef\\xde\\xad\\xbe\\xef >/tmp/yo
Run Code Online (Sandbox Code Playgroud)
并使您的可执行文件从该文件而不是标准输入中读取
./executable </tmp/yo
Run Code Online (Sandbox Code Playgroud)
如果您不想创建文件,这里有一个替代方案
python -c 'print("\x61\x62\x63\x64")' | /path/to/exe
Run Code Online (Sandbox Code Playgroud)
如果您希望将 stdin 控制传回(以防您尝试执行交互式 shell --> 我们需要一个子 shell 来继续向 stdin 发送输入。否则,在第一次输入之后,可执行文件将按原样退出不会在标准输入上进一步了解)
( python -c 'print("\x61\x62\x63\x64")' ; cat ) | /path/to/exe
Run Code Online (Sandbox Code Playgroud)
Python 对字节做了一些处理。因此,对于 Python3,您必须执行以下操作:
( python -c 'import sys; sys.stdout.buffer.write(b"\x61\x62\x63\x64")' ; cat ) | /path/to/exe
Run Code Online (Sandbox Code Playgroud)
这个答案对我有帮助:https : //reverseengineering.stackexchange.com/questions/13928/managing-inputs-for-payload-injection