Nuclei 是由知名安全公司 ProjectDiscovery 开发的一款 基于模板的高速漏洞扫描器。
如果说长亭 Xray 是"语义分析"的代表,那么 Nuclei 就是 "模板化扫描" 的王者。
它的核心理念是:一切皆模板 。
社区维护了海量的 YAML 格式漏洞模板(Nuclei Templates),使得 Nuclei 能够以极快的速度检测出最新的 CVE 漏洞、配置错误、敏感信息泄露等问题。
文章目录
-
-
- [🚀 核心特点](#🚀 核心特点)
- [⚔️ Nuclei vs Xray:怎么选?](#⚔️ Nuclei vs Xray:怎么选?)
- [🛠️ 安装与快速开始](#🛠️ 安装与快速开始)
-
- [1. 安装](#1. 安装)
- [2. 初始化 (重要!)](#2. 初始化 (重要!))
- [💻 实战命令演示](#💻 实战命令演示)
- [📝 如何编写一个简单的 Nuclei 模板?](#📝 如何编写一个简单的 Nuclei 模板?)
- [⚠️ 注意事项](#⚠️ 注意事项)
-
🚀 核心特点
- 模板驱动 (Template-Driven)
- 这是 Nuclei 的灵魂。所有的检测逻辑都写在 YAML 文件中。
- 优势 :当新漏洞(如 Log4j, Spring4Shell)爆发时,社区通常在几小时内就会提交新的 POC 模板。你只需运行
nuclei -update-templates,即可立刻拥有检测最新漏洞的能力,无需等待软件版本更新。
- 多协议支持
- 不仅支持 HTTP/HTTPS ,还支持 DNS 、TCP 、SSL/TLS 、Websocket 、WHOIS 等协议。这使得它能扫描的范围比纯 Web 扫描器更广(例如检测 DNS 重绑定、SSL 证书问题、数据库端口暴露等)。
- 极速并发
- 基于 Go 语言开发,采用高度并发的架构,扫描速度极快,非常适合大规模资产普查。
- 高度可定制
- 用户可以轻松编写自己的 YAML 模板,甚至可以通过
interactsh集成进行 OAST (带外攻击测试),检测盲注、SSRF、RCE 等无回显漏洞。
- 用户可以轻松编写自己的 YAML 模板,甚至可以通过
- 生态丰富
- 拥有庞大的社区模板库(
nuclei-templates),涵盖 CVE、默认凭证、敏感文件、技术栈指纹识别等数万个检测项。
- 拥有庞大的社区模板库(
⚔️ Nuclei vs Xray:怎么选?
| 特性 | Nuclei | Xray (长亭) |
|---|---|---|
| 核心机制 | 模板匹配 (YAML) | 语义分析 + 内置规则 |
| 更新速度 | 极快 (社区实时更新模板) | 较快 (依赖官方版本或自定义POC) |
| 协议支持 | 全协议 (HTTP, DNS, TCP, SSL...) | 主要聚焦 HTTP/HTTPS |
| 误报率 | 低 (取决于模板质量) | 极低 (语义分析优势明显) |
| 适用场景 | 批量资产普查 、最新 CVE 检测、多协议扫描 | 深度渗透测试、复杂逻辑漏洞、低误报要求场景 |
| 自定义难度 | 简单 (YAML 易读易写) | 中等 (需理解其 POC 语法) |
| 联动能力 | 强 (常与 Subfinder, Httpx 搭配) | 强 (常与 Burp, Radium 搭配) |
最佳实践 :在很多高级渗透测试流程中,安全工程师会 同时使用两者。先用 Nuclei 快速过一遍最新 CVE 和配置错误,再用 Xray 进行深度的被动扫描以发现逻辑漏洞。
🛠️ 安装与快速开始
1. 安装
Nuclei 也是跨平台二进制文件,无需安装环境。
- GitHub : https://github.com/projectdiscovery/nuclei
- Mac (Homebrew) :
brew install nuclei - Linux/Windows: 下载对应压缩包解压,或将二进制文件放入环境变量路径。
2. 初始化 (重要!)
首次使用前,必须更新漏洞模板库:
bash
nuclei -update-templates
这会从 GitHub 下载最新的 nuclei-templates 集合。
💻 实战命令演示
场景一:基础扫描 (单个目标)
对目标网站进行全量模板扫描。
bash
nuclei -u https://example.com
-u: 指定目标 URL。- 输出结果默认在终端显示。
场景二:指定模板类型扫描
只扫描高危漏洞或特定类型的漏洞(节省时间)。
bash
# 只扫描 CVE 漏洞
nuclei -u https://example.com -tags cve
# 只扫描严重级别为 Critical 和 High 的漏洞
nuclei -u https://example.com -severity critical,high
# 扫描特定的 CVE,例如 Log4j
nuclei -u https://example.com -id cve-2021-44228
-tags: 按标签过滤(如cve,misconfig,exposure)。-severity: 按严重程度过滤(info,low,medium,high,critical)。-id: 指定具体的模板 ID。
场景三:批量资产扫描 (最常用)
配合子域名收集工具(如 Subfinder)或资产列表文件。
bash
# 从文件读取目标列表
nuclei -l targets.txt -o results.txt
# 管道符联动:收集子域名 -> 筛选存活HTTP -> Nuclei扫描
subfinder -d example.com | httpx -silent | nuclei -severity critical,high
-l: 输入文件列表。-o: 输出结果到文件。- 这是自动化渗透测试的标准流水线。
场景四:自定义模板扫描
如果你自己写了 POC 模板(my-poc.yaml)。
bash
nuclei -u https://example.com -t my-poc.yaml
# 或者加载整个自定义目录
nuclei -u https://example.com -t ./my-custom-templates/
-t: 指定模板文件或目录。
场景五:生成报告
bash
# 生成 JSON 格式报告(便于对接其他系统)
nuclei -u https://example.com -json-export report.json
# 生成 Markdown 格式报告
nuclei -u https://example.com -markdown-export report_md/
📝 如何编写一个简单的 Nuclei 模板?
Nuclei 模板是 YAML 格式,非常直观。以下是一个检测 Git 配置文件泄露 的简单示例:
yaml
id: git-config-exposure # 模板唯一 ID
info:
name: Git Config File Exposure
author: your_name
severity: medium # 危险等级
description: Detects exposed .git/config files which may leak sensitive info.
tags: exposure, git
http:
- method: GET
path:
- "{{BaseURL}}/.git/config" # 探测路径
matchers-condition: and
matchers:
- type: word
words:
- "[core]"
- "repositoryformatversion"
condition: and # 必须同时包含这两个词
- type: status
status:
- 200 # 状态码必须是 200
保存为 git-expose.yaml,运行 nuclei -u http://target.com -t git-expose.yaml 即可检测。
⚠️ 注意事项
- 噪音问题 :由于 Nuclei 是基于模板匹配,且模板数量巨大(数万个),全量扫描可能会产生大量请求,容易触发 WAF 或被目标封禁 IP。务必使用
-rate-limit参数限制速率 (例如-rate-limit 150)。 - 误报 :虽然模板质量很高,但依然可能存在误报。特别是
info级别的检测结果,通常只是指纹识别,不代表漏洞。 - 合法性 :同样,仅限授权测试。Nuclei 的高并发特性如果用于未授权扫描,极易被认定为攻击行为。