逻辑漏洞之支付漏洞
渗透
什么是支付漏洞
比如A产品原件是200元的产品,我们只需要支付小于200元的金额就可以购买了,这就是通过某种思路来完成的。
支付漏洞的危害
支付漏洞一直以来就是是高风险,对企业来说危害很大,对用户来说同样危害也大。就比如我用他人账户进行消费,这也属于支付漏洞中的越权问题。那么支付漏洞一般存在在哪些方面呢,根据名字就知道,凡是涉及购买、资金等方面的功能处就有可能存在支付问题
支付漏洞的思路
- 修改支付状态
- 就比如在购买一个产品的时候,目标程序用a来判断是否有支付,比如a的值是1时,说明支付成功,a的值为2时,说明支付失败,那我们可否来修改a的值来修改支付状态呢~
- 修改支付价格
- 在支付当中,购买商品一般分为三步骤:订购、确认信息、付款。
那么这个修改价格具体是修改哪一步时的价格呢?在我看来,你可以在这三个步骤当中的随便一个步骤进行修改价格测试,如果前面两步有验证机制,那么你可在最后一步付款时进行抓包尝试修改金额,如果没有在最后一步做好检验,那么问题就会存在,其修改的金额值你可以尝试小数目或者尝试负数
- 比如某产品200元,我们可以来利用一下运费价格来抵消一下产品原件,就是通过抓包来修改运费为-190元,看能否成功。
- 修改支付接口
- 什么是支付接口呢,比如像一些百度钱包支付,微信支付,支付宝支付的都是支付接口
- 在不同的支付接口,他们的值都可能不一样,如果逻辑设计不当,当我随便选择一个点击支付时进行抓包,然后修改其支付接口为一个不存在的接口,如果没做好不存在接口相关处理,那么此时就会支付成功
- 修改一些福利的金额
- 在一般情况下,我们第一次注册某商场会员的时候,是可以领取什么5元优惠卷、10元优惠卷、20元优惠卷等等,我们是否可尝试一下修改支付卷的价格呢,比如20元的产品规定了只能使用5元的优惠卷,我们是否可以抓包修改将优惠价格变成19或15勒(这只是我想的,没有试过,如果不成功,各位表哥记得和我说一下)。
- 修改支付ID值
- 比如商城里有2个产品,a产品的价格为100元id为1,b产品的价格为200元id为2,我们是否可以在购买b产品的时候将b产品的id改成a产品的id呢,这样子是不是就可以支付100元就可以购买b产品了,某表哥和我说这样子的思路可以放在积分兑换处使用~。
- 某表哥的牛x思路
- 这是某大表哥的思路:在一个服务器购买网站,他们的硬盘是按G来算的,就好像1G只要1元(假设),2G只要2元,以此类推,比如那个服务器总共需要200元,我们是否可以修改G的数量来减少支付价格呢,比如我们把G改成-19,看结果是否少了190元(19*10=190),如果少了此时我们就只需要支付10元(200元-190元=10元)了,是不是非常牛X。
- 重复支付
- 这是我在网上看到一个也是相当牛X的思路了:比如一些商场中有一些试用卡之类的,通过某种渠道获得的(比如签到,分享网站信息,购买某个商品送来的),当我们试用的时候主动取消试用,那么这个时候试用卡可能会返回到我们账户中,这里的问题就是如果没有进行对订单多重提交的校验,那么就可导致无限制刷牌子。
- 比如,我在试用某个产品的时候,每次试用都会产生一个订单号,然后利用刚抓到的数据包进行批量提交,你就可以看到每次提交的订单号不一样,然后这时你再看订单可以看到同一个商品的无数订单,但试用牌子数只扣了你第一个试验时的牌子数,那么这时你申请批量退出试用,那么这么多订单,每退一个就会退相应的牌子数量到账户当中,这就构成了无限制刷得问题
- 最低支付价格
- 在很多时候,我们都忽略了一个问题,那就是在购买一件商品的时候,我们都喜欢修改成0.01或者负数,但是这里是有一个积分的,就是比如我们在购买1元产品的时候可以获得100积分,但是我们如果将金额数小于1元的话积分就肯定是为空的了,因为这里的积分是按100/元来算的,也就是说,如果我们看到购买xx元有送积分的,我们可以来尝试一下把金额数改成积分最低数,就比如1元。
- 多线程并发
- 比如我们在某网站,他们用的是自家的钱包(迷你钱包),这个钱包作用也仅是用于这一个站,在提现时,没有任何验证码或者校验机制,只要输入体现金额就可以提现,并且是秒到账,如果什么负数,修改金额都测试过了都不行,那么你就可以试试多线程并发问题,提现时抓包,比如我现在钱包内有0.1元,那么按理说每提0.01可以提现10次,也就是发送10次进程,但是利用这个问题可以达到多发现几次成功的进程,提现时抓包,然后把数据包发送到BurpSuite工具的Intruder当中,进行批量发送18次,然后可以看到成功的提现到了12次
- 越权支付
- 比如我们在购买某产品的时候,支付时会出现当前用户的ID,如果没有加以验证,其支付也是一次性支付没有要求输入密码什么的机制,那么就可以修改这个用户ID为其它用户ID,达到用其他用户的账号进行支付你的商品。
- 加减法
- 比如a产品为999元,当我们购买的时候我们可以试试修改数量成-1个,看是否有变成-999元,我们点击支付一下,一般来说,都可能支付失败的,因为这个时候服务器验证了这个价格是否和服务器中对应的价格是否一样,此时我们可以将-999元的产品放到购物车,再去此网站购买一个1000元产品的购物车,然后我们可以来点击购买,可以看到支付价格就变成了1元(1000+(-999)=1)了,下面有案例。
实战
第一个思路:
接着我们通过抓包来将数量改成-1,看下是否成功:
这里可以看到我们修改成功,看看能否支付:
可以看到这里无法支付,可能是我们姿势不够骚,我们换一个姿势来挖
第二个思路:
然后我们再买一个产品,也加入到购物车:
去购物车看看:
尝试是否能支付:
成功挖到支付漏洞,至于支付我就不支付了,因为我知道,我们是白帽,不做危害他人的事情~
作者 free(各位表哥,如果写的不好请多多谅解)
2018-03-19