Nuclei 安全测试
这是一个面向 Codex 的 Nuclei 编排 Skill。它负责把明确授权的有限 URL 集合交给模板引擎检查,再用受控复打和业务证据过滤模板误报。它不把 Nuclei 原始命中直接当成漏洞结论。
公共工具分工见 安全测试工具分工。这份入口只保留 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:最终判定报告。
公共配置契约
配置文件优先级:
- 用户本轮点名的环境名。
- 项目
.codex/nuclei.config.yaml。 - 用户目录
~/.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 和可配置密码登录请求。发布包不包含任何项目专属短信、虚拟账号或测试钩子实现。
执行流程
- 读取配置并确认环境、目标范围、鉴权方式和扫描档位。
- 校验目标不是生产环境,且目标数量和方法符合配置及授权。
- 将
paths.json转成有限的targets.txt;路径参数使用配置示例,缺失时使用非业务占位值。 - 登录并验证
auth.success;鉴权失败时停止,不匿名裸扫。 - 运行 Nuclei:
module:使用配置中的默认标签和严重级别。cve:在默认筛选基础上追加 CVE 标签。full:在本轮明确点名后扩大标签范围,但仍只扫描本模块 URL,不能理解为全站或全模板库。
- 运行摘要脚本,再对
matched-at做受控复打:- 带配置鉴权重新请求。
- GET 额外做一次无鉴权请求,用于判断未授权读取。
- 不原样重放模板 exploit;POST 使用空对象。
- 按 triage.md 对照业务成功契约判定真问题、假阳性和加固项。
- 写出并打开
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:配置字段和登录契约。
- defaults.md:扫描档位和模板筛选。
- triage.md:复打证据和判定规则。
- README.md:复制、安装和产物速览。