CyberStrikeAI 新增视觉分析 MCP:给 Agent 装上「眼睛」
适用版本:v1.6.31 及以上
功能入口:内置 MCP 工具analyze_image
一、为什么需要这个能力
渗透测试和攻防演练里,大量关键信息并不在 JSON 响应体里,而在界面上:登录框旁的图形验证码、WAF 拦截页、后台报错截图、Burp 里截到的异常页面、架构图上的网段标注……
CyberStrikeAI 的 Agent 原本只能处理文本和工具输出。遇到 PNG、JPEG 这类二进制文件,read_file 读出来是一堆乱码,模型无从理解。测试人员不得不自己识图、手工填验证码,再把文字结果贴回对话——自动化链条在「看图」这一步断掉了。
v1.6.31 引入的 视觉分析 MCP(工具名 analyze_image),补的就是这一环:Agent 可以调用独立的 Vision 模型,把服务器上的本地图片转成结构化文字摘要,再继续走后续的 HTTP 重放、逻辑漏洞验证、报告整理等流程。
二、设计思路:不是把主模型换成多模态
这里有一个容易误解的点:analyze_image并没有让对话主模型直接「看见」图片。
实际架构是三层分离:
| 主 Agent 模型 | openai 配置里的文本模型) |
analyze_image MCP 工具 | |
| Vision 模型 | config.yaml → vision 段,可与主模型不同厂商、不同 API |
图片字节只在单次 VL 请求中出现,返回给 Agent 的是纯文本(路径、预处理信息、Summary)。对话上下文里不会堆积 Base64 图片,Token 消耗可控,长会话也不会因为几张截图而撑爆上下文。
预处理管线会在调用前自动处理图片:超过 5MB 拒绝、长边超 2048 像素则缩放、必要时 JPEG 压缩到 512KB 以内;小图且尺寸合规时可原图直传,保留验证码细节。这些参数均可在配置里调整。
系统提示词也已内置识图指引:遇到截图、验证码、登录页配图时优先调 analyze_image,不要对二进制图片使用 read_file。多代理模式下,analyze_image 默认在常驻工具白名单里,子任务委派时也会提示携带图片路径。
三、如何启用
方式一:Web 界面(推荐)
登录 CyberStrikeAI Web 控制台 进入 系统设置 → 基本设置 → 视觉分析(analyze_image) 勾选「启用视觉分析工具」 填写 Vision 模型名(如 qwen-vl-max、gpt-4o等,取决于你的 API 网关支持)API Key / Base URL 可留空,自动复用 openai段的配置;也可单独指定点击 保存并应用——写入 config.yaml并热注册 MCP 工具,无需重启
方式二:直接改配置文件
vision:
enabled:true
model:qwen-vl-max# 必填
api_key:""# 留空则复用 openai.api_key
base_url:""# 留空则复用 openai.base_url
provider:# 留空则复用 openai.provider
max_image_bytes:5242880# 原始文件上限 5MB
max_dimension:2048# 长边缩放像素
jpeg_quality:82
max_payload_bytes:524288# 编码后送 VL API 上限
detail:auto# low | high | auto
timeout_seconds:60
enabled: true 且 model 非空时,启动日志会出现:vision: analyze_image 工具已注册。
四、怎么用
4.1 对话里上传图片
在 Web 对话页上传 PNG/JPEG 等图片,文件会保存到 chat_uploads 目录。用户消息里会出现类似:
📎 captcha.png: /path/to/chat_uploads/xxx/captcha.png
Agent 识别到附件路径后,会自动调用:
{
"path": "/path/to/chat_uploads/xxx/captcha.png",
"question": "只输出验证码字符,不要空格和解释"
}
工具返回示例:
## Image analysis
- **path**: /path/to/...
- **preprocess**: passthrough 120x40, image/png, 3KB (original 3KB)### Summary
a7K9m
Agent 拿到字符后,可继续构造带验证码的登录请求,完成原本需要人工介入的一步。
4.2 工具链产出的截图
扫描、HTTP 探测、WebShell 文件读取等 MCP 工具若将页面保存为本地 PNG,Agent 同样可以对产物路径调用 analyze_image。典型链路:
HTTP 工具抓取登录页,保存 login_page.pnganalyze_image识别表单字段、CSRF Token 位置、错误提示文案Agent 据此调整 Payload 或判断 WAF 规则
4.3 手动指定分析重点
question 参数可选,用于收窄模型注意力。除验证码外,常见写法:
「列出页面可见的输入框 name 属性和按钮文字」 「报错信息原文是什么」 「架构图中各网段的 IP 段和箭头关系」 「是否存在 SQL 报错、路径泄露等敏感字样」
留空时,模型会按授权安全测试场景做通用描述(可见文本、表单、按钮、错误信息、技术栈线索)。
4.4 多代理协作
Deep / Supervisor / Plan-Execute 模式下,主代理可把「识读某张截图」委派给子代理。在 task description 里写清图片绝对路径和期望输出格式(例如「只输出 4 位数字验证码」),子代理会按路径调用 analyze_image,结果以文字形式回传,主代理继续编排后续步骤。
五、典型应用场景
5.1 图形验证码辅助(最常被问到的场景)
适用:4–6 位字母数字混合、简单算术验证码、背景干扰较少的传统图形码。
流程:
用 HTTP 工具或脚本从 /captcha接口下载图片到本地Agent 调用 analyze_image,question设为「只输出验证码字符」识别失败则刷新验证码、重新下载、再次识图(系统提示已内置此策略) 将识别结果填入登录/注册/找回密码请求
边界:滑块验证、点选文字、行为轨迹、Google reCAPTCHA 等不在单次识图能力范围内。这类验证码依赖交互和行为特征,不应指望 analyze_image 一次搞定——Agent 会提示改用人工介入或其他测试路径。
内置 prompt 对验证码类问题会自动追加约束:仅输出字符序列,看不清则明确说无法识别,避免模型「编造」一个看起来合理的答案。
5.2 登录页 / 后台 UI 结构还原
黑盒测试里,前端 JS 混淆或动态渲染会让 HTML 源码不完整。对渲染后的页面截图识读,可以快速提取:
可见表单字段与按钮文案 隐藏的二次验证入口 「测试环境」「debug 模式」等环境标识 版本号、框架指纹(如 Django debug page 特征)
Agent 不必逐行读 minified JS,先看「长什么样」,再决定抓包还是目录扫描。
5.3 报错页与 WAF 拦截页
SQL 注入、SSRF、路径穿越测试中,阻断往往以图片化的错误页或自定义拦截页呈现。截图识读能直接提取:
数据库类型与版本片段(MySQL、Oracle 报错) 内部路径、堆栈片段 WAF 厂商特征(如「您的请求已被拦截」+ 请求 ID)
比人工逐张看图再打字快,也比把整页 HTML 塞进上下文更省 Token。
5.4 漏洞报告与架构图辅助
项目协作场景中,测试人员上传的报告配图、网络拓扑图、权限矩阵截图,Agent 可提取图中的 IP、域名、角色名称,写入项目黑板(upsert_project_fact),供后续会话复用——避免「这张图的信息只存在于某个人的聊天记录里」。
5.5 与 Burp 插件联动
CyberStrikeAI 提供 Burp Suite 插件,可将请求/响应上下文同步到 Agent。配合视觉分析,可对 Burp 中保存的响应截图、Decoder 里的图片响应做结构化解读,缩短「看到异常 → 理解异常 → 构造 PoC」的周期。
六、安全与合规提醒
启用视觉分析后,图片内容会发往 Vision API 配置的上游(可能是公有云 VL 服务)。在涉及真实客户数据、内网拓扑、未脱敏漏洞详情的环境中,请注意:
使用自建或可信 API 网关,或保持 vision.enabled: false上传前评估图片是否含敏感信息 验证码识图仅用于已授权的测试目标,遵守相关法规与项目 scope
CyberStrikeAI 的定位是授权安全测试辅助,视觉能力同样受此约束。
七、小结
analyze_image 解决的不是「让 AI 更炫」,而是打通自动化测试里长期存在的一个断点:Agent 能读文本、能调工具,但读不懂图。
通过 MCP 工具 + 独立 Vision 模型 + 文本摘要回灌的设计,CyberStrikeAI 在不大改主模型、不膨胀上下文的前提下,把截图、验证码、UI、报错页纳入了可编排的测试流程。对日常 Web 逻辑漏洞挖掘、登录态获取、信息收集整理,这是实打省人工的一步。
相关文档
项目仓库:CyberStrikeAI 视觉分析配置说明: docs/VISION.md多代理与工具白名单: docs/MULTI_AGENT_EINO.md