find -exec cat {} 代码注入

find -exec cat {} 代码注入

我正在阅读关于 -exec 的 find 手册命令{} 开关部分,它指出应引用 {} 以防止 shell 解释。

我试图在本地重现这种行为,但没有成功,并且想知道这种解释适用于什么上下文。

这就是我正在做的事情,试图让这种解释发挥作用:

echo "Hi" > f1
touch -- \$\(ls\ \-la\) -n
find ./ -type f -exec cat {} +

只是基本上尝试在解析恶意文件名时解释一个开关或命令,但它不会按照该人的建议进行解释。

我缺少什么?

或者,有没有一种方法可以使用 cat 作为命令而不是其他命令来利用这样的行代码?

答案1

在许多 shell 中,大括号开始大括号扩展。但与 sh 兼容的 shell、Zsh 和 (t)csh 仍然保留了普通的内容{}。然而,至少 Fish shell 没有,它删除了一个未加引号的{}, 然后egecho {}将只输出一个空行。这会破坏find使用 的命令{},因此您需要引用大括号。

find这与填充文件名后为 shell 扩展而处理的文件名无关。此时,不涉及 shell,除非您显式调用 shell。

相关内容