2025 WatCTF web 题解
字数 729 2025-09-23 19:27:38
2025 WatCTF Web 题解教学文档
1. gooses-typing-test 挑战解析
挑战概述
这是一个打字速度测试挑战,要求打字速度超过500 WPM(每分钟字数)才能通过。
关键代码分析
fetch(ny+"/doneTest",{
method:"POST",
body:JSON.stringify({startPoint:sl, typed:X, seed:k}),
headers:{"Content-Type":"application/json"}
}).then(Q=>Q.json()).then(Q=>{
console.log(Q),
E(Q.msg)
})
攻击思路
- 正常完成打字测试并抓包获取合法请求数据
- 分析数据格式:包含startPoint(开始时间)、typed(打字记录)和seed(种子)
- 修改打字速度使其超过500 WPM
Python自动化脚本
import json
# 读取原始数据
with open('typed_raw.json', 'r', encoding='utf-8') as f:
data = json.load(f)
typed = data['typed']
# 计算总字符数
total_chars = len(typed)
# 设置目标WPM(如650)
target_wpm = 650
# 计算目标总时间(分钟)
target_minutes = (total_chars / 5) / target_wpm
target_ms = target_minutes * 60 * 1000 # 转换为毫秒
# 保持startPoint不变,计算endTime
start_time = typed[0]['time']
end_time = start_time + target_ms
# 计算平均间隔时间
interval = (end_time - start_time) / (total_chars - 1)
# 生成新的时间戳列表
new_typed = []
for i, entry in enumerate(typed):
new_entry = entry.copy()
new_entry['time'] = int(start_time + i * interval)
new_typed.append(new_entry)
# 更新数据并保存
data['typed'] = new_typed
2. Waterloo Trivia Dash 挑战解析
挑战概述
完成三个问题后会显示/admin链接,但访问会307重定向到根目录。
发现
- 目录扫描发现所有/admin相关路由都返回307
- 其他不存在的路径返回404
- 使用Next.js框架(版本>=15.0, <15.2.3)
漏洞利用(CVE-2025-29927)
Next.js中间件安全绕过漏洞原理:
- 中间件用于请求到达前的身份验证、授权等操作
- 为防止递归调用导致的无限循环,Next.js引入x-middleware-subrequest头部
- 漏洞点:Next.js只检查头部是否存在,不严格验证值是否合法
攻击步骤
- 构造恶意请求,添加x-middleware-subrequest头部
- 头部值应为真实存在的中间件路径:
middlewaresrc/middleware
- 使用冒号分隔创建"路径链"来多次标记已执行
有效Payload示例
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
或
x-middleware-subrequest: src/middleware:src/middleware:src/middleware:src/middleware:src/middleware
攻击效果
通过伪造内部子请求链,绕过中间件的授权逻辑,成功访问/admin路径。
总结
这两个挑战展示了:
- 前端逻辑验证的绕过方法(修改时间数据)
- Next.js中间件安全机制的绕过技巧
- 如何利用版本特定的漏洞(CVE)进行权限提升