#!/bin/bash 
var=$1
 if [ "$var" -eq 42 ]; 
	 then echo "Success" 
fi

./script.sh "1+a[$(rm -rf /)]"

在上述例子中,$(rm -rf /) 是一个命令替换语法,Bash 会在展开变量时立即执行其中的命令。因此,当 [ "$var" -eq 42 ] 被解析时:

  1. Bash 遇到 $(rm -rf /),执行 rm -rf /(删除根目录下的所有文件,假设有权限)。
  2. 命令替换完成后,假设 rm -rf / 没有输出,表达式变为 1+a[](因为 $(rm -rf /) 为空)。
  3. Bash 继续尝试解析 1+a[],但由于 a 未定义且数组索引为空,最终抛出错误。

尽管最终的比较会失败,但危险在于,rm -rf / 已经被执行。这种"副作用"使得攻击者可以在不依赖 eval 的情况下,通过精心构造的输入注入并执行任意命令。