互联网上曾经有一个非常糟糕的笑话,您可以复制以 \x0B\x2E... 开头的内容...(只是一个示例),当您执行此命令时,终端会将其解释为sudo rm -rf /
.
您如何进行这种混淆?我刚刚尝试运行 Cyberchef 并将我的命令转换为十六进制,即使使用语法ls -la
也不会执行此命令。\x<hexcodetwocharactershere>\x<hexcodetwocharactershere>
- 我究竟做错了什么?
- 有没有类似的混淆方法?
PS我已经知道base64编码技巧,但这需要在系统上安装base64
总而言之,我不想使用 bash 以外的任何其他工具来实现我的目标(所以没有 base64 编码工具和类似工具,没有 xxd,没有管道)
在大多数 shell 中,
\x6c\x73\x20\x2d\x6c\x61
代码会尝试像另一个引用运算符x6cx73x20x2dx6cx61
一样运行命令。\
在
es
orfish
shells 中,它会尝试运行ls -la
命令并且可能会失败,因为没有该名称的命令。Ines
,\
不是引用运算符,但可用于扩展类似 C 的转义序列。in fish
\
既是引用运算符(如 insh
/csh
)又是转义序列引入器(如 in )es
。在这两种情况下,
\x20
都不会被解释为真正的空格字符在 shell 的语法中的令牌限制器,因此它不会使用作为参数运行ls
命令。-la
如果您输入
$'\x6c\x73\x20\x2d\x6c\x61'
支持该 ksh93 样式引用形式的 shell,则相同。您需要将这些扩展解释为 shell 代码,例如通过将其提供给
eval
,sh -c
,source
...或者至少让它经历分裂:
我不确定这是否符合问题的精神,尽管它仅适用于 bash:
您可以在运行之前检查解码的命令