如何发现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 关键发现

  1. API未验证电子邮件注册状态

    • 使用未注册的电子邮件仍可参与游戏
    • 允许无限次使用不同电子邮件参与
  2. 无请求频率限制

    • 同一IP可高频请求
    • 无CAPTCHA等反自动化机制
  3. 无有效会话控制

    • 仅依赖基本Cookie验证
    • 会话可轻易伪造

3. 漏洞自动化利用技术

3.1 工具准备

  • Postman:用于构建和自动化HTTP请求
  • Newman:Postman的命令行运行工具
  • 浏览器开发者工具:用于抓取原始请求

3.2 自动化流程构建

3.2.1 请求集合设计

  1. Get Cookies请求

    • 方法:GET
    • 目的:获取初始会话Cookie
    • 测试脚本:存储Cookie到环境变量
    // Postman Test脚本示例
    const cookie1 = postman.getResponseHeader("Set-Cookie");
    pm.environment.set("cookie1", cookie1);
    
  2. 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
    }
    
  3. 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. 漏洞根本原因分析

  1. 业务逻辑缺陷

    • 未验证电子邮件是否属于注册用户
    • 游戏参与资格控制不严
  2. 安全防护缺失

    • 无请求频率监控
    • 无自动化行为检测
    • 无多重验证机制
  3. API设计问题

    • 前端依赖信任后端
    • 敏感操作无严格验证

5. 修复建议

5.1 业务逻辑修复

  1. 电子邮件验证

    • 检查参与游戏的电子邮件是否已注册
    • 实现服务器端验证,不依赖前端
  2. 参与限制

    • 每个注册用户每天只能参与一次
    • 基于用户ID而非电子邮件限制

5.2 安全防护增强

  1. 频率限制

    # Django示例:使用django-ratelimit
    from ratelimit.decorators import ratelimit
    
    @ratelimit(key='ip', rate='5/m', block=True)
    def play_game(request):
        # 游戏逻辑
    
  2. 反自动化措施

    • 实现CAPTCHA验证
    • 检测异常请求模式
  3. 会话强化

    • 使用CSRF令牌
    • 实现更严格的会话管理

5.3 架构改进

  1. 嵌入方式改进

    • 使用X-Frame-Options限制嵌入
    add_header X-Frame-Options "SAMEORIGIN";
    
  2. API安全

    • 实施OAuth2认证
    • 敏感操作要求二次验证

6. 漏洞挖掘方法论总结

  1. 观察界面行为

    • 注意非标准UI实现方式
    • 记录所有网络请求
  2. 测试边界条件

    • 尝试未注册用户
    • 测试异常输入
  3. 自动化验证

    • 使用工具模拟批量操作
    • 验证防护机制有效性
  4. 影响评估

    • 量化漏洞潜在影响
    • 考虑多种攻击场景

7. 道德黑客实践指南

  1. 负责任的披露

    • 发现后立即通知厂商
    • 提供详细技术细节
  2. 测试界限

    • 不进行实际恶意利用
    • 获取必要证据后停止
  3. 数据保护

    • 隐藏敏感信息
    • 不公开未修复漏洞

8. 扩展思考

  1. 同类漏洞挖掘

    • 其他营销活动的安全测试
    • 用户奖励系统的逻辑审查
  2. 自动化检测

    • 开发定制化扫描工具
    • 实现业务逻辑漏洞检测
  3. 安全设计模式

    • 促销系统的安全架构
    • 奖励发放的防滥用机制

本案例展示了业务逻辑漏洞的发现和利用过程,强调了安全需要在设计阶段就融入系统,而非事后添加。通过此案例,开发人员可以学习如何识别和防范类似安全问题。

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到环境变量 Fill Form请求 : 方法:POST 预请求脚本:生成随机电子邮件 请求体示例: Play请求 : 方法:GET 测试脚本:检查是否中奖 3.2.2 批量执行 使用Postman Collection Runner执行多次迭代 或使用Newman命令行工具无限循环: 3.3 实际利用效果 45分钟内获得35个奖品 包括高价值折扣券(1000 Yums和2000 Yums) 无IP封锁或频率限制 4. 漏洞根本原因分析 业务逻辑缺陷 : 未验证电子邮件是否属于注册用户 游戏参与资格控制不严 安全防护缺失 : 无请求频率监控 无自动化行为检测 无多重验证机制 API设计问题 : 前端依赖信任后端 敏感操作无严格验证 5. 修复建议 5.1 业务逻辑修复 电子邮件验证 : 检查参与游戏的电子邮件是否已注册 实现服务器端验证,不依赖前端 参与限制 : 每个注册用户每天只能参与一次 基于用户ID而非电子邮件限制 5.2 安全防护增强 频率限制 : 反自动化措施 : 实现CAPTCHA验证 检测异常请求模式 会话强化 : 使用CSRF令牌 实现更严格的会话管理 5.3 架构改进 嵌入方式改进 : 使用X-Frame-Options限制嵌入 API安全 : 实施OAuth2认证 敏感操作要求二次验证 6. 漏洞挖掘方法论总结 观察界面行为 : 注意非标准UI实现方式 记录所有网络请求 测试边界条件 : 尝试未注册用户 测试异常输入 自动化验证 : 使用工具模拟批量操作 验证防护机制有效性 影响评估 : 量化漏洞潜在影响 考虑多种攻击场景 7. 道德黑客实践指南 负责任的披露 : 发现后立即通知厂商 提供详细技术细节 测试界限 : 不进行实际恶意利用 获取必要证据后停止 数据保护 : 隐藏敏感信息 不公开未修复漏洞 8. 扩展思考 同类漏洞挖掘 : 其他营销活动的安全测试 用户奖励系统的逻辑审查 自动化检测 : 开发定制化扫描工具 实现业务逻辑漏洞检测 安全设计模式 : 促销系统的安全架构 奖励发放的防滥用机制 本案例展示了业务逻辑漏洞的发现和利用过程,强调了安全需要在设计阶段就融入系统,而非事后添加。通过此案例,开发人员可以学习如何识别和防范类似安全问题。