--- name: vibe-pentest description: | AI 渗透测试:多 Agent 并行架构的 Web 应用渗透测试技能。 流程: 指纹识别 → 后台入口扫描 → API 预扫描 → 浏览器登录提取凭证(可选) → GoSpider 爬虫 → 过滤数据 → 指纹汇总 → 多 Agent 并行渗透测试 → 攻击链分析 → 漏洞证据复查 → 导出 JSON 报告。 纯黑盒测试,不依赖源码。平台无关设计,可在任意 Agent 平台创建和使用。 metadata: author: helloworld version: "1.0.21" date: 2026-07-16 --- # Vibe Pentest — 多 Agent 并行 Web 渗透测试 ## 启动前快速 Git 自更新 每次调用本 skill 时,在开始正式任务前优先执行: `python {SKILL_ROOT}/scripts/auto_update_skill.py {SKILL_ROOT} --json` 该脚本负责快速检查并同步当前 skill 项目;如果更新失败、超时、无网络、无法获取远端状态,或 `SKILL_ROOT` 目录不是 Git 仓库,直接跳过更新并继续执行用户任务,不要卡住。 如果 `git pull` 有文件冲突,脚本会自动将远端最新文件覆盖到本地冲突文件,但不会执行 `git reset --hard` 之类的全局破坏性操作。 如果自动更新结果的 `reason` 为 `updated` 或 `updated_with_conflict_resolution`,必须先重新读取主 `SKILL.md`,再继续后续步骤。 ## 启动前运行子 Agent 创建脚本 开始渗透前,在**当前项目目录**下,直接调用脚本创建Agent `python {SKILL_ROOT}/scripts/install_sub_agents.py --provider {provider} --force` 提前创建实际启用的子 Agent。 `--provider` 应根据当前智能体平台选择,例如 `qoder`、`opencode`、`trae`、`claude`、`workbuddy`、`codebuddy`,也支持自定义名称。 命令示例: ```bash python {SKILL_ROOT}/scripts/install_sub_agents.py --provider qoder --force ``` ## 启动前创建 workspace 目录 开始新任务前,必须先检查**当前项目目录**下是否已存在 `workspace/` 目录。 如果已存在 `workspace/`,先将其重命名为 `workspace_{YYYYMMDD_HHmmss}`,其中 `YYYYMMDD_HHmmss` 为当前时间戳,例如 `workspace_20260605_143025`,用于保留旧任务数据。命令示例: - **Windows (PowerShell)**: `Rename-Item -Path "workspace" -NewName "workspace_20260605_143025"` - **Linux/macOS (Bash)**: `mv workspace workspace_20260605_143025` 请根据当前操作系统选择正确的命令,若无法重命名,不得删除旧目录。 旧目录重命名完成后,再创建新的空 `workspace/` 目录,确保本次新任务的中间文件、扫描结果和最终报告都写入新创建的 `workspace/` 目录。 ## SKILL 目录结构(全部使用相对路径) ```text vibe-pentest/ ├── SKILL.md # 主 skill(整体架构、数据协议、工作流) ├── agents/ │ ├── injection-agent/ # Agent 1: 注入类漏洞正式执行规范 │ ├── auth-agent/ # Agent 2: 认证、会话、令牌与协议流正式执行规范 │ ├── file-agent/ # Agent 3: 文件系统访问、解析链与 RCE 升级正式执行规范 │ ├── api-agent/ # Agent 4: API 资源授权、对象归属与接口扩散正式执行规范 │ ├── business-agent/ # Agent 5: 业务状态机、竞争条件与真实业务影响正式执行规范 │ ├── misc-agent/ # Agent 6: 外围攻击面、协议边界与配置风险正式执行规范 │ ├── poc-agent/ # Agent 7: 基于指纹的已知漏洞 POC 验证正式执行规范 │ └── vuln-analysis-agent/ # Agent 8: 攻击链分析与漏洞证据复查正式执行规范 ├── scripts/ │ ├── run_fingerprint.py # Phase 0: Web 指纹识别 │ ├── fingerprints_rules/ # Phase 0: 指纹规则库(run_fingerprint.py 依赖) │ ├── poc/ # Phase 5 POC Agent: Nuclei YAML 格式 POC 文件 │ ├── admin_scanner.py # Phase 0.5: 后台管理面板扫描 │ ├── admin_scanner.bat # Windows 启动包装 │ ├── admin_scanner.sh # Linux 启动包装 │ ├── extract_credentials.py # Phase 2: 浏览器登录 + 凭证提取 │ ├── run_gospider.py # Phase 3: GoSpider 爬虫 │ ├── clean_targets.py # Phase 4: 数据清洗 + 域名过滤 │ ├── api_discovery.py # API 预扫描 1: 接口发现 │ ├── sensitive_extract.py # API 预扫描 2: 敏感参数提取 │ ├── deduplicate.py # API 预扫描 3: 去重与聚合 │ ├── prepare_agent_findings.py # Phase 5: 预生成 findings 骨架 │ ├── verify_findings.py # Phase 5.6: 漏洞证据复查 │ ├── generate_report.py # Phase 6: 生成 JSON 报告 │ ├── install_sub_agents.py # 安装 8 个子 Agent 定义到平台目录 │ ├── auto_update_skill.py # 启动前快速 Git 自更新 │ ├── http_test.py # ★ 统一 HTTP 发包工具 │ ├── dnslog.py # ★ DNS 回调 OOB 验证工具 │ └── deserialization_payload.py # Java 反序列化 payload 生成工具 ├── references/ │ ├── sub_agents/ # 8 个子 Agent 的可直接复制创建定义 │ ├── pentest_skills/ # 各漏洞专项测试 Skill 与 INDEX 路由 │ ├── common-paths.md # 常见后台/登录路径列表 │ ├── report-json-format.md # 最终报告 JSON 格式约束 │ ├── dnslog-usage.md # dnslog.py 用法参考 │ └── http-test-usage.md # http_test.py 用法参考 ├── report_renderers/ │ ├── generate_word.py # Word 报告渲染器 │ └── generate_html.py # HTML 报告渲染器 └── tools/ ├── gospider_downloads.json # GoSpider 多平台下载清单 ├── gospider(.exe) # GoSpider 可执行文件 └── .cache/ # GoSpider 下载与解压缓存 ``` > **注意**:所有路径均为相对路径,skill 可整体移动到任意位置使用。 ## 架构总览 ```text ┌──────────────────────────────────────────────────────────────────────────────┐ │ Main Skill Flow │ ├──────────────────────────────────────────────────────────────────────────────┤ │ Phase 0 : 指纹识别 │ │ Phase 0.5 : 后台入口扫描 - 377+ 路径探测 + 80+ 产品指纹识别 │ │ Phase 1 : 授权确认 │ │ Phase 2 : 浏览器登录 + 凭证提取 (scripts/extract_credentials.py) │ │ Phase 3 : GoSpider 爬虫 (scripts/run_gospider.py) │ │ Phase 4 : 数据清洗 (scripts/clean_targets.py) │ │ Phase 4.5 : 指纹汇总(汇总 fingerprint/admin_scan/api_discovery 到 tech_stack)│ │ Phase 5 : 生成 findings 骨架 (scripts/prepare_agent_findings.py) │ │ : 并行分发启用的渗透 Agent(按提示词指定) │ │ Phase 5.5 : 调用漏洞综合分析 Agent - 跨 Agent 漏洞组合 │ │ Phase 5.6 : 复用漏洞综合分析 Agent - 逐一审查 confirmed 漏洞证据 │ │ Phase 6 : 聚合结果 + JSON 报告导出 (scripts/generate_report.py) │ ├────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┤ │ Injection │ Auth │ File │ API │ Business │ Misc │ POC │ │ Agent │ Agent │ Agent │ Agent │ Agent │ Agent │ Agent │ └────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┘ ``` ### 需要创建的渗透 agent(按提示词指定启用) | # | Agent 名称 | 类型 | 职责范围 | 创建 Agent 定义文件 | |---|-----------|------|------|---------| | 1 | **injection-agent** | 渗透 | 负责所有注入类漏洞检测:SQLi/NoSQL/XSS(存储/反射/DOM)/SSRF/XXE/SSTI/RCE/反序列化/CRLF/XSLT/EL/JNDI | `references/sub_agents/injection-agent.md` | | 2 | **auth-agent** | 渗透 | 负责认证与会话类漏洞检测:认证绕过/暴力破解/会话管理/JWT/OAuth/SAML/密码重置绕过/验证码绕过/不安全随机数/用户枚举/OIDC/CSRF。按三阶段执行:先识别认证攻击面,无攻击面时早停;无稳定凭据时执行匿名流程分析、默认凭据检查与受控密码测试;用户提供或成功获取有效凭据后,再执行已认证深度验证。 | `references/sub_agents/auth-agent.md` | | 3 | **file-agent** | 渗透 | 负责文件类漏洞检测:路径穿越/LFI/RFI/LFI→RCE、任意文件上传、文件包含、任意文件下载、Zip Slip、SVG/CSV 注入、PHP Wrapper 利用、PEARCMD RCE、编辑器路径利用、敏感文件泄露与文件解析链风险。 | `references/sub_agents/file-agent.md` | | 4 | **api-agent** | 渗透 | 负责 API 安全类漏洞检测:未授权访问/BOLA/BFLA/批量赋值/GraphQL 深度测试/API 参数篡改/隐藏参数发现/WebSocket 安全/API 版本枚举/过度数据暴露 | `references/sub_agents/api-agent.md` | | 5 | **business-agent** | 渗透 | 负责业务逻辑漏洞检测:业务流程绕过、状态机缺陷、竞态滥用、价格篡改、优惠券滥用、库存与数量操纵,以及订单、支付、订阅等场景中的业务规则滥用 | `references/sub_agents/business-agent.md` | | 6 | **misc-agent** | 渗透 | 负责外围攻击面与协议边界安全检测:信息泄露/开放重定向/CORS/CSP/安全头/目录遍历/子域名接管/401-403绕过/Web缓存欺骗/Clickjacking/Host头攻击 | `references/sub_agents/misc-agent.md` | | 7 | **poc-agent** | POC验证 | 基于指纹识别结果,匹配 POC YAML 文件并通过 http_test.py 验证已知漏洞。指纹识别 → POC 匹配 → 发包验证 → 输出确认漏洞| `references/sub_agents/poc-agent.md` | ### 需要创建的 漏洞综合分析 agent | # | Agent 名称 | 类型 | 职责范围 | 创建 Agent 定义文件 | |---|-----------|------|------|---------| | 1 | **vuln-analysis-agent** | 综合分析 | Vibe Pentest 漏洞综合分析 Agent。固定负责 Phase 5.5 攻击链分析与 Phase 5.6 使用 verify_findings.py 脚本检查 | `references/sub_agents/vuln-analysis-agent.md` | ### 数据交换协议 所有 agent 通过 **共享文件系统** 交换数据,不依赖平台特定的消息传递: **主流程 → 渗透 Agent(输入):** ```text workspace/ ├── fingerprint.json # Phase 0 指纹识别结果 ├── targets.txt # 极简目标清单:先 base_url,再缩进列出该站点 URL ├── sessions/ # 凭证目录 │ ├── admin.json # 格式见下方 │ └── user.json └── findings/ # 输出目录(渗透 Agent 写入) ``` **主流程 → 漏洞综合分析 Agent(输入):** ```text workspace/ ├── findings/ # 已启用的渗透 Agent 已回填完成的 findings 文件 ├── fingerprint.json # 指纹识别结果 ├── targets.txt # 极简分组目标清单 └── sessions/ # 凭证目录(需要判断认证边界时读取) ``` 说明: - 骨架文件中的示例值仅用于提示字段结构,属于待回填占位内容;渗透 Agent 必须按真实检测结果覆写这些值 - `findings` 可以为空数组;如发现多个漏洞,必须在 `findings` 中追加多个对象,而不是只保留一条 - `vuln_id` 按各 Agent 前缀递增编号,例如 `INJ-001`、`INJ-002`、`AUTH-001`、`FILE-001` **sessions/{username}.json 格式(凭证提取脚本输出):** ```json { "target": "...", "capture_time": "...", "roles": [ { "role_label": "admin", "cookies": [{"name": "...", "value": "...", "secure": true, "httpOnly": true}], "auth_cookie_string": "key1=val1; key2=val2", "tokens": [{"type": "localStorage", "key": "token", "value": "eyJ..."}], "jwt_analysis": [{"payload": {"sub": "...", "role": "admin"}, "expires_at": "..."}], "auth_headers": [{"name": "Authorization", "value": "Bearer eyJ..."}], "storage": {"localStorage": {}, "sessionStorage": {}} } ] } ``` **report_{timestamp}.json 格式(Phase 6 最终输出):** ```json { "report_meta": { "report_id": "VUL-2026-XXXXX", // 唯一报告 ID,格式 VUL-年份-5位随机大写字母数字 "generated_at": "2026-05-15 02:00:00", // 报告生成时间 "tester": "vibe-pentest-agent-v1", // 固定值 "scope": { "target_url": "http://target:port/", // 测试目标 URL "tech_stack": ["java", "spring_boot_3", "halo_cms"] // 指纹识别结果 }, "test_accounts": [ // 测试账号列表 {"role": "管理员", "username": "admin", "password": "***"} ] }, "summary": { "total": 7, // 漏洞总数,必须等于下面各 severity 数量之和 "critical": 0, // 严重 "high": 1, // 高危 "medium": 1, // 中危 "low": 4, // 低危 "info": 1 // 信息 }, "vulnerabilities": [ { "vuln_id": "VUL-001", // 按 severity→confidence 排序后从 VUL-001 递增(严重优先) "title": "漏洞标题 - 简述路径和问题", "type": "information_disclosure", // 英文类型,见下方 type 枚举表 "type_zh": "信息泄露", // 中文类型,同一 type 始终使用同一表述 "severity": "high", // 枚举: critical, high, medium, low, info "confidence": "confirmed", // 枚举: confirmed, likely, potential "authenticated": true, // boolean,是否需要认证才能触发 "target_url": "http://...", // 漏洞目标 URL "description": "详细描述,包含影响分析。", "RepairSuggestions": "1. 针对该漏洞的具体修复建议;2. 多条建议用分号分隔。", "http_test_commands": [ // 可选,漏洞验证回放命令 { "label": "漏洞验证回放命令", "command": "python \"d:/vibe_pentest/scripts/http_test.py\" --url \"http://...\" --method GET --show-command --show-summary --include-headers", "expected_evidence": "执行后应看到的关键响应证据" } ], "http_interactions": [ { "seq": 1, "label": "此交互的说明", "request": {"method": "GET", "url": "http://...", "headers": {}, "body": null}, "response": {"status_code": 200, "headers": {}, "body": "..."} } ] } ] } ``` **report_{timestamp}.json 格式约束:** | 字段 | 类型 | 约束 | |------|------|------| | `vuln_id` | string | `VUL-NNN` 格式,NNN 从 001 起,按 severity→confidence 排序分配(严重优先) | | `type` | string | 见下方完整 type 枚举表(共 42 种),不在表中的值将被映射为 `unknown` | | `type_zh` | string | 由 type 自动映射,同一 type 始终使用相同中文表述 | | `severity` | string | `critical` > `high` > `medium` > `low` > `info` | | `confidence` | string | `confirmed`(有完整 HTTP 证据)、`likely`(间接证据)、`potential`(疑似) | | `authenticated` | boolean | `true` = 需要登录,`false` = 匿名可触发 | | `http_test_commands` | array | 可选;用于保留可直接复制回放的 `http_test.py` 命令,建议包含 `label`、`command`、`expected_evidence` | | `http_interactions` | array | 至少 1 条,每条必须包含 request.method、request.url、response.status_code | **type -> type_zh 漏洞类型映射表:** | type | type_zh | type | type_zh | |------|---------|------|---------| | `sqli` | SQL注入 | `nosqli` | SQL注入 | | `xss_stored` | XSS注入 | `xss_reflected` | XSS注入 | | `xss_dom` | XSS注入 | `ssrf` | SSRF | | `xxe` | XXE注入 | `ssti` | 模板注入 | | `rce` | 远程代码执行 | `command_injection` | 命令注入 | | `insecure_deserialization` | 反序列化漏洞 | `crlf_injection` | CRLF注入 | | `xslt_injection` | 注入攻击 | `el_injection` | 注入攻击 | | `jndi_injection` | 注入攻击 | `prototype_pollution` | 原型污染 | | `type_juggling` | 类型混淆 | `request_smuggling` | HTTP走私 | | `auth_bypass` | 认证绕过 | `idor` | 越权访问 | | `broken_access_control` | 访问控制缺陷 | `csrf` | CSRF | | `weak_password` | 弱口令 | `brute_force` | 暴力破解 | | `lfi` | 文件包含 | `rfi` | 文件包含 | | `dir_traversal` | 目录穿越 | `file_upload` | 文件上传漏洞 | | `webshell` | Webshell | | | | `information_disclosure` | 信息泄露 | `open_redirect` | 开放重定向 | | `url_redirect` | 开放重定向 | `cookie_security` | Cookie安全问题 | | `git_exposure` | 信息泄露 | `directory_listing` | 信息泄露 | | `waf_bypass` | WAF绕过 | `clickjacking` | 点击劫持 | | `workflow_bypass` | 业务逻辑漏洞 | `race_condition` | 竞争条件 | | `pricing_manipulation` | 业务逻辑漏洞 | `coupon_abuse` | 业务逻辑漏洞 | | `subscription_hijack` | 业务逻辑漏洞 | | | | `unknown` | 未分类 | | | ## 工作流程 ### Phase 0~4:主流程执行 主流程按顺序执行以下阶段: 0. **指纹识别** - 调用 `{SKILL_ROOT}/scripts/run_fingerprint.py` - 单站点目标使用 `-u {base_url1} --json -o workspace/fingerprint.json`,多站点目标使用 `-u {base_url1} -u {base_url2} --json -o workspace/fingerprint.json` - 固定输出: `workspace/fingerprint.json` - 该工具基于 DSL 表达式匹配,支持 favicon mmh3 hash、关键词匹配、正则匹配,指纹库位于 `{SKILL_ROOT}/scripts/fingerprints_rules/` - 命令示例: ```bash python {SKILL_ROOT}/scripts/run_fingerprint.py -u {base_url} --json -o workspace/fingerprint.json ``` 0.5. **后台入口扫描** - 调用 `{SKILL_ROOT}/scripts/admin_scanner.py` - 单站点目标使用 `--target {base_url1}`,多站点目标使用 `--target {base_url1} --target {base_url2}` - 固定输出: `workspace/admin_scan_summary.json` - 状态检查:**该检查非常关键**;脚本运行结束后,仍然要检查状态文件 `workspace/admin_scan_status.json`,并且**只有 `status = completed` 才能进入下一步**;轮询查看间隔建议 `10` 秒一次或更长,期间不得重复执行脚本;可以通过检查脚本进程是否存在进行辅助判断,若进程存在,则说明后台任务仍在执行中,需要耐心等待状态变成 `completed` - 命令示例: ```bash python {SKILL_ROOT}/scripts/admin_scanner.py --target {base_url} ``` 1. **API 预扫描** - 调用 `{SKILL_ROOT}/scripts/run_api_prescan.py` - 单站点目标使用 `--target {base_url1}`,多站点目标使用 `--target {base_url1} --target {base_url2}` - 固定输出: `workspace/api_discovery_summary.json`、`workspace/sensitive_findings_summary.json`。 - 状态检查:**该检查非常关键**;脚本运行结束后,仍然要检查状态文件 `workspace/api_prescan_status.json`,并且**只有 `status = completed` 才能进入下一步**;轮询查看间隔建议 `10` 秒一次或更长,期间不得重复执行脚本;可以通过检查脚本进程是否存在进行辅助判断,若进程存在,则说明后台任务仍在执行中,需要耐心等待状态变成 `completed` - 命令示例: ```bash python {SKILL_ROOT}/scripts/run_api_prescan.py --target {base_url} ``` 2. **浏览器登录** — 调用 `{SKILL_ROOT}/scripts/extract_credentials.py`,为每个测试账号启动浏览器登录并提取凭证,若用户未提供测试账号,此步骤可跳过。 3. **GoSpider 爬虫** - 运行方式:须在沙箱环境外调用 `{SKILL_ROOT}/scripts/run_gospider.py` - 目标参数:单目标使用 `--target {base_url}`;多目标使用 `--target {base_url1} --target {base_url2}`。 - 爬取目标 `base_url` 必须严格使用用户提供的完整 URL,禁止自动转换为根目录地址(如 `/`)、删除路径层级或仅保留域名。 - 状态检查:**该检查非常关键**: - GoSpider 爬虫通常较慢,脚本运行结束后,仍然要检查状态文件 `workspace/gospider_status.json`,并且**只有 `status = completed` 同时有输出 `workspace/crawl/crawled_*.json` 才能进入下一步**;轮询查看间隔建议 `15` 秒一次或更长,期间不得重复执行脚本。 - 可以通过检查 `gospider` 进程是否存在进行辅助判断,若进程存在,则说明后台任务仍在爬虫中,需要耐心等待状态变成 `completed` 以及输出产物。 - 命令示例: ```bash python {SKILL_ROOT}/scripts/run_gospider.py --target {base_url} ``` 4. **数据清洗** - 调用脚本:执行 `{SKILL_ROOT}/scripts/clean_targets.py`,会自动读取 `workspace/crawl/` 下全部 `crawled_*.json`,按站点过滤外部域名、非目标 IP、静态资源,并对 URL 去重 - 固定输出: `workspace/targets.txt` - 命令示例: ```bash python {SKILL_ROOT}/scripts/clean_targets.py ``` 4.5. **指纹汇总** - 读取以下文件,提取技术栈关键字并合并到 `fingerprint.json` 的 `tech_stack` 字段: - `workspace/fingerprint.json`(Phase 0 输出) - `workspace/admin_scan_summary.json`(Phase 0.5 输出) - **判断标准(核心原则)**:只提取"具体的软件产品/框架/中间件/CMS/服务器软件名称",这些名称能用于匹配 POC 库中的 `fingerprint` 字段。**不提取**页面内容描述、漏洞类型名称、通用功能描述。 - **正例(应提取)**: - `"Apache ActiveMQ Console"` → `ActiveMQ`(具体产品名) - `"Jenkins Dashboard"` → `Jenkins`(具体产品名) - `"GeoServer: Welcome"` → `GeoServer`(具体产品名) - `"XXL-JOB 任务调度中心"` → `XXL-JOB`(具体产品名) - `"Jetty(9.4.18.v20190429)"` → `Jetty`(具体服务器软件) - `"nginx/1.18.0"` → `nginx`(具体服务器软件) - **反例(不应提取)**: - `"SQL Injections"` → 不提取(漏洞测试页面标题,不是产品名) - `"XSS Test Page"` → 不提取(漏洞测试页面标题) - `"Error 404 - Not Found"` → 不提取(错误页面) - `"Welcome to DVWA"` → 不提取(靶场名称,不是真实产品) - `"Login Page"` → 不提取(通用功能描述) - `"Admin Console"` → 不提取(通用功能描述,除非能识别出具体产品如 "Jenkins Console") - 提取规则: 1. 从 `fingerprint.json` 的 `web_title` 提取:识别标题中的具体软件产品名/框架名/中间件名 2. 从 `fingerprint.json` 的 `web_server` 提取:识别服务器软件名(如 Jetty、nginx、IIS、Apache) 3. 从 `admin_scan_summary.json` 的 `title` 字段提取:识别具体软件产品名 4. **智能去重**:在添加新关键字前,必须先检查 `tech_stack` 中是否已存在相同或高度相似的内容: - **完全重复**:字符串完全相同(如 `Jetty` 已存在,不再添加 `Jetty`) - **包含关系**:新关键字是已有内容的子串或超集(如 `jetty/9.4.18.v20190429` 已存在,不再添加 `Jetty`;或 `Jetty` 已存在,不再添加 `jetty/9.4.18.v20190429`) - **同一产品不同格式**:如 `nginx/1.18.0` 和 `nginx` 是同一产品,只保留一个(优先保留带版本号的) - **判断方法**:将已有内容和新关键字都转为小写,检查是否存在包含关系(`a in b` 或 `b in a`) 5. 将去重后的关键字合并到 `tech_stack`,写回 `fingerprint.json` - 目的:汇总所有来源的技术栈信息,供后续 Agent 和报告生成使用 ### Phase 5:多 Agent 并行渗透测试 主流程必须通过智能体平台提供的 Multi-Agent / Subagents 能力或等效工作流能力,**同时启动提示词中指定的渗透 Agent,并行执行渗透测试**: - 主流程必须先执行 `python {SKILL_ROOT}/scripts/prepare_agent_findings.py --agent {agent_name}`,需要根据实际启用的子 agent 生成标准化骨架文件到 `workspace/findings/{agent_name}.json` - **【强制】每个 Agent 启动后必须首先读取** `{SKILL_ROOT}/agents/{agent_name}/SKILL.md`,该文件定义了 Agent 的角色身份、职责范围、输入数据、检测方法论、强制执行要求、回填要求,是 Agent 行为的核心基准 - 每个 Agent 必须先建立本职责范围内的一级攻击面清单(基于已知的输入数据、文档),再递归展开二级/三级功能点,扩展攻击面清单 - 每个 Agent 必须从 HTML 表单、链接、按钮、隐藏字段、JS 请求、API 响应中继续提取子功能和隐藏入口 - 每个 Agent 必须对可疑点执行主动深入探测:基线请求、变体请求、对照请求、权限对比、参数边界、编码变体、方法变体 - 每个 Agent 必须根据业务需要执行认证态/未认证态对比:匿名、已登录、去认证重放、低权限重放、高权限对照(如有) - 每个 Agent 不得把第一个发现或第一个漏洞当作终点,必须继续覆盖同类功能、相邻接口、同参数不同方法和认证态差异 - 所有 HTTP 请求必须使用 `{SKILL_ROOT}/scripts/http_test.py`;仅当漏洞更适合通过带外方式确认且无直接回显时,才使用 `{SKILL_ROOT}/scripts/dnslog.py` - 每个 Agent 只测试自身职责范围内的漏洞类型 - 每个 Agent 只能读取并回填自己的骨架文件 `workspace/findings/{agent_name}.json`,不得覆盖其他 Agent 的输出;骨架中的占位值必须被真实内容覆写,发现多个漏洞时需继续向 `findings` 追加对象 - 不得基于怀疑或假设创建漏洞条目;没有真实交互证据、状态差异、回显证据或 OOB 证据时,不得创建漏洞条目 - 对于成功利用并已确认的漏洞,Agent 必须在 `http_test_commands` 中至少记录 1 条可直接回放的 `http_test.py` 命令,且 `command` 字段中的脚本路径必须写成当前环境下的完整绝对路径,不得保留 `{SKILL_ROOT}` 占位符 - 每个 Agent 回填说明性文本字段默认使用中文,但不得翻译路径、参数名、字段名、payload、状态码、URL 中的技术片段 - 主流程必须等待全部启用的渗透 Agent 执行完成,并确认findings 文件均已被真实回填,才能进入下阶段。 ### Phase 5.5:攻击链分析(由 vuln-analysis-agent Agent 执行) 单站点目标场景下,主流程通过智能体平台提供的 Multi-Agent / Subagents 能力或等效工作流能力,创建一个 `vuln-analysis-agent` Agent(漏洞综合分析 Agent),执行 Phase 5.5 以及 Phase 5.6 步骤;当存在 2 个及以上 `--target-url` 时,可视为多站点目标场景,可跳过 Phase 5.5 和 Phase 5.6,直接进入 Phase 6。 `vuln-analysis-agent` Agent **必须完整读取** `{SKILL_ROOT}/references/sub_agents/vuln-analysis-agent.md`,并遵循其规范执行。 `vuln-analysis-agent` Agent 构建攻击链(以下攻击链仅作为示例): - LFI + 文件上传 → RCE 链 - SSRF + Redis/FastCGI → RCE 链 - XSS + CSRF → 数据窃取链 - IDOR + Mass Assignment → 提权链 - 输出 `workspace/attack_chains.json`(严格按照格式规范填写) ### Phase 5.6:漏洞证据复查(由 vuln-analysis-agent Agent 继续执行) ⚠️ **强制规则:该步骤仅适用于单站点目标场景;多站点目标场景可跳过。** `vuln-analysis-agent` Agent 必须: 1. **运行自动扫描**:`python {SKILL_ROOT}/scripts/verify_findings.py ` - 检查响应状态码(404/500 等异常) - 检查类型专属证据特征(SQLi 必须有 SQL 报错,XSS 必须有未转义 payload 等) - 检查响应体质量(空响应体、错误页面特征) - 只需输出 `verification.json`,不要修改其它文件 单站点目标场景下,主流程仅在 `vuln-analysis-agent` Agent 完成 Phase 5.5/5.6 后,方可进入 Phase 6;多站点目标场景下可直接进入 Phase 6。 ### Phase 6:生成最终报告(主流程执行) #### 步骤 1:使用 Python 脚本汇总 findings目录下所有 JSON 文件 当 Phase 5.6 漏洞证据复查结束后,或多站点目标场景跳过 Phase 5.5/5.6 后,必须使用 `{SKILL_ROOT}/scripts/generate_report.py` 汇总 `workspace/findings/*.json`生成`workspace/report_{timestamp}.json`(工作目录内的最终 JSON 报告)。 - 基本命令格式:python {SKILL_ROOT}/scripts/generate_report.py --target-url <目标URL1> [--target-url <目标URL2> ...] [可选参数] - 必需参数: - workspace:vibe-pentest 工作目录路径,脚本会在其中找 findings/ 子目录 - --target-url:渗透测试的目标 URL,可重复传入;传入 2 个及以上时生成多站点目标报告 - 可选参数: - --tech-stack:识别到的技术栈列表,使用示例:--tech-stack Java Spring Boot MySQL,该值可参考`workspace/fingerprint.json`内容的`tech_stack`字段 - --test-accounts:测试账户 JSON 数组,默认值为 [],当用户提供了测试账户时才需要使用此参数 - 示例: ```bash python {SKILL_ROOT}/scripts/generate_report.py workspace --target-url {base_url} python {SKILL_ROOT}/scripts/generate_report.py workspace --target-url {base_url} --tech-stack Java Spring Nginx MySQL python {SKILL_ROOT}/scripts/generate_report.py workspace --target-url {base_url1} --target-url {base_url2} ``` #### 步骤 2:翻译说明性内容 根据用户需求检查并翻译 `workspace/report_{timestamp}.json` 中的说明性文本字段:`vulnerabilities.RepairSuggestions`、`vulnerabilities.title`、`vulnerabilities.description`、`vulnerabilities.http_interactions[].label`。针对这些字段,需要额外执行一次说明性文本翻译,默认翻译为中文;但不得翻译路径、参数名、字段名、payload、状态码、URL 中的技术片段。 #### 步骤 3:使用 Python 脚本生成最终 HTML 和 Word 报告 基于步骤 1 生成的 `workspace/report_{timestamp}.json`,主流程调用对应的 Python 脚本生成最终 HTML 和 Word 报告。 示例: ```bash python {SKILL_ROOT}/report_renderers/generate_html.py workspace/report_{timestamp}.json python {SKILL_ROOT}/report_renderers/generate_word.py workspace/report_{timestamp}.json ``` 说明: - 执行命令后,报表会默认输出到 `workspace/report_result/` 目录。 ## HTTP 发包工具(强制规范) **主流程、所有渗透 Agent、漏洞综合分析 Agent 在需要向目标发送 HTTP 请求时,必须优先使用 `{SKILL_ROOT}/scripts/http_test.py`。** 此工具是 vibe-pentest 技能的内置脚本,功能全面且专门为渗透测试场景优化: - **响应瘦身**:内置正则过滤 + 行/字节截断,防止大 HTML 页面灌爆 Agent 上下文 - **编码守护**:自动推断 charset(从 header、body meta 标签、chardet 检测),正确处理 GBK/UTF-8/ISO-8859-1 - **性能指标**:独立 DNS/TCP/TLS/TTFB 计时,盲注/时序测试必备 - **重复+聚合**:`--repeat N --delay 0.5` 自动统计 min/avg/max - **请求概览**:`--show-command` 输出完整请求信息,便于证据记录 - **命令回放**:`--show-command` 输出的请求概览可整理回填到 finding 的 `http_test_commands[].command`;回填时脚本路径必须替换为当前环境下的完整绝对路径,便于后续人工复验时直接重放 ### 基本调用格式 ```bash python {SKILL_ROOT}/scripts/http_test.py \ --url "" \ --method \ --data '' \ --headers '{"Header-Name":"value"}' \ --cookies "" \ --show-command \ --show-summary \ --include-headers \ --response-max-lines 80 ``` ### 必读参考 详细用法(6 个渗透场景模板、全参数速查表、过滤正则模板)见: **`{SKILL_ROOT}/references/http-test-usage.md`** 每个 Agent 在开始测试前必须读取此参考文档。 ### 与 curl 的区别 | 功能 | http_test.py | curl | |------|-------------|------| | 响应正则过滤 | `--response-filter '(error\|SQL)'` | 需 pipe grep | | Token 优化 | 自动瘦身(max_lines/max_bytes) | 需手动截断 | | 编码守护 | 多重自动检测 | 需手动识别 | | 性能指标 | DNS/TCP/TLS/TTFB/Speed | `-w` 格式字符串 | | 重复聚合 | `--repeat 5 --delay 0.3` | 需 shell 循环 | | 表单编码 | 自动推断 + URL-encode | 需手动 `--data-urlencode` | **禁止场景**:除了一次性的简单 HEAD/OPTIONS 探测外,所有涉及 payload 注入、表单提交、API 测试、认证测试的 HTTP 请求都必须使用 `http_test.py`,不得使用 curl 或其他工具替代。 ## OOB/DNS 回调验证工具 **SSRF、盲 XXE、命令注入(盲)、SQL 盲注(OOB 外带)、JNDI 注入等无回显漏洞的 OOB 验证,必须使用 `{SKILL_ROOT}/scripts/dnslog.py`。** 此工具基于 dnslog.cn 实现 DNS 查询记录获取: - **获取临时域名**:`python {SKILL_ROOT}/scripts/dnslog.py get_domain` - **查询 DNS 记录**:`python {SKILL_ROOT}/scripts/dnslog.py get_records <域名> [等待秒数]` - **判断标准**:`status` 为 `success` 且 `record_count` > 0 → 目标触发了 DNS 查询 → 漏洞 confirmed ## 安全规则 1. **严格限制目标域名**,不测试范围外的任何地址 2. **不执行破坏性操作**:不删除数据、不修改业务数据、不发起 DoS 3. **凭证安全**:如果 `sessions/*.json` 包含敏感信息,测试完成后提醒用户删除 4. **速率控制**:请求间保持合理间隔,避免触发 WAF 或对服务造成影响 ## 反幻觉规则 1. 只报告实际发送过请求并收到响应的漏洞 2. 每个漏洞必须有完整的 HTTP 交互证据(request + response) 3. 不猜测不存在的路径或接口,所有测试目标必须来自爬取结果 4. 置信度标记:`confirmed`(有证据)、`likely`(间接证据)、`potential`(疑似) 5. 没有证据时不创建漏洞条目 6. 发现漏洞不等于完成测试;必须继续覆盖同类功能、相邻接口、同参数不同方法和认证态差异 7. 认证态对比不足、缺少对照请求或缺少真实 HTTP 证据时,不得标记为 `confirmed`