Skip to content

fb0sh/pentester

Repository files navigation

Pentester

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

English


你将得到什么

产出 位置
一次评估工作区 target/${ID}/
阶段交接 manifest-phase-*.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/playwright-skill && npm run setup && cd -

# 可选:扫描容器
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. 你确认授权后:authorization.md- status: confirmed
  4. 按链执行 1→…→6,每阶段写 Manifest 并校验

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


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/scope.md(结构化:allow_hosts / deny_hosts / window / banned
  2. 编辑 target/lab1/authorization.md- status: confirmed
  3. 补全 manifest-phase-0.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,填 manifest-phase-1.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"
# 用 playwright-skill 写 /tmp 脚本,截图落到 EVIDENCE_DIR

# Web 攻击手册(禁止瞎编 payload)
node .agents/skills/src-hunter/playbook.js --signal "unauth,info,idor"
# Read 返回的 playbook 路径后再测

产出:services/function-map.md、截图、vulns/playwright/ 等 → manifest-phase-1-web.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/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/src-hunter/playbook.js --signal "sqli"
全量自测 npm run test:all

6. 目录(使用视角)

AGENTS.md                 # Agent 编排入口(先读)
CONTEXT.md                # 领域词
.agents/phases/           # 每阶段怎么做(执行权威)
.agents/schema/           # 路径与校验(契约权威)
.agents/skills/           # 工具适配(materialize / Playwright / playbook…)
.agents/knowledge/        # LOOKUP 策展知识(大库可外置)
.agents/REPORT-SKELETON.md
examples/schema-mini/     # 最小金样夹具(快速契约检查)
examples/DC-1-engagement/ # 真实金样夹具(真实语法 + 工具链冒烟)
target/${ID}/             # 你的本次评估(唯一工作区)
Skill 何时用
init-target Phase 0 物化
enum-services Phase 1 计划
src-hunter Web 手册 resolve
playwright-skill 浏览器 + Evidence
gen-report Phase 6 填表与检查
knowledge-base 查/写 tier-1 知识
setup-pentester-tools 依赖检查
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

About

基于 AI Agent 的渗透测试自动化框架,严格遵循 PTES(Penetration Testing Execution Standard)标准,覆盖渗透测试全生命周期。| An automated penetration testing framework based on AI agents strictly adheres to the PTES (Penetration Testing Execution Standard) standards and covers the entire life cycle of penetration testing.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages