+--------------------------------------------------------------+
**+病毒肆虐,首先致敬一线的医护人员,逆行的前辈们。加油!+
**
+--------------------------------------------------------------+
阅读适合对象
三至五节:个人,漏洞挖掘复现
六节至下篇:风控部门,验证码对抗
一、背景介绍
在传统安全界,验证码是很少有白帽子会去关注的一个点,但作为任何一个平台,特别是电商平台,由于黑产作恶手法日益猖獗,业务安全带来的损失,很可能会超过一个OWASP top 漏洞带来的危害。验证码作为抵挡黑产的第一道防线,若轻易失守,则溃不成军。
二、测试时间
三、详细过程
1.场景复现
众所周知,滑动验证码是国内厂商的风控标配,当点击登录后弹出的滑动验证码。(应SRC要求,高度打码,实属抱歉)
在点击滑动验证码的"刷新"按钮后,验证码的缺口位置改变,而验证码背景图却不发生变化。至此,直觉告诉我,这里一定存在问题。
(类似如下这种)
2.漏洞猜想
猜测该厂商的数据库里,验证码的数量级不大,如果我们获取到所有的滑动验证码缺口背景图去重后,对每张验证码名字遍历,进行打标记。
形成一个【验证码图片名**:**滑块滑动的正确位移】的标记列表,如[[‘A.jpg’,342pix,[‘B.jpg’,456pix],……],那么,以后我们遇见滑动验证码,不需要做任何图片二值化、灰度处理等,直接根据图片名字,和本地标记的列表数据库对应,即可知道需要滑动的位移。验证码的轻易失效,能带来的直接危害有爆破撞库、批量注册登录。
3.漏洞POC
开始动手:
① 寻找获取验证码的js接口,下载验证码缺口背景图(目的:提取缺口背景图名)
找到如下类似URL请求,该接口能够获取到验证码缺口背景图bp的路径和缺口背景图的名字(xxx.jpg)。
② Requests遍历该接口,再用正则提取出参数"bp"
去重后为50个不同验证码缺口背景图
③【关键】对每张验证码图做位移标记,制作标记列表:****【【验证码缺口背景图名,正确位移】…】
由于验证码数量级很小,并且验证码的缺口背景图片名与正确位移在服务器后端存储是唯一对应关系,并且永久有效。
那我们就可以对每张验证码名字做好位移标记后,即可进行爆破。标记
的方法几种,如打码平台标记。由于数量级只有50,我们完全可以手动标记。
这里使用的方法是:使用pyppeteer自动化工具。
流程:打开官网>>>输入账号密码完登录>>>触发滑块验证>>>提取bp缺口背景图名>>>判断bp名是否本地已标记>>>【未标记:填写位移值;已标记:直接根据位移值滑动】。
a. 已标记情况
程序判断为YES,自动化百分百通过滑块验证码
b. 未标记情况
这是一个新样本未标记,工具会停留在这,则需要手动标记,输入Position位移值。
用截屏工具获取像素位移值,输入272
自动拖动滑块完成验证,并将新样本(缺口背景图名)rZDASBdsPDKiQYj4uga和位移值272作为新样本写入本地,为50个缺口背景图识别,增加1条标记数据。
经过数分钟的标记,就能拿到所有的验证码缺口对应的位移值。
此后,验证码就成了“失效”状态。
④用Python编写实现整个漏洞测试流程的两款工具:
(1)验证码图片"脱库"工具
Bughunter_captcha.py
用于证明漏洞猜想,检测验证码数量有限,是否可以“脱库”操作;
标记每个验证码,并存储到本地。
(2) 滑块自动化拖拽工具
Attack_captcha.py
在工具(1)证实猜想后,使用工具(2)自动化完成操作。
至此,完成漏洞从猜想、证实到利用的过程。提交报告后,SRC厂商视为高危,很快也修复了。完整的POC演示视频不方便打码,所以无法公开,如果有兴趣,可以在后台留言。
四、漏洞点
(1)验证码图片可遍历,通过向刷新获取验证码的js接口,不断发送get请求,可遍历出验证码数量。
(2)验证码缺口背景图名字和滑动滑块到缺口的正确位移范围,在服务器端是一一对应。即{缺口背景图名字:【正确位移值】pix}如:{XxKI30uywjm6O49Yl9M_JEz4qGA9NHkJzTt1Qyc_bg_Pnl8UZnjAJD6pmfgt7z.jpg:【347】pix})
(3)客户端获取到的验证码缺口背景图名字,和保存在服务器端的名字相同,且图片名字在服务器端永久有效。
五、漏洞说明
该漏洞属于业务安全中的验证码设计缺陷,风控策略缺陷。容易被黑产利用,进行爆破撞库,批量注册登录等。
六、写给风控部门的一些思路想法(下篇)
...三种滑块验证码样式案例
在点击验证码的"刷新"按钮后,主要会出现以下几种情况:
①[low]发现滑动验证码的缺口位置会发生变化,而图片背景内容并无改变;
②[medium]发现滑动验证码的缺口位置和图片背景内容都会发生变化;
③[high]发现滑动验证码的拖拽的滑块形状位置、缺口位置和图片背景内容均会发生变化;
推荐升级验证码至第三种样式案例使用,当然,很多师傅们会说打码平台能摆平一切,但对抗灰黑产本身就是一场不公平的战斗,如果能提升增加攻击者的成本,就达到了我们的一级目标。对于防御方而言,在业务中,如何利用验证码主动出击,达到快速准确的识别出灰黑产的二级目标,下篇再续...
技术研究总是孤独的,边缘化的东西更是如此。
一个只专注冷门渗透技巧,研究灰黑产的暗侍卫。
———冷渗透