如何发现Web App Yummy Days的安全漏洞?
字数 1452 2025-08-18 11:38:28
Web应用安全漏洞挖掘实战:Yummy Days漏洞分析与自动化利用
1. 漏洞背景
Yummy Days是The Fork应用程序中的一个促销活动,用户可以通过每日游戏赢取餐饮折扣券(Yums)。活动持续7天,每天可参与一次,最高可获得价值120€的优惠。
2. 漏洞发现过程
2.1 初步观察
- 活动通过Web界面进行,需要用户提供电子邮件地址
- 界面在嵌入式浏览器中打开,可查看实际URL
- 使用浏览器开发者工具记录网络请求
2.2 关键发现
-
API未验证电子邮件注册状态:
- 使用未注册的电子邮件仍可参与游戏
- 允许无限次使用不同电子邮件参与
-
无请求频率限制:
- 同一IP可高频请求
- 无CAPTCHA等反自动化机制
-
无有效会话控制:
- 仅依赖基本Cookie验证
- 会话可轻易伪造
3. 漏洞自动化利用技术
3.1 工具准备
- Postman:用于构建和自动化HTTP请求
- Newman:Postman的命令行运行工具
- 浏览器开发者工具:用于抓取原始请求
3.2 自动化流程构建
3.2.1 请求集合设计
-
Get Cookies请求:
- 方法:GET
- 目的:获取初始会话Cookie
- 测试脚本:存储Cookie到环境变量
// Postman Test脚本示例 const cookie1 = postman.getResponseHeader("Set-Cookie"); pm.environment.set("cookie1", cookie1); -
Fill Form请求:
- 方法:POST
- 预请求脚本:生成随机电子邮件
// 生成随机邮箱 function randomEmail() { const chars = 'abcdefghijklmnopqrstuvwxyz'; let result = ''; for (let i = 0; i < 10; i++) { result += chars.charAt(Math.floor(Math.random() * chars.length)); } return result + '@example.com'; } pm.environment.set("randomEmail", randomEmail());- 请求体示例:
{ "email": "{{randomEmail}}", "accept_conditions": true } -
Play请求:
- 方法:GET
- 测试脚本:检查是否中奖
const response = pm.response.json(); if (response.hasOwnProperty('prize')) { console.log("中奖信息:", response); // 存储中奖信息 }
3.2.2 批量执行
- 使用Postman Collection Runner执行多次迭代
- 或使用Newman命令行工具无限循环:
while true; do newman run TheForkYummyDays.postman_collection.json; done
3.3 实际利用效果
- 45分钟内获得35个奖品
- 包括高价值折扣券(1000 Yums和2000 Yums)
- 无IP封锁或频率限制
4. 漏洞根本原因分析
-
业务逻辑缺陷:
- 未验证电子邮件是否属于注册用户
- 游戏参与资格控制不严
-
安全防护缺失:
- 无请求频率监控
- 无自动化行为检测
- 无多重验证机制
-
API设计问题:
- 前端依赖信任后端
- 敏感操作无严格验证
5. 修复建议
5.1 业务逻辑修复
-
电子邮件验证:
- 检查参与游戏的电子邮件是否已注册
- 实现服务器端验证,不依赖前端
-
参与限制:
- 每个注册用户每天只能参与一次
- 基于用户ID而非电子邮件限制
5.2 安全防护增强
-
频率限制:
# Django示例:使用django-ratelimit from ratelimit.decorators import ratelimit @ratelimit(key='ip', rate='5/m', block=True) def play_game(request): # 游戏逻辑 -
反自动化措施:
- 实现CAPTCHA验证
- 检测异常请求模式
-
会话强化:
- 使用CSRF令牌
- 实现更严格的会话管理
5.3 架构改进
-
嵌入方式改进:
- 使用X-Frame-Options限制嵌入
add_header X-Frame-Options "SAMEORIGIN"; -
API安全:
- 实施OAuth2认证
- 敏感操作要求二次验证
6. 漏洞挖掘方法论总结
-
观察界面行为:
- 注意非标准UI实现方式
- 记录所有网络请求
-
测试边界条件:
- 尝试未注册用户
- 测试异常输入
-
自动化验证:
- 使用工具模拟批量操作
- 验证防护机制有效性
-
影响评估:
- 量化漏洞潜在影响
- 考虑多种攻击场景
7. 道德黑客实践指南
-
负责任的披露:
- 发现后立即通知厂商
- 提供详细技术细节
-
测试界限:
- 不进行实际恶意利用
- 获取必要证据后停止
-
数据保护:
- 隐藏敏感信息
- 不公开未修复漏洞
8. 扩展思考
-
同类漏洞挖掘:
- 其他营销活动的安全测试
- 用户奖励系统的逻辑审查
-
自动化检测:
- 开发定制化扫描工具
- 实现业务逻辑漏洞检测
-
安全设计模式:
- 促销系统的安全架构
- 奖励发放的防滥用机制
本案例展示了业务逻辑漏洞的发现和利用过程,强调了安全需要在设计阶段就融入系统,而非事后添加。通过此案例,开发人员可以学习如何识别和防范类似安全问题。