
使用Nuclei v3.2 模糊测试未知漏洞
模糊测试概念
学习使用 Nuclei 进行 HTTP 请求的模糊测试
Nuclei 支持基于 HTTP 请求的模糊测试,这是根据在 HTTP 请求的模糊测试部分定义的规则进行的。这允许创建通用 Web 应用程序漏洞(如 SQLi、SSRF、CMDi 等)的模板,而无需了解目标的任何信息,就像传统的 Web 模糊测试器一样。我们将这个概念称为未知漏洞的模糊测试。
概述
Nuclei v3.2.0 代表了模糊测试功能的重大进步。此版本引入了对制作模糊测试模板的完整支持,涵盖从 Proxify、httpx 和 Burp Suite 等工具导入 HTTP 流量到从 OpenAPI 和 Swagger 等 API 模式文件生成请求的所有内容。让我们更详细地探索 Nuclei v3.2.0 中的模糊测试增强功能!
什么是模糊测试?
模糊测试是一种通过采用既定的策略和方法(通常称为规则)来发现应用程序中未知或尚未发现的漏洞的技术。这些规则系统地应用于 HTTP 请求的不同组件,以检测应用程序响应或行为的更改。
模糊测试部件
支持的模糊测试部分
如前所述,模糊测试规则应用于 HTTP 请求的各个部分。我们将这些部分称为part:
Nuclei 模板;随着 Nuclei v2.8.0 的发布,我们引入了对查询模糊测试 (Query Fuzzing part: Query
) 的支持,但在此版本中,我们添加了对 HTTP 请求的所有其他部分以及抽象的支持。以下是 Nuclei v3.2.0 中支持的部件列表:
part: query
– 查询模糊测试(在 Nuclei v2.8.0 中引入)part: path
– 路径模糊测试part: header
– 标头模糊测试part: cookie
– Cookie 模糊测试part: body
– 身体模糊测试
编写模糊测试规则时,每个规则的范围仅限于 HTTP 请求的特定部分。这意味着编写的规则part: Query将仅应用于 HTTP 请求的查询参数,而不应用于请求的任何其他部分。
HTTP 请求部分值
Query、Path、Header 和 Cookie 在 HTTP 请求中仅以固定格式表示,而 Body 则以 JSON、XML、Form、多部分表单数据等多种格式表示。通常,在编写模糊测试模板时,需要为每种格式单独编写规则,这将是一项繁琐的任务并且包含重复的规则。为了解决这个问题,
Nuclei 将每个部分的值抽象为键值对
HTTP 请求和部分示例
在下面的示例 HTTP 请求中,每个部分的键值对如下:
注意: XML、JSON、表单、多部分表单数据将采用键/值格式,但如果主体是二进制或任何其他格式,则整个主体将表示为单个键值对,其中键为“值” ` 并作为整个body的值。
value \x08\x96\x01\x12\x07\x74
这种抽象显着提高了效率,因为它允许为正文创建适用于所有格式的单一规则。例如,在测试正文值中的 SQL 注入漏洞时,可以有效地利用单个规则来处理各种格式,包括 JSON、XML、表单和多部分表单数据。这种简化的方法简化了测试过程并扩大了漏洞检测的范围。
模糊测试规则类型
每个规则对值执行特定操作,nuclei 支持以下类型的规则:
prefix
– 添加有效负载作为值的前缀postfix
– 将有效负载作为后缀添加到值中replace
– 将值替换为有效负载infix
– 添加有效负载作为值的中缀replace-regex
– 使用正则表达式将值替换为有效负载
加载 HTTP 流量
Nuclei 现在支持各种输入格式来加载 HTTP 请求,这些格式可以分为两类:
来自工具的 HTTP 流量
从 API 架构文件生成请求
OpenAPI
Swagger
Postman (via OpenAPI)
注意:由于 OpenAPI 是描述 RESTful API 的标准,因此其他格式和工具(例如 Postman)可以直接通过客户端应用程序或使用流行的实用工具进行转换导出到 OpenAPI。
向 Nuclei 提供 HTTP 输入
-l -list
上述格式的文件可以与新标志一起提供给现有标志-im -input-mode
,以指定文件的输入模式或格式。例子:
Nuclei 还通过新选项增强了请求生成:使用-V
标志覆盖/传递变量、在请求的基本字段或所有字段之间进行选择,以及跳过格式验证以使用专用标志进行测试。
模糊测试规则格式
模糊测试规则写在HTTP 协议部分的 key 下fuzzing
。以下是编写模糊规则的通用格式:
过滤器
由于 Nuclei 现在支持 HTTP 请求所有段的各种输入格式和规则,因此制定任何规则似乎都很简单。然而,有一个重要的方面需要考虑:管理请求量或噪音的挑战。具体来说,当对受 Web 应用程序防火墙 (WAF) 保护的目标进行模糊测试时,不加区别的模糊测试可能会导致 IP 封禁等问题。减轻这种担忧的最有效策略是明智地使用模糊测试,这就是过滤器的作用变得至关重要的地方。过滤器评估是否应针对特定 HTTP 请求激活特定的模糊测试模板,以确保有针对性且有效的模糊测试实践。
过滤器可以被认为是核模板中匹配器的双胞胎。它们支持所有匹配器类型,包括 DSL,唯一的区别是每种类型的用途。
注意:目前,只有标头、主机、输入、方法、路径等请求数据可用,但很快,一旦添加了随请求一起加载响应的支持,响应数据将可用。
这是一个基本过滤器,仅在请求为 POST 并且必须具有某些正文时才执行此模板:
提示:编写/执行模板时,您可以-v -svd
在应用过滤器之前使用标志来查看过滤器中可用的所有变量。
示例模板
正文中基于错误的 SQLi
以下模板配置为在使用 POST 方法且具有非空正文的所有请求上运行。它将指定的有效负载作为后缀附加到主体中的每个值。
完整模板请参见body-error-sqli.yaml
主机头注入
主机标头注入是攻击者注入恶意主机标头的漏洞,通常通过 HTTP 请求走私或重置密码中毒等技术来利用。所描述的模板旨在通过篡改重置密码请求中的主机标头来利用此漏洞,通过更新的代理标头将它们重定向到攻击者控制下的服务器。
与之前的模板相比,这里需要注意的一个区别是,我们没有直接使用有效负载并在模糊测试中指定键/值对。这是因为我们尝试添加或替换fuzz
HTTP 请求中的键下指定的多个标头,而不是更新值。💡
提示:在编写模糊测试模板时,如果要添加新的键值对而不是更新现有值,则应在 HTTP 请求中的 key 下指定键值对fuzz
,如上例所示。
了解更多
您可以在此处阅读有关模糊测试的更新文档!
除了支持扫描目标之外,Nuclei v3.2.0 还包括许多主要增强功能:
请阅读Nuclei v3.2 发布博客,了解所有功能和更改!
请阅读使用 Nuclei v3.2 扫描受登录保护的目标,了解有关 nuclei v3.2 中新的经过身份验证的扫描功能的更多信息。
结论
Nuclei v3.2 代表了模糊测试功能的重大进步,融合了使您能够创建自定义模糊测试模板的基本功能。此外,我们还引入了从一系列工具导入 HTTP 流量并根据 API 架构文件生成请求的功能。我们相信这些增强功能将被证明是无价的,我们热切期待见证您利用它们的创新方式。