Nuclei权威指南-实现真正的躺赚
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
Nuclei权威指南
前言
本文原文作者为@v3natoris,本文主要是对原文相关内容的提炼以及笔记,出于易读性考虑,笔者对一些地方做了注释或者删改。
相信各位读者很多都曾经历过这样的场景:
写了(复制粘贴)一个自动化脚本(主要逻辑包含信息搜集以及使用Nuclei进行漏洞扫描),结果发现的漏洞几乎是重复的或者早就被别人给提交了,这令人很沮丧,原因在哪?大家基本都用的一样的模板!不重复才怪!
实际上Nuclei有一个非常牛叉的功能,那就是可以编写自定义模板,本文将在如何编写自定义模板上面着重墨,看完了本文之后,你可以干嘛呢?
可以编写RCE,盲注类漏洞(包括但不限于xss,ssrf,sqli),http请求走私,主机头注入,竞态条件,逻辑类漏洞......
让你真正地实现躺着赚钱!
当然本文只是针对有英文恐惧症的童鞋,有能力的可以去看原文,笔者特此记录下来也是作为以后的复习之用
模板(Templates)
一个Nuclei模板是一个YAML文件,主要逻辑是:
文件中的数据告诉Nuclei向主机发送什么,以及在主机的响应中寻找什么,最后确定它是否有某个问题的漏洞。
Nuclei可以理解各种网络协议和服务,包括HTTP、DNS、SSL和原始TCP。我们将首先详细介绍HTTP扫描的模板,在本文的后面,我们将看看如何为扫描其他一些协议开发自定义模板。
小结一下:
Nuclei HTTP扫描模板将指定请求的细节,如请求方法、路径和标头;以及如何检查响应以识别服务或确定存在漏洞的规则
nuclei引擎使用 "模板集群"(template clustering)来优化发送到目标的请求数量并减少网络流量,举个例子:
如果一次扫描包含5个单独的模板,需要向路径/login.php
发出GET请求,那么它就不会向该URL发出5个单独的GET请求,而是发出一个请求,5个单独的模板可以处理该请求的结果。
Easy Mode(简单模式)
Nuclei的启动和运行相当简单,针对单个目标,如下:
nuclei -u https://my.target.site
扫描非HTTP(S)网络服务:
nuclei -u my.target.site:5759
多个目标:
nuclei -l /path/to/list-of-targets.txt
默认情况下,针对指定目标运行几乎所有的模板,可以过滤使用
与其他工具结合使用
这里举个例子:
subfinder -d targetdomain.com -silent | httpx | nuclei -t technologies/tech-detect.yaml
过滤模板
目前仓库里面有超过3600+的模板(见文末第一个参考),Nuclei 提供了一些选项来更智能、更高效地扫描目标,当然了,你要全都要,那就不用下面的选项了(手动狗头);
Automatic Selection (-as)
此选项将对目标进行指纹识别,然后根据识别出的结果(主要是探测出目标使用的是什么技术栈)匹配已标记有这些技术栈关键字的模板。例子:
nuclei -u https:// my.target.site -as
Only New Templates (-nt)
此选项将仅使用从上次更新中添加的模板(例如: nuclei -update-templates)。例子:
nuclei -u https://my.target.site -nt
Specific Templates By Filename (-t )
此选项将运行特定的单独模板。
可以提供多个 -t 参数。
nuclei -u https://my.target.site -t file/logs/python-app-sql-exceptions.yaml -t exposures/files/pyproject-disclosure.yaml
user@kali:~/nuclei-templates$ cat templates-35.txt
file/logs/python-app-sql-exceptions.yaml
exposures/files/pyproject-disclosure.yaml
user@kali:~/nuclei-templates$ nuclei -u https://my.target.site -t templates-35.txt
Specific Templates By Folder (-t)
此选项将运行位于 nuclei-templates 文件夹下的特定子文件夹中的所有模板
nuclei -u https://my.target.site -t file/logs -t exposures/files -t cves/2021
user@kali:~/nuclei-templates$ cat template-categories.txt
file/logs
exposures/files
cves/2021
user@kali:~/nuclei-templates$ nuclei -u https://my.target.site -t template-categories.txt
Select Templates By Tag (-tags)
此选项将仅使用已标记有指定值的模板。模板可以通过技术栈来标记。
nuclei -u https://jira.targetdomain.site -tags jira,generic
Select Templates By Severity (-s)
此选项将仅使用具有指定严重性的模板,例如:
nuclei -u https://jira.targetdomain.site -s critical,high,medium,low,info
速率限制
Nuclei有许多选项可以限制扫描引擎向目标发送请求的速度。包含发送请求的数量(默认为每秒150个)以及 执行多少个并发的模板(默认为25个)。
举个例子(将发出的请求限制为每秒3个,并且只有2个并发的模板):
nuclei -u https://my.target.site/ -rl 3 -c 2
也可以通过-rlm <int>
来指定每分钟的请求数;
其他优化项
可以调整其他 Nuclei 选项,以帮助减少完成扫描的时间.
Timeout Length (-timeout)
我们可以用这个选项设置连接尝试超时前的时间。默认值是5秒,但如果要扫描许多主机,想缩短时间以更快地完成扫描,可以自己设置
nuclei -l list-of-targets.txt -timeout 1
Number of Retries (-retries)
默认情况下,Nuclei 不会重试失败的连接尝试。使用重试选项,我们可以设置重试次数。比如:
nuclei -l list-of-targets.txt -retries 3
Number of Errors (-mhe)
因错误而放弃扫描主机的默认设置为 30。我们可以使用最大错误选项增加或减少此数字。比如:
nuclei -l list-of-targets.txt -mhe 3
恢复扫描(Resuming Scans)
Nuclei 提供了恢复已停止扫描的能力,如果由于某种原因扫描中断,不必重新开始。按 control+C 退出正在运行的扫描后,该工具将创建一个恢复文件并在控制台输出中打印路径:
可以使用类似于以下的命令从上次请求恢复扫描:
nuclei -l targets-file.txt -resume /path/to/resume-file.cfg