目录
1、直接修改商品的价格
2、修改支付状态
3、修改商品数量
4、另类支付
5、修改支付接口
6、重复支付
7、最小支付和最大支付
8、越权支付
9、无线次试用
10、线程并发问题
前两天学习了逻辑漏洞中的越权漏洞,今天开始学习支付逻辑漏洞,这里还是参考大佬总结的文章进行学习
声明:本篇中的案例都是别的大佬总结好的,我只是进行学习+练习
1、直接修改商品的价格
在支付过程中,购买商品一般分为三个步骤:订购,确认信息,付款,那么这个修改价格具体时修改那一步时的价格?
在我看来你可以在这三个步骤中随便一个步骤进行价格的修改,进行测试,如果前面两步有验证机制,那么你可在最后一步付款进行抓包尝试修改金额,如果没有在最后一步做好检验,那么问题就会存在,其修改的金额值,你可以尝试小数目或者负数,去测试;
这里以大佬写了M1905的一个逻辑漏洞文章来学习一下,但是都是以前的案例,没有办法复现,这里就直接列出大佬的文章进行学习:
M1905价值2588套餐只要5毛钱(拥有后台权限可自己审核订单) | wooyun-2016-0226613| WooYun.org
中国国旅一元买任意张数旅游票(支付逻辑漏洞) | wooyun-2015-0112258| WooYun.org
淘宝网某处存在严重支付漏洞 | wooyun-2012-07293| WooYun.org
看我如何1块钱买价值3999块钱的嗨镜(京东众筹破2百万)支付漏洞 | wooyun-2016-0215059| WooYun.org
2、修改支付状态
这里首选就是需要下载大米CMS,详细步骤就不演示了
下载地址:大米CMS|大米CMS v6.1.8下载_网站源码 - 站长源码 (chinaz.com)
下载完成后,在浏览器访问即可进行安装:
安装完成后,就可以看到一下页面:
修改支付状态就很好理解,比如网页的状态:
200 就是正常存在,404就是网页不存在
支付状态也是,1/200/true就是支付成功,0/404/false就是支付失败
如果我们在支付状态为0时抓包将值修改为1是否就可以绕过支付,直接白嫖呢?
另外一种思路就,有我们去购买A商品,是10元,B商品是1000元,我们先购买A商品,将A商品的数据包,给B商品,那么我们就能通过10元购买10000元的商品呢?
下面就用大米cms进行实操一下:
我们在逛大米商城的时候看上了一个价值5400元的大米手机,然后进行支付
在提交订单的同时进行抓包,将数据包记录下来:
然后再去对一个价值4000元的手机执行相同的操作:
然后我们重新再购买5400手机支付时进行抓包,然后将数据包修改为4000的看看:
可以看到成功的访问到了4000的页面
3、修改商品数量
在购买商品时,我们可以选择商品的数量,正常都是1,2,3...,那么我们如果输入一个负值会怎么样呢?
下面还是在大米CMS中实操一下:
还是在购买商品时抓包
通过观察发现这个gty应该就是商品的数量我们可以尝试更改一下:
更改为100
更改为-1
可以看到值修改数量为负数,那么这样提交订单是不是还得给我反点钱!
4、另类支付
我们在支付的时候,常常会给你一些优惠卷,积分,满减等等,而这些值同样都是有操作的空间
1)修改优惠卷
一般优惠卷进行消费往往出现在第二个步骤当中,确认购买信息,这个页面当中,你可以选择相关的优惠卷,我们直接修改优惠卷的金额,等于商品的价格,或者直接将其改为负数,最后进行支付,如果说没有对这个点加以验证,那么直接可以支付成功;
2)修改优惠卷金额及业务逻辑问题
当你修改其优惠卷值为任意值或负数想要支付的时候,会显示支付失败,或者金额有误等一些提示,可能这个时候,你会选择放弃,但是当你点开个人中心的时候,点击订单详情,如果存在这个逻辑问题,那么此时在你刚刚修改优惠卷金额后点击下一步支付的时候,其实已经产生了订单,在订单的金额内,你可以看到支付金额为0,然后点击支付就可以支付成功;
这里还有一个小技巧,有可能会支付失败,但是如果你找到的这个问题是一个业务分站点,如果有自带的钱包功能,那么你就可以利用这个自带的钱包功能去支付这个订单,而不要利用其他支付类型,就可以支付成功了;
3)修改积分金额
有些网站的积分,比如你消费了多少,就可以拥有一定量的积分,这个积分可以在你付款的时候进行折扣,如果这个积分的金额没有做好校验,那么你在支付当中将积分减去的金额变成商品本身的价格,或者负数,是不是就可以产生0原购物了;
4)满减修改
我们在双十一的时候,很多会有满300减100,这种功能,我们能不能将金额修改为满101减100那?
参考案例:
看我如何成为凤凰书城最富有的用户 | wooyun-2016-0214319| WooYun.org
东吴人寿商城积分支付漏洞(一秒成就中东大土豪) | wooyun-2015-0156253| WooYun.org
锦江之星积分兑换逻辑错误(支付漏洞) | wooyun-2015-0139556| WooYun.org
新东方逻辑支付漏洞 | wooyun-2013-019761| WooYun.org
5、修改支付接口
一些网站支持多种支付的接口,微信,支付宝,还有第三方的支付工具,然后每一个接口的值不一样,如果逻辑设计不当,那我随便选择一个点击时进行抓包,然后修改为一个不存在的支付接口,如果接口的相关处理没有做到位,是不是会支付成功;
6、重复支付
淘宝,京东会有很多试用卡。一张卡可以试用一个商品,我们可以将这个试用的商品数据包多次重复提交,如果服务端没有进行严格的校验的话,就会产生很多这样的订单,这时候,我们将这个商品退掉,会怎么样?我们会不会退回很多试用卡?
实例:
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2012-05173
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2011-03009
7、最小支付和最大支付
1)最小支付
很多测试人员在测试漏洞的时候,往往会将金额修改为0.01或者负数,但这这样会很容易错失掉一些潜在的漏洞,比如一些网站有金币或者积分什么的支付的时候可以用这些来支付,10元等于100积分,50元相当于500积分,这个问题如果你在充值的时候将金额修改为0.01和负数会显示支付失败,但是如果你修改金额为1元,那么支付就会成功,也就是说1可以购买任意积分了?
其实你在测试的时候,就会发现,1元对应10积分,如果你修改0.01,那么对应的积分就是null,所以会显示失败,而当你修改为1元支付接口时存在的,其后面积分数为其他金额的积分,然后跳转过去支付就会以1元购买到比它多得多的积分,也可以时任意积分;
2)最大支付
一般在开发当中,商品的金额都会用int型来定义,最大值2147483647,我们尝试修改为2147483648,看看是否能造成整数的溢出,有可能支付状态异常,从而导致支付成功;
8、越权支付
这个问题很早之前就有了,现在很少存在这类问题,在支付当中会出现当前用户的ID,比如ID=1,我们将ID改为2,如果没有加以验证,我们是不是用用户2的钱支付了用户1买商品的钱;
实例:奇安信攻防社区-一次信息泄露到越权支付的实战
9、无线次试用
一些网站的一些商品,比如云系列产品支持试用,试用时期一般为7天或者30天,一个账户只能试用一次,试用期间不能试用,但如果这个试用接口没有做好分配,那么很容易产生漏洞,比如支付的时候它的URL后面的支付接口为3,那么此时就会调用购买支付接口,但是由于你本身这个产品就是试用的,其相应值绑定了这个试用的产品,那么金额肯定是0,那么最后点击支付,你就可以看到支付成功,试用成功,又重复的试用了一次,然后他们的使用时间会累加到一起,这就导致了可无限制购买任何产品了;
10、线程并发问题
多线程并发问题就是没有实时的处理各种状态所导致的问题,比如很多平台都有自家的钱包,而这个钱包是一个迷你钱包,这个钱包作用也仅是用于当前这个平台网站,再提现的时候,没有做任何的验证码或者校验机制,只要输入金额就可以体现,并且是秒到账,如果是什么负数,修改金额都测试了,不行的话,那你就可以实试一试多线程并发问题,体现的时候进行抓包,比如我现在钱包内有0.1元,那么按照每提0,01元可以提10次的话,也就是发送10次进程,但是利用这个问题可以达到多打几次成功的进程,体现时进行抓包,然后把数据包发送到BurpSuite工具的Intruder当中,进行批量发送12次,然后可以看到成功体现12次,也就是0.12元,从这里就可以看出这个问题的危害了,当然此时账户的金额肯定是为负的了,如果把这个提现金额变大,那么这多提现的金额可不是闹着玩的。
当然,多线程也可以在其它功能处进行测试,比如我之前讲到的试用商品问题,就可以通过多线程进行多几次的使用,比如利用积分总换礼品,一个账户只能进行总换一次,利用这个问题,可以多几次总换,一些转账功能,提现功能,购买功能等等很多。
支付逻辑漏洞的学习就暂时到此结束,后面有更对实操案例再来分享给大家(*^▽^*)