# Vibe Pentest

> AI 渗透测试：多 Agent 并行架构的 Web 应用渗透测试技能。 流程: 指纹识别 → 后台入口扫描 → API 预扫描 → 浏览器登录提取凭证（可选） → GoSpider 爬虫 → 过滤数据 → 指纹汇总 → 多 Agent 并行渗透测试 → 攻击链分析 → 漏洞证据复查 → 生成报告。

- Skill: `ok-helloworld/vibe-pentest` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add ok-helloworld/vibe-pentest`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ok-helloworld/vibe-pentest/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: ok-helloworld (https://skillmd.com/u/ok-helloworld)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ok-helloworld/vibe-pentest

---


# 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 验证工具
│   ├── ws_test.py                # WebSocket 发包工具
│   └── 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 用法参考
│   └── ws-test-usage.md          # ws_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** | 渗透 | 负责认证与会话类漏洞检测：认证绕过/暴力破解/会话管理/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/安全头/目录遍历/子域名接管/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 |
| `protocol_interactions`、`reproduction`、`evidence_refs` | array | 可选；仅在测试 `ws/wss` 等非 HTTP 协议时使用，字段见 `references/report-json-format.md` |


**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/https 请求强制优先使用 `{SKILL_ROOT}/scripts/http_test.py`；仅当漏洞更适合通过带外方式确认且无直接回显时，才使用 `{SKILL_ROOT}/scripts/dnslog.py`；确需测试 `ws/wss` 协议时才使用 `{SKILL_ROOT}/scripts/ws_test.py`
- 每个 Agent 只测试自身职责范围内的漏洞类型
- 每个 Agent 只能读取并回填自己的骨架文件 `workspace/findings/{agent_name}.json`，不得覆盖其他 Agent 的输出；骨架中的占位值必须被真实内容覆写，发现多个漏洞时需继续向 `findings` 追加对象
- 不得基于怀疑或假设创建漏洞条目；没有真实交互证据、状态差异、回显证据或 OOB 证据时，不得创建漏洞条目
- 对于成功利用并已确认的漏洞，Agent 必须在 `http_test_commands` 中至少记录 1 条可直接回放的 `http_test.py` 命令，且 `command` 字段中的脚本路径必须写成当前环境下的完整绝对路径，不得保留 `{SKILL_ROOT}` 占位符；`ws/wss` 类证据写入 `protocol_interactions` 与 `reproduction`
- 每个 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 <workspace_dir>`
   - 检查响应状态码（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 <workspace目录> --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 中的技术片段。

同时检查每个漏洞条目的 `repair_source` 字段：取值为 `context_rule` 或 `type_map` 时，表示该条目的 `RepairSuggestions` 是脚本通用兜底生成的模板文案，必须结合该条目的 `title`、`target_url`、`description`、`http_interactions` 将其改写为针对性整改建议（1-3 条，点明相关的具体参数、路径、组件与版本、技术栈）；取值为 `agent` 的条目保持原样，不得改写。

#### 步骤 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 的 http/https 请求强制优先使用 `{SKILL_ROOT}/scripts/http_test.py`。**

此工具是 vibe-pentest 技能的内置脚本，功能全面且专门为渗透测试场景优化，具备：“响应瘦身、编码守护、请求概览、命令回放”等。

开始使用工具前必须先读取：`{SKILL_ROOT}/references/http-test-usage.md`，后续优先复用已获取的用法信息，除非遇到新的场景或参数。

核心调用模板：

```bash
python {SKILL_ROOT}/scripts/http_test.py --url "<URL>" --method <METHOD> \
  --data '<PAYLOAD>' --headers '{"Key":"Val"}' --cookies "<COOKIE>" \
  --response-filter '<REGEX>' --response-filter-mode line \
  --response-max-lines 80 --show-command --show-summary --include-headers
```

## 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；禁止测试作用于生产数据或他人数据的 `delete`、`del`、`remove` 等可能删除数据的接口（包括空数组、不存在的 ID 等无害化探测），对自己创建的测试数据的删除、修改不受此限。
3. **遵循最小影响原则**：允许清理自己创建的测试数据；禁止破坏原始业务数据、他人数据、真实用户账号与会话
4. **速率控制**：请求间保持合理间隔，避免触发 WAF 或对服务造成影响；获得有效证据后停止不必要的重复利用、批量尝试和扩散操作

## 反幻觉规则

1. 只报告实际发送过请求并收到响应的漏洞
2. 每个漏洞必须有完整的交互证据（HTTP 类为 request + response；非 HTTP 协议类为 `protocol_interactions` 中的真实消息记录）
3. 置信度标记：`confirmed`（有证据）、`likely`（间接证据）、`potential`（疑似）
4. 没有证据时不创建漏洞条目；唯一例外（仅限 poc-agent）：确认无法无害化验证而未发包的 POC，可作为低风险提醒条目写入（须 `severity: "low"`、`confidence: "potential"`、标题标注"未验证"）；其他 agent 不适用此例外，仍须在有真实证据后才能创建条目
5. 发现漏洞不等于完成测试；必须继续覆盖同类功能、相邻接口、同参数不同方法和认证态差异
6. 认证态对比不足、缺少对照请求或缺少真实 HTTP 证据时，不得标记为 `confirmed`

