不加引号的表达式注入bash

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

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

if test $TOTO -eq ${1} 2>/dev/null; then
    echo "Bypass"
else
    echo "No"
fi

问候,

电阻

回答

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

./yourscript "0 -o foo"

这使得任何条件成为

test 1234 -eq 0 -o foo

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

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

  • Good answer, but you should explain why this works.

以上是不加引号的表达式注入bash的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>