![3ce0e47637a216ff694334d0af2ddebb.png](https://i-blog.csdnimg.cn/blog_migrate/56a906a95b39a1540736a5a4f70c0e7b.jpeg)
申明:本文仅供交流学习使用,请勿用于非法用途,本文仅供交流学习使用,请勿用于非法用途,本文仅供交流学习使用,请勿用于非法用途
背景:渗透测试过程中,我们经常会遇到对存在验证码的表单进行爆破,为了很好的解决这个问题,花了两天时间研究了一下,算是找到了很好的解决方案,在这里总结一下过程,避免读者后续遇到“坑”。
首先还是感谢c0ny1大神 @week 写的 captcha-killer插件,为我等小白提供了大大的便利,二是感谢 nickliqian/cnn_captcha 这位大佬提供的cnn机器学习代码,我也只是在这个基础上修改源码,来完成网站验证码的适配,闲话不多说,上正餐
nickliqian/cnn_captcha 首先将源码git下来之后,安装好对应的环境,安装过程这里不在赘述,我使用的是tensorflow-gpu 1.15.3 版本。下载好源码后,打开sample_config.json 文件修改验证码的尺寸为 100*43
{
下面,我们就需要生成训练数据,这里可以用源码里面的生成,但我们后面爆破的验证码风格肯定跟这个不一致,所以我用自己的java代码生成:
import
这个生成的验证码风格如下:
![9d6a31a470d29fd6d1d0c561fc77214d.png](https://i-blog.csdnimg.cn/blog_migrate/707a06de8d424ce90fdb44515e266c23.jpeg)
当然,我这种方式是最好的,因为免去打标签(打标签就是给验证码的文件名写上验证码的内容,好让机器学习)的过程,如果你没有生成验证码的源码,那么你就需要用爬虫把验证码采集下来,然后手工或者用打码平台打标签,生成3000个标签后,运行verify_and_split_data.py,会自动分好训练集和验证集,然后运行train_model.py,就可以开始训练了
![c075be0b319b011b82e76b759ffb4bd2.png](https://i-blog.csdnimg.cn/blog_migrate/a2f7e9187dafdc251dbead8e19d05f88.jpeg)
看到上图的红框处说明用的GPU 在机器训练,用cpu比较慢。
![7e35acb512c8e84df407023db0f2e1e3.png](https://i-blog.csdnimg.cn/blog_migrate/270f0e78e3f09a54c9a315459f87e276.jpeg)
我大概跑到2740次的时候,准确率已经100%了。下面就开始测试了。
captcha-killer 的使用过程请参见这篇文章 使用burp插件captcha-killer识别图片验证码
打开webserver_recognize_api.py 文件这里我们增加一个方法,接受图片base64编码,然后机器自动识别,用来配合captcha-killer,代码如下:
@app.route
在captcha-killer的interface-panel 使用以下报文:
接口url: http://127.0.0.1:5000
POST /base64 HTTP/1.1
Host: 127.0.0.1:5000
User-Agent: python-requests/2.24.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Length: 2805
Content-Type: application/x-www-form-urlencoded
image_file=<@URLENCODE><@BASE64><@IMG_RAW></@IMG_RAW></@BASE64></@URLENCODE>
然后我们打开自己的测试网站,获取一个验证码,把数据发送到 capture-panle,最终配置如下:
![7370ac5bf11dfc48dae64c9f5d1f0081.png](https://i-blog.csdnimg.cn/blog_migrate/ee9c48f435dc2bef1d83ad898404b69b.jpeg)
点击获取就可以获取验证码,点击识别就可以识别结果,识别结果我们选择json匹配,这里value值就是识别结果,可以看到这里获取了几次,都是识别正确了。下面爆破登陆试试
![6640cdd909a0c5736050cdd55a954eb6.png](https://i-blog.csdnimg.cn/blog_migrate/91ac3f3e13d24e83af985aeac4d24ef7.png)
设置过程看这篇文章: 使用burp插件captcha-killer识别图片验证码
效果:
![8e9447b8a7bfa3413a61e65142eec0f1.png](https://i-blog.csdnimg.cn/blog_migrate/dd1f11cbaf62b60358e4de783af023d8.jpeg)
这里爆破了1536次,验证码100%识别正确。爆破也可以用多线程。可以去挖src了。
QA:
Q1:如果我要训练别的风格的验证码怎么弄?
A1:最正确的步骤就是,修改sample_config.json 图片尺寸为你要训练的验证码的尺寸,删除model文件下之前别的模型,修改webserver_recognize_api.py 中的代码如下图,保证让你传进来的图片和模型里面的尺寸一致,避免报错,因为训练好的模型,即使风格一致,如果识别时尺寸不一致也会报错。
![c9eb1a78ac8a2dd62c69ffe3319c2ad9.png](https://i-blog.csdnimg.cn/blog_migrate/d81edb86071c09e8ad54a93662c05065.jpeg)
Q2:训练数据怎么弄?
A2:1:首选找到相同风格的源码,直接用源码生成,
2:用爬虫+自动打码平台(人肉识别)保存训练数据。
Q3:如何提高识别率:
A3: 经过我的实践:图片的大小很重要,尺寸太低容易降低识别率。最好尺寸是大于等于100*60的,我们可以把验证码保存成这个大小,然后训练数据多一点,可以解决这个问题。
如有其他问题,欢迎私我,一起讨论交流。