白帽江湖实战靶场实战SRC逻辑漏洞-白嫖大法
靶场地址:https://www.baimaojianghu.com/range/4
✅ 通关成功!Flag 已获取
Flag: flag{md5_s1gn_byp4ss_pr1ce_t4mper}
漏洞分析摘要
1. 签名密钥硬编码泄露 🔑
前端 JS 源码中直接暴露了 MD5 签名密钥:
var _cybermall_runtime = {
_ak: "cybermall_sign_key_2024_s3cure!",
};
任何用户查看页面源码即可获取该密钥。
2. 签名算法可复现
function generateSign(params) {
var keys = Object.keys(params).filter(function(k) { return k !== 'sign'; }).sort();
var str = keys.map(function(k) { return k + '=' + params[k]; }).join('&');
str += '&key=' + _cybermall_runtime._ak;
return md5(str);
}
参数按 key 字母排序 → 拼接成 k=v 对 → 尾部追加 &key= + 密钥 → 整体 MD5。
3. 核心漏洞:服务端未校验 price
后端仅验证签名「是否合法」,但未校验 price 是否等于该商品在数据库中的真实价格。因此攻击者可:
- 将
price从12990(¥12,999.00)改为0 - 用泄露的密钥按相同算法重新计算
sign - 提交请求 → 0 元购买成功
攻击点(严重程度:Critical)
| 问题 | 风险 |
|---|---|
| 签名密钥暴露在前端 JS | 任何用户都能提取密钥 |
| price 参数不参与服务端校验 | 篡改价格重新签名即可绕过 |
| 无服务端价格校验 | 可无限次 0 元购,经济系统崩溃 |
修复建议
- 密钥仅存服务端,前端只负责提交订单号,由服务端生成签名
- 服务端校验 price:下单时从数据库读取商品真实价格,拒绝客户端提交的 price
- 用服务端 session + HMAC 或 JWT 替代前端 MD5 签名方案
温馨提示:本文内容仅用于合法授权的安全学习与研究交流,严禁用于未授权渗透测试、漏洞利用或任何违法行为。
涉及企业或平台的未公开漏洞信息,请遵循负责任披露原则,勿公开传播可直接复现的敏感细节。
如存在侵权、错误信息或不当内容,请联系站方处理,我们将及时核实并删除。邮箱:admin@baimaojianghu.com。
