特性
以下特性增强了多协议执行的能力:- 在协议之间共享的协议作用域变量
- 使用动态提取器在协议之间导出数据
协议作用域变量
在前面的示例中,我们演示了如何导出DNS CNAME并在HTTP请求中使用它。然而,您可能会遇到一个模板包含四个以上协议的情况,并且需要导出各种响应字段,如subject_dn、ns、cname、header等。虽然可以通过添加更多的动态提取器来实现这一点,但这种方法可能会使模板变得混乱并引入冗余逻辑,使得跟踪和维护所有变量变得困难。
为解决这个问题,多协议执行支持模板作用域的协议响应。这意味着模板中所有协议的所有响应字段都可以在模板上下文中使用,并带有协议前缀。
下面是一个示例:
| 协议 | 响应字段 | 导出变量 |
|---|---|---|
| ssl | subject_cn | ssl_subject_cn |
| dns | cname | dns_cname |
| http | header | http_header |
| code | response | code_response |
-v -svd标志运行它,它将打印所有导出的响应字段
示例:
跨协议数据导出
如果您不熟悉动态提取器,我们建议先阅读动态提取器部分。 以前,动态提取器只支持特定协议或工作流。然而,通过多协议执行,动态提取的值存储在模板上下文中,可以在所有协议中使用。 示例:多协议如何工作?
到目前为止,我们已经看到了多协议模板的外观以及它带来的功能。现在让我们看看多协议模板是如何工作的,以及在编写它们时需要注意的事项。- 多协议模板按照模板中定义的协议顺序执行。
- 多协议模板中的协议按串行方式执行,即一个接一个。
- 一旦执行了该协议,协议的响应字段就会导出到模板上下文中。
- 变量的作用域在模板级别,并在每个协议执行后进行评估。
- 多协议为协议提供有限的间接支持,用于预处理(使用变量)和后处理(使用动态提取器)。
常见问题
多协议执行模式支持哪些协议?没有对任何协议的限制,nuclei引擎中可用/已实现的任何协议都可以在多协议模板中使用多协议执行模式中可以使用多少个协议?
对协议数量没有限制,但目前不支持重复的协议,例如dns -> http -> ssl -> http。如果您有需要重复协议的漏洞/用例,请提交一个issue如果一个协议失败了会发生什么?
多协议执行遵循出错即退出策略,即如果协议执行失败,则跳过剩余协议的执行并停止模板执行多协议执行与工作流有何不同?
工作流顾名思义是基于工作流文件执行模板的工作流总结来说,工作流比模板高一级,根据工作流文件管理模板的执行 nuclei v2支持多协议执行吗?
- 工作流不包含漏洞的实际逻辑,只是执行不同模板的工作流
- 工作流支持多个模板的条件执行
- 工作流对变量和动态提取器的支持有限
不,多协议执行仅在nuclei v3及以上版本中支持