基于简单YAML DSL的快速、可定制的漏洞扫描器。
工作原理 • 安装 • 文档 • 致谢 • 常见问题 • 加入 Discord
English • 中文 • Korean • Indonesia • Spanish • 日本語
Nuclei 用于根据模板向目标发送请求,实现零误报并能在大量主机上快速扫描。Nuclei 支持多种协议的扫描,包括 TCP、DNS、HTTP、SSL、File、Whois、Websocket、Headless、Code 等。通过强大灵活的模板,Nuclei 可以用于建模各种安全检查。
我们有一个专门的仓库,收集了由超过 300 名安全研究人员和工程师贡献的各种类型的漏洞模板。
工作原理
:exclamation: 免责声明 |
---|
该项目正在积极开发中。版本更新可能会带来重大变化。更新前请查看发布说明。 |
该项目主要设计为独立的命令行工具。**将 nuclei 作为服务运行可能存在安全风险。**建议谨慎使用并采取额外的安全措施。 |
安装 Nuclei
Nuclei 需要 go1.21 才能成功安装。运行以下命令安装最新版本 -
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
Brew
brew install nuclei
Docker
docker pull projectdiscovery/nuclei:latest
更多安装方法可以在这里找到。
Nuclei 模板自 v2.5.2 版本以来,Nuclei 默认内置了自动模板下载/更新支持。Nuclei-Templates 项目提供了一个由社区贡献的随时可用的模板列表,并不断更新。 你仍然可以随时使用 YAML DSL 参考语法可以在这里找到。 |
使用方法
nuclei -h
这将显示该工具的帮助信息。以下是它支持的所有开关。
Nuclei 是一个快速、基于模板的漏洞扫描器,
专注于广泛的可配置性、大规模的可扩展性和易用性。
用法:
./nuclei [flags]
标志:
目标:
-u, -target string[] 要扫描的目标 URL/主机
-l, -list string 包含要扫描的目标 URL/主机列表的文件路径(每行一个)
-eh, -exclude-hosts string[] 从输入列表中排除扫描的主机(IP、CIDR、主机名)
-resume string 使用 resume.cfg 恢复扫描(集群将被禁用)
-sa, -scan-all-ips 扫描与 DNS 记录关联的所有 IP
-iv, -ip-version string[] 要扫描的主机名 IP 版本(4,6)-(默认为 4)
目标格式:
-im, -input-mode string 输入文件模式(list, burp, jsonl, yaml, openapi, swagger)(默认为 "list")
-ro, -required-only 在生成请求时仅使用输入格式中的必填字段
-sfv, -skip-format-validation 解析输入文件时跳过格式验证(如缺少变量)
模板:
-nt, -new-templates 仅运行最新 nuclei-templates 版本中新增的模板
-ntv, -new-templates-version string[] 运行特定版本中新增的模板
-as, -automatic-scan 使用 wappalyzer 技术检测到标签映射的自动 Web 扫描
-t, -templates string[] 要运行的模板或模板目录列表(逗号分隔,文件)
-turl, -template-url string[] 要运行的模板 URL 或包含模板 URL 的列表(逗号分隔,文件)
-w, -workflows string[] 要运行的工作流或工作流目录列表(逗号分隔,文件)
-wurl, -workflow-url string[] 工作流 URL 或包含工作流 URL 的列表(逗号分隔,文件)
-validate 验证传递给 nuclei 的模板
-nss, -no-strict-syntax 禁用模板的严格语法检查
-td, -template-display 显示模板内容
-tl 列出所有可用的模板
-tgl 列出所有可用的标签
-sign 使用 NUCLEI_SIGNATURE_PRIVATE_KEY 环境变量中定义的私钥签名模板
-code 启用加载基于代码协议的模板
-dut, -disable-unsigned-templates 禁止运行未签名或签名不匹配的模板
过滤:
-a, -author string[] 根据作者运行模板(逗号分隔,文件)
-tags string[] 根据标签运行模板(逗号分隔,文件)
-etags, -exclude-tags string[] 根据标签排除模板(逗号分隔,文件)
-itags, -include-tags string[] 即使被默认或配置排除,也要执行的标签
-id, -template-id string[] 根据模板 ID 运行模板(逗号分隔,文件,允许通配符)
-eid, -exclude-id string[] 根据模板 ID 排除模板(逗号分隔,文件)
-it, -include-templates string[] 即使被默认或配置排除,也要执行的模板文件或目录路径
-et, -exclude-templates string[] 要排除的模板文件或目录路径(逗号分隔,文件)
-em, -exclude-matchers string[] 要在结果中排除的模板匹配器
-s, -severity value[] 根据严重程度运行模板。可能的值: info, low, medium, high, critical, unknown
-es, -exclude-severity value[] 根据严重程度排除模板。可能的值: info, low, medium, high, critical, unknown
-pt, -type value[] 根据协议类型运行模板。可能的值: dns, file, http, headless, tcp, workflow, ssl, websocket, whois, code, javascript
-ept, -exclude-type value[] 根据协议类型排除模板。可能的值: dns, file, http, headless, tcp, workflow, ssl, websocket, whois, code, javascript
-tc, -template-condition string[] 根据表达式条件运行模板
输出:
-o, -output string 输出文件以写入发现的问题/漏洞
-sresp, -store-resp 将通过nuclei的所有请求/响应存储到输出目录
-srd, -store-resp-dir string 将通过nuclei的所有请求/响应存储到自定义目录(默认为"output")
-silent 仅显示发现结果
-nc, -no-color 禁用输出内容着色(ANSI转义码)
-j, -jsonl 以JSONL格式写入输出
-irr, -include-rr -omit-raw 在JSON、JSONL和Markdown输出中包含请求/响应对(仅针对发现结果)[已废弃,请使用-omit-raw](默认为true)
-or, -omit-raw 在JSON、JSONL和Markdown输出中省略请求/响应对(仅针对发现结果)
-ot, -omit-template 在JSON、JSONL输出中省略编码的模板
-nm, -no-meta 禁用在命令行输出中打印结果元数据
-ts, -timestamp 在命令行输出中启用打印时间戳
-rdb, -report-db string nuclei报告数据库(始终使用此选项持久化报告数据)
-ms, -matcher-status 显示匹配失败状态
-me, -markdown-export string 导出结果为Markdown格式的目录
-se, -sarif-export string 导出结果为SARIF格式的文件
-je, -json-export string 导出结果为JSON格式的文件
-jle, -jsonl-export string 导出结果为JSONL格式的文件
-rd, -redact string[] 从查询参数、请求头和正文中编辑给定的键列表
配置:
-config string nuclei配置文件的路径
-tp, -profile string 要运行的模板配置文件
-tpl, -profile-list 列出社区模板配置文件
-fr, -follow-redirects 为HTTP模板启用跟随重定向
-fhr, -follow-host-redirects 跟随同一主机上的重定向
-mr, -max-redirects int HTTP模板跟随的最大重定向次数(默认为10)
-dr, -disable-redirects 为HTTP模板禁用重定向
-rc, -report-config string nuclei报告模块配置文件
-H, -header string[] 以header:value格式包含在所有HTTP请求中的自定义头/cookie(命令行,文件)
-V, -var value 以key=value格式的自定义变量
-r, -resolvers string 包含nuclei解析器列表的文件
-sr, -system-resolvers 使用系统DNS解析作为错误回退
-dc, -disable-clustering 禁用请求聚类
-passive 启用被动HTTP响应处理模式
-fh2, -force-http2 强制在请求中使用HTTP2连接
-ev, -env-vars 允许在模板中使用环境变量
-cc, -client-cert string 用于对扫描主机进行身份验证的客户端证书文件(PEM编码)
-ck, -client-key string 用于对扫描主机进行身份验证的客户端密钥文件(PEM编码)
-ca, -client-ca string 用于对扫描主机进行身份验证的客户端证书颁发机构文件(PEM编码)
-sml, -show-match-line 显示文件模板的匹配行,仅适用于提取器
-ztls 使用ztls库,自动回退到标准库以支持tls13 [已废弃] 默认启用自动回退到ztls
-sni string 要使用的TLS SNI主机名(默认:输入域名)
-dka, -dialer-keep-alive value 网络请求的保持连接持续时间
-lfa, -allow-local-file-access 允许在系统上任何位置访问文件(有效载荷)
-lna, -restrict-local-network-access 阻止连接到本地/私有网络
-i, -interface string 用于网络扫描的网络接口
-at, -attack-type string 执行的有效载荷组合类型(batteringram、pitchfork、clusterbomb)
-sip, -source-ip string 用于网络扫描的源IP地址
-rsr, -response-size-read int 要读取的最大响应大小(字节)
-rss, -response-size-save int 要保存的最大响应大小(字节)(默认为1048576)
-reset 重置删除所有nuclei配置和数据文件(包括nuclei-templates)
-tlsi, -tls-impersonate 启用实验性客户端hello(ja3)TLS随机化
-hae, -http-api-endpoint string 实验性HTTP API端点
INTERACTSH:
-iserver, -interactsh-server string 自托管实例的interactsh服务器URL(默认:oast.pro,oast.live,oast.site,oast.online,oast.fun,oast.me)
-itoken, -interactsh-token string 自托管interactsh服务器的身份验证令牌
-interactions-cache-size int 交互缓存中保留的请求数量(默认为5000)
-interactions-eviction int 从缓存中清除请求前等待的秒数(默认为60)
-interactions-poll-duration int 每次交互轮询请求之间等待的秒数(默认为5)
-interactions-cooldown-period int 退出前额外的交互轮询时间(默认为5)
-ni, -no-interactsh 禁用interactsh服务器进行OAST测试,排除基于OAST的模板
模糊测试:
-ft, -fuzzing-type string 覆盖模板中设置的模糊测试类型(replace、prefix、postfix、infix)
-fm, -fuzzing-mode string 覆盖模板中设置的模糊测试模式(multiple、single)
-fuzz 启用加载模糊测试模板(已废弃:请使用-dast代替)
-dast 启用/运行dast(模糊测试)nuclei模板
-dfp, -display-fuzz-points 在输出中显示模糊测试点以进行调试
-fuzz-param-frequency int 跳过前不感兴趣参数的模糊测试频率(默认为10)
-fa, -fuzz-aggression string 模糊测试攻击程度控制有效载荷数量(low、medium、high)(默认为"low")
UNCOVER:
-uc, -uncover 启用uncover引擎
-uq, -uncover-query string[] uncover搜索查询
-ue, -uncover-engine string[] uncover搜索引擎(shodan,censys,fofa,shodan-idb,quake,hunter,zoomeye,netlas,criminalip,publicwww,hunterhow,google)(默认为shodan)
-uf, -uncover-field string 要返回的uncover字段(ip,port,host)(默认为"ip:port")
-ul, -uncover-limit int 要返回的uncover结果数量(默认为100)
-ur, -uncover-ratelimit int 覆盖未知速率限制引擎的速率限制(默认为60 req/min)(默认为60)
速率限制:
-rl, -rate-limit int 每秒发送的最大请求数(默认为150)
-rld, -rate-limit-duration value 每秒发送的最大请求数(默认为1s)
-rlm, -rate-limit-minute int 每分钟发送的最大请求数(已废弃)
-bs, -bulk-size int 每个模板并行分析的最大主机数(默认为25)
-c, -concurrency int 并行执行的最大模板数(默认为25)
-hbs, -headless-bulk-size int 每个模板并行分析的最大无头主机数(默认为10)
-headc, -headless-concurrency int 并行执行的最大无头模板数(默认为10)
-jsc, -js-concurrency int 并行执行的最大JavaScript运行时数(默认为120)
-pc, -payload-concurrency int 每个模板的最大有效载荷并发数(默认为25)
-prc, -probe-concurrency int 使用httpx进行HTTP探测的并发数(默认为50)
优化:
-timeout int 超时前等待的秒数(默认为10)
-retries int 失败请求的重试次数(默认为1)
-ldp, -leave-default-ports 保留默认的HTTP/HTTPS端口(例如host:80,host:443)
-mhe, -max-host-error int 跳过扫描前主机的最大错误数(默认为30)
-te, -track-error string[] 将给定错误添加到max-host-error监视列表(standard、file)
-nmhe, -no-mhe 禁用基于错误跳过主机扫描
-project 使用项目文件夹避免多次发送相同请求
-project-path string 设置特定的项目路径(默认为"/tmp")
-spm, -stop-at-first-match 在第一次匹配后停止处理HTTP请求(可能会破坏模板/工作流逻辑)
-stream 流模式 - 开始处理而不对输入进行排序
-ss, -scan-strategy value 扫描时使用的策略(auto/host-spray/template-spray)(默认为auto)
-irt, -input-read-timeout value 输入读取超时(默认为3m0s)
-nh, -no-httpx 对非URL输入禁用httpx探测
-no-stdin 禁用stdin处理
无头:
-headless 启用需要无头浏览器支持的模板(Linux上的root用户将禁用沙盒)
-page-timeout int 无头模式下等待每个页面的秒数(默认为20)
-sb, -show-browser 在运行无头模式模板时在屏幕上显示浏览器
-ho, -headless-options string[] 使用额外选项启动无头Chrome
-sc, -system-chrome 使用本地安装的Chrome浏览器而不是nuclei安装的浏览器
-lha, -list-headless-action 列出可用的无头操作
调试:
-debug 显示所有请求和响应
-dreq, -debug-req 显示所有发送的请求
-dresp, -debug-resp 显示所有接收的响应
-p, -proxy string[] 要使用的http/socks5代理列表(逗号分隔或文件输入)
-pi, -proxy-internal 代理所有内部请求
-ldf, -list-dsl-function 列出所有支持的DSL函数签名
-tlog, -trace-log string 写入发送请求跟踪日志的文件
-elog, -error-log string 写入发送请求错误日志的文件
-version 显示nuclei版本
-hm, -hang-monitor 启用nuclei挂起监控
-v, -verbose 显示详细输出
-profile-mem string 可选的nuclei内存配置文件转储文件
-vv 显示加载用于扫描的模板
-svd, -show-var-dump 显示变量转储以进行调试
-ep, -enable-pprof 启用pprof调试服务器
-tv, -templates-version 显示已安装的nuclei-templates版本
-hc, -health-check 运行诊断检查
更新:
-up, -update 将nuclei引擎更新到最新发布版本
-ut, -update-templates 将nuclei-templates更新到最新发布版本
-ud, -update-template-dir string 安装/更新nuclei-templates的自定义目录
-duc, -disable-update-check 禁用自动nuclei/模板更新检查
统计:
-stats 显示正在运行的扫描的统计信息
-sj, -stats-json 以JSONL格式显示统计信息
-si, -stats-interval int 显示统计更新之间等待的秒数(默认5)
-mp, -metrics-port int 暴露nuclei指标的端口(默认9092)
云:
-auth 配置projectdiscovery云(pdcp) api密钥(默认为true)
-tid, -team-id string 将扫描结果上传到给定的团队ID(可选)(默认"none")
-cup, -cloud-upload 将扫描结果上传到pdcp仪表板
-sid, -scan-id string 将扫描结果上传到现有的扫描ID(可选)
-sname, -scan-name string 设置扫描名称(可选)
身份验证:
-sf, -secret-file string[] 包含nuclei认证扫描机密的配置文件路径
-ps, -prefetch-secrets 从机密文件预取机密
示例:
在单个主机上运行nuclei:
$ nuclei -target example.com
使用特定模板目录运行nuclei:
$ nuclei -target example.com -t http/cves/ -t ssl
对主机列表运行nuclei:
$ nuclei -list hosts.txt
使用JSON输出运行nuclei:
$ nuclei -target example.com -json-export output.json
使用排序的Markdown输出运行nuclei(带环境变量):
$ MARKDOWN_EXPORT_SORT_MODE=template nuclei -target example.com -markdown-export nuclei_report/
更多文档可在以下网址获取: https://docs.nuclei.sh/getting-started/running
运行Nuclei
有关运行Nuclei的详细信息,请参阅https://docs.projectdiscovery.io/tools/nuclei/running
从Go代码使用Nuclei
使用Nuclei作为库/SDK的完整指南可在[godoc](https://pkg.go.dev/github.com/projectdiscovery/nuclei/v3/lib#section-readme)上找到
资源
您可以在https://docs.projectdiscovery.io/tools/nuclei/访问Nuclei的主要文档,并在[ProjectDiscovery云平台](https://cloud.projectdiscovery.io)上了解更多关于云端Nuclei的信息
有关Nuclei的更多资源和视频,请参阅https://docs.projectdiscovery.io/tools/nuclei/resources!
鸣谢
感谢所有出色的[社区贡献者发送PR](https://github.com/projectdiscovery/nuclei/graphs/contributors)并保持这个项目更新。:heart:
如果您有想法或某种改进,欢迎您贡献并参与项目,随时发送您的PR。
另外,请查看以下类似的开源项目,它们可能适合您的工作流程:
[FFuF](https://github.com/ffuf/ffuf), [Qsfuzz](https://github.com/ameenmaali/qsfuzz), [Inception](https://github.com/proabiral/inception), [Snallygaster](https://github.com/hannob/snallygaster), [Gofingerprint](https://github.com/Static-Flow/gofingerprint), [Sn1per](https://github.com/1N3/Sn1per/tree/master/templates), [Google tsunami](https://github.com/google/tsunami-security-scanner), [Jaeles](https://github.com/jaeles-project/jaeles), [ChopChop](https://github.com/michelin/ChopChop)
许可证
Nuclei在[MIT许可证](https://github.com/projectdiscovery/nuclei/blob/main/LICENSE.md)下分发