# Nuclei Sec

> 在已获授权的测试或预发布环境中，使用 ProjectDiscovery Nuclei 对有限 HTTP URL 执行模板驱动的安全检查：按模块收窄目标、按标签和严重级别选择模板、复打命中 并输出带证据的判定报告。适用于暴露面、配置错误、已知 CVE 和特征匹配检查； 不适用于整站裸扫、无限制模板扫描、字段契约、业务联调、源码/依赖审计、 性能测试或生产扫描。

- Skill: `senshanshan/nuclei-sec` (Agent Skill, multi-file: 19 files)
- Install (CLI): `npx skillmds@latest add senshanshan/nuclei-sec`
- Raw SKILL.md: https://api.skillmd.com/api/skills/senshanshan/nuclei-sec/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: senshanshan (https://skillmd.com/u/senshanshan)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/senshanshan/nuclei-sec

---


# Nuclei 安全测试

这是一个面向 Codex 的 Nuclei 编排 Skill。它负责把**明确授权的有限 URL 集合**交给模板引擎检查，再用受控复打和业务证据过滤模板误报。它不把 Nuclei 原始命中直接当成漏洞结论。

公共工具分工见 [安全测试工具分工](../_shared/security-tool-boundaries.md)。这份入口只保留 Nuclei 必须知道的规则。

## 适用范围

- 测试或预发布环境中的 HTTP API 或明确 URL。
- 用户点名的模块、一个或多个 `METHOD + path`，或配置中的有限目标列表。
- 暴露面、配置错误、已知 CVE 和模板特征检查。
- 已配置的 token/header 或可配置登录请求。

不扩展到生产、整站自动发现、主机/DNS/云资产、浏览器 UI、源码扫描、依赖扫描、字段校验、业务联调或性能测试。

## 输入与输出

用户通常只需提供：

| 输入 | 用途 |
|---|---|
| 环境名 | 选择 `environments.<name>`，未提供时使用 `default_env` |
| 模块名或 `METHOD + path` | 限定 URL 范围；没有明确范围时先从配置或源码识别，不猜测 |
| 扫描档位 | `module`、本轮明确点名的 `cve` 或 `full` |
| 写接口授权 | 允许将 POST/PUT/DELETE 等非安全方法加入目标列表 |

执行产物：

- `nuclei/reports/last.jsonl`：Nuclei 原始命中。
- `nuclei/reports/last-summary.json`：压缩后的命中摘要。
- `nuclei/reports/last-summary.html`：原始命中可视化摘要。
- `nuclei/reports/last-recheck.json`：受控复打证据。
- `nuclei/reports/last-verdict.json`：结构化判定结果。
- `nuclei/reports/last-findings.html`：最终判定报告。

## 公共配置契约

配置文件优先级：

1. 用户本轮点名的环境名。
2. 项目 `.codex/nuclei.config.yaml`。
3. 用户目录 `~/.codex/nuclei.config.yaml`。

配置文件包含以下公共概念：

- `environments.<name>.base_url`：测试环境地址。
- `environments.<name>.login`：公开包装脚本支持 `password` 或 `token`；其他登录方式需要项目侧扩展包装脚本。
- `auth.header`、`auth.scheme`：鉴权头和是否追加 `Bearer`。
- `auth.success`：项目业务成功契约，例如 HTTP 状态和 JSON 业务码。
- `safe_methods`、`allow_unsafe_methods`：默认只处理安全方法，写接口需要独立授权。
- `modules`、`path_examples`：接口范围和路径参数示例。
- `nuclei`：可执行文件、目标上限、速率、超时、重试、模板类型、标签和严重级别。

配置授权是本开源版的目标使用模型：用户应在本地配置中明确授权范围，并在高风险扫描前确认。当前包装脚本仍以现有配置字段和命令参数为准，尚未实现统一 `authorization` 字段的运行时强制校验；文档不把它描述成已经存在的代码门禁。

本 Skill 的公开登录契约只承诺 token/header 和可配置密码登录请求。发布包不包含任何项目专属短信、虚拟账号或测试钩子实现。

## 执行流程

1. 读取配置并确认环境、目标范围、鉴权方式和扫描档位。
2. 校验目标不是生产环境，且目标数量和方法符合配置及授权。
3. 将 `paths.json` 转成有限的 `targets.txt`；路径参数使用配置示例，缺失时使用非业务占位值。
4. 登录并验证 `auth.success`；鉴权失败时停止，不匿名裸扫。
5. 运行 Nuclei：
   - `module`：使用配置中的默认标签和严重级别。
   - `cve`：在默认筛选基础上追加 CVE 标签。
   - `full`：在本轮明确点名后扩大标签范围，但仍只扫描本模块 URL，不能理解为全站或全模板库。
6. 运行摘要脚本，再对 `matched-at` 做受控复打：
   - 带配置鉴权重新请求。
   - GET 额外做一次无鉴权请求，用于判断未授权读取。
   - 不原样重放模板 exploit；POST 使用空对象。
7. 按 [triage.md](triage.md) 对照业务成功契约判定真问题、假阳性和加固项。
8. 写出并打开 `nuclei/reports/last-findings.html`；对话只报告已被证据确认的问题。

## 安全硬约束

- 目标必须来自有限列表；禁止 `nuclei -u <base_url>`、`-as` 和不带过滤的完整 HTTP 模板库。
- 不修改产品源码，不向生产环境发起扫描。
- 未获得写接口授权时，默认只生成 `safe_methods` 目标。
- `nuclei.max_urls` 是单轮硬上限；超出的目标要列入跳过项。
- 默认使用配置中的 `severity`、`tags` 和 `exclude_tags`；不能为了“全量”删除筛选条件。
- 不把密码、token、Cookie 值或完整 exploit 写入目标文件、报告、命令回显或聊天。
- Nuclei 退出码只表示工具运行状态或原始命中；没有 `last-recheck.json` 证据，不得直接报告为真问题。
- 报告结论必须说明扫描范围、环境、档位、标签、跳过的写口和复打证据，并注明不是上线放行证书。

## 与其他测试的边界

需要字段必填/类型/枚举验证时，使用 API 字段校验流程；需要多接口状态流、幂等或越权验证时，使用对应的业务/API 测试流程。需要源码、依赖、性能或浏览器覆盖时，选择对应的专用工具。

## 详细参考

- [config.md](config.md)：配置字段和登录契约。
- [defaults.md](defaults.md)：扫描档位和模板筛选。
- [triage.md](triage.md)：复打证据和判定规则。
- [README.md](README.md)：复制、安装和产物速览。

