图形验证码绕过新姿势之深度学习与burp结合

  • A+
所属分类:安全工具 安全文章

点击上方蓝色文字,关注我们


本文由团队大佬miniboom总结编写

01

应用场景

在平时渗透测试时,经常会遇到类似这样的场景:

图形验证码绕过新姿势之深度学习与burp结合
图形验证码绕过新姿势之深度学习与burp结合

如果验证码不存在绕过漏洞,我们想爆破用户名或者密码,又必须填写正确的验证码,这时候该怎么处理呢?

这里首先感谢亮哥帮助和思路。推荐了使用cnn+tensorflow的方法对同样类别的验证码进行训练和识别,然后调用burp的插件对识别接口的调用和用于实际中的爆破。

现在也有对图形验证码识别的工具,比如BAT和其他的公司OCR,但是在批量爆破中免费次数不够,不能白嫖就失去了意义。而且调用别人的接口没有自己的记忆,还要给钱,就显得很没有牌面。

这里专门针对图形验证码无法绕过的情况,打造属于自己的一套验证码识别系统,保留系统记忆,帮助我们后续渗透。

02


cnn_captcha安装和使用


推荐使用cnn_captcha训练库和captcha-killer的burp插件。选择的理由看工具的readme大概就清楚了。

cnn_captcha介绍截图

图形验证码绕过新姿势之深度学习与burp结合

captcha-killer只提供对识别接口的调用,不识别图形验证码,实用,灵活。

图形验证码绕过新姿势之深度学习与burp结合

cnn_captcha安装

环境:python3.7

最好有独显的电脑,CUP识别会比较慢(不一定要买带有显卡云服务器,后边会说如何把家用电脑变成云服务器)

将项目clone下来之后,我们首先要对requirments.txt进行修改,参考在下图。

在大多数情况下,直接pip install -r requirments.txt都会有各种安装错误的情况。

注意这一点,如果是使用带显卡的机器跑,建议将tensorflow-gpu==1.15.3,如果不是,直接填入tensorflow==1.15.3即可。

图形验证码绕过新姿势之深度学习与burp结合

然后使用进行安装。

pip install -r requirments.txt-i                   http://mirrors.aliyun.com/pypi/simple/

这里注意一下,如果云服务器配置一般,安装这一步最好不执行,建议在有足够内存的电脑中操作(比如自己的电脑)。我的是2G内存机器,在安装这一步就已经出现了由于内存吃紧,而无法进行下一步的情况。

图形验证码绕过新姿势之深度学习与burp结合
图形验证码绕过新姿势之深度学习与burp结合
图形验证码绕过新姿势之深度学习与burp结合

安装好以后,我们首先开始本地训练,有关项目的详细目录以及各个模块的用法,参照github项目随便看一看就好。

创建训练集

一开始,由于我们没有训练集给系统使用,所以首先利用项目的gen_sample_by_captcha.py生成训练集,具体生成的配置表见conf/captcha_config.json

执行下面代码:

python3 gen_sample_by_captcha.py

会在sample/origin/出现很多这样的图形验证码。

图形验证码绕过新姿势之深度学习与burp结合

创建新项目

在创建新项目之前,我们先要看下conf/sample_config.json

图形验证码绕过新姿势之深度学习与burp结合

将需要修改的部分进行修改就行,一般我主要是修改各个地方的dir,图片尺寸,验证码字符个数。其他选项看一看就可以了。

验证和拆分数据集

这部分主要是做两件事情,验证图片是否可以打开,以及把训练集的图片按照19:1的比例,分别拆分成训练集和测试集,用训练集训练好之后的模型来测试集里进行验证,保证之前没有被训练过。

这里根据上边的表中origin_image_dir,train_image_dir,和test_image_dir

在sample目录下创建origin、train、test三个目录。然后执行

python3 verify_and_split_data.py

有以下提示就说明执行成功了,再次打开origin,会发现里面是空的。

图形验证码绕过新姿势之深度学习与burp结合
图形验证码绕过新姿势之深度学习与burp结合

开始训练并验证

做好以上,我们就可以进行训练了。

python3 train_model.py

然后可以泡杯茶,慢慢等它跑完,我的机器全部跑完大概花了40分钟,2w多次。准确率会随着不同样本集的训练次数的增加而不断增加。

以下是搜集了某银行的验证码,跑了1810多次,成功率接近了100%。

图形验证码绕过新姿势之深度学习与burp结合

验证的话,就执行这个脚本,对测试集的图片进行测试,并输出准确率。

python3 test_batch.py

启动webserver,提供识别API

这里我们对webserver_recongniza_api.py文件增加一个路由方法

图形验证码绕过新姿势之深度学习与burp结合

启动webserver,这里先进行本地脚本验证结果,在文章最后我会解释为什么需要新增加base64接口。

python3 webserver_recognize_api.py

接口为http://127.0.0.1:6000/b

再执行,识别结果是一个json

python3 recognize_local.py

图形验证码绕过新姿势之深度学习与burp结合

到这里,cnn_captcha的使用流程是告一段落了。

03


capcha-killer的安装和使用


https://github.com/c0ny1/captcha-killer/releases

在这里下载,然后安装,使用也很简单。

图形验证码绕过新姿势之深度学习与burp结合

使用过程详情见这里:

https://gv7.me/articles/2019/burp-captcha-killer-usage/

04


cnn_captcha和captcha_killer配合使用


我们调用http://127.0.0.1:6000/base64,然后对图片进行base64的url再编码格式处理。所以的操作都很简单,只需要按照captcha的教程一步步走下去就行。

我没有搭建本地环境进行测试,这里盗用下亮哥的图,给大家展示下最终效果。(注意:这里不同的是,图中的是http://127.0.0.1:5000/base64,而我们的是http://127.0.0.1:6000/base64,可根据自己喜欢更改端口。)

图形验证码绕过新姿势之深度学习与burp结合

至此,初步的利用深度学习框架来替我们绕过验证码的过程就是这些,当然,这里只是初步进行演示,验证码难度不高,所以训练时间不需要多长。

在实际渗透测试中,我们如何把这一套东西用于实战,以及如何把自己电脑变成云服务器,整套系统该如何部署,又如何远程唤醒家用电脑,不至于家用电脑为了变成服务器而24小时不关机。

对于难度识别度比较高的验证码,通用的验证码库训练集怎么做,该如何打标签等,我会后续写出。

比如,这些种类的验证码,大部分的验证码难度都是正常的:

图形验证码绕过新姿势之深度学习与burp结合

哦,对了。

在这里我解释下为什么需要在cnn_captcha的webserver_recogniza_api.py增加一个base64的接口。

这是有坑点在的,原因在于cnn_captcha这个项目本身和渗透测试无关,本意是给写爬虫的开发人员通过验证码这一关的,也就是说,cnn_captcha的接口本身是给代码层进行调用的。原来的webserver_recongniza的代码中接收图片的形式是以接收上传文件的形式来执行。

而我们使用的captcha_killer,在burp中发送出的格式和本地recogniza_local.py发送的格式并不一致,如下图:

图形验证码绕过新姿势之深度学习与burp结合

这个坑,踩得我丝毫没脾气,当然,按照我上面的做法来,这个坑就不会出现,已经被我踩过了~


重要提醒!

团队现开了微信交流群(每日资源分享),团队语雀知识库(每日积累)及知识星球(小范围精华内容传播及问答),欢迎加入(微信群通过公众号按钮“加入我们”获取联系方式):

图形验证码绕过新姿势之深度学习与burp结合
图形验证码绕过新姿势之深度学习与burp结合

         往期经典:            

深入探究浏览器编码及XSS Bypass

“最后”的Bypass CDN 查找网站真实IP

漏洞笔记|记一次与XXE漏洞的爱恨纠缠

内网渗透 | 域内权限解读

MSF 下域内渗透

HVV前奏|最新版AWVS&Nessus破解及批量脚本分享

移动安全(一)|Android设备root及神器Xposed框架安装

移动安全-APP渗透进阶之AppCan本地文件解密

Android抓包总结-HTTPS单向认证&双向认证突破


  安

图形验证码绕过新姿势之深度学习与burp结合

扫描二维码 |关注我们

微信号 : WhITECat_007  |  名称:WhITECat安全团队


本文始发于微信公众号(弥天安全实验室):图形验证码绕过新姿势之深度学习与burp结合

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: