Linux 无引号表达式注入bash
我最近读到,在bash脚本中使用不带引号的参数是危险的。我的问题是: 是否可以绕过该条件以使其始终为真Linux 无引号表达式注入bash,linux,bash,security,Linux,Bash,Security,我最近读到,在bash脚本中使用不带引号的参数是危险的。我的问题是: 是否可以绕过该条件以使其始终为真 if test $TOTO -eq ${1} 2>/dev/null; then echo "Bypass" else echo "No" fi 问候, R如果您询问是否可以选择参数$1,以便该条件适用于$TOTO的任何整数值,则选择是: ./yourscript "0 -o foo" 这使得任何条件都变得
if test $TOTO -eq ${1} 2>/dev/null; then
echo "Bypass"
else
echo "No"
fi
问候,
R如果您询问是否可以选择参数
$1
,以便该条件适用于$TOTO
的任何整数值,则选择是:
./yourscript "0 -o foo"
这使得任何条件都变得
test 1234 -eq 0 -o foo
这相当于其他语言中的1234==0 | |“foo”
,与字符串foo
的真值进行一次不相关的比较
因为
test
认为所有非空字符串都是真的,所以这个表达式总是真的。正如@另一个人所说,“0-o whatever”将绕过检查。之所以这样做是因为测试二进制文件的-o选项:
EXPRESSION1 -o EXPRESSION2
either EXPRESSION1 or EXPRESSION2 is true
因此,脚本基本上要做的是测试
$TOTO -eq 0 || "whatever"
由于非空字符串始终为真,因此总体检查结果将为真,这里是旁路:)回答得好,但您应该解释为什么会这样做。您基本上给出了