一、Nuclei 简介
Nuclei 是由 ProjectDiscovery 开发的一款基于 YAML 模板的快速漏洞扫描器,专注于通过零误报的定制化模板实现高效安全检测。其核心设计理念是“以攻击性安全增强防御”,通过社区驱动的模板生态覆盖广泛漏洞场景。
1. 技术特点
- 多协议支持:涵盖 HTTP、DNS、TCP、SSL、Websocket 等协议,适应复杂网络环境。
- 高性能架构:基于 Go 语言开发,支持大规模并发扫描(默认 150 请求/秒)。
- 零误报机制:模板通过严格语法校验,确保检测结果准确性。
- 灵活扩展性:用户可自定义模板或直接使用社区维护的 nuclei-templates(含 300+ 研究员贡献的 2000+ 模板)。
2. 核心优势
- 企业级应用:支持云平台集成(Nuclei Cloud),提供远程扫描、历史记录、调度任务等功能。
- WAF 绕过:内置智能重试机制(RetryableHTTP 库),自动处理防火墙拦截。
- 跨场景适配:适用于渗透测试、红队演练、漏洞验证及日常安全监控。
二、安装与配置
Nuclei 支持多种安装方式,覆盖主流操作系统和环境:
1. 安装方法
-
安装 Nuclei 本体
- 通过官方预编译二进制文件安装(推荐):
- 下载地址:https://github.com/projectdiscovery/nuclei/releases
- 选择
nuclei_X.X.X_windows_amd64.zip
,解压后添加到系统环境变量PATH
中即可使用。
- 或通过 Go 语言环境编译安装:
go install -v github.com/projectdiscovery/nuclei/v2/cmd/nuclei@latest
- 通过官方预编译二进制文件安装(推荐):
-
Docker 部署:
docker pull projectdiscovery/nuclei:latest
-
预编译包:从 GitHub Releases 下载对应平台的二进制文件。
-
包管理器:
# Kali Linux apt install nuclei # macOS brew install nuclei
-
获取 Nuclei-templates (也可以使用Nuclei中的命令进行下载)
- 克隆官方模板库到本地:
git clone https://github.com/projectdiscovery/nuclei-templates.git
- 默认存储路径为
C:\Users\<用户名>\nuclei-templates
,可通过修改配置文件.templates-config.json
自定义存储位置(如 D 盘)。
- 克隆官方模板库到本地:
2. 模板管理
- 首次运行自动下载模板:默认存储于
~/nuclei-templates
。 - 手动更新模板:
nuclei -ut # 更新至最新版本
三、核心功能与使用场景
1.Nuclei参数作用详解
### 基础扫描参数
-target <目标> # 指定单个目标URL/IP,或包含多个目标的文件路径(如targets.txt)
-l <文件路径> # 等效于 -target,用于指定目标列表文件(别名参数)
-t <模板路径> # 指定扫描模板,支持单个模板文件、多个模板路径或模板目录(如 -t cves/)
### 并发与性能控制
-c <数值> # 设置并发请求数(默认10),高并发可加速扫描但可能触发防火墙(如 -c 50)
-rate-limit <数值> # 限制每秒最大请求数(默认150),防止过载目标服务器
-timeout <秒数> # 设置请求超时时间(默认5秒),如 -timeout 30
-retries <次数> # 设置失败请求的重试次数(默认1次)
### 输出与日志
-o <文件路径> # 将结果输出到指定文件,支持格式:txt/json/yaml/html(如 -o output.html)
-json # 强制以JSON格式输出结果
-silent # 仅显示成功匹配的漏洞结果,隐藏调试信息
-v # 显示详细请求日志,用于调试
### 高级配置
-p <端口> # 指定扫描端口(如 -p 80,443)
-H "头信息" # 自定义HTTP请求头(如 -H "User-Agent: CustomAgent")
-ssl-verify # 禁用SSL证书验证(参数值设为false)
-proxy-url <代理> # 设置HTTP/Socks5代理(如 -proxy-url http://127.0.0.1:8080)
### 模板管理
-update-templates # 更新本地漏洞模板库
-severity <等级> # 按漏洞严重性过滤模板(如 -severity critical,high)
-exclude <路径> # 排除特定模板或目录
### 特殊功能
-code # 启用代码执行模块(默认禁用),需配合签名模板使用
-project # 避免重复发送相同请求,提升扫描效率
-method <方法> # 指定HTTP请求方法(如POST/PUT),默认GET
2. 基础扫描命令
- 单目标扫描:
nuclei -u http://target.com -t cves/ -o result.txt
- 批量目标扫描:
nuclei -l targets.txt -t workflows/ -o results.json
- 管道输入(结合子域名工具):
subfinder -d example.com | nuclei -t exposures/ -silent
3. 模板筛选与过滤
- 按标签/作者:
nuclei -tags cve -a pdteam # 运行 PDTeam 团队的 CVE 模板
- 按严重性:
nuclei -severity critical,high # 仅扫描高危漏洞
- 排除特定模板:
nuclei -exclude-tags misconfig -eid CVE-2023-1234
4. 高级参数配置
- 并发控制:
nuclei -c 50 -rl 200 # 50 并发,200 请求/秒
- 代理与调试:
nuclei -proxy-url socks5://127.0.0.1:1080 -debug # 使用代理并显示请求详情
- 结果输出格式:
nuclei -jle -o results.jsonl # JSON Lines 格式输出
四、实战应用案例
1. 快速漏洞验证
# 检测 Spring4Shell(CVE-2022-22965)
nuclei -u http://target.com -id CVE-2022-22965 -silent
2. 自动化资产扫描
# 组合工具链:子域名发现 → 存活检测 → 漏洞扫描
subfinder -d example.com | httpx -silent | nuclei -t cves/ -o report.md
3. 自定义模板开发
通过 YAML 定义检测逻辑(示例模板):
id: example-xss
info:
name: Reflected XSS Detection
severity: medium
author: yourname
http:
- method: GET
path: "{{BaseURL}}/search?q=<script>alert(1)</script>"
matchers:
- type: word
words: ["<script>alert(1)</script>"]
五、Nuclei 在渗透测试中的高级用法
1、自动化资产发现与漏洞扫描
1. 结合子域名发现工具
通过将 Subfinder、Amass 等工具与 Nuclei 结合,自动化发现目标资产并扫描漏洞:
subfinder -d example.com | httpx -silent | nuclei -t cves/ -o results.txt
- 步骤解析:
- 使用
subfinder
发现目标域名子域名。 - 使用
httpx
过滤存活资产。 - 使用
nuclei
扫描已知 CVE 漏洞。
- 使用
2. 结合端口扫描工具
将 Nmap、Masscan 的端口扫描结果输入 Nuclei:
nmap -p 80,443,8080 target.com -oG - | awk '/open/{print $2}' | nuclei -t exposures/ -silent
2、高级漏洞检测与利用
1. 自定义模板实现漏洞利用
通过编写自定义模板实现漏洞利用,例如检测并利用 SQL 注入漏洞:
id: sql-injection
info:
name: SQL Injection Vulnerability
severity: high
author: yourname
http:
- method: GET
path: "{{BaseURL}}/search?q=1' OR '1'='1"
matchers:
- type: word
words: ["error in your SQL syntax"]
- 使用方式:
nuclei -u http://target.com -t sql-injection.yaml -silent
2. 利用工作流模板实现多步攻击
Nuclei 的工作流模板(Workflow Templates)可以定义多步骤攻击流程,例如先检测漏洞,再尝试利用:
id: workflow-cve-exploit
info:
name: CVE Exploit Workflow
author: yourname
workflows:
- template: cves/CVE-2023-1234.yaml
- template: exploits/CVE-2023-1234-exploit.yaml
- 使用方式:
nuclei -u http://target.com -w workflow-cve-exploit.yaml
3、绕过 WAF 和防御机制
1. 使用代理和重试机制
通过代理和重试机制绕过 WAF 拦截:
nuclei -u http://target.com -t cves/ -proxy-url socks5://127.0.0.1:1080 -retries 3
- 参数解析:
-proxy-url
:使用代理隐藏真实 IP。-retries
:自动重试被拦截的请求。
2. 自定义请求头伪装流量
通过自定义请求头伪装正常流量:
nuclei -u http://target.com -t cves/ -H "User-Agent: Mozilla/5.0" -H "X-Forwarded-For: 127.0.0.1"
4、高级结果分析与报告生成
1. 实时扫描监控
使用 -stats
参数实时监控扫描进度:
nuclei -u http://target.com -t cves/ -stats
2. 生成多种格式报告
支持 JSON、Markdown、HTML 等多种报告格式:
nuclei -u http://target.com -t cves/ -o results.json -jle # JSON Lines 格式
nuclei -u http://target.com -t cves/ -o report.md -me # Markdown 格式
5、红队场景中的高级用法
1. 自动化内网渗透
结合 Nuclei 和 Proxychains 实现自动化内网渗透:
proxychains nuclei -l intranet_targets.txt -t cves/ -o intranet_results.txt
2. 利用模板实现凭证爆破
通过自定义模板实现弱密码爆破:
id: basic-auth-brute
info:
name: Basic Auth Brute Force
severity: high
author: yourname
http:
- method: GET
path: "{{BaseURL}}/admin"
headers:
Authorization: "Basic {{base64('admin:password')}}"
matchers:
- type: status
status: [200]
- 使用方式:
nuclei -u http://target.com -t basic-auth-brute.yaml -silent
3. 自动化漏洞利用链
通过工作流模板实现漏洞利用链,例如先检测漏洞,再上传 Webshell:
id: exploit-chain
info:
name: Vulnerability Exploit Chain
author: yourname
workflows:
- template: cves/CVE-2023-1234.yaml
- template: exploits/upload-webshell.yaml
6、结合 Nuclei Cloud 实现团队协作
1. 远程扫描与结果共享
通过 Nuclei Cloud 实现远程扫描和结果共享:
nuclei -u http://target.com -t cves/ -cloud
2. 任务调度与历史记录
在 Nuclei Cloud 中创建定时任务并查看历史记录:
nuclei -cloud -l targets.txt -t cves/ -schedule "0 0 * * *"
六、最佳实践与注意事项
-
性能优化:
- 控制并发量(
-c 25
)避免目标过载。 - 使用
-timeout 10
调整超时时间应对网络延迟。
- 控制并发量(
-
规避防御:
- 启用
-retries 3
自动重试 WAF 拦截请求。 - 通过
-H "User-Agent: Mozilla/5.0"
伪装正常流量。
- 启用
-
结果分析:
- 使用
-stats
实时查看扫描进度。 - 结合
-me report.md
生成 Markdown 格式报告。
- 使用
七、扩展资源
- 官方文档:Nuclei Documentation
- 社区模板库:GitHub nuclei-templates
- 企业版功能:Nuclei Cloud Platform 支持团队协作、API 集成等高级功能(需订阅)。