作者介绍文章
https://mp.weixin.qq.com/s/_P6OlL1xQaYSY1bvZJL4Uw
验证码识别插件安装:
插件下载,安装等。不进行表述。
插件中有使用百度API或其他打码平台的介绍,但都是付费的,本文主要介绍基于此插件配合ddddocr进行本地或自建平台进行免费识别。识别精准度依赖于ddddocr项目。
验证码识别环境部署
使用说明
原文中使用`codereg.py`在本地启动http服务,import ddddocr库后进行的本地识别。
但我手头电脑是M1芯片的MBP,无法直接使用,需要自行编译onnxruntime,且每次使用的时候都需要额外开启一个步骤,较为繁琐,所以尝试将服务部署在VPS上。
ddddocr官方仓库内给出了api_server的例子,也支持编译成docker镜像对外提供服务,故此处直接在VPS上启用相关服务。
默认的api_server启动使用的命令监听对全网开放,且没有授权,可将命令改为`docker run -d -p 127.0.0.1:9898:9898 ocr_server:v1`,然后在前端套一个nginx后提供域名、https及basic认证授权对外提供服务(也可以接入api网关,依赖api网关的鉴权对外提供服务)。
完成全部部署后,可尝试访问`http(s)://your-domain.com/ping`,验证服务是否部署成功。部署成功的服务会访问PONG字符。
正式使用
burp打开,找到需要识别的验证码的HTTP请求,重放到验证码识别插件内(如果看history请求,注意在filter setting里面勾选image的MIME type):
此时在插件内,在验证码模块即可拿到相关信息,点击获取验证码验证插件获取是否正常,如下图,已成功获取验证码为6597:
在接口URL地址上填写上面的环境部署阶段的接口地址`http(s)://your-domain.com`,Request template的内容为如下:
POST /ocr/b64/text HTTP/1.1
Host: your-domain.com
Connection: close
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: none
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Content-Type: application/x-www-form-urlencoded
Content-Length: 55
<@BASE64><@IMG_RAW></@IMG_RAW></@BASE64>
其中`/ocr/b64/text`为api_server暴露出来的URI地址,body内容保持不变。
尝试进行识别,看识别是否成功,多次获取可进行多次识别:
验证码已经识别完成,余下的内容就是在intruder选择Pitchfork模式进行验证码爆破了。此处需要注意cookie与验证码的对应性,如果没有验证码cookie,靠SESSION ID识别则只能进行单线程爆破。
其他
依据ddddocr项目的说明,该项目也支持简单的滑块验证码和点击验证码的识别,但这部分的返回值应该是在burp内不好处理,且我看插件源代码内未进行此部分代码的编写,建议对于这部分验证码可以考虑编写python脚本的方式进行爆破,就不放在burp内进行处理了。
发表回复