bash - 可以在此代码中使用 eval 完成代码注入(inject)吗?

标签 bash code-injection compgen

这是我第一次使用 bash,我知道使用 eval 有一些风险。您可以对此进行代码注入(inject)吗?例如,我想运行 ls 命令并查看文件。

#!/bin/bash
echo "[*] Please enter the name:"
echo -n "> "
read NAME
echo "[*] Please enter the value:"
echo -n "> "
read VALUE
declare CONFIG_$NAME=$VALUE
for VARIABLE in $(compgen -v CONFIG_)
do
   echo "- $VARIABLE: $(eval echo \$$VARIABLE)"
done

最佳答案

我相信 eval 的这种特殊用法是安全的,因为它只对有效的标识符进行操作,或者需要对执行进行一定程度的控制,这使得利用本身没有实际意义。

作为攻击者,我会忽略 eval 并改用其他入口点之一,例如

$ ./myscript
[*] Please enter the name:
> [`date>&2`]
[*] Please enter the value:
> foo
Thu 05 Nov 2020 04:00:37 PM PST
- CONFIG_: foo

关于bash - 可以在此代码中使用 eval 完成代码注入(inject)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64705997/

相关文章:

bash - 使用 shell 脚本将有符号整数转换为无符号整数

Java:在网页加载到网络浏览器之前编辑网页

php - 我的 PDO INSERT INTO 是否足够安全?

bash - 这个 bash 补全功能是如何工作的? (对于cloudfoundry cli)

bash - 为 compgen 指定另一个目录以自动完成目录,而不是使用 pwd

php - 我可以在 PHP 函数 exec() 中使用 linux 内置实用程序 compgen 吗?

Linux Shell - 如何将变量分配给二进制表达式?

linux - tar 提取最近的文件

python - 使 Python 脚本与 linux 包相结合,易于最终用户安装

php - 循环中的 SQL 注入(inject)不起作用