Skip to content

Latest commit

 

History

History
372 lines (272 loc) · 15.7 KB

File metadata and controls

372 lines (272 loc) · 15.7 KB

Pentester

AI 驱动的 PTES 渗透测试工作流:用支持 AGENTS.md 的 Agent 打开本仓库,按阶段产出可校验的 target/${ID}/ 工作区与报告。

English


你将得到什么

产出 位置
一次评估工作区 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)。


1. 环境准备(一次)

需要: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-rolling

Skill 目录:.agents/skills/(勿提交 Claude/Codex 等宿主镜像树;本地 symlink 见 docs/agents/host-skills.md)。


2. 最快上手:交给 Agent

用 Agent 打开仓库根目录,直接说目标(中英文均可,Agent 跟你的语言回复与写报告):

对 192.168.1.100 做渗透测试
测试 https://app.example.com
Pentest 10.0.0.5,范围仅该 IP,不要碰 10.0.0.0/24 其他主机

Agent 应自动:

  1. AGENTS.md / ROLE.md / 当前 phase 过程
  2. Phase 0:物化工作区、谈清 ScopeAuthorization
  3. 你确认授权后:phases/00-pre-engagement/authorization.md- status: confirmed
  4. 按链执行 1→…→6,每阶段写 Manifest 并校验

在你未确认 Authorization 前,不得进入 phase ≥1 的进攻动作。

用 skill 把流程串起来

一次评估 = 一条 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 深爬等)禁止短 timeout0 或 ≥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 强制。


3. 手把手教程(命令行 + Agent)

下面用示例:ID=lab1scan_host=192.168.1.100,扫描环境 docker
lab1 / IP 换成你的值即可。

3.1 Phase 0 — 开工与授权

# 创建 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 / 客户确认:

  1. 编辑 target/lab1/phases/00-pre-engagement/scope.md(结构化:allow_hosts / deny_hosts / window / banned
  2. 编辑 target/lab1/phases/00-pre-engagement/authorization.md- status: confirmed
  3. 补全 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

3.2 看清「当前该干什么」

# 阶段地图(权威来自 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-* 当模板)。

3.3 Phase 1 — 情报收集

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

3.4 Phase 1b — Web 预测(可选)

仅当 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

3.5 Phase 2–5 — 威胁建模 → 验证 → 利用 → 后渗透

阶段 过程文件 你要盯的结果
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.mdaccess.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

3.6 Phase 6 — 报告

  1. .agents/REPORT-SKELETON.mdtarget/lab1/report.md正文用你的语言
  2. 引用仓库内相对路径的 Evidence(反引号路径须真实存在)
  3. 可选措辞参考: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

4. 每阶段结束清单(复制用)

□ 产物写在 schema 规定路径下(无 scans/、顶层 evidence/ 等禁止路径)
□ manifest 反引号路径 + 交接摘要字段齐全
□ phase ≥1 时 Authorization 已为 confirmed
□ validate --strict-summary [--stamp-chain] 通过
□ 可复用方法 → knowledge-base / PTES-INDEX(不要塞 target 细节当通用知识)
□ 临时文件清理;用用户语言同步进度

5. 命令速查

目的 命令
物化工作区 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

6. 目录(使用视角)

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 里跑)

7. 常见问题

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 有说明)。


8. 合规与安全

  • 仅在 Scope + Authorization confirmed 内测试
  • 破坏性操作前再次确认用户
  • 报告与笔记脱敏;密钥不进 knowledge

9. 深入阅读

文档 内容
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