Nuclei 作为一款高效的漏洞扫描工具,其核心在于 YAML 模板系统。这种模板驱动的设计允许安全工程师针对特定协议快速构建 vuln(漏洞)、misconfig(误配置)和 secret(密钥)检测逻辑,避免传统扫描器的黑盒低效。相比静态规则引擎,YAML 模板支持 extractors 提取动态数据和 DSL matchers 实现复杂条件判断,能显著降低误报率并适应多变环境。
YAML 模板的基本结构高度标准化,包括 id(唯一标识)、info(元数据:name、author、severity、tags、reference)、协议块(如 http、network、file)和核心组件 matchers/extractors。以 HTTP 协议为例,一个基础模板框架如下:
id: example-http-vuln
info:
name: "示例 HTTP 漏洞检测"
author: "your-team"
severity: high
tags: vuln,http,misconfig
http:
- method: GET
path:
- "{{BaseURL}}/admin"
matchers:
- type: word
words:
- "admin panel"
condition: and
extractors:
- type: regex
part: body
regex:
- "secret: ([A-Za-z0-9]{32})"
这里,info 提供上下文,http 定义请求路径,matchers 判断命中,extractors 捕获敏感数据如密钥。
Matchers 是检测命中的关键,支持多种类型确保协议特定精度。以 vuln/misconfig 为焦点:
-
status/word/regex:基础匹配。status 检查 HTTP 码(如 200),word/regex 扫描响应体。例如,检测 Git misconfig:
matchers: - type: word words: - "[core]" - "repositoryformatversion" condition: and part: body这针对 /.git/config 路径,证据来自社区模板统计:file 目录 436 个模板多用于此类暴露检测。
-
dsl:DSL(Domain Specific Language)是最强大 matcher,支持复杂表达式如逻辑运算、变量比较。用于时间盲注 vuln:
matchers: - type: dsl dsl: - "duration >= 5" # 响应延迟 >5s 表示注入成功 - "status_code == 200"DSL 内置变量:status_code、body、all_headers、duration、content_length。社区数据显示,vuln 标签模板达 6468 个,许多依赖 DSL 组合 status + body 内容,避免单一规则误报。
对于 network 协议 misconfig,如开放 Redis 未授权:
network:
- host: "{{Hostname}}"
port: 6379
matchers:
- type: dsl
dsl:
- "contains(body, '+PONG')"
Extractors 则从响应中提取数据,支持后续 workflow 或报告。类型包括 regex(正则捕获)、kval(键值对,如 JSON "key: value")、json 等。secret 检测典型示例(file/http):
extractors:
- type: regex
name: api_key
part: body
regex:
- "(?i)api[_-]?key[:=]\\s*[\\w-]{20,}"
- type: kval
kv_type: flag
part: header
keys:
- "X-API-Key"
提取组可注入变量 {{api_key}},用于链式检测。证据:cloud 目录 659 模板多用 extractors 捕获 AWS/Azure 密钥模式。
协议特定落地参数与清单:
-
HTTP Vuln/Misconfig:
- 路径 fuzz:使用 payloads 字典,如 common-admin-paths.txt。
- 参数:nuclei -t http/-c 50 -rl 100 -bs 25(并发 50,限速 100r/s,批量 25)。
- 监控:-metrics-port 9090,观察 requests.rate >80% 调整 -rl。
-
Network/File Secret:
- File:扫描本地 / 远程文件暴露,extractors 优先 regex 多组捕获。
- 参数:-protocols network,file -timeout 10s -retries 2。
- 风险控制:添加 negative matchers(如!contains (body, "404")),severity=info 预过滤。
-
Workflow 高级链:
workflows: - template: technologies/http-detection.yaml subtemplates: - template: vulnerabilities/cve-specific.yaml提取数据跨模板共享,适用于 misconfig → vuln 链。
风险与限值:DSL 复杂度高可能增 CPU(限 template-threads=10);大规模扫描(11k + 模板)需分 tag 执行,如 -tags vuln,misconfig。误报阈值:>20% 则调紧 dsl 条件(如 and 组合 3 + 规则)。
部署清单:
- 更新模板:nuclei -ut。
- 验证:nuclei -validate -t templates/。
- CI/CD:GitHub Actions 集成 nuclei -l targets.txt -o report.json。
- 回滚:自定义 low-severity 模板覆盖默认。
实际效能:社区 KEV(Known Exploited Vulns)覆盖 1496 模板,http 9281 个专注 vuln/misconfig。通过参数调优,单机 4 核扫描 10k 目标 <1h,准确率>95%(DSL+extractors)。
资料来源:ProjectDiscovery Nuclei-templates GitHub 仓库(https://github.com/projectdiscovery/nuclei-templates),官方文档(https://docs.projectdiscovery.io/templates),社区模板统计与示例。
(正文字数:1028)