e盾网络验证源码_capatch-killer+机器学习识别验证码

3ce0e47637a216ff694334d0af2ddebb.png

申明:本文仅供交流学习使用,请勿用于非法用途,本文仅供交流学习使用,请勿用于非法用途,本文仅供交流学习使用,请勿用于非法用途

背景:渗透测试过程中,我们经常会遇到对存在验证码的表单进行爆破,为了很好的解决这个问题,花了两天时间研究了一下,算是找到了很好的解决方案,在这里总结一下过程,避免读者后续遇到“坑”。

首先还是感谢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

当然,我这种方式是最好的,因为免去打标签(打标签就是给验证码的文件名写上验证码的内容,好让机器学习)的过程,如果你没有生成验证码的源码,那么你就需要用爬虫把验证码采集下来,然后手工或者用打码平台打标签,生成3000个标签后,运行verify_and_split_data.py,会自动分好训练集和验证集,然后运行train_model.py,就可以开始训练了

c075be0b319b011b82e76b759ffb4bd2.png

看到上图的红框处说明用的GPU 在机器训练,用cpu比较慢。

7e35acb512c8e84df407023db0f2e1e3.png

我大概跑到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

点击获取就可以获取验证码,点击识别就可以识别结果,识别结果我们选择json匹配,这里value值就是识别结果,可以看到这里获取了几次,都是识别正确了。下面爆破登陆试试

6640cdd909a0c5736050cdd55a954eb6.png

设置过程看这篇文章: 使用burp插件captcha-killer识别图片验证码

效果:

8e9447b8a7bfa3413a61e65142eec0f1.png

这里爆破了1536次,验证码100%识别正确。爆破也可以用多线程。可以去挖src了。

QA:

Q1:如果我要训练别的风格的验证码怎么弄?
A1:最正确的步骤就是,修改sample_config.json 图片尺寸为你要训练的验证码的尺寸,删除model文件下之前别的模型,修改webserver_recognize_api.py 中的代码如下图,保证让你传进来的图片和模型里面的尺寸一致,避免报错,因为训练好的模型,即使风格一致,如果识别时尺寸不一致也会报错。

c9eb1a78ac8a2dd62c69ffe3319c2ad9.png
Q2:训练数据怎么弄?
A2:1:首选找到相同风格的源码,直接用源码生成,
2:用爬虫+自动打码平台(人肉识别)保存训练数据。
Q3:如何提高识别率:
A3: 经过我的实践:图片的大小很重要,尺寸太低容易降低识别率。最好尺寸是大于等于100*60的,我们可以把验证码保存成这个大小,然后训练数据多一点,可以解决这个问题。

如有其他问题,欢迎私我,一起讨论交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值