我的 bash 脚本是否容易受到命令注入的攻击?

Chr*_*ght 2 security bash code-injection

我正在对其他开发人员的 bash 脚本进行质量检查。它看起来像这样:

#!/bin/bash

TERM=`cat ./termName.txt` || exit $?
./other-script.sh $TERM
Run Code Online (Sandbox Code Playgroud)

鉴于该TERM变量未在最后一行中引用,感觉恶意用户可以通过操纵 的内容来利用命令注入termName.txt,但是我证明这一点的基本尝试未能注入任何可执行命令。

我的问题是:

  1. 该脚本是否容易受到命令注入的攻击?
  2. 如果是,您能否提供如何执行任意命令的示例。如果不是,你能解释一下为什么它可以安全地避免命令注入吗?

che*_*ner 5

该脚本不受命令注入的影响,因为$TERM在结果按字面传递给 之前, 的扩展仅经历分词和路径名扩展other-script.sh。但是,应该引用它,以便other-script.sh接收作为单个参数的确切内容。TERM

如果TERM值为a b,则将other-script收到两个参数ab,而不是一个。使用"$TERM"传递精确值a b

如果TERM值为*,则参数的确切列表取决于当前工作目录的内容。使用"$TERM"传递精确值*

  • 请注意,根据“other-script.sh”对其参数的处理方式,通配符扩展可能会构成信息泄漏。攻击者可以传递类似“/path/to/secret/dir/*”的内容,如果结果对攻击者可见(甚至是间接可见),他们就可以使用它来探索您的目录结构。如果“other-script.sh”不能正确处理*其*变量,它可能始终存在自己的漏洞(包括命令注入)。 (2认同)