[TOC]
支付漏洞
快捷支付原理
一、通过浏览器进行跳转通知
- 基于用户访问的浏览器,如果用户在银行页面支付成功后,直接关闭了页面,并未等待银行跳转到支付结果页面,那么商户网站就收不到支付结果的通知,导致支付结果难以处理。而且浏览器端数据很容易被篡改从而降低安全性。
二、服务器端异步通知
- 该方式是支付公司服务器后台直接向用户指定的异步通知URL发送参数,采用POST或GET的方式,商户网站接受异步参数的URL对应的程序中,要对支付公司返回的支付结果进行签名验证,成功后进行支付逻辑处理,如验证金额、订单信息是后与发起支付时一致,验证正常则对订单进行状态处理或为用户进行网站内入账。
常见支付漏洞
一、修改支付价格
支付三部曲——订购、订单、付款
- 三个步骤当中的随便一个步骤进行修改价格测试,如果前面两部有验证机制,那么你可在最后一步付款时尝试修改金额,如果没有在最后一步做好检验,那么问题就会存在,其修改的金额值你可能尝试小数目或者尝试负数。
二、修改支付状态
订单完成——未完成(傻傻分不清)
- A订单-0001完成——B订单-0002未完成
- 付款时尝试把订单B的单号改成订单A
三、修改订单数量
- 一支笔1块,买0支,或者买-1支
四、修改附属值
优惠券
- 优惠券其基本都是优惠,一般用优惠券进行消费一般出现在第二个步骤当中:确认购买信息,在这个步骤页面当中,你可以选择相关优惠券,然后直接修改金额大于或等于商品的价格就可以,或者直接修改其为负值进行尝试,最后进行支付,如果对这点没有加以验证,那么问题就会产生,直接支付成功。
- 例如就是x大佬,买商品,优惠券x27张
五、越权支付
- 存在user=id(123),这种传参时,尝试修改id,尝试用别人的钱包付款自己的商品。
六、无限制使用
- 比如使用的参数为2,正常购买的参数为1;
- 那么我们购买参数2(使用);
- 疯掉的逻辑(https://www.uedbox.com/post/12258/)
如何挖掘支付漏洞
找到关键的数据包
- 可能一个字符操作会有三四个数据包,我们要对数据包进行挑选。
分析数据包
- 字符数据包中包含很多的敏感信息(账号,金额,余额,优惠),要尝试对数据包中的各个参数进行分析。
不按套路出牌
- 多去想想开发者没有想到的地方。
- PC尝试过,wap端也看看,app也试试。
防御方法
- 后端检查每一项值,包括字符状态;
- 校验价格、数量参数,比如产品数量只能为正整数,并限制购买数量;
- 与第三方支付平台检查,实际支付的金额时候与订单金额一致;
- 支付参数进行MD5加密、解密、数字前面及验证,这个可以有效的避免数据修改,重放攻击中的各种问题;
- 金额超过阈值,进行人工审核。
靶场实战
1.靶场地址
http://59.63.200.79:8010/zf/upload/
2.注册账号
3.商品下单
正常购买!
修改数量为负数,购买!
4.查看钱包
得到 flag!