我想将非ASCII字符(0xfe
,0xed
等)写入程序的标准输入。
这个问题有很多类似的问题,但我找不到答案,因为:
echo
或在OSX¹上,您可以使用以下方法进行测试:
nm - -
我想使用标准输入将目标文件魔术字节(例如0xfeedface
)写入nm
,这样我就可以看到它的行为方式,我可以重新编码。
如果我使用管道,那么第二个参数-
,即 stdin ,将永远不会匹配任何字节,因为所有标准输入都将转到第一个。当使用终端而不是管道时,我可以输入Ctrl + D
,以便第一个“关闭”,第二个开始读取。
我尝试使用Ctrl + Shift + U
和OS X的Unicode十六进制输入但它不起作用 - 我无法用它来编写所需的字符。
我还尝试使用pbcopy
的剪贴板,但无法读取/粘贴非ASCII或非Unicode字符。
我如何实现目标?
不要犹豫,因为这是一个难以表达的问题。
¹linux上的nm
无法处理 stdin 。
答案 0 :(得分:2)
尝试像xxd
这样的工具:
# echo hex 52 to pipe, convert it to binary, which goes to stdout
echo 52 | xxd -r ; echo
R
或者对于更专业的util try 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_
有关这些工具可以执行的各种技巧,请参阅man xxd ascii2binary
。
答案 1 :(得分:2)
您可以将所需的十六进制代码回显到文件中。
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
如果您希望将stdin控件转移回
( python -c 'print("\x61\x62\x63\x64")' ; cat ) | /path/to/exe
此答案对我有帮助: https://reverseengineering.stackexchange.com/questions/13928/managing-inputs-for-payload-injection
答案 2 :(得分:0)
使用bash,您可以回显输入,
echo -e -n '\x61\x62\x63\x64' | /path/someFile.sh --nox11
或使用cat,当有几行提示时,这可能会更舒适:
cat $file | /path/someFile.sh --nox11
您可以省略--nox11
,但是当脚本生成新的终端实例时可能会有所帮助
注意:这不适用于/bin/sh
!