不加引号的表达式注入 bash

Rav*_*ure 4 linux security bash

我最近读到在 bash 脚本中使用不带引号的参数是危险的。我的问题是:

是否可以绕过条件以使其始终为真?

if test $TOTO -eq ${1} 2>/dev/null; then
    echo "Bypass"
else
    echo "No"
fi
Run Code Online (Sandbox Code Playgroud)

问候,

电阻

tha*_*guy 7

如果您问是否可以选择一个参数,$1以便此条件对于 的任何整数值都为真$TOTO,则可以:

./yourscript "0 -o foo"
Run Code Online (Sandbox Code Playgroud)

这使得任何条件成为

test 1234 -eq 0 -o foo
Run Code Online (Sandbox Code Playgroud)

这相当于1234 == 0 || "foo"在其他语言中,进行了一个不相关的比较或与字符串的真值进行了或运算foo

由于test认为所有非空字符串都为真,因此该表达式始终为真。

  • 很好的答案,但你应该解释为什么它有效。 (3认同)