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

259

积分

0

好友

37

主题
发表于 昨天 03:38 | 查看: 4| 回复: 0

常见的支付安全测试点

在一次常规的安全测试中,我们选择了一款微信小程序作为目标。通过搜索关键字,可以快速定位到待测的小程序。

目标小程序

进入小程序后,发现其核心功能是商品售卖。其中一个显著的特点是“满198元包邮”。值得注意的是,目标小程序身份验证机制较为简单,这为后续的测试提供了便利。

库存锁定漏洞的发现与利用

在浏览商品时,注意到某商品库存显示为487件。一个典型的业务逻辑漏洞测试点浮出水面:恶意占用库存。即通过下单占用全部库存但不支付,导致其他正常用户无法购买,从而影响业务。

商品库存页面

我们尝试将购买数量直接修改为487,加入购物车并提交订单。

提交订单

在支付环节,选择取消支付。此时,订单状态变为“待支付”,有效期为1小时。在这1小时内,这487件库存会被系统锁定,其他用户无法购买。

订单状态

由于该小程序鉴权较弱,我们完全可以编写一个Python脚本来自动化这一过程。通过抓包获取“创建订单”的请求数据包,并利用脚本定时(例如每隔50分钟)重放该请求,即可实现对该商品库存的持续性锁定,使该商品长期处于“无货”状态。

漏洞利用效果示意图

这种攻击方式成本极低,却能对电商业务的正常运营造成显著干扰,属于典型的业务逻辑漏洞。

支付安全常见测试点梳理

除了上述库存锁定漏洞,在支付安全测试中,还有许多经典的测试思路值得关注:

  1. 数量篡改:修改数据包中的商品数量参数,尝试小数(如1.5)、负数、超大数(导致金额溢出)。
  2. 金额篡改:修改订单总金额、商品单价、运费、优惠金额等。尝试修改为低价、负数、异常小数(如移动小数点位置)。
  3. 双重验证绕过:支付流程可能涉及前端、后端多次校验。需要同时修改请求包和返回包中的关键数据,才能实现最终篡改。
  4. 支付状态篡改:寻找决定订单支付状态的参数(通过对比支付与未支付数据包),尝试直接修改该状态为“已支付”。或尝试用已支付订单的编号替换未支付订单的编号,以绕过支付状态检查。
  5. 正负叠加逻辑漏洞:利用运费、优惠券、商品金额之间的计算逻辑,通过增加商品数量、叠加优惠等方式,实现远低于原价的支付。
  6. 订单替换/交叉:在支付完成回调阶段,替换订单号,尝试实现“用低价订单A的支付结果,完成高价订单B的支付”。或同时生成高低价两个订单,支付低价订单后,在回调中尝试替换为高价订单号。
  7. 订单拆分与退款滥用
    • 凑单免邮:添加一件满足包邮条件的商品(如价格>99元)与目标商品一同下单,支付获得包邮资格后,立即退款掉凑单商品。
    • 满折优惠:利用“满两件打六折”等活动,将两件商品一起支付,成功后立即退掉其中一件,使剩余一件享受折扣价。
  8. 信息遍历:遍历商品ID、优惠券ID等参数,寻找低价测试商品、高额隐藏优惠券或已过期但未失效的优惠券。
  9. 边界值测试
    • 最小支付金额:并非所有系统都支持0.01元支付。测试时,尝试将金额修改为比原价少1元等较小但仍为正数的值,可能绕过最小支付限制。
    • 最大支付金额(整数溢出):商品金额常用整型变量存储。尝试将金额或数量修改为超过 2147483647(32位int最大值)的值,例如通过公式 2147483647 / 单价 + 1 计算数量,可能导致整数溢出,引发支付状态异常。

这些测试点揭示了支付系统在业务逻辑、数据校验和状态管理上可能存在的缺陷,是渗透测试中需要重点关注的方向。

您需要登录后才可以回帖 登录 | 立即注册

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

GMT+8, 2025-12-3 14:50 , Processed in 0.078043 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

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