Hack the box-Diogenes Rage攻克思路
字数 1296 2025-08-12 11:34:05

Hack the Box - Diogenes Rage 靶机攻克教程

靶机概述

Diogenes Rage 是 Hack the Box 平台上的一个靶机,全球攻克人数为780人(截至2022年8月)。该靶机模拟了一个自动售货机系统,通过条件竞争漏洞实现优惠券的重复兑换,最终获取flag。

信息收集

  1. 网站功能分析

    • 模拟自动售货机界面
    • 用户可以将纸币移动至投币口
    • 根据左侧物品价格及代号,在右侧按键处输入代号购买商品
    • 包含一个红色重置按钮
  2. 网络请求分析

    • 纸币投入时的请求
    • 按键购买商品时的请求(/api/purchase
    • 点击红色按钮重置的请求

代码分析

1. 购买商品逻辑 (/api/purchase)

关键代码行为:

  • 当用户未定义时(user==undefined),会注册用户信息(包括用户名、优惠券金额为0等)
  • 当购买商品C8时,系统会读取/app/flag文件并将内容展示在响应包中
  • C8商品价格为$13.37
  • 优惠券一次只能兑换一张,面值为$1

2. 优惠券兑换逻辑 (/api/coupons/apply)

漏洞点分析:

  1. 系统先检查优惠券是否已被使用(是否存在)
  2. 如果未使用,则兑换金币并更新用户数据库
  3. 条件竞争漏洞:如果在同一时间对同一张优惠券发起多个兑换请求,可以绕过"一次只能兑换一张"的限制

漏洞利用步骤

1. 获取个人session

首先需要获取有效的用户session,这是后续操作的基础。

2. 并发兑换优惠券

利用条件竞争漏洞并发兑换同一张优惠券:

  • 使用工具(如Burp Suite)发送多个并发请求到/api/coupons/apply
  • 由于竞争条件,系统可能会多次兑换同一张优惠券
  • 示例中成功兑换了19张优惠券(价值$19)

3. 购买flag商品

使用积累的金币购买商品C8:

  • 携带有效session发送购买C8的请求到/api/purchase
  • 系统会返回包含flag的响应

实际操作指南

使用Burp Suite进行漏洞利用

  1. 拦截兑换请求

    • 正常操作兑换一张优惠券,用Burp拦截请求
    • 将请求发送到Intruder模块
  2. 设置并发攻击

    • 在Intruder中选择"Pitchfork"或"Cluster bomb"攻击类型
    • 设置高线程数(如50-100)
    • 不需要修改任何参数,直接发起攻击
  3. 验证兑换结果

    • 检查账户余额是否增加了超过预期的金额
    • 示例中获得了19美元而非预期的1美元
  4. 购买flag商品

    • 发送购买C8商品的请求
    • 在响应中查找flag

注意事项

  1. 传统的多进程脚本方法可能不稳定,使用Burp Suite更可靠
  2. 并发请求的数量需要适当调整,过多可能导致服务器无响应
  3. 确保在每次尝试前重置系统状态(使用红色按钮)
  4. 保持session的一致性,所有请求需要使用同一个有效session

总结

Diogenes Rage靶机的核心漏洞是优惠券兑换处的条件竞争问题。通过精心设计的并发请求,可以绕过系统的一次性兑换限制,积累足够资金购买包含flag的高价商品。这种方法相比传统的多进程脚本更加稳定可靠。

Hack the Box - Diogenes Rage 靶机攻克教程 靶机概述 Diogenes Rage 是 Hack the Box 平台上的一个靶机,全球攻克人数为780人(截至2022年8月)。该靶机模拟了一个自动售货机系统,通过条件竞争漏洞实现优惠券的重复兑换,最终获取flag。 信息收集 网站功能分析 : 模拟自动售货机界面 用户可以将纸币移动至投币口 根据左侧物品价格及代号,在右侧按键处输入代号购买商品 包含一个红色重置按钮 网络请求分析 : 纸币投入时的请求 按键购买商品时的请求( /api/purchase ) 点击红色按钮重置的请求 代码分析 1. 购买商品逻辑 ( /api/purchase ) 关键代码行为: 当用户未定义时( user==undefined ),会注册用户信息(包括用户名、优惠券金额为0等) 当购买商品C8时,系统会读取 /app/flag 文件并将内容展示在响应包中 C8商品价格为$13.37 优惠券一次只能兑换一张,面值为$1 2. 优惠券兑换逻辑 ( /api/coupons/apply ) 漏洞点分析: 系统先检查优惠券是否已被使用(是否存在) 如果未使用,则兑换金币并更新用户数据库 条件竞争漏洞 :如果在同一时间对同一张优惠券发起多个兑换请求,可以绕过"一次只能兑换一张"的限制 漏洞利用步骤 1. 获取个人session 首先需要获取有效的用户session,这是后续操作的基础。 2. 并发兑换优惠券 利用条件竞争漏洞并发兑换同一张优惠券: 使用工具(如Burp Suite)发送多个并发请求到 /api/coupons/apply 由于竞争条件,系统可能会多次兑换同一张优惠券 示例中成功兑换了19张优惠券(价值$19) 3. 购买flag商品 使用积累的金币购买商品C8: 携带有效session发送购买C8的请求到 /api/purchase 系统会返回包含flag的响应 实际操作指南 使用Burp Suite进行漏洞利用 拦截兑换请求 : 正常操作兑换一张优惠券,用Burp拦截请求 将请求发送到Intruder模块 设置并发攻击 : 在Intruder中选择"Pitchfork"或"Cluster bomb"攻击类型 设置高线程数(如50-100) 不需要修改任何参数,直接发起攻击 验证兑换结果 : 检查账户余额是否增加了超过预期的金额 示例中获得了19美元而非预期的1美元 购买flag商品 : 发送购买C8商品的请求 在响应中查找flag 注意事项 传统的多进程脚本方法可能不稳定,使用Burp Suite更可靠 并发请求的数量需要适当调整,过多可能导致服务器无响应 确保在每次尝试前重置系统状态(使用红色按钮) 保持session的一致性,所有请求需要使用同一个有效session 总结 Diogenes Rage靶机的核心漏洞是优惠券兑换处的条件竞争问题。通过精心设计的并发请求,可以绕过系统的一次性兑换限制,积累足够资金购买包含flag的高价商品。这种方法相比传统的多进程脚本更加稳定可靠。