白帽江湖实战靶场实战SRC逻辑漏洞-该死的商城黑客

靶场地址:https://www.baimaojianghu.com/range/5

✅ 通关成功!Flag 已获取

Flag: flag{aes_s1gn_byp4ss_int32_0verfl0w}


关卡分析

这关相比第一关升级了保护机制,但仍然存在致命漏洞。

🔐 加密机制概览

组件 详情
加密算法 AES-128-CBC
密钥 cMaLl_E1iT3_2024(硬编码前端 JS)
IV R4nd0m_IV_CbC_16(硬编码前端 JS)
签名方式 参数按 key 排序 → 拼接 k=v → AES-128-CBC 加密 → Base64 输出

🧠 攻击链分析

第一层防御:价格校验

  • 服务端验证了 price 是否与数据库真实价格一致
  • 所以直接改 price 为 0 会被拦截

第二层防御(缺失):整数溢出

  • 服务端用 total = price × quantity 计算总价
  • 未校验 quantity × price 是否会溢出 32 位有符号整数
  • int32 最大值 = 2,147,483,647
  • 12990 × 999 = 129,999,987,020,100 → 溢出为 -1,481,480,636

攻击步骤:

1. 获取密钥和 IV(前端 JS → _enc_fallback 配置)
2. 构造请求:price=12990(正确价格通过校验),quantity=999(超大数量触发溢出)
3. 用泄露的密钥重新加密 token
4. 提交→ total 溢出为负值→余额不减反增→通关!

💰 数值演示

正常值 攻击值
单价 ¥12,999.00 ¥12,999.00
数量 1 99,999,999
应有总价 ¥12,999.00 ≈¥1,299,999,870,201
实际总价(溢出后) ¥12,999.00 -¥14,814,806.36
余额变化 -¥12,999.00 +¥14,814,806.36

修复建议

  1. 使用大整数类型:在服务端用 BigInt / long long 或任意精度计算总价
  2. 校验 quantity 上限:设置合理的最大购买数量阈值(如 ≤ 100)
  3. 不要信任客户端:价格、总价都应服务端根据商品 ID 从数据库获取后计算
  4. 密钥仅存服务端:不要将密钥硬编码在前端 JS 中

温馨提示:本文内容仅用于合法授权的安全学习与研究交流,严禁用于未授权渗透测试、漏洞利用或任何违法行为。

涉及企业或平台的未公开漏洞信息,请遵循负责任披露原则,勿公开传播可直接复现的敏感细节。

如存在侵权、错误信息或不当内容,请联系站方处理,我们将及时核实并删除。邮箱:admin@baimaojianghu.com。