【web安全】 逻辑漏洞之支付漏洞
2022-8-21 00:5:32 Author: LemonSec(查看原文) 阅读量:24 收藏

支付漏洞简介

支付漏洞是 高风险漏洞 也属于 逻辑漏洞,通常是通过 篡改价格、数量、状态、接口、用户名等传参,从而造成 小钱够买大物 甚至可能造成 0元购买商品 等等,凡是 涉及购买、资金等方面的功能处 就有可能存在支付漏洞。

快捷支付原理

商户网站接入支付结果,有两种方式,一种是通过 浏览器进行跳转通知,一种是 服务器端异步通知

浏览器跳转通知

基于用户访问的浏览器,如果用户在银行页面支付成功后,直接关闭了页面,并未等待银行跳转到支付结果页面,那么商户网站就收不到支付结果的通知,导致支付结果难以处理。而且浏览器端数据很容易被篡改而降低安全性(这种方式数据经过了客户端浏览器,极大的可能性被第三方恶意修改)

服务器端异步通知

该方式是支付公司服务器后台直接向用户指定的异步通知URl发送参数,采用POST或者GET的方式。商户网站接受异部参数的URL对应的程序中,要对支付公司返回的支付结果进行签名验证,成功后进行支付逻辑处理,如验证金额、订单信息是否与发起支付时一致,验证正常则对订单进行状态处理或为用户进行网站内入账等。

常见的支付漏洞

##修改订单金额

支付三步曲——订购、订单、付款

三个步骤当中的随便一个步骤进行修改价格测试,如果前面两步有验证机制,那么你可在最后一步付款时进行抓包尝试修改

金额,如果没有在最后一步做好检验,那么问题就会存在,其修改的金额值可以尝试小数目或者尝试负数。

实例:

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0112258

http://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2012-07293

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0215059

##重放交易

购买成功后,重放其中的请求,竟然可以多次购买商品。

实例:

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2012-05173

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2011-03009

##修改商品数量

没有对购买的数量参数进行限制,导致可随意修改,最常见的修改方式是改成 负数或者小数

实例:

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0108134

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2012-07471

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2012-07738

##修改支付状态

没有对支付状态的值跟实际订单支付状态进行校验,导致点击支付时抓包修改决定支付或未支付的参数为支付状态的值从而达到支付成功。

实例:

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0102292

##修改附属值

(1)修改优惠劵金额/数量

(2)修改积分金额

(3)修改运费金额

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0156253

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0139556

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2013-019761

##越权支付

通过修改一些 特殊传参(如:id,username,openid) 来达到用他人的资金来干购买自己的商品。

实例:

https://forum.butian.net/share/1125

##无限制试用

通过修改 特殊传参(如:id,pay,test) 来达到无限制试用。

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0188155

##多线程并发

在数据库的余额字段更新之前,同时发起多次兑换积分或购买商品请求,从中获取利益。

详解:

并发请求导致的业务处理安全风险及解决方案

支付漏洞如何挖掘

1、找到关键的数据包

可能一个支付操作有三四个数据包,我们要对数据包进行挑选。

2、分析数据包

支付数据包中会包含很多的敏感信息(账号,金额,余额,优惠),要尝试对数据包中的各个参数进行分。析。

3、不按套路出牌

多去想想开发者没有想到的地方。

4、pc端尝试过,wap端也看看,app也试试

防御方法

1、在后端检查订单的每一个值,包括支付状态;

2、校验价格、数量参数,比如产品数量只能为整数,并限制最大购买数量 ;

3、与第三方支付平台检查,实际支付的金额是否与订单金额一致;

4、如果给用户退款,要使用原路、原订单退回。比如:退押金,按用户原支付订单原路退回;

5、MD5 加密、解密、数字签名及验证,这个可以有效的避免数据修改,重放攻击中的各种问题;

6、金额超过指定值,进行人工审核等。

本文作者:无名草talent, 转载请注明来自FreeBuf.COM

侵权请私聊公众号删文

 热文推荐  

欢迎关注LemonSec

觉得不错点个“赞”、“在看”


文章来源: http://mp.weixin.qq.com/s?__biz=MzUyMTA0MjQ4NA==&mid=2247532807&idx=3&sn=94cb46ea376076c5b902b0a044b6efdc&chksm=f9e32e5cce94a74ae48e83574be6a74978c6fefafb1a1c2cc4693bd2b9f83832290da3cf8bd0#rd
如有侵权请联系:admin#unsafe.sh