Files
CyberStrikeAI/skills/pentest-blackboard/SKILL.md
T
2026-07-29 11:43:53 +08:00

112 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: pentest-blackboard
description: >-
CyberStrikeAI 项目黑板:跨会话 Fact 图(SQLite+ upsert_project_fact/record_vulnerability
边渗透边记录节奏、关系边 links、confidence、与多代理协调落库。Use when managing project
facts, blackboard index, writing evidence, or avoiding context-loss after compression.
metadata:
tags: [渗透测试, penetration-testing, 红队, 项目黑板]
---
# 项目黑板(与本产品对齐)
> 状态落在**已绑定项目**的 SQLite 黑板,不依赖对话上下文,也不使用 `.pentest/` 目录。
> 系统自动注入「项目黑板索引」(仅 `fact_key` + summary);**摘要不足必须 `get_project_fact`,禁止凭摘要臆造细节。**
## 原语与分工(产品模型)
| 概念 | 产品落点 | 规则 |
|------|----------|------|
| **Fact** | `project_facts``upsert_project_fact` | 同 `fact_key` **覆盖更新**;非正式漏洞条目。`confidence`: `confirmed` \| `tentative` \| `deprecated` |
| **关系边** | `project_fact_edges`upsert 的 `links` | 结构化攻击图;finding/chain/exploit/poc **必须**带 links |
| **可交付漏洞** | `record_vulnerability` | 与 Fact **可各记一次**:Fact=复现上下文,漏洞=正式 finding |
| **探索方向** | 本轮计划 / 协调者委派 / plantask(若启用) | **不是**独立 Intent 表;待验证方向用 `confidence=tentative``note/` 或先不落库、验证后再写 |
| **人类注入** | 用户消息 / HITL 审批 | 直接吸收进决策;不必写成 Hint 原语 |
### Fact vs 漏洞
- **环境/目标/认证等认知** → 只写 Fact(`target/` `auth/` `infra/` `business/`
- **发现与利用上下文** → Fact(`finding/` `chain/` `exploit/` `poc/`+ body 填满攻击链
- **可交付 findings** → `record_vulnerability`(标题、严重程度、类型、目标、POC、影响、修复);记前可用 `list_vulnerabilities` 查重
## 强制节奏:边渗透边记录
勿等会话结束再批量写入。
1. 每**确认**一条新认知(开放端口/服务版本、入口路径、认证态或凭据特征、可利用点或攻击面变化)→ **立即** `upsert_project_fact`(同 key 覆盖)。
2. 每**验证**出一条可复现漏洞(含 POC/影响)→ **立即** `record_vulnerability`;与事实可各记一次。
3. 继续下一步前优先落库,避免上下文压缩丢细节。
4. **未绑项目**:说明无法写黑板,仍在本轮保留证据摘要。
5. **协调者**:子任务返回新认知/漏洞时由协调者写入,勿假定子代理已记。
6. **子代理无工具时**:交付物末尾给「待落库」条目(建议 `fact_key`、summary、body/POC 要点),供协调者立即写入。
## 工具速查
| 工具 | 用途 |
|------|------|
| `upsert_project_fact` | 写入/更新事实(含 body、confidence、links |
| `get_project_fact` | 按 key 取完整 body(索引不够时必调) |
| `list_project_facts` / `search_project_facts` | 检索黑板 |
| `deprecate_project_fact` / `restore_project_fact` | 误报废弃 / 恢复 |
| `record_vulnerability` | 可交付漏洞 |
| `list_vulnerabilities` / `get_vulnerability` | 查重与详情 |
前置:**当前对话已绑定项目**(否则工具报错)。
## 写入规范
### fact_key / category
- 格式:小写 `category/slug`(如 `target/primary_domain``finding/sqli-login`
- 环境:`target` \| `auth` \| `infra` \| `business`
- 发现利用:`finding` \| `chain` \| `exploit` \| `poc`(另可用 `note`
- **同一发现保持同一 `fact_key` 覆盖**,勿拆成多个 key 导致上下文丢失
### summary / body / confidence
- **summary**(索引用一行):须含「什么 + 在哪 + 如何触发/验证」,禁止只写「存在 SQLi」
- **body**:完整可复现上下文(索引不含 body)。发现/利用类必含:入口 → 步骤 → 原始请求/响应或命令 → 现象 → 证据 → `related_vulnerability_id`(若有)
- **confidence**:有证据钉死 → `confirmed`;仅线索/待验证 → `tentative`;误报 → `deprecate_project_fact`(或 `deprecated`
- 更新时若省略 body,保留库中已有 body(可只改 summary
### 关系边 links(写入 finding/chain/exploit/poc 时必填)
- 推荐 `from`:来源 fact → 当前 `fact_key`
- 最少:finding 至少 1 条 `{from: target/*, type: discovered_on}`;在 finding 上挂 exploit 用 `{from: exploit/*, type: exploits}`
- 常用 type`discovered_on` \| `depends_on` \| `leads_to` \| `enables` \| `exploits` \| `contains` \| `part_of` \| `supports`
- **省略 links** = 保留已有边;传入 links = **替换**全部入边
## 工作方式(对齐本产品编排)
不设 Bootstrap/Reason/Explore 磁盘状态机。按当前运行模式推进,但**读写黑板的纪律不变**:
| 模式 | 黑板用法 |
|------|----------|
| 单代理 / deep | 边干边 `upsert_project_fact`;读索引不够则 `get_project_fact` |
| plan_execute | 计划步骤产出认知后立即落库;重规划前 `list/search_project_facts` |
| supervisor | 协调者汇总子代理「待落库」并写入;子代理无工具则结构化交付 |
卡住时:换边/换起点/换攻击域;用 `search_project_facts` 重审已有 Fact,避免重复死路。负结果也要落库(见验证铁律 skill)。
## 行为触发器(纪律)
每步必检(不检=违反验证铁律):
1. **识别→搜**:识别任何组件/框架/版本/中间件 → 暂停利用 → 立即执行 `component-vuln-intel` 全部命令(browser_navigate+terminal curl7 个步骤全做)→ 结果用 `tentative` Fact 或本轮计划跟踪 → 搜完才继续。不搜就说「无已知漏洞」=幻觉;**验证后**再 `confirmed` / `record_vulnerability`
2. **拒绝→换路**:收到 403/429/超时/RST/WAF 拦/CDN 502/限流/空响应 → 禁止同条件重试 → 立即换路序列:SOCKS5 代理→换 UA→加 XFF→换协议(WS/DNS)→换端口→编码变异(完整代理获取/验证见 `proxy-tool-bootstrap`)→ 全换仍不通才写负结果 Fact`confirmed` + body 写清已测条件)换面。
3. **新认知→横向**:拿到凭据/域名/IP/路径 → 立即横向喷:凭据全服务复用 / 新域名全端口扫 / IP 反查同站 → 不等人指示自动扩展攻击面,并 `upsert_project_fact`(如 `auth/cred-*``target/related-*`)。有凭据不喷=遗漏。
违反判定:不搜就说「无已知漏洞」=幻觉;被拦不换路=放弃;有凭据不喷=遗漏 → 均违反验证铁律。
## 证据 / 战利品 / 改动
| 原「磁盘」概念 | 本产品做法 |
|----------------|------------|
| evidence/ | Fact `body` + `record_vulnerability` 的证明字段 + 工具执行记录;大文件放会话/项目 workspace |
| loot/ | 凭据特征写入 `auth/` Fact(注意脱敏与授权范围);完整秘密按项目策略处理 |
| changelog.md | 写入型改动在回复中台账化,并可 `note/change-*` Fact 记录主机/类型/位置/回滚命令 |
## 与验证铁律的衔接
详见 `pentest-verification`:搜索≠漏洞;无证据不写 `confirmed`;禁止空泛「可能/疑似」当结论;验证失败写负结果 Fact。