nuclei
非常优秀的漏洞扫描工具,值得学习!
免责声明
本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.
项目地址
语法规则
https://nuclei.projectdiscovery.io/templating-guide
https://nuclei.projectdiscovery.io/template-examples/http/
模板库
projectdiscovery/nuclei-templates - 由社区维护的 POC 库
相关文章
安装及维护
安装
二进制文件安装
从 Releases 页面下载已经构建好的二进制文件压缩包
源码安装
编译安装
基于 docker
模板库更新
该命令会从 https://github.com/projectdiscovery/nuclei-templates 模板库中下载最新版本
命令参数
bulk-size
每个模板最大并行的主机数 (默认 25)
nuclei -bulk-size 25
burp-collaborator-biid
使用 burp-collaborator 插件
nuclei -burp-collaborator-biid XXXX
c
并行的最大模板数量 (默认 10)
nuclei -c 10
l
对 URL 列表进行测试
nuclei -l urls.txt
target
对目标进行测试
nuclei -target hxxps://example.com
t
要检测的模板种类
nuclei -t git-core.yaml -t cves/
no-color
输出不显示颜色
nuclei -no-color
no-meta
不显示匹配的元数据
nuclei -no-meta
json
输出为 json 格式
nuclei -json
include-rr
json 输出格式中包含请求和响应数据
nuclei -json -include-rr
o
输出为文件
nuclei -o output.txt
project
避免发送相同的请求
nuclei -project
stats
使用进度条
nuclei -stats
silent
只输出测试成功的结果
nuclei -silent
retries
失败后的重试次数
nuclei -retries 1
timeout
超时时间 (默认为 5 秒)
nuclei -timeout 5
trace-log
输出日志到 log 文件
nuclei -trace-log logs
rate-limit
每秒最大请求数 (默认 150)
nuclei -rate-limit 150
severity
根据严重性选择模板
nuclei -severity critical,high
stop-at-first-match
第一次匹配不要处理 HTTP 请求
nuclei -stop-at-frst-match
exclude
排除的模板或文件夹
nuclei -exclude panels -exclude tokens
debug
调试请求或者响应
nuclei -debug
update-templates
下载或者升级模板
nuclei -update-templates
update-directory
选择储存模板的目录 (可选)
nuclei -update-directory templates
tl
列出可用的模板
nuclei -tl
templates-version
显示已安装的模板版本
nuclei -templates-version
v
显示发送请求的详细信息
nuclei -v
version
显示 nuclei 的版本号
nuclei -version
proxy-url
输入代理地址
nuclei -proxy-url hxxp://127.0.0.1:8080
proxy-socks-url
输入 socks 代理地址
nuclei -proxy-socks-url socks5://127.0.0.1:8080
H
自定义请求头
nuclei -H "x-bug-bounty:hacker"
使用
运行单个模板
对 urls.txt 中所有的主机运行 git-core.yaml 并返回结果到 results.txt
这将对 urls.txt 中所有的主机运行 git-core.yaml 并返回结果到 results.txt
你可以轻松的通过管道使用标准的输入 (STDIN) 传递 URL 列表。
Nuclei 可以接受如下列表的 URL 作为输入,例如以下 URL:
运行多个模板
这将会对 urls.txt 中所有的 URL 运行 cves 和 files 模板检查,并返回输出到 results.txt
组合运行
docker 调用
对 urls.txt 中的 URL 通过 docker 中的 nuclei 进行检测,并将结果输出到本机的 results.txt 文件:
记得更改本机的模板路径
使用优化
速率限制
Nuclei 有多种控制速率的方法,包括并行执行多个模板、并行检查多个主机,以及使 nuclei 限制全局的请求速率,下面就是示例。
-c参数 - 限制并行的模板数-bulk-size参数 - 限制并行的主机数-rate-limit参数 - 全局速率限制
如果你想快速扫描或者控制扫描,请使用这些标志并输入限制数,速率限制 只保证控制传出的请求,与其他参数无关。
排除模板
Nuclei模板 包含多种检查,其中有许多对攻击有用的检查,但并不是都有用的。如果您只希望扫描少数特定的模板或目录,则可以使用如下的参数筛选模板,或将某些模板排除。
排除模板运行
我们不建议同时运行所有的 nuclei 模板,如果要排除模板,可以使用
exclude参数来排除特定的目录或模板。注意:如上述示例中显示的那样,目录和特定模板都将不会扫描
基于严重性运行模板
您可以根据模板的严重性运行模板,扫描时可以选择单个严重性或多个严重性。
上面的例子将运行
cves目录下所有严重和中等的模板。上面的例子将运行
panels和technologies目录下严重性标记为info的模板使用
.nuclei-ignore文件排除模板自从 nuclei 的 v2.1.1 版本 以来,我们添加了对
.nuclei-ignore文件的支持,该文件与update-templates参数一起使用,在 .nuclei-ignore 文件中,您可以定义要从 nuclei 扫描中排除的所有模板目录或者模板路径,要开始使用此功能,请确保使用nuclei-update-templates参数安装 nuclei 模板,现在可以根据.nuclei-ignore的文件来添加、更新、删除模板文件。默认的 nuclei 忽略列表可以访问 这里 ,如果不想排除任何内容,只需要删除
.nuclei-ignore文件。
挂代理
调试
其他
file
workflow
模板语法总结
保留字
基础模板
ffffffff0x 风格
官方风格
开头
请求
Get
POST
RAW
跳转
stop-at-first-match
Same support as we have via flag using -stop-at-first-match flag, will be helpful for the case where we have multiple possible paths for same file, in cases where we found matches at the start, we can avoid making additional requests.
大意就是一个模板里有多个扫描路径,当第一个命中时,自动停止后面几个路径的扫描,当然这个不会影响其他模板.
OOB
自 Nuclei v2.3.6 发行以来,Nuclei 支持使用 interact.sh API 内置自动请求关联来实现基于 OOB 的漏洞扫描。就像 {{interactsh-url}} 在请求中的任何位置编写并为添加匹配器一样简单 interact_protocol。Nuclei 将处理交互作用与模板的相关性,以及通过允许轻松进行 OOB 扫描而生成的请求的相关性。
linux
windows
JAVA反序列化
https://nuclei.projectdiscovery.io/templating-guide/helper-functions/#deserialization-helper-functions
读取大小
skip-variables-check
what if my payload contains {{payload here}} and that is not cli env var. Can i escape it or somehow disable nuclei vars detection ?
当你的请求内容里包含 {{ 时,会被 nuclei 解析为变量,加这个就是告诉nuclei不要解析.
匹配
匹配时间
重命名
匹配大小
提取器
提取器案例2
提取器案例3
非
以下是使用否定条件的示例语法,这将返回响应 header 中没有 phpsessID 的所有 URL。
一个简单的判断蜜罐的示例
Dynamic variabe
爆破
pitchfork
常用匹配
etc/passwd
c:/windows/win.ini
windows 回显
linux 回显
进阶用法
全局请求头
当目标采用 Basic Auth , 可以直接在调用的命令中加上全局请求头,而不用修改每个模板
Reusing dynamically extracted values as iterators in http request
https://github.com/projectdiscovery/nuclei/pull/1288
对 robots.txt 内容进行抓取并运用于下一个请求
help_functions
嵌套表达式
在 extractor 中使用
https://github.com/projectdiscovery/nuclei/discussions/1622
self-contained
A new attribute to HTTP requests that marks all the HTTP Requests in that template as self-sufficient, meaning they do not require any input to be executed.
这个用的比较局限,一般就是用于批量检测 API 可用性的,举个例子,你通过信息泄露获得了一个 API_Key 但你不知道这个是哪个服务的 APIkey,没有特征,那么就只能找哪些官方API接口一个一个试,看哪一个平台可以生效,就是这个意思。
国内环境用的不多,我对这块也没研究过.
https://blog.projectdiscovery.io/nuclei-v2-5-3-release/
文件协议
The default file size of the file template read is 1GB
文件模板默认读取的文件大小 1GB
https://github.com/projectdiscovery/nuclei/pull/1577
网络层
自定义模版变量
自 2.6.9 版本开始支持
需要验证的问题
多个工作流模板之间是否可以进行请求合并
截至 2.5.4 支持了单个工作流模板的请求合并,多个工作流模板的请求合并并不支持
https://github.com/projectdiscovery/nuclei/issues/1379
2.8 疑似已解决(并没有😢)
对于网络层的探测是否可以通过调用外部库来获得结果
issue 里官方有提,但目前没有进一步计划
想要参考 fapro
https://github.com/projectdiscovery/network-fingerprint
值的管道用法
单模板内可传递,多模板之间不可传递
BS版本 nuclei/api
目前不支持