支付类逻辑漏洞是漏洞挖掘领域高频、高价值漏洞,挖掘思路多样、奖励丰厚。本文围绕其成因、核心挖掘技巧展开分享,结合测试场景提供可落地参考。
支付逻辑漏洞成因解析
支付环节涉及多流程,任一环节疏忽均可能产生漏洞,具体分为4类:
前端验证不充分:前端未严格校验支付参数,攻击者可修改页面元素、发送自定义请求,绕过前端限制。
客户端数据不可信:客户端传输支付数据未加密、未校验完整性,恶意用户可篡改订单号、金额等核心信息。
服务器端验证不严格:服务器未全面校验支付请求,非法篡改参数可通过校验实现漏洞利用。
数据存储与传输不安全:支付敏感数据未加密存储或未用安全协议传输,易被窃取、篡改。
核心支付漏洞挖掘技巧(附测试场景)
漏洞挖掘核心是篡改支付数据包、突破校验,结合经验分为9类,搭配具体操作便于测试。
(一)篡改支付金额
这是基础高频挖掘方向,所有涉及价格的环节均可尝试修改参数,核心是寻找未严格校验的价格字段。
具体操作:抓取订单、支付数据包,将price、amount等价格字段改为0.01元、1元等极小值,提交后查看订单及支付是否正常。
示例:某平台将订单price字段从50元改为0.01元,订单正常生成并完成支付,实现低价购买。
(二)篡改支付状态
部分平台支付状态由客户端参数决定,未与第三方支付实时校验,可篡改参数实现绕过。
常见操作方式:
直接篡改状态参数:抓取数据包,将payStatus、status等字段从0(未支付)改为1(已支付),查看订单状态。
订单号替换绕过:用已支付订单号替换未支付订单号,提交后误导服务器判断。
(三)修改支付类型
payType字段区分支付方式,部分测试遗留“无需支付”值,可通过fuzz测试找到并利用。
具体操作:抓取支付数据包,将payType替换为0、99等测试值,测试是否可免支付完成订单。
示例:某平台payType=0时,服务器跳过支付校验,直接标记订单为已支付。
(四)篡改订单信息
部分服务器仅校验支付完成,未核实金额一致性,可篡改订单信息实现“花少买贵”。
常见操作方式:
修改商品编号:用低价订单的数据包,替换productId为高价商品编号,支付低价即可获得高价商品。
修改订单号:同时创建高低价订单,支付低价后,将回调数据包中的订单号替换为高价订单号。
越权使用优惠:篡改优惠券ID、积分参数,使用他人或过期大额优惠降低支付金额。
(五)修改商品数量实现优惠支付
支付金额由单价×数量计算,服务器未限制数量合法性时,可修改数量利用漏洞。
常见操作方式:
修改为小数:将数量改为0.01等极小值,降低支付金额(如300元商品改为0.01后实付3元)。
修改为负数:未限制负数时,将数量改为-1,结合修改金额确保订单生成,甚至“倒赚”。
负数抵消:多件商品中一件改为负数,抵消金额实现零元购或低价购。
多添加商品参数:重复添加商品相关参数,实现商品数量增加但支付金额不变。
(六)重复支付与突破限购
服务器未严格校验订单状态和多重提交,可通过并发、多设备操作突破限制。
常见操作方式:
并发生成优惠订单:多设备、多账号并发提交,突破“一个账号一次优惠”限制。
多渠道重复购买:优惠订单未支付时,多设备、多支付方式同时支付,实现多次优惠。
重复退款:并发提交同一订单退款请求,可能实现多次退款获得超额金额。
(七)优惠券滥用漏洞
优惠券场景常见叠加、面值篡改、越权使用等漏洞,核心是找到参数校验漏洞。
常见操作方式:
优惠券叠加:手动添加多个优惠券ID,突破使用限制。
篡改优惠券标识:替换为其他商品大额优惠券ID,跨商品使用。
篡改优惠券面值:修改couponAmount等字段,享受超额优惠。
(八)遍历隐藏/下架优惠ID
平台存在隐藏、下架商品或未公开优惠券,可通过遍历ID找到并利用。
常见操作方式:
遍历优惠券ID:工具递增遍历,尝试使用未公开、过期优惠券。
遍历商品ID:寻找下架、隐藏测试商品,未严格校验即可下单。
(九)利用小数点精度漏洞
平台与第三方支付金额精度处理不一致,可利用四舍五入差异实现低价支付。
示例:充值0.019元,平台四舍五入为0.02元,第三方支付仅扣除0.01元。
挖掘注意事项
测试需在合法授权范围内,严禁未经授权挖掘非测试环境,避免违法。
保留测试记录(数据包、截图),便于漏洞验证与提交。
结合平台实际逻辑调整测试方法,不可生搬硬套。
重点关注服务器端校验,前端校验易绕过,核心防护在服务器端。

