一、工具定位:为什么是 Nuclei?
它是一款基于 YAML 语法模板的定制化快速漏洞扫描器,用 Go 语言开发,核心优势在于可配置、可扩展、易用。简单来说,它的价值在于把“某处漏洞的验证逻辑”变成了一个可以共享、复用、批量执行的模板文件。
Nuclei 不是要替代 Nessus、AWVS 这类重型扫描器,而是作为敏捷补充,专注于精准、快速、高可扩展的漏洞验证与暴露面发现。
二、安装:Windows 与 Linux 两条路径
Windows 安装
官方推荐直接下载发行版二进制文件,解压后加入 PATH 即可。也可以用 Chocolatey 或 Scoop 安装:
choco install nuclei scoop install nuclei验证安装:nuclei -version
方法一:直接下载二进制文件(推荐,最简单)
下载
打开浏览器访问 Nuclei 的 GitHub Releases 页面:https://github.com/projectdiscovery/nuclei/releases找到最新版本,在 Assets 里下载 Windows 对应的压缩包,一般叫
nuclei_x.x.x_windows_amd64.zip。解压
把压缩包解压到一个你方便管理的目录,比如D:\Tools\nuclei\。解压后你会看到nuclei.exe。配置环境变量(可选但推荐)
如果你希望在任何目录下都能直接用nuclei命令,需要把D:\Tools\nuclei这个路径加到系统环境变量Path里:
右键“此电脑” → 属性 → 高级系统设置 → 环境变量
在“系统变量”里找到
Path,点击“编辑” → “新建”,填入D:\Tools\nuclei一路确定保存
验证
关闭当前 PowerShell,重新打开一个新窗口(这一步很重要,否则环境变量不生效),然后输入:powershell
nuclei -version如果能看到版本号,就说明安装成功了。
首次运行
第一次运行 Nuclei 时,它会自动去下载模板到你的用户目录(一般是C:\Users\你的用户名\nuclei-templates\)。如果下载慢或失败,可以手动去https://github.com/projectdiscovery/nuclei-templates下载模板包,解压到那个目录里。
不想把模板下到 C 盘
用命令直接修改路径就行。
🎯 核心操作:使用-ud参数
Nuclei 有一个专门的参数-ud(-update-directory),可以指定模板的下载和存储位置。
在 PowerShell 中执行以下命令:
powershell
nuclei -update-templates -update-template-dir "E:\desktop\相关软件和工具-7z\11_github上自动化漏扫工具\nuclei\模板库"
参数说明:
-update-templates:更新模板-update-template-dir:指定自定义的模板目录
执行后,Nuclei 会把模板下载到你指定的位置,之后再扫描时,它默认就会去这个新目录里找模板使用。
💡 后续小提示
保持一致性:以后每次想更新模板,都记得带上
-ud参数并跟上这个路径。扫描时的选择:如果你想同时使用官方模板和自己的自定义模板,可以通过
-t参数指定额外的模板路径。
方法二:如果你确实想用包管理器
如果你想用 Chocolatey,需要先以管理员身份打开 PowerShell,然后执行官方安装命令:
powershell
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
最后几行显示:
Chocolatey CLI (choco.exe) is now ready.
Chocolatey profile installed.不过它也明确提示了:
WARNING: It's very likely you will need to close and reopen your shell before you can use choco.
意思是:当前这个 PowerShell 窗口里还不能直接用
choco命令,必须关掉重新打开一个新窗口(管理员)。安装完 choco 后,再执行
choco install nuclei。
这时候开个代理就行了,一般都是网络问题
如果你想用 Scoop,也需要先安装 Scoop:
powershell
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser irm get.scoop.sh | iex
问题 1:
Set-ExecutionPolicy报权限不足报错
PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException,是因为你当前 PowerShell 不是管理员权限。这个命令要在管理员窗口才能改用户级的执行策略。解决:关掉当前窗口,重新以管理员身份打开 PowerShell,再执行:
powershell
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser出现提示时输入
Y确认。问题 2:
irm get.scoop.sh | iex连接失败报错
基础连接已经关闭: 发送时发生错误,说明你当前的网络根本连不上 scoop 的安装脚本地址(get.scoop.sh)。这也侧面解释了为什么之前 Chocolatey 装 nuclei 会失败——你现在的网络环境对国外站点基本是不通的。安装完 scoop 后,再执行
scoop install nuclei。注意:这两个包管理器安装过程本身也可能遇到网络问题(尤其是国内网络),所以对新手来说,方法一直接下载二进制文件是最稳妥的。
建议
既然你的目标是快速进入实操,我建议你直接用方法一。等你把 Nuclei 跑起来、模板下载好之后,我们再继续下一步——比如用
nuclei -u 你的靶场地址跑一次扫描,或者一起写一个自定义的 YAML 模板。
Linux 安装(含 Kali)
Kali 可以一键安装:apt install nuclei。
通用 Linux 发行版推荐用 Go 安装,这样能确保拿到最新版本:
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest安装后 Nuclei 会在首次运行时自动下载模板到~/nuclei-templates/。也可以手动更新:nuclei -update-templates。
三、模板结构:理解“同类型漏洞的模板”怎么写的
模板的三个必备部分
每个 Nuclei 模板都包含:
id:模板唯一标识,不能有空格
info:元数据,包括 name、author、severity、description、tags、reference 等
协议块:HTTP、DNS、TCP、File 等,其中最常用的是 HTTP 请求
一个最小化的 HTTP 模板骨架:
yaml
id: basic-example info: name: Test HTTP Template author: pdteam severity: info requests: - method: GET path: - "{{BaseURL}}/" matchers: - type: word words: - "This is test matcher text"“同类型漏洞”的抽象思路
原文的 Spring Boot 模板(CVE-2021-21234)展示了如何把一处具体的目录遍历漏洞泛化成一类检测逻辑:模板里针对 Windows 和 Linux 分别写了多条路径,匹配器里同时用regex匹配root:.*:0:0(Linux passwd 特征),又用word匹配bit app support、fonts、extensions(Windows win.ini 特征),并用matchers-condition: or让任意一个命中就算发现漏洞。
这其实就是“同类型漏洞模板”的典型写法:不绑定某一个具体 URL,而是把漏洞的特征(路径模式、响应特征)抽象成可匹配的条件。
匹配器类型(写模板时最常用的)
原文只展示了word和regex,我补充一下官方文档列出的主要匹配器类型:
| 匹配器类型 | 用途 | 示例场景 |
|---|---|---|
| status | 匹配 HTTP 状态码 | 检测未授权访问(200) |
| word | 匹配响应中的字面字符串 | 匹配root:x:0:0判断 /etc/passwd 泄露 |
| regex | 正则匹配 | 匹配sql syntax.*mysql判断 SQL 注入 |
| dsl | 用表达式做复杂逻辑 | status_code == 200 && len(body) > 1000 |
| binary | 匹配二进制字节序列 | 检测特定文件签名 |
多个匹配器可以用matchers-condition: and或or组合。
四、基础使用
扫描单个目标:
nuclei -u https://example.com扫描多个目标:
nuclei -list urls.txt按标签筛选:
nuclei -u https://example.com -tags cve按严重级别筛选:
nuclei -u https://example.com -severity critical,high输出报告:
-o result.txt(文本)、-json(JSON)、-me result(Markdown)
确认一下模板目录
🚀 跑第一个扫描
复制下面这条命令执行(用的是你截图里的实际路径):
powershell
nuclei -u https://example.com -t "E:\desktop\相关软件和工具-7z\11_github上自动化漏扫工具\nuclei\nuclei-templates-10.4.9\http" -duc -silent
预期结果:
几秒内返回,不报错,什么都不显示 →说明环境完全正常(
example.com没有可匹配的漏洞,这是正常情况)如果报"找不到模板"之类的错误 → 路径写错了,需要调整
🎯 再拿一个真实靶场测试
为了让你看到 Nuclei 真正检测出漏洞的效果,扫一下 Acunetix 提供的公开测试站点:
powershell
nuclei -u https://testphp.vulnweb.com/ -t "E:\desktop\相关软件和工具-7z\11_github上自动化漏扫工具\nuclei\nuclei-templates-10.4.9\http" -duc -severity medium,high,critical
这个站点是专门给安全工具做测试用的,扫描它是合法且被鼓励的。
可能的结果:
输出类似
[xxxxx] [http] [medium] https://testphp.vulnweb.com/...的检测结果或者提示"没有发现"(如果站点近期修补了)
如果扫出结果,恭喜你,Nuclei 完整跑通了!如果没结果也没关系,说明模板没匹配到,你可以换一条参数,比如去掉-severity限制,或者换成扫example.com。
从截图看,其实扫描正在正常进行中,它没有卡住。你看下面这几行就明白了:
text
[INF] Templates loaded for current scan: 6411 [INF] Executing 6411 signed templates from projectdiscovery/nuclei-templates [INF] Targets loaded for current scan: 1 [INF] Templates clustered: 365 (Reduced 310 Requests) [INF] Using Interactsh Server: oast.site这说明 Nuclei已经加载了 6411 个模板,正在对
testphp.vulnweb.com逐个发送请求。这个过程需要几分钟,因为它要跑完 6000 多个模板。⚠️ 但有一个小错误要注意
text
[ERR] Could not find template 'i\nuclei-templates-10.4.9\http': could not find template file: no such path found: i\nuclei-templates-10.4.9\http这条报错说明你的
-t参数里的路径被截断了。看输出里的i\nuclei-templates-10.4.9\http,正常的路径应该是...\nuclei\nuclei-templates-10.4.9\http,但这里变成i\nuclei-templates-10.4.9\http——说明路径中的某个部分(很可能是中文路径或者长路径)在解析时出了问题。不过它不影响扫描,因为 Nuclei 已经自己识别到了模板目录(可能你之前
-update-template-dir配置过),所以它仍然加载了 6411 个模板在跑。🎯 现在有两个选择
选择 A:耐心等它跑完(推荐)
6000 多个模板扫一个站点,大概需要3-10 分钟。你现在去泡杯茶,等它自己结束。结束后会显示一行结果汇总,比如:
text
[INF] Scan completed in 5m23s. 3 matches found.选择 B:Ctrl+C 中断,换一个更快的方式
如果你想快点看到结果,可以直接中止(
Ctrl+C),然后只跑 CVEs 目录(几百个模板,1 分钟内出结果):powershell
nuclei -u https://testphp.vulnweb.com/ -t "E:\desktop\相关软件和工具-7z\11_github上自动化漏扫工具\nuclei\nuclei-templates-10.4.9\http\cves" -duc这样能更快看到 Nuclei 真正扫出漏洞的效果。
💡 关于那条路径报错
顺便建议你把模板目录移动到一个纯英文、无空格的短路径,比如:
text
E:\nuclei-templates\这样以后写命令会干净很多,也不会出现中文路径被截断的问题。移动方法:
powershell
Move-Item "E:\desktop\相关软件和工具-7z\11_github上自动化漏扫工具\nuclei\nuclei-templates-10.4.9" "E:\nuclei-templates"移动完之后,命令就变成:
powershell
nuclei -u https://testphp.vulnweb.com/ -t "E:\nuclei-templates\http" -duc清爽多了。