查看原文
其他

Nuclei权威指南-实现真正的躺赚

Richardo1o1 迪哥讲事 2023-07-11

声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

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 退出正在运行的扫描后,该工具将创建一个恢复文件并在控制台输出中打印路径:

img.png

可以使用类似于以下的命令从上次请求恢复扫描:

nuclei -l targets-file.txt -resume /path/to/resume-file.cfg

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存