首页/新闻资讯/正文详情

WPScan 动态查找器实战:以 custom-header-extended 插件的 ChangeLog 指纹配置为例

发布时间:2026/9/25 11:08:18 来源:云帆数科 栏目:资讯中心
WPScan 动态查找器实战:以 custom-header-extended 插件的 ChangeLog 指纹配置为例
网络安全漏洞扫描渗透测试应用安全CLI【免费下载链接】wpscanWPScan WordPress security scanner. Written for security professionals and blog maintainers to test the security of their WordPress websites. Contact us via contactwpscan.com项目地址https://gitcode.com/gh_mirrors/wp/wpscan点击查看免费下载导读WPScan 通过一套称为 Dynamic Finders动态查找器的机制从 WordPress 插件的各种公开文件readme.txt、changelog、翻译文件、JavaScript 等中自动抽取版本信息从而在不访问插件官方页面、不依赖漏洞库 API 的情况下完成插件识别与版本定位。本文以仓库中custom-header-extended插件的changelog.md指纹数据spec/fixtures/dynamic_finders/plugin_version/custom-header-extended/change_log/changelog.md为线索完整还原该指纹从 YAML 配置、源码加载、请求匹配到版本确认的整条链路帮助读者掌握如何解读、验证与扩展这类版本指纹。一、关联文档一份 Change Log 指纹样本在 WPScan 仓库中动态查找器的测试数据按「插件 slug / 查找器类型」组织在spec/fixtures/dynamic_finders/plugin_version/下。本文的核心样本位于插件 slugcustom-header-extended文件路径spec/fixtures/dynamic_finders/plugin_version/custom-header-extended/change_log/changelog.md文件内容为一份标准的 Markdown 格式变更日志# Change Log ## [1.0.0] - 2015-07-08 ### Added * Added French translation files. * Created separate changelog.md file. ## [0.1.1] * Fixed for translations where there was a typo in the textdomain. * Updated plugin file headers. ## [0.1.0] * Everythings new!这是一份典型的、可直接被 WPScan 版本指纹命中的插件变更日志以## [x.y.z]的 Markdown 二级标题格式逐条列出版本号最新版本1.0.0位于文件顶部。它本身并不是 WPScan 的说明文档而是被 WPScan 的测试与运行时系统当作「目标插件上真实存在的文件内容」来模拟抓取场景的夹具fixture。也就是说这份文件同时承担两个角色作为 WPScan 对目标站点请求该文件时预期返回的响应体以及验证指纹正则是否正确提取出版本号的测试基准。二、指纹如何注册dynamic_finders.yml 中的 ChangeLog 配置WPScan 并不会对每个插件都硬编码一个查找器类而是把「插件 slug → 文件路径 → 匹配正则」的映射集中声明在数据库指纹文件 spec/fixtures/db/dynamic_finders.yml 中。与custom-header-extended相关的配置如下custom-header-extended: ChangeLog: class: BodyPattern path: changelog.md pattern: !ruby/regexp /\#\# \[(?v\d[\.\d])\]/ version: true Readme: path: readme.txt逐字段解读字段值含义ChangeLog查找器名称同时作为默认类名与配置块的标识classBodyPattern指定实际使用的查找器实现类对应lib/wpscan/finders/dynamic_finder/version/body_pattern.rbpathchangelog.md目标插件中要请求的候选文件路径与上述 fixture 文件一一对应pattern/\#\# \[(?v\d[\.\d])\]/从响应体中提取版本号的正则命名捕获组v携带版本值versiontrue标记该配置属于「版本查找器」会被versions_finders_configs汇总注意class: BodyPattern与ChangeLog的对应关系create_versions_finders会优先使用config[class]见 lib/wpscan/db/dynamic_finders/plugin.rb因此该插件的ChangeLog实际被实例化为BodyPattern子类而非名为ChangeLog的专用类。三、指纹加载从 YAML 到动态创建查找器类WPScan 的运行时并不直接读取上述 fixtures 目录而是通过以下加载链路获取配置WPScan::DB::DynamicFinders::Base.all_df_data使用YAML.safe_load_file解析dynamic_finders.yml并允许Regexp类被安全反序列化lib/wpscan/db/dynamic_finders/base.rb。WPScan::DB::DynamicFinders::Plugin.df_data从全部数据中取出plugins键lib/wpscan/db/dynamic_finders/plugin.rb。versions_finders_configs只保留带version: true的配置lib/wpscan/db/dynamic_finders/plugin.rbcustom-header-extended的ChangeLog即属此类。create_versions_finders(slug)依据 slug 动态创建常量模块WPScan::Finders::PluginVersion::CustomHeaderExtended并通过version_finder_super_class(klass)将BodyPattern映射为WPScan::Finders::DynamicFinder::WpItemVersion::BodyPattern再调用create_child_class生成子类lib/wpscan/db/dynamic_finders/plugin.rb。这里有两个值得注意的工程细节主动/被动模式分流finder_configs(finder_class, aggressive:)中aggressive模式只保留带path的配置需要主动请求具体文件而被动模式只保留不带path的配置从已抓取页面里嗅探。ChangeLog这类带path的版本指纹属于典型的主动aggressive探测项。向后兼容策略当数据库新增了当前工具版本不认识的查找器类时create_versions_finders会直接跳过而非抛异常lib/wpscan/db/dynamic_finders/plugin.rb保证旧版本工具更新数据库后仍可正常扫描。四、匹配与确认BodyPattern 如何解析 changelog.mdcustom-header-extended的ChangeLog配置被实例化为BodyPattern查找器。其核心实现在 lib/wpscan/finders/dynamic_finder/version/body_pattern.rbdef find(response, _opts {}) return unless response.code ! 404 response.body ~ self.class::PATTERN create_version( Regexp.last_match[:v], interesting_entries: [#{response.effective_url}, Match: #{Regexp.last_match}] ) end关键行为只有响应码不为 404 且响应体匹配PATTERN时才创建版本对象Regexp.last_match[:v]取出命名捕获组v。该查找器的默认置信度为60child_class_constants中CONFIDENCE: 60除非配置里显式覆盖confidence。类常量PATH默认nil由 YAML 中的path在创建子类时注入从而决定请求/wp-content/plugins/custom-header-extended/changelog.md。把配置中的正则/\#\# \[(?v\d[\.\d])\]/应用于本文样本文件会在## [1.0.0] - 2015-07-08一行命中v捕获值为1.0.0即插件的当前版本。由于样本中版本号按从新到旧排列首个命中即最新版这正是 WPScan 能直接确认插件版本的原因。关于这类查找器的设计意图源码注释明确写道BodyPattern 通常用于「响应不是 HTML 文档、无法使用 Xpath」的场景lib/wpscan/finders/dynamic_finder/version/body_pattern.rbchangelog 这类纯文本/Markdown 文件恰好符合该特征。五、测试佐证动态查找器如何被验证仓库中并不存在专门针对custom-header-extended这一条配置的 spec 文件但ChangeLog → BodyPattern这一组合的加载与匹配逻辑有充分测试覆盖spec/lib/finders/dynamic_finder/version/body_pattern_spec.rb 通过create_child_class动态生成BodyPattern子类验证PATTERN、CONFIDENCE默认 60与PATH可配置为changelog.txt三个常量是否正确注入——这正是custom-header-extended配置被实例化时的行为模板。spec/lib/finders/dynamic_finder/plugin_version_spec.rb负责插件版本动态查找器整体链路的测试其中#passive/#aggressive的调用路径与create_versions_finders一一对应。因此changelog.mdfixture 与dynamic_finders.yml中custom-header-extended配置块共同构成一条完整的可验证样本前者模拟真实站点的响应体后者定义请求路径与提取正则。六、同类指纹速览与扩展思路ChangeLog是dynamic_finders.yml中极常见的版本指纹类型且大多采用BodyPattern实现只是不同插件维护者习惯的 changelog 格式不同。仓库中可观察到几种代表性写法插件示例pathpattern 风格custom-header-extendedchangelog.md## [1.0.0]Markdown 标题2faschangelog.txt 1.0.0行首 版本号忽略大小写300formchangelog.txtv1.0.0且排除后文再出现版本号的情况404-pagechangelog.txt行首直接是1.0.0正则均使用命名捕获组(?v...)提取版本version: true标记该配置参与版本确认。若未来要为某插件新增指纹只需在dynamic_finders.yml的对应 slug 下追加一个带class: BodyPattern、path、pattern与version: true的ChangeLog配置块并在spec/fixtures/dynamic_finders/plugin_version/slug/change_log/下放置对应格式的样本文件即可无需修改任何 Ruby 代码——这是动态查找器体系「配置驱动、免改代码」设计的直接体现。小结custom-header-extended/change_log/changelog.md是 WPScan 动态版本指纹体系的典型样本一份 Markdown 变更日志 一条ChangeLog/BodyPatternYAML 配置。完整的识别链路为dynamic_finders.yml配置 →WPScan::DB::DynamicFinders::Plugin加载 → 动态创建BodyPattern子类 → 主动请求changelog.md→ 正则提取版本号。默认置信度 60、非 404 才匹配、带path即归入 aggressive 模式等行为均可从 lib/wpscan/db/dynamic_finders/plugin.rb 与 lib/wpscan/finders/dynamic_finder/version/body_pattern.rb 中直接印证。借助这套机制WPScan 可以在不访问插件官方仓库的前提下仅凭目标站点上公开可读的 changelog 文件即可完成插件版本识别这也是其插件枚举与漏洞匹配流程中不可替代的一环。赞分享网络安全漏洞扫描渗透测试应用安全CLI【免费下载链接】wpscanWPScan WordPress security scanner. Written for security professionals and blog maintainers to test the security of their WordPress websites. Contact us via contactwpscan.com项目地址https://gitcode.com/gh_mirrors/wp/wpscan点击查看免费下载相关推荐WPScan 插件版本指纹实战以 OptinMonster CHANGELOG 指纹为例WPScan 插件版本指纹实战以 OptinMonster CHANGELOG 指纹为例 本文以 WPScan 仓库中一份真实测试样例——OptinMonst网络安全漏洞扫描渗透测试应用安全CLIWPScan 动态发现器实战以 ga-tracking-code 插件 CHANGELOG 版本指纹为例WPScan 动态发现器实战以 ga tracking code 插件 CHANGELOG 版本指纹为例 WPScan 作为面向安全人员与博客维护者的 Wor网络安全漏洞扫描渗透测试应用安全CLIWPScan 如何利用插件 CHANGELOG 检测版本以 chillpay-payment-gateway 动态查找器为例WPScan 如何利用插件 CHANGELOG 检测版本以 chillpay payment gateway 动态查找器为例 WPScan 在枚举插件版本时网络安全漏洞扫描渗透测试应用安全CLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

沟通型CRM深度解析:从坐席工作台到通信集成的落地实践
沟通型CRM深度解析:从坐席工作台到通信集成的落地实践

“DeskcommCRM”这个名字第一次出现在我面前时,我的第一反应是:这又是一个把“客户管理”做得像Excel表格Plus的CRM吧?后来仔细拆开一看,发现这个产品思路完全不一样——“Desk”指的是桌面坐席,“comm”是communicati… · 2026/9/25 11:08:18

从简体到繁体:masa-mods-chinese 如何为 Masa Mods 添加 zh_tw 多语言支持
从简体到繁体:masa-mods-chinese 如何为 Masa Mods 添加 zh_tw 多语言支持

从简体到繁体:masa-mods-chinese 如何为 Masa Mods 添加 zh_tw 多语言支持 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese masa-mods-chinese 是一个 Masa Mods 全家桶的汉化… · 2026/9/25 11:08:06

大模型外挂MCP教程(1):3分钟搞懂MCP是什么,小白也能配 TaoToken
大模型外挂MCP教程(1):3分钟搞懂MCP是什么,小白也能配 TaoToken

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

MikroORM 自定义数据库驱动开发指南:从 Platform 到 Driver 的四层架构与完整实现
MikroORM 自定义数据库驱动开发指南:从 Platform 到 Driver 的四层架构与完整实现

后端 【免费下载链接】mikro-orm TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, MS SQL Server, PostgreSQL and SQLite/libSQL databases. 项目地址: https://gitcode.com/gh_mir… · 2026/9/25 11:41:05

Plannotator 集成评估:将 Flue 作为 agent-job provider 的可行性分析(Shape A 可行 / Shape B 搁置)
Plannotator 集成评估:将 Flue 作为 agent-job provider 的可行性分析(Shape A 可行 / Shape B 搁置)

【免费下载链接】plannotator Annotate and review coding agent plans and code diffs visually, share with your team, send feedback to agents with one click. 项目地址: https://gitcode.com/gh_mirrors/pl/plannotator 点击查看 免费下载 导读 本文是 Pla… · 2026/9/25 11:40:53

告别设计返工:用 DESIGN.md 让 AI 精准还原 UI 的设计系统革命
告别设计返工:用 DESIGN.md 让 AI 精准还原 UI 的设计系统革命

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

linuxkit 中 init 组件的 TOML 解析:go-toml v1 库原理与 runtime-config 实战
linuxkit 中 init 组件的 TOML 解析:go-toml v1 库原理与 runtime-config 实战

操作系统云原生容器运行时 【免费下载链接】linuxkit A toolkit for building secure, portable and lean operating systems for containers 项目地址: https://gitcode.com/gh_mirrors/li/linuxkit 点击查看 免费下载 linuxkit 的 init 组件(pkg/init… · 2026/9/25 11:40:41

字节跳动 Trae 国内首个 AI 原生 IDE:TaoToken 统一 Key 接入与 config.toml 配置实战
字节跳动 Trae 国内首个 AI 原生 IDE:TaoToken 统一 Key 接入与 config.toml 配置实战

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

从客户沟通轨迹到轻量CRM:DeskcommCRM的数据模型与落地实践
从客户沟通轨迹到轻量CRM:DeskcommCRM的数据模型与落地实践

最近整理 DeskcommCRM 的落地笔记时,我翻到了项目初期写的一组需求评审文档。这个项目一开始被同事叫作"客户沟通记录本",后来我们一步步把它做成了一个真正覆盖线索、客户、跟进任务和团队看板的轻量CRM系统。如果你所在的团队也面临"客… · 2026/9/25 11:40:28

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

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

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

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

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码