web42
检查代码,发现代码似乎很简单?只需要输入命令执行,但是实际执行之后的小伙伴会发现如果只是输一个指令,回显都是空白,原因很简单。
在给变量c赋值的语句下面的语句”>/dev/null 2>&1“
,可以将其理解成将输入的数写入黑洞
2>/dev/null
意思就是把错误输出到“黑洞”
>/dev/null 2>&1
默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”
实验结果证明了以上的论述,要想绕过这个“黑洞“,需要往里面传入两个参数,shell会执行第一个参数,将第二个参数带入到黑洞,上图实验最后一条语句也证明了这个论述
所以payload就好构造了:
?c=ls&&ls
因为是url传过去的,所以要记得用url编码,不然没有回显(切记对&&等表示两个参数的分隔符用url编码,不然没有回显)
命令执行成功,这里对输入的值几乎没有过滤,flag可以用通配符表示
构造payload: ?c=tac fla*&&ls
命令执行成功,成功获取到flag