news 2026/10/5 9:32:52

Nuclei 实战入门:从 YAML 模板到同类型漏洞的批量排查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nuclei 实战入门:从 YAML 模板到同类型漏洞的批量排查

一、工具定位:为什么是 Nuclei?

它是一款基于 YAML 语法模板的定制化快速漏洞扫描器,用 Go 语言开发,核心优势在于可配置、可扩展、易用。简单来说,它的价值在于把“某处漏洞的验证逻辑”变成了一个可以共享、复用、批量执行的模板文件。

Nuclei 不是要替代 Nessus、AWVS 这类重型扫描器,而是作为敏捷补充,专注于精准、快速、高可扩展的漏洞验证与暴露面发现。

二、安装:Windows 与 Linux 两条路径

Windows 安装

官方推荐直接下载发行版二进制文件,解压后加入 PATH 即可。也可以用 Chocolatey 或 Scoop 安装:

choco install nuclei scoop install nuclei

验证安装:nuclei -version

方法一:直接下载二进制文件(推荐,最简单)
  1. 下载
    打开浏览器访问 Nuclei 的 GitHub Releases 页面:

    https://github.com/projectdiscovery/nuclei/releases

    找到最新版本,在 Assets 里下载 Windows 对应的压缩包,一般叫nuclei_x.x.x_windows_amd64.zip。

  2. 解压
    把压缩包解压到一个你方便管理的目录,比如D:\Tools\nuclei\。解压后你会看到nuclei.exe。

  3. 配置环境变量(可选但推荐)
    如果你希望在任何目录下都能直接用nuclei命令,需要把D:\Tools\nuclei这个路径加到系统环境变量Path里:

    • 右键“此电脑” → 属性 → 高级系统设置 → 环境变量

    • 在“系统变量”里找到Path,点击“编辑” → “新建”,填入D:\Tools\nuclei

    • 一路确定保存

  4. 验证
    关闭当前 PowerShell,重新打开一个新窗口(这一步很重要,否则环境变量不生效),然后输入:

    powershell

    nuclei -version

    如果能看到版本号,就说明安装成功了。

  5. 首次运行
    第一次运行 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 模板都包含:

  1. id:模板唯一标识,不能有空格

  2. info:元数据,包括 name、author、severity、description、tags、reference 等

  3. 协议块: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

清爽多了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 9:32:31

STM32解析GPS模块NMEA0183数据:从串口字节流到经纬度转换完整指南

拿到STM32和GPS模块,第一件事就是接上串口看输出。如果你用USB转TTL直接接GPS模块,打开串口助手,会看到一行行以$开头的字符串,比如$GPRMC,083559.00,A,3958.7888,N,11625.5624,E,0.047,66.05,080724,,,D*68。很多人到这一步就开始…

作者头像 李华
网站建设 2026/10/5 9:32:28

AI编程工作流实战:从提示词到代码生成、调试与测试的完整落地

最近后台私信里频率最高的一个问题,就是“AI 编程到底怎么落地”。大家普遍的感觉是:让大模型写个简单函数挺快的,但一放到真实项目里就变味了——要么上下文太长,要么生成的代码风格和项目完全对不上,要么改三遍还带着…

作者头像 李华
网站建设 2026/10/5 9:32:15

小样本医学图像分割实战:U-Net+SVM纹理后处理方案

简介:本资源为第七届泰迪杯数据挖掘挑战赛B题「直肠癌肿瘤分割」的完整参赛方案包,面向高校医学影像AI方向的学生团队与初阶算法实践者,聚焦医学图像语义分割任务中的数据预处理、模型训练与结果可视化全流程。压缩包共24个文件,含…

作者头像 李华
网站建设 2026/10/5 9:30:44

AI编程工作流实战:三段式起稿、遗留代码改造与批量生成

1. 为什么“能立刻复用”比“功能强大”更重要我见过太多人收藏了几百个AI编程工具,从代码补全到全自动Agent,硬盘里塞满了各种配置文件,结果日常写代码时还是一个Tab一个Tab地敲。问题不在于工具不好,而在于那些工作流要么配置太…

作者头像 李华
网站建设 2026/10/5 9:29:56

Superpowers:让AI编程从“快而不稳”到“可靠可控”的实践指南

Superpowers这个词,在AI编程圈里现在越来越常被提起。我第一次看到这名字,以为又是一个主打生成速度的工具,真正用下来才发现,它瞄准的根本不是“快”的问题,而是“快完之后代码能不能用”的问题。AI编程提示词写得再花…

作者头像 李华
网站建设 2026/10/5 9:29:52

AI Agent 接入 Redis 缓存实战:四层缓存架构与性能优化

1. AI Agent 接入 Redis 缓存,到底在解决什么问题做 AI Agent 开发的人,迟早会撞上一堵墙:响应慢、Token 烧得快、并发一上来就崩。我最早搭的一个基于大模型的问答 Agent,单机跑着挺舒服,一旦放到线上让几十个人同时用…

作者头像 李华