最近闲余时间开始在 SRC 应急响应平台和 补天、火线、漏洞盒子 等第三方漏洞平台挖掘漏洞赚点外快,一开始还算运气好尝到了一点小甜头:
但是面对 SRC 这类可能被几百名白帽子同时挖掘过的系统,想要持续挖掘到遗漏的漏洞难面显得十分吃力、甚至说黔驴技穷了……但是发现正是这种“手足无措”的处境,才会让自己去加深一些曾经自认为“熟悉”的漏洞的理解并进一步掌握对应新的挖掘技巧(金钱的力量很强大…)。
同时自己也开始四处搜刮学习各路 SRC 或众测大神公布的为数不多的挖洞的奇淫技巧(毕竟是赚钱的手艺,不乐意分享也人之常情…),本文主要记录擅长逻辑漏洞挖掘的月神大佬分享的关于支付业务的一些逻辑漏洞挖掘技巧。在此先说明一下本文基于 B 站月神两个分享视频的总结:
有兴趣的读者可以到 B 站学习下以上月神大佬的分享视频。
假如你手头有一张华住 APP(举例子而已)的 200 元酒店优惠券,你想象过以下场景吗:
实践证明,以上发起多个支付页面的情况,大概率能薅羊毛!下面来了解下。
先直接看月神的 PPT 简述了该漏洞:
大家都知道有些软件推出了新用户的会员签约功能,新的用户首次签约付费时能以低价购买会员,这个时候就尝试想白嫖多个月的低价会员了。于是开始第一次测试——使用支付宝打开签约界面,然后使用微信也同时打签约界面,然后再依次支付,支付后系统提示,无法重复签约。
我想难到系统有检测?舍不得孩子套不到狼,于是申请个新号再次进行测试:
也就是说服务器虽然校验了同一新用户不能同时多次低价签约,但是对于新用户同时发起的多个支付签约页面的请求,服务器没有校验解约后再次签约的情况,导致成功白嫖!以上的一个业务逻辑流程大致如下图:
会员升级的业务场景漏洞是上述签约漏洞的一个延申思路,同样也先拿月神的 PPT 介绍下:
该业务场景的漏洞同样很好理解:
以上两种业务场景都是基于发起多个支付页面,导致服务端的校验逻辑被绕过,但是该思路还不仅仅局限于上述两种业务场景。
下面再来看看一个业务场景:
很好理解,使用优惠券创建订单后进入支付宝支付界面,此时返回购物 APP 尝试关闭订单并让系统退回优惠券,接着返回支付宝把刚才的订单支付了……此时则有可能既享受了优惠下单,账户中的优惠券又还没花掉!
这个指的是使用 Fiddler 抓包工具拦截携带了优惠券的订单支付请求,并在客户端多次点击、生成多个支付请求后再一块放行,形成并发请求,此时将可能导致成功使用同张优惠券进行多次下单!
来看一个案例,其并发测试场景为:每天或是每个活动只能领一次,或是获取一次礼品等。比如以下活动,每人每天只能拆一个福袋:
Fiddler 拦截拆开福袋的请求,选择数据包,敲击键盘R,复制数据包(具体的 Fillder 并发数据包操作可参见:Fiddler – 并发):
批量选择数据包,点击 GO 放行:
此时发现漏洞,可同时拆取多个福袋:
同样以 Fiddler 做测试工具,并发测试主要测试场景:签到、每天领积分等,测试是否并发发送请求服务器可多次响应。
1、先进入对应签到领取积分页面,然后在 Fiddler 按 F11 开启拦截数据包:
2、点击签到触发请求:
3、复制上面签到请求,鼠标选择请求包,按下 r 快捷键复制请求:
4、全部选择,点击 GO 一并发送:
5、查看服务器响应,若全部响应 200,则查看页面签到分数是否出现多倍,若出现多倍则漏洞存在:
很多平台有自家的钱包,而这个钱包是一个迷你钱包,这个钱包作用也仅是用于这当前一个业务平台网站,在提现时,没有任何验证码或者校验机制,只要输入体现金额就可以提现,并且是秒到账,如果什么负数,修改金额都测试过了都不行,那么你就可以试试多线程并发问题,提现时抓包:
如果把这个提现金额变大,那么这多提现的金额可不是闹着玩的。综上也可以看到并发测试在日常渗透测试过程中举足轻重的作用,它适用于多个业务场景且危害巨大!
【注意】利用抓包工具进行并发操作时,使用 BurpSuite 的 intruder 模块来进行并发,相对于使用 Fiddler 来并发而言有个弊端,就是 Fiddler 可以同时拦截多个客户端发送的相同请求(客户端多次点击提交按钮即可)然后一并放行,这对于客户端做了时间戳、签名防重放机制的业务功能来说是就十分重要了!
支付逻辑漏洞还有很多场景,下面再继续介绍几个。
1、四舍五入
使用低于服务器能识别的最小单位,比如服务器只能识别到 0.01 元,你支付了 0.019 元,有可能就四舍五入给你充了 0.02 元,那么恭喜你成功白嫖了 0.001 元的巨款:
在测试某款金融软件时,看了很多功能,逻辑都很严谨,在处处碰壁即将要放弃的时候,寻思试一下钱包吧,虽然感觉不太可能,但是梦想得有,万一实现了呢。于是提现时候试了一下负数,如下将下面参数中 amount 参数的之由 1 改为 -1,结果真的成功了:
从图片中可以看出,负负得正,于是提现后钱包就多了相应得金额,如果被非法分子利用的话就拿去买东西或者直接提现了!
1、找到了充值的功能点进行测试,先输入金额,进行抓包修改,这里我改成了 2147483650,然后放行:
2、然后我们就扫码进行了付款操作,只支付了 2 元(到 48 的时候是 0、49是1、50 是2),然后看一下不可思议的余额:
也就是说我只付款 2 元就成功充值 2 亿多!!!!
本文只介绍几种自己觉得比较新鲜的思路,其他不再展开了,可以去看看别人总结的其他思路:
允许我此处引用月神的两段话作为本文的结尾:
有时候你想到了一个奇葩逻辑,会通杀很多 APP(我用了一个简单的支付逻辑在 4 家 SRC 每个洞都讹到了高危)所以逻辑漏洞虽然看似简单,如果奇葩也能通杀。我的挖掘思路就是拿到包后,先随便测,从登陆,资料评论这些简单的功能都过一遍,挖到低危不要紧,挖到了就是给自己建立了信心,没白挖。
然后简单功能过了一遍后,开始细扣每个功能例如支付这种容易出高危严重的地方可以先看一下,把自己积累的思路过一遍,比如先充几块钱,然后并发提现。或者充值 5 元后,用 5 块钱并发支付多个 5 元的订单,这个相比其他支付漏洞的出现率还是多一些的。最重要的是想别人想不到的,如果是小白,可以学习一些常见的思路,然后自己找些网站来测试,我给的建议就是别学太多,入门就行,剩下的自己在实践中悟,这样就不会被常识束缚住。不然挖逻辑漏洞时太容易就被已经掌握的常识所束缚了。