当前位置: 首页 > news >正文

【安全开发】Nuclei源码分析-模板机制(一)

目录

  • Nuclei 模板机制详解
    • 核心概念
    • 1. 模板结构
      • 1.1 基本信息(Info Block)
      • 1.2 请求定义
      • 1.3 匹配和提取规则
    • 2. 模板类型详解
      • 2.1 HTTP 模板
        • 标准 HTTP 请求
        • 原始 HTTP 请求
      • 2.2 DNS 模板
      • 2.3 工作流模板
    • 3. 模板加载机制
      • 3.1 模板发现
      • 3.2 模板过滤
      • 3.3 模板解析
    • 4. 模板执行机制
      • 4.1 执行器创建
      • 4.2 请求编译
      • 4.3 并发执行
    • 5. 匹配和提取机制
      • 5.1 Matchers 匹配器
      • 5.2 Extractors 提取器
    • 6. 模板优化机制
      • 6.1 模板聚类
      • 6.2 缓存机制
    • 7. 模板验证
    • 8. 自定义变量和表达式
    • 小结

Nuclei 模板机制详解

Nuclei 是一个基于模板的漏洞扫描器,模板是其核心组件。模板定义了要执行的请求、匹配条件以及相关信息。作为系列文章,本文将详细分析 Nuclei 的模板使用机制。

核心概念

  • 模板是 Nuclei 的基础执行单元
  • 工作流是模板的编排方式
  • 工作流和模板配合可以实现复杂的多步骤,条件的扫描任务

1. 模板结构

Nuclei 模板是 YAML 格式的文件,包含以下主要部分:

1.1 基本信息(Info Block)

每个模板都有一个 info 部分,包含模板的元数据:

id: 模板唯一标识符
info:name: 模板名称author: 作者severity: 严重性等级 (info, low, medium, high, critical)description: 模板描述reference: 参考链接tags: 标签

1.2 请求定义

Nuclei 支持多种协议的请求定义:

  • HTTP 请求:使用 requests 或 raw 定义
  • DNS 请求:使用 dns 定义
  • 网络请求:使用 network 定义
  • 文件操作:使用 file 定义
  • 无头浏览器:使用 headless 定义

1.3 匹配和提取规则

模板通过 matchers 和 extractors 定义匹配和提取规则:

  • Matchers:定义匹配条件,用于判断请求是否成功发现漏洞
  • Extractors:从响应中提取特定数据

2. 模板类型详解

2.1 HTTP 模板

HTTP 模板支持两种定义方式:

标准 HTTP 请求
requests:- method: GETpath:- "{{BaseURL}}/vuln"matchers:- type: wordwords:- "vulnerable string"
原始 HTTP 请求
requests:- raw:- |GET /vuln HTTP/1.1Host: {{Hostname}}matchers:- type: wordwords:- "vulnerable response"

2.2 DNS 模板

DNS 模板用于 DNS 相关的漏洞检测:

dns:- name: "{{FQDN}}"type: Aclass: inetrecursion: trueretries: 3matchers:- type: wordwords:- "1.1.1.1"

2.3 工作流模板

工作流模板协调多个模板的执行:

workflows:- template: workflow/match-1.yaml- template: workflow/match-2.yaml

3. 模板加载机制

3.1 模板发现

Nuclei 通过 catalog (nuclei\v2\pkg\catalog\catalogue.go#L21-L32) 包发现模板文件:

  • 从指定路径加载模板
  • 递归搜索目录中的模板文件
  • 支持通配符匹配

3.2 模板过滤

加载模板时,Nuclei 支持多种过滤方式:

  • 标签过滤:通过 tags、exclude-tags 过滤
  • 作者过滤:通过 author 过滤
  • 严重性过滤:通过 severity、exclude-severity 过滤
  • 路径过滤:通过 include-templates、exclude-templates 过滤

过滤逻辑在 filter (nuclei\v2\pkg\catalog\loader\filter\filter.go#L11-L28) 包中实现。

3.3 模板解析

模板解析过程在 parsers (nuclei\v2\pkg\parsers\parser.go#L59-L87) 包中完成:

  • 读取模板文件内容
  • 使用 YAML 解析器解析模板结构
  • 验证模板语法和必需字
  • 创建 Template (nuclei\v2\pkg\templates\templates.go#L24-L74) 对象

4. 模板执行机制

4.1 执行器创建

每种协议类型都有对应的执行器:(基于模板定义创建相应协议的执行器)

  • HTTP 协议:HTTP Executer (nuclei\v2\pkg\protocols\http\request.go#L478-L503)
  • DNS 协议:DNS Executer (nuclei\v2\pkg\protocols\dns\request.go#L118-L137)
  • 其他协议类似

4.2 请求编译

执行前需要编译请求:

  • 解析变量和表达式
  • 编译匹配器和提取器
  • 初始化协议客户端

4.3 并发执行

Nuclei 使用并发机制执行模板:

  • 根据 -c 参数控制并发模板数
  • 每个模板可以针对多个目标并发执行
  • 使用速率限制器控制请求发送速度

5. 匹配和提取机制

5.1 Matchers 匹配器

支持多种匹配类型:

  • word:字符串匹配
  • regex:正则表达式匹配
  • binary:二进制匹配
  • dsl:DSL 表达式匹配
  • status:HTTP 状态码匹配

5.2 Extractors 提取器

支持从响应中提取数据:

  • regex:正则表达式提取
  • kval:键值对提取
  • xpath:XPath 提取(仅限 HTML/XML)
  • json:JSONPath 提取(仅限 JSON)
  • dsl:DSL 表达式提取

6. 模板优化机制

6.1 模板聚类

为了提高效率,Nuclei 对 HTTP 模板进行聚类:

  • 识别具有相似请求的模板
  • 将它们组合在一起执行
  • 减少重复请求的发送

6.2 缓存机制

Nuclei 使用多种缓存机制:

  • 模板解析缓存
  • HTTP 响应缓存
  • DNS 查询缓存

7. 模板验证

Nuclei 提供模板验证功能:

  • 语法验证:检查 YAML 语法和必需字段
  • 结构验证:检查模板结构是否正确
  • 运行验证:通过 -validate 参数执行

8. 自定义变量和表达式

Nuclei 支持丰富的变量和表达式系统:

  • 内置变量:如 {{BaseURL}}、{{Hostname}} 等
  • 自定义变量:通过 -var 参数传递
  • 环境变量:通过 -env-vars 启用
  • DSL 表达式:复杂的动态表达式

小结

Nuclei 的模板机制设计灵活且强大,支持多种协议和复杂的匹配逻辑。通过合理的模板设计,可以实现各种漏洞检测和信息提取功能。模板加载、过滤、执行和优化的完整流程确保了扫描的高效性和准确性。


by 久违 2025.10.20

http://www.dtcms.com/a/573036.html

相关文章:

  • 算法工具箱之前缀和
  • 工商注册网站模板门业网站 源码
  • 做外贸的如何上国外网站移动应用开发和网站开发
  • Seata集成Nacos加Mysql存储
  • C#:OpenCvSharp 实现图像处理的技术指南
  • KingbaseES:从兼容到超越,详解超越MySQL的权限隔离与安全增强
  • 超详细Windows系统MySQL 安装教程
  • LeetCode 刷题【145. 二叉树的后序遍历】
  • 快速精通Zynq芯片与嵌入式系统实战
  • 【设计题】秒杀场景中的库存扣减并发控制
  • cpp_STL简介(了解)
  • 视觉Transformer实战——Vision Transformer(ViT)详解与实现
  • 个性化网站设计网站搜索系统
  • 机器视觉---光学变焦与数字变焦
  • 三种方式修改AI生成的流程图,实现无损放大
  • Spring AI使用知识库增强对话功能
  • 在类中强制规定编码约定:Python高级开发指南
  • 《GoF 23+1:设计模式的正确打开方式,清晰分组+巧妙记忆》
  • Java基础(十五):注解(Annotation)详解
  • 离散制造与流程制造 MES 应用核心差异对比表
  • 实战代码解析:京东获得 JD 商品详情 API (item_get_pro) 返回值说明
  • Agent 设计与上下文工程- 02 Workflow 设计模式(上)
  • UE安卓环境搭建
  • 【代码随想录算法训练营——Day59】图论——47.参加科学大会、94.城市间货物运输I
  • 做网站推广前途某互联网公司开发官网的首页
  • 网站未收录wordpress设置假阅读量
  • 将大规模shp白模贴图转3dtiles倾斜摄影,并可单体化拾取建筑
  • CMP7(类Cloudera CMP 7 404版华为Kunpeng)用开源软件Label Studio做数据标注
  • Go、DevOps运维开发实战(视频教程)
  • 25.Spring Boot 启动流程深度解析:从run()到自动配置