Burp Suite 验证码自动识别插件,支持普通验证码和计算型验证码(如 3+1=?)。
┌─────────────┐ HTTP ┌─────────────┐ API ┌─────────────┐
│ Burp Suite │ ──────────── │ server.py │ ──────────── │ LLM Model │
│ 插件 │ :8899 │ OCR服务端 │ :1234 │ 本地大模型 │
└─────────────┘ └─────────────┘ └─────────────┘
| 文件 | 说明 |
|---|---|
BurpExtender.java |
Burp 插件源码,负责拦截请求、调用 OCR 服务、替换验证码 |
server.py |
Python OCR 服务端,负责获取验证码图片、调用大模型识别、返回结果 |
killcap_v1.0.jar |
编译好的 Burp 插件 |
server.py 支持两种识别模式:
OCR_MODE = "ddddocr"- 优点:速度快(毫秒级),无需额外配置
- 缺点:准确率一般,对复杂验证码效果差
- 适用:简单验证码、批量爆破、对速度要求高
OCR_MODE = "ai"
AI_API_URL = "http://127.0.0.1:1234/v1/chat/completions"
AI_API_KEY = "sk-lm-xxx"
AI_MODEL = "qwen/qwen2.5-vl-7b"- 优点:准确率高,支持复杂验证码
- 缺点:速度慢(秒级),需要本地大模型
- 适用:复杂验证码、计算型验证码、对准确率要求高
修改 server.py 顶部配置:
# 使用 ddddocr
OCR_MODE = "ddddocr"
# 使用 AI
OCR_MODE = "ai"使用 AI 模式需要本地运行大模型服务,推荐使用 LM Studio。
| 模型 | 参数量 | 显存需求 | 速度 | 准确率 | 说明 |
|---|---|---|---|---|---|
| qwen2.5-vl-7b | 7B | 8GB | 快 | 高 | 推荐首选,中文识别效果好 |
| qwen2.5-vl-3b | 3B | 4GB | 很快 | 中 | 轻量级,显存不足时使用 |
| gemma-3-4b-it | 4B | 6GB | 快 | 中 | Google 出品,英文效果好 |
| internvl2-8b | 8B | 10GB | 中 | 很高 | 识别准确率最高 |
| minicpm-v-2.6 | 8B | 10GB | 中 | 很高 | 中文识别效果极佳 |
- 显存 8GB 以下:
qwen2.5-vl-3b或gemma-3-4b-it - 显存 8-12GB:
qwen2.5-vl-7b(推荐) - 显存 12GB 以上:
internvl2-8b或minicpm-v-2.6
- 下载安装 LM Studio
- 搜索并下载推荐模型(如
qwen2.5-vl-7b) - 启动本地服务(默认端口 1234)
- 修改
server.py配置:
OCR_MODE = "ai"
AI_API_URL = "http://127.0.0.1:1234/v1/chat/completions"
AI_API_KEY = "lm-studio" # LM Studio 默认 key
AI_MODEL = "qwen/qwen2.5-vl-7b" # 根据实际模型名称修改| 平台 | 说明 |
|---|---|
| LM Studio | 推荐,GUI 界面,支持多平台 |
| Ollama | 命令行工具,轻量级 |
| LocalAI | 兼容 OpenAI API |
| vLLM | 高性能推理引擎 |
在 Burp 插件的"输出模式"下拉框中,有以下选项:
| 模式 | 说明 | 适用场景 |
|---|---|---|
| 纯整数0-9 | 只保留数字 | 纯数字验证码,如 1234 |
| 纯小写a-z | 只保留小写字母 | 纯小写验证码,如 abcd |
| 纯大写A-Z | 只保留大写字母 | 纯大写验证码,如 ABCD |
| 大小写英文 | 保留大小写字母 | 大小写混合验证码,如 aBcD |
| 小写+数字 | 保留小写字母和数字 | 小写+数字验证码,如 a1b2 |
| 大写+数字 | 保留大写字母和数字 | 大写+数字验证码,如 A1B2 |
| 大小写+数字 | 保留大小写字母和数字 | 最常见的验证码类型,如 a1B2 |
| 默认字符库 | 使用 ddddocr 默认字符库 | 不确定验证码类型时使用 |
| 模式 | 说明 | 适用场景 |
|---|---|---|
| 不识别(高级模块) | 不进行 OCR 识别 | 验证码在响应包中直接返回,配合高级模式使用 |
| 计算型验证码 | 识别数学表达式并计算结果 | 如 3+1=?、5*2=?、8/2=? |
- 查看验证码图片:先手动查看验证码是什么类型
- 选择对应模式:根据验证码内容选择合适的输出模式
- 测试识别:在 Web 监控界面(http://127.0.0.1:8899)查看识别结果
示例:
- 验证码是
1234→ 选择 纯整数0-9 - 验证码是
abcd→ 选择 纯小写a-z - 验证码是
a1B2→ 选择 大小写+数字 - 验证码是
3+1=?→ 选择 计算型验证码 - 验证码在响应 JSON 中 → 选择 不识别,配合高级模式提取
高级模式用于从验证码响应中提取额外数据(如 uuid)。
当验证码接口返回 JSON 格式时:
{"img": "base64...", "uuid": "878c633b27db4b22996ddcd9df64013b"}需要提取 uuid 字段用于登录请求。
- 数据源:选择"响应体"(从 JSON 中提取)
- 正则:
"uuid":"(.*?)" - 点击 开启高级模式
- 保存配置
| 关键字 | 说明 |
|---|---|
@killcap@1@ |
验证码 1 的识别结果 |
@killcap@2@ |
验证码 2 的识别结果 |
@killcap@3@ |
验证码 3 的识别结果 |
@killcap@4@ |
验证码 4 的识别结果 |
@killcap@5@ |
验证码 5 的识别结果 |
@killcap@x@ |
高级模式提取的数据(如 uuid) |
POST /login HTTP/1.1
Host: target.com
Content-Type: application/json
{
"username": "admin",
"password": "123456",
"code": "@killcap@1@",
"uuid": "@killcap@x@"
}当验证码识别错误时,可自动重试:
- 勾选 错误重试
- 设置最大重试次数(默认 3 次)
- 错误关键词(默认:验证码错误,验证码已失效)
访问 http://127.0.0.1:8899 可查看:
- 验证码图片
- 识别结果
- 时间戳
- 验证码类型
- 当前识别模式(ddddocr/ai)
# ddddocr 模式
pip3 install ddddocr requests
# AI 模式
pip3 install requests pillowpython3 server.py- 打开 Burp Suite → Extender → Extensions
- 点击 Add → 选择
killcap_v1.0.jar - 确认插件加载成功
在 killcap 标签页:
- OCR 接口:
127.0.0.1:8899(默认) - 验证码 URL:填写获取验证码的接口地址
- 输出模式:根据验证码类型选择(见上方详解)
- 监控设置:勾选需要监控的工具(Intruder/Repeater/Proxy)
- 点击 保存配置
在请求中使用 @killcap@N@ 替换验证码,@killcap@x@ 替换高级模式数据。
- 检查输出模式是否正确
- 尝试切换到 AI 模式
- 查看 Web 监控界面的识别结果
- 检查端口 8899 是否被占用
- 检查依赖是否安装:
pip3 install ddddocr requests
- 开启重试设置
- 检查验证码 URL 是否正确
- 检查网络连接
- 安装本地大模型(如 LM Studio)
- 修改
server.py中的OCR_MODE = "ai" - 配置
AI_API_URL、AI_API_KEY、AI_MODEL - 重启服务端
# 编译 Burp 插件
mkdir -p build
javac -source 1.8 -target 1.8 -classpath burp.jar -d build BurpExtender.java
cd build
jar cf ../killcap_v1.0.jar burp/MIT License