1. 题目背景与核心考点解析
这道来自GXYCTF 2019的"Ping Ping Ping"题目,是一个典型的Web安全挑战题。题目环境模拟了一个带有输入框的Web界面,用户可以通过输入IP地址或域名来执行ping操作。表面上看是个简单的网络工具,实则暗藏多个安全漏洞等待挖掘。
核心考点集中在以下几个方面:
- 命令注入漏洞(Command Injection)
- PHP的shell_exec函数安全风险
- 过滤绕过技巧
- 系统命令黑名单绕过
- 特殊字符的利用方式
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 初始分析与基础探测
当我第一次看到这个题目时,首先尝试了最基本的ping功能测试。在输入框输入"127.0.0.1"后,页面正常返回了ping命令的执行结果。这说明后端确实是通过系统ping命令来处理用户输入的。
接下来我尝试输入"127.0.0.1;ls",发现返回了错误信息,显示存在某种过滤机制。通过反复测试,发现以下几种情况:
- 分号(;)被过滤
- 与符号(&)被过滤
- 管道符(|)被过滤
- 反引号(`)被过滤
3. 过滤机制分析与绕过
3.1 空格过滤绕过
测试发现空格也被过滤了,这在命令注入中很常见。常见的绕过方式包括:
- 使用${IFS}替代空格
- 使用%09(Tab的URL编码)
- 使用重定向符号<>替代
在本题中,${IFS}被成功识别为空格分隔符。例如:
code复制127.0.0.1${IFS}&&cat${IFS}index.php
3.2 黑名单关键字绕过
题目设置了flag关键字过滤,直接尝试读取flag文件会失败。通过测试发现以下绕过方式有效:
- 使用通配符:fla*
- 使用变量拼接:a=fl;b=ag;cat $a$b.php
- 使用base64编码:
echo "ZmxhZy50eHQ=" | base64 -d
4. 完整利用链构建
4.1 第一步:确认文件位置
通过目录遍历确认flag文件位置:
code复制127.0.0.1${IFS}&&ls${IFS}/
发现flag文件位于根目录下,名为flag.txt。
4.2 第二步:绕过flag过滤
使用变量拼接法成功读取:
code复制127.0.0.1${IFS}&&a=fl;b=ag;ca
