我的bash脚本易受命令注入攻击吗?
我正在测试一个开发人员的bash脚本。它看起来像这样:我的bash脚本易受命令注入攻击吗?,bash,security,code-injection,Bash,Security,Code Injection,我正在测试一个开发人员的bash脚本。它看起来像这样: #!/bin/bash TERM=`cat ./termName.txt` || exit $? ./other-script.sh $TERM 鉴于TERM变量在最后一行中没有被引用,恶意用户似乎可以通过操纵termName.txt的内容来利用命令注入,但是我的基本尝试是无法注入任何可执行命令 我的问题是: 此脚本易受命令注入攻击吗 如果是,请提供如何执行任意命令的示例。如果没有,你能解释一下为什么命令注入是安全的吗 脚本不受命令注入
#!/bin/bash
TERM=`cat ./termName.txt` || exit $?
./other-script.sh $TERM
鉴于TERM
变量在最后一行中没有被引用,恶意用户似乎可以通过操纵termName.txt
的内容来利用命令注入,但是我的基本尝试是无法注入任何可执行命令
我的问题是:
脚本不受命令注入的影响,因为
$TERM
的扩展只会经历分词和路径名扩展,然后结果会按字面意思传递给其他script.sh
。但是,应该引用它,以便other script.sh
将TERM
的确切内容作为单个参数接收
如果TERM
的值为ab
,则其他脚本
将收到两个参数,a
和b
,而不是一个。使用“$TERM”
传递准确的值ab
如果
TERM
的值为*
,则参数的确切列表取决于当前工作目录的内容。使用“$TERM”
传递确切的值*
脚本不受命令注入的影响,因为$TERM
的扩展只会经历分词和路径名扩展,然后将结果按字面意义传递给其他脚本.sh
。但是,应该引用它,以便other script.sh
将TERM
的确切内容作为单个参数接收
如果TERM
的值为ab
,则其他脚本
将收到两个参数,a
和b
,而不是一个。使用“$TERM”
传递准确的值ab
如果
TERM
的值为*
,则参数的确切列表取决于当前工作目录的内容。使用“$TERM”
传递准确的值*
它不会运行任意代码,但该值会被分词和路径名扩展。我认为,将其添加到您的txt文件;echo“my injected command”
@LuisMuñoz/other script.sh
将只获得5个参数代码>、echo
、我的
、注入的
和命令“
。不会执行任何代码。命令行是在展开$TERM
之前解析的。@chepnereval./other-script.sh$TERM
会是另一个问题,对吗?@LuisMuñoz是的,这是一个危险的命令:)它不会运行任意代码,但该值会被分词和路径名展开。我认为,将其添加到您的txt文件;echo“my injected command”
@LuisMuñoz/other script.sh
将只获得5个参数代码>、echo
、我的
、注入的
和命令“
。不会执行任何代码。命令行是在展开$TERM
之前解析的。@chepnereval./other-script.sh$TERM
可能是另一个问题,对吗?@LuisMuñoz是的,这是一个危险的命令:)注意,根据other script.sh
对其参数所做的操作,通配符展开可能构成信息泄漏。攻击者可以传递诸如“/path/to/secret/dir/*”之类的信息,如果结果对攻击者可见(甚至是间接的),则攻击者可以使用它来浏览您的目录结构。如果other script.sh
无法正确处理其变量,则它可能始终存在自身的漏洞(包括命令注入)。请注意,根据other script.sh
对其参数所做的操作,通配符扩展可能构成信息泄漏。攻击者可以传递诸如“/path/to/secret/dir/*”之类的信息,如果结果对攻击者可见(甚至是间接的),则攻击者可以使用它来浏览您的目录结构。如果other script.sh
不能正确处理它的变量,它可能总是有自己的漏洞(包括命令注入)。