0x00 前言

支付漏洞属于逻辑漏洞的一种,存在支付漏洞会造成较大危害,一般存在于在线商城类、旅游门票、车票类、积分兑换类等涉及支付相关的站点

网站支付两种方式:

1、浏览器跳转(古老、危险)

待用户在支付成功后从支付页面跳转回来,以此作为判断。不安全、数据容易被篡改。

2、服务器端异步通知(常见)

通过后台特定渠道与支付公司进行数据验证,采用POST或GET的方式,验证订单支付的金额、签名、返回信息与生成的订单是否一致等。

0x01 测试方法

1、改金额

一般的支付流程包括 选购商品、订单生成、提交付款 三个部分

可以尝试修改任意一个部分的金额信息,如果验证不当,就会存在价格被篡改的情况。

2、改支付状态

可以修改订单中的其他信息,如在对商品进行付款时时,修改一个已经支付的订单值,服务器就会返回订单已支付成功的状态,达到绕过支付。

可以利用这个方法尝试 支付绕过、小金额买大金额商品等

3、改支付账户

发现商品传参中包含账户id或其他信息时,尝试修改这些信息,扣其他账户的钱购买商品

4、改商品数量

传参中包含商品数量时,尝试修改为0或负数。或者尝试一次购买多个商品,将金额大的那件商品数量改为负数,抵消掉其他金额小的商品的价格。

5、改优惠券数量

传参中包含优惠券的相关信息时尝试修改,如修改优惠券的数量、价格,抵消掉商品原有价格

6、除了PC端,尝试移动端网页、app、小程序等。

0x02 实战复现

以某在线家电商城为例

提交订单时,只对商品金额、数量参数做了简单计算验证,并且参数可控,导致支付漏洞

1、登录后,在主页面挑选一个商品

支付漏洞1.png

以这款价格49的打印机为例

2、点击进入商品页面并加入购物车

支付漏洞2.png

提示添加进货单成功

3、点击购物车,查看进货单

支付漏洞3.png

4、选中商品,点击去结算

支付漏洞4.png

5、新增一个收货地址

支付漏洞5.png

6、开启抓包,在下方点击提交订单

支付漏洞6.png

7、两个关键参数 num和totalFee,分别表示商品数量和总金额

支付漏洞7.png
8、修改num的值为-1

支付漏洞8.png

支付漏洞9.png

提示参数错误,计算到的订单总价为-4800,而指定总价为5000

而这两个参数的值是可以控制的,所以根据提示,构造两个参数相等且为负数,并且选择支付方式为钱包支付

9、构造参数并支付

支付漏洞10.png

修改num=-1、totalFee=-4800

支付漏洞11.png

10、放包

支付漏洞12.png

在个人中心查看订单

支付漏洞13.png

支付漏洞14.png

支付漏洞15.png

0x03 防御措施

1、后端检验每一项值,包括支付状态、价格、签名等信息

2、控制好账户权限,避免越权支付

3、与第三方支付平台核对

4、支付参数进行加密

5、金额超过阈值进行人工审核