find 的 {} 替换模式为何容易受到注入攻击?

find 的 {} 替换模式为何容易受到注入攻击?

我试图更多地了解对我的答案所做的编辑:

https://unix.stackexchange.com/revisions/510388/5

cd "{}"在 find 命令上下文中运行如何引入注入攻击漏洞?

作为参考,为覆盖该漏洞而进行的更改是:

diff --git a/command b/command
index 26488d0..fed4c07 100644
--- a/command
+++ b/command
@@ -1 +1 @@
-find . -type d -exec sh -c 'cd {} && echo "Spawning a shell in $PWD..." && sh' \;
+find . -type d -exec sh -c 'cd "$1" && echo "Spawning a shell in $PWD..." && sh' sh {} \;

答案1

目录名放在大括号所在的位置,然后受shell约束;考虑mkdir '$(reboot)'在哪里find可以找到它。然后您最终会sh执行:cd $(reboot)-- 或您想要想象的任何其他命令。该cd命令可能会失败,除非攻击者非常狡猾并回显有效目录的名称,但无论如何,损害已经造成。对于作为 root 进行不太严格的测试,请尝试以下操作:

$ mkdir '$(touch .evil_file; echo directory-name)'`

你最终会得到这样的输出:

something
sh: line 0: cd: ./directory-name: No such file or directory

...:

$ ls -a
.  ..  .evil_file  $(touch .evil_file; echo directory-name)

相关内容