我想将非ASCII字符(0xfe
,0xed
等)写入程序的标准输入。
与这个问题有很多类似的问题,但是我没有找到答案,因为:
echo
或其他内容在OSX¹上,您可以使用:
nm - -
我想使用标准输入将目标文件的魔术字节(例如0xfeedface
)写入nm
,以便我可以看到它的行为并可以对其进行重新编码。
如果我使用管道,则第二个参数-
,表示stdin,将永远不会匹配任何字节,因为所有标准输入都将转到第一个。当使用终端而不是管道时,我可以键入Ctrl + D
,以便第一个“关闭”,第二个开始读取。
[我尝试过使用Ctrl + Shift + U
和OS X的Unicode十六进制输入,但是它不起作用-我无法用它编写所需的字符。
我也尝试过将剪贴板与pbcopy
一起使用,但是它无法读取/粘贴非ASCII或非Unicode字符。
我如何实现我的目标?
不要犹豫,因为这是一个很难表达的问题。
¹linux上的nm
无法处理stdin。
您可以echo您所需的十六进制代码到文件中。
echo -e -n '\xde\xad\xbe\xef\xde\xad\xbe\xef' >/tmp/yo
或
echo -en \\xde\\xad\\xbe\\xef\\xde\\xad\\xbe\\xef >/tmp/yo
并使您的可执行文件从此文件而不是stdin中读取
./executable </tmp/yo
[如果您不想创建文件,这是替代方法
python -c 'print("\x61\x62\x63\x64")' | /path/to/exe
如果您想将标准输入控件转回
( python -c 'print("\x61\x62\x63\x64")' ; cat ) | /path/to/exe
此答案帮助了我:https://reverseengineering.stackexchange.com/questions/13928/managing-inputs-for-payload-injection
尝试使用xxd
这样的实用程序:
# echo hex 52 to pipe, convert it to binary, which goes to stdout
echo 52 | xxd -r ; echo
R
或者对于更专业的工具,请尝试ascii2binary
(默认输入是十进制):
ascii2binary
或转储一系列十六进制字符,显示# echo dec 52 to pipe, convert it to binary, which goes to stdout
echo 52 | ascii2binary ; echo
4
# echo base11 52 to pipe, convert it to binary, which goes to stdout
echo 52 | ascii2binary -b 11 ; echo
9
看到的内容:
hexdump
请参阅echo 7 ef 52 ed 19 | ascii2binary -b h | \
hexdump -v -e '/1 "%_ad# "' -e '/1 " _%_u\_\n"'
0# _bel_
1# _ef_
2# _R_
3# _ed_
4# _em_
了解这些实用程序可以执行的各种操作。
使用bash,您可以回显输入,
man xxd ascii2binary
或使用cat,当有多行提示时,可能会更舒服:
echo -e -n '\x61\x62\x63\x64' | /path/someFile.sh --nox11
您可以省略cat $file | /path/someFile.sh --nox11
,但是当脚本产生一个新的终端实例时,这可能会有所帮助
注意:这不适用于--nox11
!