支付漏洞是 高风险漏洞 也属于 逻辑漏洞,通常是通过 篡改价格、数量、状态、接口、用户名等传参,从而造成 小钱够买大物 甚至可能造成 0元购买商品 等等,凡是 涉及购买、资金等方面的功能处 就有可能存在支付漏洞。文中如有错误的地方,还望各位大佬在评论区指正。
商户网站接入支付结果,有两种方式,一种是通过 浏览器进行跳转通知,一种是 服务器端异步通知。
基于用户访问的浏览器,如果用户在银行页面支付成功后,直接关闭了页面,并未等待银行跳转到支付结果页面,那么商户网站就收不到支付结果的通知,导致支付结果难以处理。而且浏览器端数据很容易被篡改而降低安全性(这种方式数据经过了客户端浏览器,极大的可能性被第三方恶意修改)
该方式是支付公司服务器后台直接向用户指定的异步通知URl发送参数,采用POST或者GET的方式。商户网站接受异部参数的URL对应的程序中,要对支付公司返回的支付结果进行签名验证,成功后进行支付逻辑处理,如验证金额、订单信息是否与发起支付时一致,验证正常则对订单进行状态处理或为用户进行网站内入账等。
http://www.domain.com/mall/item/401
http://www.domain.com/mall/item/184
注:有些提前购买校验本地时间,可以通过修改本地终端时间来实现提前购买
支付三步曲——>订购、订单、付款
三个步骤当中的随便一个步骤进行修改价格测试,如果前面两步有验证机制,那么你可在最后一步付款时进行抓包尝试修改金额,如果没有在最后一步做好检验,那么问题就会存在,其修改的金额值可以尝试小数目
或者尝试负数
。
实例:
http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2015-0112258
http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2012-07293
http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2016-0215059
没有对支付模板的值跟实际订单支付状态进行校验,导致点击支付时抓包修改决定支付或未支付的参数为支付模板的值从而达到支付成功,有时候将商品价格修改为0.01
、0.1
、1
元时,都会显示支付失败,这时通过选择低价商品价格来实现低价购买,也可以通过遍历选择处最低价格。
实例:
http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2015-0102292
商品没有对购买的数量参数进行限制,导致可随意修改,最常见的修改方式是改成 负数或者小数、大人修改成儿童。
相关实例:
http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2015-0108134
http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2012-07471
http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2012-07738
通过修改 特殊传参(如:id,pay,test) 来达到无限制试用。
案例:
http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2016-0188155
通过修改一些 特殊传参(如:id,username,openid) 来达到用他人的资金来干购买自己的商品。
实例: