找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3978

积分

0

好友

546

主题
发表于 1 小时前 | 查看: 3| 回复: 0

支付类逻辑漏洞在安全测试中一直是高价值目标,因其直接关联资金,发现后往往奖励丰厚。这类漏洞的挖掘思路多样,考验测试者对业务流程的理解。本文将围绕支付环节,系统梳理九类常见的漏洞挖掘技巧与测试思路。

支付逻辑漏洞成因

理解漏洞的根源有助于我们更好地定位测试点。支付漏洞通常由以下几个环节的缺陷造成:

  1. 前端验证不充分:仅在前端页面进行验证和限制,用户可以通过修改页面元素或发送自定义请求,轻易篡改支付金额、支付类型、支付状态等关键参数。
  2. 客户端数据不可信:移动应用等客户端在传输支付数据时,缺乏完整性验证和有效加密,攻击者可以直接篡改数据包中的金额、订单号等参数。
  3. 服务器端验证不严格:后端在处理支付请求时,未对相关参数进行充分的校验,导致攻击者可以绕过正常的验证逻辑。
  4. 不安全的存储和传输:支付金额等敏感数据在存储或网络传输过程中未经适当保护,存在被窃取或篡改的风险。

支付逻辑漏洞挖掘技巧

在实际测试中,最直接的思路就是尝试修改请求数据包的内容。我们可以从以下几个角度进行分类测试:

一、修改支付金额

在整个支付流程中,涉及价格参数的步骤都可能存在漏洞,如下单、确认信息、发起支付等。测试时,可以尝试修改请求中的价格字段,常见的测试值包括 0.011.001 等。

HTTP请求与响应截图,展示修改支付金额的测试场景

二、修改支付状态

有时,订单的支付状态是由用户提交的某个参数决定的,后端仅通过此参数判断订单是否已支付。我们可以通过对比正常支付与未支付订单的数据包,定位到这个关键参数并进行修改。另一种情况是,系统通过检查订单号是否存在于“已支付”列表中来确认,此时可以将未支付订单的编号替换为已支付订单的编号,实现绕过。

  1. 直接修改参数为“已支付”状态。
  2. 替换订单号,将未支付订单号改为已支付订单号。

三、修改支付类型

在提交订单支付时,通常会有一个 type 或类似字段用于标识支付方式。开发人员在测试阶段可能遗留了无需实际支付的 type 值。通过模糊测试(Fuzz)特定的 type 值,可能实现绕过支付直接生成订单。例如,值 0 有时会被用于测试,代表“无需支付”。

HTTP请求截图,展示修改支付类型参数的测试场景

四、篡改订单信息

如果服务端只检查支付是否成功,而未核对支付金额与订单金额是否一致,并且过分信任客户端提交的数据,就会产生此类漏洞。攻击者可以通过替换支付订单号、更换商品ID等方式,实现“花小钱买贵货”。

具体操作可以是:生成一个高价订单和一个低价订单,先支付低价订单,在支付平台回调通知服务端时,将订单号替换成高价订单的,从而完成对高价订单的“支付”。

1. 修改商品编号
在生成订单的请求中,直接替换商品ID,将低价商品换成高价商品。

HTTP请求截图,展示在低价订单中修改商品ID为高价商品

2. 修改订单号
支付一个金额较少的订单,但在后续的确认或回调环节,将其订单号修改为金额较大的订单号。

HTTP请求截图,展示替换低价订单号为高价订单号的测试场景

3. 越权使用他人优惠券/积分
尝试在请求中修改优惠券或积分所属的用户标识,越权使用他人的资产完成支付折扣。

五、修改商品数量以绕过支付

支付金额由 数量 × 单价 计算得出。如果后端对购买数量缺乏有效校验,修改数量可能引发漏洞。

1. 修改为极小值
将数量改为 0.01 等极小值,可能导致实付金额锐减。例如,原价300元的商品,数量改为0.01后,实付金额可能变为3元。

HTTP请求截图,展示修改充值金额为0.01的测试场景

2. 修改为负数
若后端未校验负数,将数量改为 -1 可能导致订单总额为负数。但通常系统会阻止实付金额≤0的订单,此时可能需要配合修改其他价格字段以保证订单生成。

HTTP请求截图,展示修改商品数量参数为-1
订单结算页面截图,显示商品数量为-1时小计金额为负
HTTP请求截图,展示在提交支付时修改金额参数

3. 负数抵消实现“0元购”
在购买多件商品时,如果将其中一件低价商品的数量修改为负数,可能使其与正数商品的价格相互抵消,从而近乎免费获得正数商品。

JSON数据截图,展示商品列表中某商品数量被设置为-2

4. 重复添加商品参数
在提交订单的数据包中,如果商品信息是以列表(如JSON数组)形式传递,可以尝试手动复制添加多套相同的商品参数,以期“买一送多”而只付一份钱。

JSON数据截图,展示购买商品的相关参数
JSON数据截图,展示手动添加多套相同的商品参数
支付界面截图,显示待支付金额未变但商品数量可能已增加

六、并发请求突破限购

当服务端对订单状态更新或重复提交的校验存在缺陷时,可利用并发请求突破购买限制。

1. 并发生成多个优惠订单
针对“限购一件”的优惠商品,使用工具并发提交多个下单请求,可能成功生成多个优惠订单。需要注意的是,最终支付环节可能仍有校验。

Turbo Intruder工具截图,展示并发测试请求

2. 多端并发支付
常见于首月优惠的会员购买。生成一个优惠订单后不支付,同时在多个设备或浏览器上发起支付请求,可能导致系统处理异常,以优惠价延长会员时长。
3. 退款并发
对同一订单发起多次并发退款请求,可能导致重复退款。

七、优惠券漏洞利用

涉及优惠券的支付环节也是测试重点。

  1. 叠加使用:修改请求,尝试在一个订单中应用多张优惠券。
  2. 越权使用:修改优惠券ID,尝试使用其他商品专属的大额优惠券。
  3. 篡改面值:如果请求中存在优惠券面值参数,直接修改其数值,可能实现超折扣甚至零元支付。

八、遍历获取隐藏资源

通过遍历ID,可能发现未公开的测试商品、已下架的优惠商品或内部测试用的超大额优惠券。

1. 遍历隐藏/过期优惠券ID
2. 遍历商品ID
使用 Intruder 等工具对商品ID参数进行模糊测试,可能访问到已下架或隐藏的低价测试商品。

Burp Suite Intruder工具截图,展示遍历商品ID的测试

九、利用精度与四舍五入差异

当支付系统与第三方支付平台在处理金额小数位时规则不一致(如一个截断、一个四舍五入),可能产生漏洞。
例如:充值 0.019 元,第三方支付截取到“分”单位,实际扣款 0.01 元;但业务系统四舍五入入账 0.02 元,从中套利。

总结

支付逻辑漏洞的挖掘核心在于对业务流的深入理解和对客户端-服务器端信任关系的突破。测试者需要像开发者和攻击者一样思考,逐一验证每个环节的校验是否充分。上述九类技巧提供了系统性的测试思路,但在实战中需要灵活组合,并特别注意测试的合法性与授权边界。对于更深入的安全测试渗透测试方法论探讨,欢迎在云栈社区与更多安全爱好者交流。




上一篇:U-Claw便携版OpenClaw教程:免安装U盘启动,5分钟部署个人AI助手
下一篇:崖山数据库标量子查询CACHE功能实测与性能优化指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-12 09:31 , Processed in 0.430529 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表