AI 驱动的 PTES 渗透测试工作流:用支持 AGENTS.md 的 Agent 打开本仓库,按阶段产出可校验的 target/${ID}/ 工作区与报告。
| 产出 | 位置 |
|---|---|
| 一次评估工作区 | target/${ID}/ |
| 阶段交接 | 各 phases/XX-name/manifest.md + chain-status.md |
| 已验证漏洞 | vulns/vuln-NNN/ + Evidence |
| 客户报告 | report.md(用户语言正文) |
阶段链:0 → 1 → 1b? → 2 → 3 → 4 → 5 → 6(有 Web 口才跑 1b)。
需要:Node.js、Docker(可选 Kali 容器)、能加载 AGENTS.md 的 Agent。
# 克隆后
cd pentester
# Schema / 夹具 / LOOKUP / playbook / 架构 lint
npm run test:all
# Playwright(Web 阶段用浏览器取证)
cd .agents/skills/pentester-playwright && npm run setup && cd -
# 字典(PentesterSpecialDict 子模块;fuzz/目录爆破前需要)
npm run setup:dicts
# 等价: node .agents/wordlists/ensure.js
# 或: git submodule update --init --depth 1 -- .agents/wordlists/PentesterSpecialDict
# 可选:扫描容器
docker pull kalilinux/kali-rollingSkill 目录:.agents/skills/(勿提交 Claude/Codex 等宿主镜像树;本地 symlink 见 docs/agents/host-skills.md)。
用 Agent 打开仓库根目录,直接说目标(中英文均可,Agent 跟你的语言回复与写报告):
对 192.168.1.100 做渗透测试
测试 https://app.example.com
Pentest 10.0.0.5,范围仅该 IP,不要碰 10.0.0.0/24 其他主机
Agent 应自动:
- 读
AGENTS.md/ROLE.md/ 当前 phase 过程 - Phase 0:物化工作区、谈清 Scope 与 Authorization
- 你确认授权后:
phases/00-pre-engagement/authorization.md中- status: confirmed - 按链执行 1→…→6,每阶段写 Manifest 并校验
在你未确认 Authorization 前,不得进入 phase ≥1 的进攻动作。
一次评估 = 一条 skill 流水线,schema.json 门禁保证不跳步、不漏证据、不越权。
阶段入口强制解析 skill(不要只靠自动匹配 description):
node .agents/skills/resolve-skills.js --id ${ID} --phase <0|1|1b|2|3|4|5|6> --write --strict
# 输出 MUST Read / ON DEMAND;Agent 必须先 Read 列表中的 SKILL.md 再跑 Steps
# 映射:.agents/skills/skill-map.json · 第三方深度包:.agents/skills/third-party/阶段顺序串行(0→1→1b?→2→3→4→5→6 不可打乱);阶段内部并行:独立 / 长耗时 / 大字典任务必须拆 subagent,主 Agent 只编排、维护 Task List、合并 Schema 产物并 validate。
长扫描与大字典(nmap 全端口、ffuf/gobuster、hydra、sqlmap、Playwright 深爬等)禁止短 timeout(0 或 ≥3600s,Task List 备注标 无 timeout)。细则:AGENTS.md / ROLE.md。
setup-tools → init-target → enum-services + recon (+toolkit)
→ playwright / src-hunter → threat-model
→ scan-ingest + src-hunter / playwright → exploit (+waf-bypass)
→ post-exploit → gen-report
| 阶段 | 主要 skill | 你 / Agent 做什么 | 产出 |
|---|---|---|---|
| — 准备 | pentester-setup-tools |
装框架依赖 + 字典 submodule + DotSlash 工具 | 环境就绪 |
| 0 开工 | pentester-init-target |
物化工作区、谈 Scope / 授权 | phases/00-pre-engagement/scope.md · authorization.md |
| 1 情报 | pentester-enum-services · pentester-recon · toolkit |
端口 / 服务 / 指纹 / OSINT | ports/ · services/ · recon-summary.md |
| 1b Web | pentester-playwright · pentester-src-hunter |
浏览器 recon + Web 手册 | function-map.md · 截图 |
| 2 威胁建模 | pentester-threat-model |
STRIDE + Signal(供 Phase 3) | threat-model.md |
| 3 漏洞验证 | scan-ingest · src-hunter · playwright + signal 深度包 |
扫描 → triage → 验证 + 取证 | triage.md · vulns/vuln-NNN/ |
| 4 利用 | pentester-exploit · playwright · waf-bypass? |
guard.js 预检 → PoC → access |
access.md · exploit-log.md |
| 5 后渗透 | pentester-post-exploit · toolkit |
态势 / 提权 / 横向(scope 受控) | post-exploitation/* |
| 6 报告 | pentester-gen-report |
填 SKELETON → 质检 → 交付 | report.md |
Skill 分层:pentester-* = 阶段适配 / Schema 路径;third-party/* = 手法深度(VulnClaw 等),由 resolve-skills 按 handoff / Signal 选装。
字典:PentesterSpecialDict 为 git submodule(evilc0deooo/PentesterSpecialDict)。npm run setup:dicts 或 fuzz 前 node .agents/wordlists/ensure.js。Docker:/wordlists/PentesterSpecialDict/…。
贯穿全程:pentester-knowledge-base(LOOKUP)· 进攻命令过 node .agents/schema/guard.js。
两条硬纪律:① 未 authorization: confirmed 不进 phase ≥1;② deny_hosts / 时间窗 / banned 由 scope-check.js + guard.js 强制。
下面用示例:ID=lab1,scan_host=192.168.1.100,扫描环境 docker。
把 lab1 / IP 换成你的值即可。
# 创建 Engagement workspace + 目录 + phase-0 清单骨架
node .agents/schema/materialize.js \
--id lab1 \
--host 192.168.1.100 \
--form IP \
--scan-env docker表单 --form |
含义 |
|---|---|
IP |
以 IP 为主目标 |
DOMAIN |
域名 |
URL |
已有 URL(仍要 Phase 0,RoE 可简化) |
--scan-env |
含义 |
|---|---|
docker |
工具跑在 Kali 容器,挂载 target/lab1 → /target |
host-kali |
本机已有 Kali/工具链 |
然后与 Agent / 客户确认:
- 编辑
target/lab1/phases/00-pre-engagement/scope.md(结构化:allow_hosts/deny_hosts/window/banned) - 编辑
target/lab1/phases/00-pre-engagement/authorization.md→- status: confirmed - 补全
target/lab1/phases/00-pre-engagement/manifest.md交接摘要字段
Scope 现在机器可校验:扫描前先过闸门
node .agents/schema/scope-check.js lab1 --host 192.168.1.100(命中deny_hosts会拒绝并退出非零)。
node .agents/schema/validate-target-schema.js lab1 --strict-summary --stamp-chain可选 Docker 骨架(materialize 输出里也有):
docker run -d --name kali-target-lab1 \
-v "$(pwd)/target/lab1:/target" \
-v "$(pwd)/.agents/wordlists:/wordlists:ro" \
kalilinux/kali-rolling sleep infinity# 阶段地图(权威来自 schema.json)
node .agents/schema/validate-target-schema.js --print-phase-map
# 当前阶段上下文边界(Session packet)
node .agents/schema/validate-target-schema.js --print-session-packet 1
# Phase 1 产出计划 + 环境键
node .agents/schema/validate-target-schema.js --print-plan 1 \
--id lab1 --host 192.168.1.100 --scan-env docker
# 工具路径 / Evidence 环境变量(可 eval)
node .agents/schema/env-render.js --scan-env docker --id lab1 --host 192.168.1.100
eval "$(node .agents/schema/env-render.js --scan-env docker --id lab1 --host 192.168.1.100 --export)"
# 一屏 engagement 状态(给人看:阶段 / 各 severity / 覆盖度 / 下一步)
node .agents/schema/status.js lab1过程步骤:只读 .agents/phases/ 里当前阶段文件(不要拿 examples/DC-* 当模板)。
Agent 按 phases/01-intelligence.md 扫端口 / 服务 / 摘要,写入 ports/、services/、recon-summary.md,填 phases/01-intelligence/manifest.md。
# 交接摘要里 web_ports 非空 → 必须做 1b;为 none 则可跳过 1b
node .agents/schema/validate-target-schema.js lab1 --strict-summary --stamp-chain仅当 Phase 1 发现 Web 口。
# 浏览器在**宿主机**;Evidence 路径只来自 env-render
eval "$(node .agents/schema/env-render.js --scan-env docker --id lab1 --host 192.168.1.100 --export)"
mkdir -p "$EVIDENCE_DIR" "$SCREENSHOT_DIR"
# 用 pentester-playwright 的 scripts/poc.js 写 /tmp 脚本,截图落到 EVIDENCE_DIR
# Web 攻击手册(禁止瞎编 payload)
node .agents/skills/pentester-src-hunter/playbook.js --signal "unauth,info,idor"
# Read 返回的 playbook 路径后再测产出:services/function-map.md、截图、vulns/playwright/ 等 → phases/01b-web-pretest/manifest.md → 再 validate … --stamp-chain。
| 阶段 | 过程文件 | 你要盯的结果 |
|---|---|---|
| 2 | phases/02-threat-modeling.md |
threat-model.md(优先级,不是漏洞清单) |
| 3 | phases/03-vulnerability-analysis.md |
确认后的 VULN-NNN + Evidence;分诊台账 vulns/triage.md;威胁覆盖 threat-coverage.md |
| 4 | phases/04-exploitation.md |
exploit-log.md、access.md |
| 5 | phases/05-post-exploitation.md |
post-exploitation/*(仍在 Scope 内) |
Phase 3 新增两个可审计台账(校验器会 gate):每条 Raw scan result 记去向到
vulns/triage.md(交接triaged_count);每个priority_threat记终态到threat-coverage.md(交接threat_coverage)。有原始扫描/优先威胁却缺台账 →--strict-summary报错。
常用:
# 策展知识(按阶段硬分袋)
node .agents/bin/lookup.js --phase 3 --keywords "sqli,ssrf"
# Web playbook
node .agents/skills/pentester-src-hunter/playbook.js --signal "sqli,idor"
# 浏览器取证(路径仍用 --export)
eval "$(node .agents/schema/env-render.js --scan-env docker --id lab1 --host 192.168.1.100 --export)"
# 对某个 VULN,把 EVIDENCE_DIR 指到 vulns/vuln-NNN/evidence(NNN 换成真实编号)每阶段结束:
node .agents/schema/validate-target-schema.js lab1 --strict-summary --stamp-chain- 按
.agents/REPORT-SKELETON.md写target/lab1/report.md(正文用你的语言) - 引用仓库内相对路径的 Evidence(反引号路径须真实存在)
- 可选措辞参考:
knowledge/reporting/report-wording-depth.md(不是第二填表权威)
# 装配数据段(发现表 / 风险评级 / Evidence 索引 / 覆盖度)——你只写叙述
node .agents/schema/assemble-report.js lab1 # 粘到 SKELETON 1.3 / 5 / 8
node .agents/schema/check-report.js lab1 # 也会因报告漏掉某个 Verified Vulnerability 而失败
node .agents/schema/validate-target-schema.js lab1 --strict-summary --check-report --stamp-chain
# 通过后 chain-status 应为 next_phase: done
# 客户交付包(存证 + 指向 Report/Evidence 的索引)
node .agents/schema/deliver.js lab1 # 写 target/lab1/delivery/
# 复测(本次是整改后复测时):与旧一次对比 → 已修复 / 仍存在 / 新增
node .agents/schema/retest.js --baseline OLD_ID --current lab1 --write□ 产物写在 schema 规定路径下(无 scans/、顶层 evidence/ 等禁止路径)
□ manifest 反引号路径 + 交接摘要字段齐全
□ phase ≥1 时 Authorization 已为 confirmed
□ validate --strict-summary [--stamp-chain] 通过
□ 可复用方法 → knowledge-base / PTES-INDEX(不要塞 target 细节当通用知识)
□ 临时文件清理;用用户语言同步进度
| 目的 | 命令 |
|---|---|
| 物化工作区 | node .agents/schema/materialize.js --id ID --host HOST --form IP --scan-env docker |
| 校验 + 推进链 | node .agents/schema/validate-target-schema.js ID --strict-summary --stamp-chain |
| 阶段地图 | … validate-target-schema.js --print-phase-map |
| Session packet | … --print-session-packet [N] |
| Phase 计划 | … --print-plan 1 --id ID --host HOST --scan-env docker |
| 环境 / Evidence | … env-render.js --scan-env docker --id ID --host HOST [--export] |
| Scope 闸门 | … scope-check.js ID --host HOST |
| engagement 状态 | … status.js ID |
| 装配报告数据段 | … assemble-report.js ID |
| 报告质量 | … check-report.js ID |
| 交付包 | … deliver.js ID |
| 复测差分 | … retest.js --baseline OLD --current ID --write |
| 知识查找 | node .agents/bin/lookup.js --phase N --keywords "…" |
| Playbook | node .agents/skills/pentester-src-hunter/playbook.js --signal "sqli" |
| 工具选型 | node .agents/tools/resolve.js --id ID --phase N --scan-env ENV |
| 工具安装 | node .agents/tools/ensure.js --scan-env ENV --id ID --install TOOL |
| 全量自测 | npm run test:all |
AGENTS.md # Agent 编排入口(先读)
CONTEXT.md # 领域词
.agents/phases/ # 每阶段怎么做(执行权威)
.agents/schema/ # 路径与校验(契约权威)
.agents/skills/ # 工具适配(materialize / Playwright / playbook…)
.agents/tools/ # 工具目录 + 选型 + DotSlash 落地
.agents/knowledge/ # LOOKUP 策展知识(大库可外置)
.agents/REPORT-SKELETON.md
examples/schema-mini/ # 最小金样夹具(快速契约检查)
examples/DC-1-engagement/ # 真实金样夹具(真实语法 + 工具链冒烟)
target/${ID}/ # 你的本次评估(唯一工作区)
| Skill | 何时用 |
|---|---|
pentester-init-target |
Phase 0 物化 |
pentester-enum-services |
Phase 1 计划 |
pentester-toolkit |
DotSlash 工具落地(.agents/tools/) |
pentester-scan-ingest |
扫描器输出 → Triage 台账 |
pentester-threat-model |
Phase 2 STRIDE + Signal(可校验) |
pentester-src-hunter |
Web 手册 resolve |
pentester-playwright |
浏览器 recon + Evidence(SPA/认证流) |
pentester-post-exploit |
Phase 5 后渗透(scope 受控) |
pentester-gen-report |
Phase 6 填表与检查 |
pentester-knowledge-base |
查/写 tier-1 知识 |
pentester-setup-tools |
依赖检查 |
pentester-knowledge-import |
维护者离线归档(不要在 phase 里跑) |
Q: 校验不过?
看 validate 报错:缺文件、交接摘要键、Authorization 仍是 pending、Evidence 目录为空、引用路径不存在等。先 --strict-summary 修到绿再 --stamp-chain。
Q: 1b 要不要做?
Phase 1 交接 web_ports 非空 → 必须;none 且无 1b manifest → 跳过。
Q: 报告用中文还是英文?
跟用户对话语言一致;路径、VULN-NNN、CVE 保持英文标识。
Q: 知识库太大?
运行时只用 LOOKUP / PTES-INDEX。github-references 等 bulk 默认不入库,可 KNOWLEDGE_ARCHIVE_ROOT 外置(docs/agents/archive-locality.md)。
Q: 能抄 DC-1/DC-2 目录结构吗?
不要——它们是 pre-schema 遗留(仅报告参考)。布局以 schema.json 为准;要看真实又合规的样子,读 examples/DC-1-engagement/(examples/README.md 有说明)。
- 仅在 Scope + Authorization confirmed 内测试
- 破坏性操作前再次确认用户
- 报告与笔记脱敏;密钥不进 knowledge
| 文档 | 内容 |
|---|---|
AGENTS.md |
Agent 编排与阶段切换 |
.agents/ROLE.md |
身份、intake、红线 |
.agents/phases/*.md |
分阶段步骤 |
CONTEXT.md |
术语(Target、Manifest、Verified Vulnerability…) |
docs/adr/ |
架构决策 |
docs/agents/host-skills.md |
宿主 skill 链接 |
docs/agents/archive-locality.md |
大语料外置 |
License: 见 LICENSE。