记一次公众号商城服务1分钱购物漏洞
字数 1204 2025-08-24 16:48:15
微信公众号商城支付漏洞分析与利用教学
1. 漏洞概述
本教学文档详细分析了一种常见的微信公众号商城支付逻辑漏洞,即"1分钱购物"漏洞。该漏洞允许攻击者通过修改订单金额参数,以极低价格(如0.01元)购买高价值商品或服务。
2. 漏洞原理
2.1 漏洞本质
- 服务端未验证订单金额:后端系统未对前端提交的订单金额进行二次验证
- 信任客户端数据:完全信任客户端提交的金额参数,未与商品实际价格进行比对
- 缺乏完整性校验:没有使用签名机制确保订单数据在传输过程中未被篡改
2.2 典型漏洞场景
- 修改订单金额为负数
- 修改订单金额为极小正数(如0.01元)
- 修改商品数量为极大值
- 组合修改金额和数量参数
3. 漏洞复现步骤
3.1 前期准备
-
环境配置:
- 安装Burp Suite抓包工具
- 手机与电脑连接同一WiFi网络
- 手机配置HTTP代理指向Burp监听地址(通常为电脑IP:8080)
-
目标识别:
- 关注目标公众号并进入微商城
- 选择高价值商品/服务(案例中使用1888元的慢病管理套餐)
3.2 漏洞利用流程
-
用户注册与登录
- 在商城"我的"页面完成注册和登录流程
-
生成正常订单
- 选择目标商品,点击"立即购买"
- 正常流程下生成订单并进入支付页面
-
拦截和修改请求
- 使用Burp Suite拦截"提交订单"请求
- 原始请求示例(关键参数):
POST /order/create HTTP/1.1 Host: mall.example.com Content-Type: application/json { "product_id": "123", "quantity": 1, "total_price": 1888.00, "user_id": "456" }
-
参数篡改测试
- 第一次尝试:修改金额为负数
- 修改
total_price为-1888.00 - 观察响应,案例中显示"值最低最小值1"
- 修改
- 第二次尝试:修改金额为0.01
- 修改
total_price为0.01 - 案例中成功绕过限制
- 修改
- 第一次尝试:修改金额为负数
-
完成支付
- 继续后续支付流程
- 实际只需支付修改后的金额(0.01元)
- 获取订单确认和短信通知
4. 防御措施
4.1 开发层面
-
服务端价格验证:
- 所有订单必须重新计算金额:
实际金额 = 商品单价 × 数量 - 拒绝任何客户端提供的金额参数
- 所有订单必须重新计算金额:
-
数据完整性保护:
- 使用HMAC等签名机制验证订单数据
- 关键参数加密或使用Token保护
-
业务逻辑加固:
- 实现价格变动阈值监控
- 对异常低价订单进行人工审核
4.2 测试层面
-
渗透测试要点:
- 测试所有涉及金额的接口
- 尝试各种参数组合修改
- 验证前后端一致性
-
自动化检测:
- 在CI/CD流程中加入支付逻辑测试用例
- 使用DAST工具扫描支付相关接口
5. 法律与道德规范
-
授权测试原则:
- 必须在获得明确授权后进行测试
- 禁止在非授权环境中利用漏洞
-
漏洞披露流程:
- 发现漏洞后及时通知相关企业
- 遵循负责任的披露原则
- 避免公开漏洞细节直至修复完成
6. 总结
本教学详细分析了微信公众号商城中常见的支付逻辑漏洞,通过案例演示了漏洞利用的全过程,并提供了全面的防御方案。支付系统安全至关重要,开发人员应遵循"不信任客户端"原则,对所有关键参数进行服务端验证,同时企业应建立完善的安全测试流程,确保支付环节的安全性。