bash 使用 -v 测试注入漏洞

Bob*_*421 1 bash

我的 bash 脚本之一包含此测试:

if [ ! -v "$3" ]; then
   exit
else
   ...
fi
Run Code Online (Sandbox Code Playgroud)

有没有办法在 $3 参数中注入数据来执行一些令人讨厌的事情?(我的脚本以 suid 权限运行并包含敏感变量...)

谢谢

Gor*_*son 6

是的,这里存在注入漏洞。问题是-vtest 将其参数评估为变量,并且在 bash v4.3 及更高版本中可以包含数组元素(例如arrayVar[5]),并且由于数组索引(对于非关联数组)是数字,因此索引部分被评估为算术上下文,可以包括命令替换。

所以如果$3是这样的:

x[$(touch /tmp/pwned)]
Run Code Online (Sandbox Code Playgroud)

...或者,如果您担心敏感变量:

x[$(echo "$SensitiveVar" >/tmp/pwned)]
Run Code Online (Sandbox Code Playgroud)

...它将最终执行内部的部分$( ),并具有对内部 shell 变量的特权和访问权限。

请注意,由于这种情况是由于-v测试的评估方式而发生的,因此引用$3没有帮助,使用[[ ]]而不是 也没有帮助[ ]