【问题标题】:Is my bash script vulnerable to command injection?我的 bash 脚本是否容易受到命令注入的影响?
【发布时间】:2018-05-18 22:00:30
【问题描述】:

我正在对一个开发人员的 bash 脚本进行 QA。它看起来像这样:

#!/bin/bash

TERM=`cat ./termName.txt` || exit $?
./other-script.sh $TERM

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

我的问题是:

  1. 此脚本是否容易受到命令注入的影响?
  2. 如果是,您能否提供如何执行任意命令的示例。如果不是,你能解释一下为什么命令注入是安全的吗?

【问题讨论】:

  • 它不会运行任意代码,但值受分词和路径名扩展的影响。
  • 在我看来,把这个添加到你的txt文件; echo "my injected command"
  • @LuisMuñoz ./other-script.sh 只会得到 5 个参数 ;echo"myinjectedcommand"。不会执行任何代码。在 $TERM 展开之前解析命令行。
  • @chepner eval ./other-script.sh $TERM 会是一个不同的问题,对吧?
  • @LuisMuñoz 是的,这是危险的命令 :)

标签: bash security code-injection


【解决方案1】:

该脚本不受命令注入的影响,因为$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 没有正确处理变量,它可能总是有自己的漏洞(包括命令注入)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
相关资源
最近更新 更多