新闻详情

新闻详情

首页 / 资讯中心 / 详情

Tsunami 模板化插件 Bootstrapping 实战:编写你的第一个 .textproto 漏洞探测器

发布时间:2026/9/25 3:05:18来源:尧图网络
Tsunami 模板化插件 Bootstrapping 实战:编写你的第一个 .textproto 漏洞探测器
网络安全应用安全漏洞扫描【免费下载链接】tsunami-security-scannerTsunami is a general purpose network security scanner with an extensible plugin system for detecting high severity vulnerabilities with high confidence.项目地址https://gitcode.com/gh_mirrors/ts/tsunami-security-scanner点击查看免费下载导读Tsunami 的模板化插件templated plugin机制允许开发者通过声明式.textproto文件描述探测器的行为而无需编写 Java 或 Python 代码。本文以编写一个模拟漏洞CVE-0123-12345的探测插件为例完整演示模板化插件的引导bootstrapping过程从文件组织、proto 头部声明、插件信息info、漏洞信息finding到配置段config并解释如何运行验证插件被正确注册。读完本文你将掌握模板化插件定义文件的完整骨架为后续编写动作actions与工作流workflows打下基础。模板化插件机制概览Actions 与 Workflows在动手之前先理解模板化插件的核心模型。在传统方式下编写一个 Tsunami 探测器需要实现 Java 或 Python 插件并配套测试而模板化插件把这一过程抽象为两个高层概念详见系列引言Actions动作执行的基本单元负责完成一个具体行为并返回布尔值表示是否成功例如向目标发送 HTTP 请求并校验状态码为 200Workflows工作流按特定顺序编排动作的列表决定动作的执行次序。引擎的处理流程为提取插件中所有工作流与动作 → 做基本合法性检查 → 按顺序执行第一个匹配条件的工作流 → 依序执行每个动作直到某个失败或全部成功 → 全部成功即判定漏洞存在。这个判定过程会针对端口扫描阶段发现的每个网络服务重复执行称为一次工作流运行run。02-bootstrapping.md所讲的引导阶段正是为上述执行机制准备插件定义文件、声明插件身份与漏洞信息的过程。从源码看模板化插件在运行时通过 PluginBootstrapModule 的registerDynamicPlugin方法动态注册该方法会以插件类型、名称、作者、是否需要回调服务器等信息构造一个动态插件定义并绑定到 Guice 容器这正是后文运行日志中Dynamic plugin registered一行日志的来源。前置准备本教程假设你已了解如何构建并运行 Tsunami可参考仓库内的构建与运行指南。此外官方强烈建议在动手前先熟悉配置语言的 linter 用法因为你的插件最终必须通过 linter 的全部检查警告项也需要在合并前给出合理解释。linter 的安装与使用方式见附录使用 linter要点如下linter 会校验插件格式并执行一系列行为正确性检查官方 Docker 镜像中已内置 linter构建时会自动运行自定义环境可通过 Go 工具链安装go install github.com/google/tsunami-security-scanner-plugins/templated/utils/linterlatest随后执行linter 文件路径视环境可能需要将 Go bin 目录加入PATH。设计我们的漏洞场景为讲解引导过程本系列将为一个虚构漏洞CVE-0123-12345编写探测器。探测器需要完成两件事指纹识别应用fingerprint只在对端确实是潜在易受攻击应用时才继续发送请求。具体做法是向/version发送 HTTP 请求检查响应Server头中是否包含横幅MyVulnerableApp利用漏洞exploit确认应用身份后向/exploit发送POST请求在process字段携带自定义载荷%{ print(tsunami_%d_marker, 1250*13) }%随后验证响应中包含tsunami_1253_marker。说明这里模拟的是一类模板注入漏洞%{ ... }%会被目标解释执行。示例中的漏洞语言与语法本身无关——1250*13的结果会替换%d占位符最终在响应中打印出tsunami_1253_marker。这个场景定义了我们后续插件各部分的职责info声明我是谁finding声明我要报告什么漏洞而真正执行指纹与利用逻辑的动作action会在引导完成后的下一步骤编写。创建插件定义文件在本地 Tsunami 插件仓库副本中创建文件templated/templateddetector/plugins/cve/0123/MyVulnerableApp_CVE_0123_12345.textproto首先添加文件头部注释帮助 linter 识别所使用的 proto 定义与消息类型# proto-file: third_party/tsunami_plugins/templated/templateddetector/proto/templated_plugin.proto # proto-message: TemplatedPlugin这两行声明了该.textproto对应的 proto 文件路径及消息类型。模板化插件配置语言的权威定义始终以 proto 文件本身为准随着语言演进当文档与实际定义出现出入时应以 proto 定义为准。提供插件信息info 段接下来提供插件的基础信息。注意插件名称用于唯一标识插件必须在所有插件中保持唯一info: { type: VULN_DETECTION name: MyVulnerableApp_CVE_0123_12345 author: Some developper myemailprovider.com version: 1.0 }各字段含义type插件类型此处为漏洞检测VULN_DETECTIONname插件唯一名称后续运行日志会以该名称注册动态插件author作者名与联系邮箱version插件版本号。插件名称的选取并非随意需要遵循既定命名规范详见附录插件命名规范名称字符集仅限[a-zA-Z0-9_]不允许空格或特殊字符插件文件名应与插件名称保持一致便于检索若漏洞关联 CVE命名为VulnerableApplicationName_CVE_YYYY_NNNNN并放入cve/YYYY/目录本示例正是如此若无关联 CVE则命名为VulnerableApplicationName_YYYY_VulnerabilityName无名称时可用描述性名称如PreauthRCE并放入对应漏洞类型目录如rce/YYYY/名称中的缩写如HTTP、UI、RCE必须大写。提供漏洞信息finding 段finding段描述漏洞本身这些信息将用于生成漏洞报告和漏洞通知finding: { main_id: { publisher: GOOGLE value: SOME_PLUGIN_DETECTION } title: Example templated plugin description: This is an example templated plugin. recommendation: No recommendation, this is an example. related_id: { publisher: CVE value: CVE-0123-12345 } }各字段含义main_id漏洞主标识由发布方publisher与标识值value构成title/description漏洞标题与描述recommendation修复建议related_id关联的外部编号。重要只要漏洞与某个 CVE 关联related_id字段就必须填写对应的 CVE 引用publisher: CVE CVE 编号否则报告将无法与公开漏洞库正确关联。配置插件config 段config段用于对插件进行基础调优。引导阶段可以先保持为空config: {}但需要记住该段支持的两个能力启用debug模式开启后插件会输出高度详细的调试信息例如记录每一个 HTTP 请求与响应将插件切换为disabled禁用插件。注意即使被禁用除非测试文件中显式指定该插件的测试仍然会被执行。运行验证插件被注册但尚无工作流如果现在就运行插件会看到插件成功注册但运行时出现一个非阻塞错误——因为还没有定义任何工作流workflow或动作action{ ... } Dec 31, 2024 11:07:58 AM com.google.tsunami.plugin.PluginBootstrapModule registerDynamicPlugin INFO: Dynamic plugin registered: MyVulnerableApp_CVE_0123_12345 { ... } Dec 31, 2024 11:08:15 AM com.google.tsunami.plugins.detectors.templateddetector.TemplatedDetector detect INFO: Starting detector: MyVulnerableApp_CVE_0123_12345 Dec 31, 2024 11:08:15 AM com.google.tsunami.plugins.detectors.templateddetector.TemplatedDetector detect SEVERE: No workflow matched the current setup. Is plugin MyVulnerableApp_CVE_0123_12345 misconfigured? { ... }这段日志的两条关键信息Dynamic plugin registered: MyVulnerableApp_CVE_0123_12345—— 说明引导阶段的文件结构、proto 头、info段均已被引擎正确解析插件通过动态注册机制对应 PluginBootstrapModule 中的registerDynamicPlugin成功挂载SEVERE: No workflow matched the current setup.—— 这是插件已注册但还没有可执行逻辑的典型信号属于非阻塞错误不影响插件注册本身但提示我们接下来必须编写动作与工作流。作为对比在组装工作流中可以看到补全workflows段后的正常执行日志引擎会针对每个服务按顺序运行动作例如向http://127.0.0.1:9090/version发送GET请求、收到404响应后判定指纹动作失败并输出No vulnerability found because action Fingerprint failed.最终统计插件执行耗时。这验证了引导阶段声明的info与finding会完整贯穿整个运行周期。下一步编写第一个动作至此模板化插件的引导已经完成文件头声明、插件信息、漏洞信息与配置段一应俱全插件可以被引擎动态注册并识别。接下来需要为插件填充实际行为——编写指纹识别与利用两个 HTTP 动作并将它们组装进工作流详见编写第一个动作随后依次是组装工作流、使用变量、使用回调服务器与清理动作。赞分享网络安全应用安全漏洞扫描【免费下载链接】tsunami-security-scannerTsunami is a general purpose network security scanner with an extensible plugin system for detecting high severity vulnerabilities with high confidence.项目地址https://gitcode.com/gh_mirrors/ts/tsunami-security-scanner点击查看免费下载相关推荐Kingfisher 如何用 Base64ImageDataProvider 加载 Base64 字符串图片Kingfisher 如何用 Base64ImageDataProvider 加载 Base64 字符串图片 当图片以 Base64 编码字符串的形式存在于业务网络安全应用安全漏洞扫描探索顶尖开源字体库跨平台免费字体的完美解决方案探索顶尖开源字体库跨平台免费字体的完美解决方案 在当今数字时代选择一款既美观又实用的开源字体对于设计师、开发者和普通用户来说都至关重要。优秀的开源字体不仅能游戏开发系统底层图形学跨平台音视频spicetify-cli扩展开发实战编写你的第一个Spotify插件spicetify cli扩展开发实战编写你的第一个Spotify插件 想要为Spotify客户端添加自定义功能吗spicetify cli是一个强大开发工具CLI上一篇PI-Pwn日志系统详解定位使用过程中的关键信息下一篇DeepSeek-Coder-33B-Instruct-SFT应用场景探索从编程教学到企业级开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

TensorRT Model Optimizer高级技巧:自定义量化策略与性能调优指南 2026/9/25 3:47:38

TensorRT Model Optimizer高级技巧:自定义量化策略与性能调优指南

TensorRT Model Optimizer高级技巧:自定义量化策略与性能调优指南 【免费下载链接】Model-Optimizer A unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc…

阅读更多 →
哈工大SSE练习39:C语言在线评测从拆题到AC的完整指南 2026/9/25 3:47:31

哈工大SSE练习39:C语言在线评测从拆题到AC的完整指南

看到标题里的“SSE”,先别急着把它跟前端那个 Server-Sent Events 对应起来。在哈工大,SSE 是同学们对 C 语言课程那个在线编程练习平台的约定俗成叫法。不管是软件学院还是计算学部的同学,大一学 C 语言基本都绕不开在这上面刷题。系统界面不…

阅读更多 →
conventional-changelog-writer 版本演进全解析:从 v1 到 v9 的架构变迁与配置项深度指南 2026/9/25 3:47:31

conventional-changelog-writer 版本演进全解析:从 v1 到 v9 的架构变迁与配置项深度指南

开发工具CLI文档 【免费下载链接】conventional-changelog Generate changelogs and release notes from a projects commit messages and metadata. 项目地址: https://gitcode.com/gh_mirrors/co/conventional-changelog 点击查看 免费下载 本文以 packages/conv…

阅读更多 →
ESP32上WASM为何不能直接调用硬件:架构设计与安全隔离 2026/9/25 3:47:25

ESP32上WASM为何不能直接调用硬件:架构设计与安全隔离

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
sliver 项目 vendored 的纯 Go xz 压缩库:ulikunitz/xz 开发路线图(TODO.md)与实现解析 2026/9/25 3:47:19

sliver 项目 vendored 的纯 Go xz 压缩库:ulikunitz/xz 开发路线图(TODO.md)与实现解析

网络安全 【免费下载链接】sliver Adversary Emulation Framework 项目地址: https://gitcode.com/gh_mirrors/sl/sliver 点击查看 免费下载 导读 vendor/github.com/ulikunitz/xz/TODO.md 是 Go 语言 xz 压缩库 ulikunitz/xz 的开发者路线图与发布日志&#xff0…

阅读更多 →
GrowthBook Mintlify 文档编写规范:MDX Frontmatter YAML 引号规则与 CI 强制校验 2026/9/25 3:47:12

GrowthBook Mintlify 文档编写规范:MDX Frontmatter YAML 引号规则与 CI 强制校验

后端前端数据分析数据可视化 【免费下载链接】growthbook Open Source Feature Flags, Experimentation, and Product Analytics 项目地址: https://gitcode.com/gh_mirrors/gr/growthbook 点击查看 免费下载 GrowthBook 的官方文档以 Mintlify MDX 页面形式存放于…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉