快捷支付原理
商户网站接入支付结果有两种方式,一种是通过浏览器进行跳转通知,一种是服务器端异步通知
浏览器跳转
基于用户访问的浏览器,如果用户在银行页面支付成功后,直接关闭了页面,并未等待银行跳转到支付结果页面,那么商户网站就收不到支付结果的通知,导致支付结果难以处理。而且浏览器端数据很容易被篡改而降低安全性
服务端异步通知
该方式是支付公司服务器后台直接向用户指定的异步通知URL发送参数,采用post或get的方式。商户网站接受异步参数的URL对应的程序中,要对支付公司返回的支付结果进行签名验证,成功后进行支付逻辑处理,如验证金额,订单信息是否与发起支付时一致,验证正常则对定单进行状态处理或为用户进行网站内入账等。
支付漏洞属于逻辑漏洞
常见支付漏洞
栗子
支付步骤:————订购、订单、付款
三个步骤当中的随便一个步骤进行修改价格测试,如果前面两步有验证机制,那么你可以在最后一步富矿石进行抓包尝试修改金额,如果没有在最后一步做好检验,那么问题就会存在,其修改的金额值你可以尝试小数目或者尝试负数。
修改支付状态栗子
修改订单数量栗子
修改附属值
优惠券其基本都是优惠一半,一般用优惠券进行消费一般出现在第二个步骤当中:确认购买信息,在这个步骤页面当中,你可以选择相关优惠劵,然后直接修改金额大于或等于商品价格就可以,或者直接修改其为负值进行尝试,最后进行支付,如果对这点没有加以验证,那么问题就会产生,直接支付成功
越权支付
存在user=id(123),这种传参时,尝试改id,尝试用别人的钱包买自己的物品
无限制使用
比如使用的参数为2,正常购买的参数为1
那么我们购买参数为2(试用),会发生什么呢?
栗子
支付漏洞(挖掘)
找到关键的数据包
可能支付操作有三四个数据包,我们要对数据进行挑选。
分析数据包
支付数据包中会包含很多的敏感信息(账号,金额,余额,优惠),要擦尝试对数据包中的各个参数进行分析
不按套路出牌
多去想想开发想不到的地方
pc端尝试过,wap端也看看,app也试试
防御方法
1、后端检查每一项值,包括支付状态。
2、校验价格、数量参数,比如产品数量只能为整数,并限制购买数量
3、与第三方支付平台检查,实际支付的金额是否与订单一致。
4、对支付参数进行MD5加密、解密、数字签名及验证,这个可以有效的避免数据修改,重放攻击中的各种问题
5、金额超过一定值,进行人工审核
靶场实战
一个练手都算不上的CMS。。。。。。。。。。。。
直接在提交的商品数量里填入负数…
虽然报错了,但是返回一看…
抓包都不用。直接改商品数量导致逻辑漏洞
我也懒得抓…