Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 无引号表达式注入bash_Linux_Bash_Security - Fatal编程技术网

Linux 无引号表达式注入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" 这使得任何条件都变得

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

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

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"

由于非空字符串始终为真,因此总体检查结果将为真,这里是旁路:)

回答得好,但您应该解释为什么会这样做。您基本上给出了