【安全开发】Nuclei源码分析-任务执行流程(三)

目录

  • [Nuclei 扫描任务执行流程详解](#Nuclei 扫描任务执行流程详解)
    • [1. 程序启动与参数解析](#1. 程序启动与参数解析)
    • [2. 初始化 Runner](#2. 初始化 Runner)
    • [3. 执行枚举任务](#3. 执行枚举任务)
      • [3.1 模板加载与过滤](#3.1 模板加载与过滤)
      • [3.2 模板验证](#3.2 模板验证)
      • [3.3 模板聚类优化](#3.3 模板聚类优化)
      • [3.4 并发执行扫描](#3.4 并发执行扫描)
      • [3.5 结果处理与输出](#3.5 结果处理与输出)
    • [4. 协议执行流程](#4. 协议执行流程)
    • [5. 工作流执行](#5. 工作流执行)
    • 流程图

Nuclei 扫描任务执行流程详解

当一个新的扫描任务下达时,Nuclei 会按照以下步骤执行:

1. 程序启动与参数解析

首先,Nuclei 从 v2/cmd/nuclei/main.go 的 main() 函数开始执行:

go 复制代码
func main() {
    readConfig()
    runner.ParseOptions(options) // 解析参数
    nucleiRunner, err := runner.New(options)
    // ...
    if err := nucleiRunner.RunEnumeration(); err != nil {  
        // 这里是执行实际的扫描任务 
        // ...
    }
    nucleiRunner.Close()
}

在这个阶段,Nuclei 会解析用户提供的所有命令行参数,包括:

  • 扫描目标(单个目标、目标列表文件等)
  • 要使用的模板(特定模板、模板目录等)
  • 过滤条件(按标签、严重性、作者等)【过滤模板】
  • 输出选项(输出格式、输出文件等)
  • 扫描配置(并发数、速率限制、超时等)

2. 初始化 Runner

在 runner.New() 函数中,Nuclei 进行一系列初始化操作:

  • 处理模板更新:如果用户要求更新模板,则执行更新操作
  • 初始化目录:设置模板目录路径
  • 初始化 catalog:创建用于模板查找的目录结构
  • 处理报告配置:如果配置了 Issue Tracker,则初始化相关客户端
  • 处理输入目标:
    • 从命令行参数读取目标
    • 从文件读取目标列表
    • 从标准输入读取目标
    • 对目标进行去重处理
  • 初始化输出:设置输出格式和输出文件
  • 初始化进度条:设置进度跟踪和统计信息
  • 初始化 Interactsh 客户端:用于检测带外交互(OOB)
  • 设置速率限制器:根据用户配置限制请求速率

3. 执行枚举任务

初始化完成后,调用 RunEnumeration() 方法开始执行实际的扫描任务:

3.1 模板加载与过滤

  • 处理新模板:如果用户指定了 -new-templates 参数,则只加载新增的模板
  • 应用忽略规则:读取忽略配置文件,排除指定的标签和模板
  • 创建执行器选项:设置模板执行所需的各种配置选项
  • 创建模板加载器:初始化用于加载和解析模板的 loader
  • 加载模板:
    • 根据用户指定的路径加载模板
    • 应用各种过滤条件(标签、严重性、作者等)
    • 加载工作流模板

3.2 模板验证

如果用户指定了 -validate 参数,则只验证模板语法而不执行扫描。

3.3 模板聚类优化

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

  • 将具有相似请求的模板分组
  • 减少重复请求的发送
  • 有效降低网络负载

3.4 并发执行扫描

Nuclei 使用并发方式执行扫描任务:

  • 创建工作协程组:根据 -c 参数设置并发模板执行数
  • 模板分类处理:
    • 自包含模板:调用 processSelfContainedTemplates()
    • 工作流模板:调用 processWorkflowWithList()
    • 普通模板:调用 processTemplateWithList()
  • 针对每个目标执行模板:
    • 对于每个目标,执行模板中定义的所有请求
    • 根据模板中定义的匹配器(matchers)和提取器(extractors)处理响应
    • 将匹配结果输出到指定的输出位置

3.5 结果处理与输出

  • 处理 Interactsh 回调:检查是否有带外交互结果
  • 停止进度跟踪:结束进度条和统计信息收集
  • 关闭资源:关闭浏览器实例、输出文件等
  • 输出最终统计:显示扫描结果汇总信息

4. 协议执行流程

每种协议(HTTP、DNS、Network等)都有自己的执行流程:

  • 编译阶段:准备请求数据,预处理变量等
  • 执行阶段:发送请求并接收响应
  • 匹配阶段:根据 Matchers 和 Extractors 判断是否匹配
  • 输出阶段:将结果写入输出文件或屏幕

5. 工作流执行

对于工作流模板,Nuclei 会按照定义的逻辑顺序执行多个子模板,并根据匹配结果决定是否继续执行后续步骤。

流程图

整个流程可以用以下图表表示:

复制代码
graph TD
    A[程序启动] --> B[参数解析]
    B --> C[初始化Runner]
    C --> D[加载和过滤模板]
    D --> E[模板聚类优化]
    E --> F[并发执行扫描]
    F --> G[处理各协议请求]
    G --> H[匹配和提取结果]
    H --> I[输出结果]
    I --> J[清理资源]

通过这种结构化的设计,Nuclei 能够高效地执行大量模板扫描任务,并通过各种优化技术(如模板聚类、速率限制、错误缓存等)提高扫描效率和准确性。


by 久违 2025.10.20

相关推荐
2501_9159090620 分钟前
资源文件混淆在 iOS 应用安全中的实际价值
android·安全·ios·小程序·uni-app·iphone·webview
ShenZhenDingYue23 分钟前
高压线防外破警示灯:电力安全与智能预警的守护者
安全
国科安芯28 分钟前
AS32A601型MCU芯片如何进行IAP升级?
网络·单片机·嵌入式硬件·安全·risc-v·安全性测试
Bruce_Liuxiaowei30 分钟前
Python 跨平台 Nmap 自动化扫描工具:从手动到一键批量扫描
开发语言·python·网络安全·自动化
爱思考的发菜_汽车网络信息安全31 分钟前
汽车网络安全:SHA算法详细解析
安全·web安全·汽车
九章-37 分钟前
金仓数据库助力中国石油安全环保技术研究院安全生产智能管控系统全面实现数据库国产化替代
数据库·安全
飞飞传输40 分钟前
安全隔离网闸厂家怎么选?聚焦核心指标,筑牢网络边界安全防线
大数据·运维·安全
十二月未完41 分钟前
FlyEnv 是一款轻量、安全、跨平台的环境变量管理工具
安全
小阿宁的猫猫1 小时前
文件上传和解析漏洞的原理、条件、比赛时的各种绕过方法
web安全·网络安全·web
xixixi777771 小时前
安全SDK:无感采集用户在APP内的交互行为(点击速度、滑动轨迹、停留时长),用于后续的行为生物特征分析
安全·microsoft·数据采集·特征·隐私·合规·设备指纹