CMCTF2025--web
字数 1959 2025-09-01 11:26:17
CMCTF2025 Web题目解析与解题思路
1. pop之我又双叒叒叕叕重生了
题目类型
反序列化漏洞利用
解题思路
- 目标是通过反序列化执行A4类的fun()方法
- 构造对象链:A1 → A2 → A3 → A4
- 利用PHP魔术方法的自动调用机制:
- A1的
__wakeup()调用A2的get_flag() - A2的
get_flag()尝试将$a2(A3对象)与字符串拼接,触发A3的__toString() - A3的
__toString()调用A4的fun() - A4的
fun()检查GET参数并输出flag
- A1的
关键点
- 理解PHP对象链的构造
- 掌握
__wakeup、__toString等魔术方法的触发时机
2. busy_search
解题步骤
- 初始访问返回403,使用dirsearch扫描发现index.html
- 在浏览器开发者工具(F12)中:
- 搜索
{找到部分flag - 搜索
--找到其他flag片段
- 搜索
- 将所有片段拼接得到完整flag
注意事项
- 推荐使用Edge浏览器,Firefox可能无法搜索
-- - 仔细检查页面所有隐藏内容
3. 小猿口算签到重生版
题目机制
- 动态算术题系统:
- 每1.5秒通过
/generate接口获取新表达式 - 表达式显示在ID为
code的元素中
- 每1.5秒通过
- 验证机制:
- 用户输入发送到
/verify接口 - 验证通过返回flag
- 用户输入发送到
解题方法
- 分析发现服务端记录题目生成时间戳
- 前端修改时间无效,必须在1.5秒内完成计算并提交
- 编写自动化脚本:
- 获取题目
- 快速计算答案
- 立即提交
关键点
- 时间敏感型题目
- 需要自动化处理快速响应
4. u_know?
第一关:shop.php
- 反序列化弱类型比较漏洞
- 利用
==比较的特性,使onething和twothing为true - 构造payload:
// 反序列化中设置onething和twothing为b:1
第二关:kfc.php
- 下载压缩包分析反序列化代码
- 构造特定对象链触发漏洞
- 将两部分结果拼接后base64解码得到flag
关键点
- PHP弱类型比较特性
- 复杂反序列化链构造
5. 函数重生版
解题方法
- 识别为无参数RCE(远程代码执行)
- 使用payload:
eval(end(current(get_defined_vars())));&b=system('cat /tmp/flag.sh'); - 通过
get_defined_vars()获取变量,执行系统命令
6. give!me!money!
题目分析
- 三国杀主题题目,扫描发现index.rar源代码
- 关键参数:
id=d&money=114514c参数需要匹配服务器生成的随机数shenhe
解题步骤
shenhe基于服务器时间戳前7位作为种子生成- 预测时间戳:
- 从响应包获取时间信息
- 提取前7位数字作为随机数种子
- 计算对应值作为
c参数提交
7. lottery签到重生版
解题方法
- 使用Burp Suite爆破
- 在响应中搜索flag
- 简单签到类题目,无需复杂操作
8. can_u_escape
题目类型
反序列化字符串逃逸
解题思路
- 利用PHP字符串处理特性"挤掉"后面部分
- 使
pass='escaping' - 测试需要多少个"php"才能完成逃逸(测试结果为29个)
- 构造相应payload获取flag
9. ez_upload2
解题步骤
-
分析class.php源码:
phar不能出现在开头- 只允许数字、
_、;等字符 - 使用phar伪协议绕过
-
文件上传绕过:
- 上传图片文件
- 使用gzip压缩绕过WAF正则
- 修改文件头为PNG格式
-
执行命令:
- 使用
__halt_compiler()停止编译器执行 - 先执行
system(ls)查看目录 - 使用
highlight_file()读取flag文件
- 使用
10. ez_upload
漏洞分析
- 白名单检查存在逻辑问题
- PHP数组处理特性:
end()取插入顺序的最后一项count($file)-1取键值的最后一项
- 构造特殊数组:
filename[1]=phpfilename[0]=png- 使
end()得到png(通过检查) count()得到php(实际执行)
关键点
- 利用PHP数组处理顺序的特性
- 精心构造上传文件名绕过检查
通用解题技巧
-
信息收集:
- 使用dirsearch等工具扫描目录
- 检查页面源代码和开发者工具
- 下载并分析提供的源代码
-
反序列化漏洞:
- 理解PHP魔术方法的触发时机
- 构造对象链利用漏洞
- 注意弱类型比较特性
-
文件上传绕过:
- 修改文件头绕过检查
- 使用压缩改变文件特征
- 利用服务器解析特性
-
自动化脚本:
- 对于时间敏感型题目编写自动化脚本
- 使用Python requests库或Burp Suite自动化处理
-
PHP特性利用:
- 掌握字符串处理、数组处理等特性
- 了解伪协议的使用方法
- 熟悉各种函数和魔术方法