支付类漏洞挖掘技巧总结
字数 1183 2025-08-18 17:33:30

支付类漏洞挖掘技巧总结

前言

支付类逻辑漏洞是漏洞挖掘中常见且奖励较高的一类漏洞。本文总结了支付逻辑漏洞的成因及多种挖掘技巧,帮助安全研究人员更有效地发现此类漏洞。

支付逻辑漏洞成因

  1. 前端验证不充分:前端页面缺乏足够的验证和限制,允许用户修改页面元素或发送自定义请求篡改支付参数。
  2. 客户端数据不可信:客户端传输数据时未进行完整性验证和加密,导致支付参数可被篡改。
  3. 服务器端验证不严格:支付请求到达服务器时未进行充分验证,允许攻击者绕过验证机制。
  4. 不安全的存储和传输:支付金额数据在存储或传输过程中未加密,易被窃取或篡改。

支付逻辑漏洞挖掘技巧

一、更改支付金额

在支付流程的各个环节(订购、确认信息、付款等)尝试修改价格参数:

  • 直接修改提交订单中的价格字段
  • 尝试修改为0.01、1.00、1等值

二、更改支付状态

  1. 直接修改为已支付状态:找到决定支付状态的参数并修改
  2. 修改未支付的订单号为已支付订单号:抓取已支付订单数据包,替换订单号

三、修改支付类型

  • 查找支付方式判断参数(如type)
  • 尝试fuzz特殊值(如0)可能实现无需支付
  • 测试开发人员遗留的测试值

四、更改订单信息

  1. 修改商品编号:在生成订单中替换商品编号
  2. 修改订单号
    • 生成两个订单(高价和低价)
    • 支付低价订单,返回时替换为高价订单号
  3. 越权使用他人优惠券/积分

五、更改数量实现优惠支付

  1. 修改数量为极小值:如0.01,可能实现低价购买
  2. 修改数量为负数
    • 注意后端可能校验最小金额
    • 可能需要同时调整金额参数
  3. 负数抵消实现0元购
    • 同时购买两件商品
    • 将低价商品数量设为-1,抵消高价商品
  4. 手动增加商品参数
    • 在提交订单数据包中添加多套商品参数
    • 可能实现"少付多买"

六、重复支付,突破限购

  1. 并发订单:同时提交多个优惠订单
  2. 多设备/多支付方式
    • 使用不同设备或浏览器
    • 同时使用微信、支付宝等不同支付方式
    • 适用于会员首月优惠等情况
  3. 退款处并发:同一订单发起多次退款

七、优惠券多次使用

  1. 订单中叠加使用优惠券:手工添加多张优惠券参数
  2. 修改优惠券标识:尝试使用其他商品的大额优惠券
  3. 直接修改优惠券面值:改变优惠金额计算

八、遍历隐藏或下架优惠

  1. 遍历隐藏优惠券:查找开发测试用的大额优惠券或已过期优惠券
  2. 遍历商品ID:发现已下架但仍有购买逻辑的商品

九、利用小数点精度四舍五入

  • 利用系统与第三方支付的小数处理差异
  • 例如:充值0.019元
    • 第三方支付截取到分(0.01元)
    • 系统四舍五入为0.02元

注意事项

  1. 测试时应关注后端实际校验逻辑
  2. 某些操作可能需要同时修改多个参数
  3. 实际效果可能因系统实现而异
  4. 测试时应注意法律和道德边界

防御建议

  1. 前后端实施严格的参数验证
  2. 关键业务逻辑应在服务端完成
  3. 支付流程应使用不可篡改的签名机制
  4. 对异常交易进行监控和审计
  5. 定期进行安全测试和代码审计
支付类漏洞挖掘技巧总结 前言 支付类逻辑漏洞是漏洞挖掘中常见且奖励较高的一类漏洞。本文总结了支付逻辑漏洞的成因及多种挖掘技巧,帮助安全研究人员更有效地发现此类漏洞。 支付逻辑漏洞成因 前端验证不充分 :前端页面缺乏足够的验证和限制,允许用户修改页面元素或发送自定义请求篡改支付参数。 客户端数据不可信 :客户端传输数据时未进行完整性验证和加密,导致支付参数可被篡改。 服务器端验证不严格 :支付请求到达服务器时未进行充分验证,允许攻击者绕过验证机制。 不安全的存储和传输 :支付金额数据在存储或传输过程中未加密,易被窃取或篡改。 支付逻辑漏洞挖掘技巧 一、更改支付金额 在支付流程的各个环节(订购、确认信息、付款等)尝试修改价格参数: 直接修改提交订单中的价格字段 尝试修改为0.01、1.00、1等值 二、更改支付状态 直接修改为已支付状态 :找到决定支付状态的参数并修改 修改未支付的订单号为已支付订单号 :抓取已支付订单数据包,替换订单号 三、修改支付类型 查找支付方式判断参数(如type) 尝试fuzz特殊值(如0)可能实现无需支付 测试开发人员遗留的测试值 四、更改订单信息 修改商品编号 :在生成订单中替换商品编号 修改订单号 : 生成两个订单(高价和低价) 支付低价订单,返回时替换为高价订单号 越权使用他人优惠券/积分 五、更改数量实现优惠支付 修改数量为极小值 :如0.01,可能实现低价购买 修改数量为负数 : 注意后端可能校验最小金额 可能需要同时调整金额参数 负数抵消实现0元购 : 同时购买两件商品 将低价商品数量设为-1,抵消高价商品 手动增加商品参数 : 在提交订单数据包中添加多套商品参数 可能实现"少付多买" 六、重复支付,突破限购 并发订单 :同时提交多个优惠订单 多设备/多支付方式 : 使用不同设备或浏览器 同时使用微信、支付宝等不同支付方式 适用于会员首月优惠等情况 退款处并发 :同一订单发起多次退款 七、优惠券多次使用 订单中叠加使用优惠券 :手工添加多张优惠券参数 修改优惠券标识 :尝试使用其他商品的大额优惠券 直接修改优惠券面值 :改变优惠金额计算 八、遍历隐藏或下架优惠 遍历隐藏优惠券 :查找开发测试用的大额优惠券或已过期优惠券 遍历商品ID :发现已下架但仍有购买逻辑的商品 九、利用小数点精度四舍五入 利用系统与第三方支付的小数处理差异 例如:充值0.019元 第三方支付截取到分(0.01元) 系统四舍五入为0.02元 注意事项 测试时应关注后端实际校验逻辑 某些操作可能需要同时修改多个参数 实际效果可能因系统实现而异 测试时应注意法律和道德边界 防御建议 前后端实施严格的参数验证 关键业务逻辑应在服务端完成 支付流程应使用不可篡改的签名机制 对异常交易进行监控和审计 定期进行安全测试和代码审计