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

从 CHANGELOG.md 识别 WordPress 插件版本:WPScan Change Log 动态查找器(vbsso-lite 实例全解)

发布时间:2026/9/28 2:57:37 来源:云帆数科 栏目:资讯中心
从 CHANGELOG.md 识别 WordPress 插件版本:WPScan Change Log 动态查找器(vbsso-lite 实例全解)
网络安全漏洞扫描渗透测试应用安全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 是面向安全研究人员与站点维护者的 WordPress 安全扫描器。在识别插件、主题或核心版本时除了解析readme.txtWPScan 还会从插件发布目录下的CHANGELOG.md、CHANGELOG.txt等变更日志文件中直接提取版本号这一能力由 Dynamic Finders动态查找器子系统中的Change Log 查找器承担。本文以仓库测试夹具中的vbsso-lite插件为完整实例从真实 CHANGELOG 文件出发逐层拆解 WPScan 如何利用 YAML 配置 BodyPattern 正则 攻击性Aggressive请求机制自动识别插件版本并给出配置字段、匹配语义与底层源码调用链的详细解读。一、实例背景vbsso-lite 插件的 CHANGELOG.md在 WPScan 仓库中vbsso-litevBSSO Connect WordPress一款将 WordPress 与 vBulletin 论坛做单点登录集成的插件的变更日志被保存为测试夹具路径为 spec/fixtures/dynamic_finders/plugin_version/vbsso-lite/change_log/CHANGELOG.md。该文件本身是插件开发者在真实发布中维护的 Markdown 变更日志采用“版本标题 更新说明 发布时间”的结构例如# vBSSO Connect WordPress ### Changelog ### 1.4.3 * Technical release. _[Updated on March 26, 2019]_ ### 1.4.2 * Update core version. ...从全文看它记录了 1.02011-09-10 初版到 1.4.32019-03-26之间的每一次发布包含以下技术信息版本号规律每个版本使用三级/两级语义化标题### x.y.z分隔功能演进如 1.4.0 将 vBSSO 功能拆分为 Login、Logout、Registration、Avatars、Update User Profile、User Profile、Member Profile 等独立特性PHP / WordPress 兼容性矩阵1.3.0 声明支持 PHP 5.3–7.0 与 WordPress 4.0–4.7并宣布 PHP 5.2、WordPress 3.x 的 EOL1.4.1 增加 PHP 7.1、7.2 支持具体缺陷修复如 1.2.7 修复Call to undefined method stdClass::add_role()1.2.1 修复Use of undefined constant IS_PROFILE_PAGE1.1 修复lostpassword_url覆盖等。这份真实的变更日志正是 WPScan 提取插件版本的“样本数据源”下面看它如何被 WPScan 的配置与代码消费。二、Change Log 查找器的配置动态查找器 YAML 中的 vbsso-lite 条目WPScan 不把查找逻辑硬编码在每个插件里而是通过一份集中的 YAML 数据文件驱动。测试环境下的数据文件位于 spec/fixtures/db/dynamic_finders.yml其中vbsso-lite的条目为vbsso-lite: ChangeLog: class: BodyPattern path: CHANGELOG.md pattern: !ruby/regexp /\#\# (?v\d\.\.\d)/ version: true这份配置的语义逐字段拆解如下配置字段vbsso-lite 中的值含义vbsso-lite顶层键插件目录 slug即 WordPress 插件安装目录名ChangeLog查找器名称动态查找器的子类名称也是 YAML 中该插件的查找器标识classBodyPattern查找器实际继承的基类此处将 ChangeLog 归类为 BodyPattern正则匹配响应正文型pathCHANGELOG.md需要主动请求的相对路径存在该字段即表明这是一个 Aggressive攻击性/主动探测查找器pattern/\#\# (?v\d\.[\.\d])/从文件正文中匹配版本号的正则命名捕获组v用于提取版本号versiontrue标记该查找器用于版本识别说明pattern 中(?v\d\.[\.\d])用于匹配### 1.4.3这类标题行中的版本号——先匹配一个数字加小数点再匹配任意数量的.数字组合。由于每次匹配按顺序命中第一个版本标题因此取到的是文件中最新的版本号1.4.3。需要指出的是在真实运行环境中该 YAML 不是从仓库读取而是由wpscan --update从官方数据仓库下载到本地DB_DIR见 lib/wpscan/db/updater.rb 中dynamic_finders.yml属于更新清单仓库内的 spec/fixtures/db/dynamic_finders.yml 是用于测试的等价副本。三、从配置到执行动态查找器的加载与类生成3.1 数据加载入口所有 Dynamic Finders 共用基类 lib/wpscan/db/dynamic_finders/base.rbdef self.df_file df_file || DB_DIR.join(dynamic_finders.yml) end def self.all_df_data all_df_data || YAML.safe_load_file(df_file, permitted_classes: [Regexp]) endDB_DIR由 lib/wpscan.rb 决定优先使用~/.wpscan/db传统路径否则使用$XDG_CACHE_HOME/wpscan/db未设置时回退~/.cache/wpscan/db。3.2 插件维度的配置整理插件专用实现位于 lib/wpscan/db/dynamic_finders/plugin.rb其中两个方法与 vbsso-lite 实例直接相关finder_configs(finder_class, aggressive:)按是否带path字段区分 Aggressive 与 Passive 查找器versions_finders_configs仅保留带version: true的配置——vbsso-lite 的ChangeLog条目即因此被纳入版本查找器集合。df_data.each do |slug, finders| finders.each do |finder_name, config| next unless config.key?(version) versions_finders_configs[slug] || {} versions_finders_configs[slug][finder_name] config end end3.3 动态生成查找器类maybe_create_module会将 slug 类名化vbsso-lite→VbssoLite并在WPScan::Finders::PluginVersion命名空间下创建模块随后create_versions_finders依据class: BodyPattern找到基类WPScan::Finders::DynamicFinder::WpItemVersion::BodyPattern并把配置中的path、pattern、version作为类常量注入新生成的子类见 lib/wpscan/finders/dynamic_finder/finder.rb 的create_child_class。WpItemVersion下的各基类在 lib/wpscan/finders/dynamic_finder/wp_item_version.rb 中定义其中BodyPattern直接复用版本查找器基类。四、核心原理BodyPattern 如何从 CHANGELOG.md 里提取版本号class: BodyPattern对应的实现位于 lib/wpscan/finders/dynamic_finder/version/body_pattern.rbclass BodyPattern Finders::DynamicFinder::Version::Finder def self.child_class_constants child_class_constants || super.merge(PATTERN: nil, CONFIDENCE: 60) end def 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 end关键语义仅当响应状态码非 404 且正文匹配配置的PATTERN时才继续通过命名捕获组(?v...)提取版本号此处即1.4.3命中信息被记录为interesting_entries格式为URL, Match: 完整匹配串CONFIDENCE默认 60。若 YAML 中额外配置了confidence字段则可覆盖测试用例见 spec/lib/finders/dynamic_finder/version/body_pattern_spec.rb。生成的Version对象由 lib/wpscan/finders/dynamic_finder/version/finder.rb 的create_version完成found_by默认标记为 “Change Log (Aggressive Detection)”。Passive 与 Aggressive 的分工基类 lib/wpscan/finders/dynamic_finder/finder.rb 定义了两种触发方式def passive(opts {}) return if self.class::PATH homepage_result find(target.homepage_res, opts) ... find(target.error_404_res, opts) end def aggressive(opts {}) return unless self.class::PATH find(Browser.get(target.url(self.class::PATH)), opts) endPassive仅当配置没有path时才执行从目标首页与 404 页响应中匹配如插件在页面输出中嵌入版本号Aggressive仅当配置有path时才执行主动请求插件目录/CHANGELOG.md。vbsso-lite 配置带path: CHANGELOG.md因此它属于 Aggressive 查找器扫描器会主动请求http://目标/wp-content/plugins/vbsso-lite/CHANGELOG.md并匹配版本标题。五、测试与预期结果vbsso-lite 的端到端验证5.1 期望结果文件vbsso-lite在测试夹具期望表 spec/fixtures/dynamic_finders/expected.yml 中的记录为vbsso-lite: ChangeLog: number: 1.4.3 found_by: Change Log (Aggressive Detection) interesting_entries: - http://wp.lab/wp-content/plugins/vbsso-lite/CHANGELOG.md, Match: ## 1.4.3这与 5.1 节的正则语义完全对应匹配第一个###版本标题得到最新版本1.4.3命中条目记录了请求 URL 与匹配内容。5.2 自动化测试机制插件版本动态查找器的自动化测试位于 spec/lib/finders/dynamic_finder/plugin_version_spec.rb。该测试会遍历versions_finders_configs中所有插件包括 vbsso-lite为每个查找器动态生成 spec通过WPScan::DB::DynamicFinders::Plugin.create_versions_finders(slug)动态创建查找器类对于带path的 Aggressive 查找器用 WebMock 拦截对plugin.url(config[path])的请求并以夹具目录下对应的CHANGELOG.md内容作为响应体测试辅助函数df_stubbed_response定义于 spec/spec_helper.rb断言返回的WPScan::Model::Version的number、found_by、interesting_entries与confidence与expected.yml完全一致。测试夹具目录布局约定为spec/fixtures/dynamic_finders/plugin_version/slug/finder_class.underscore/path而 vbsso-lite 目录为.../vbsso-lite/change_log/CHANGELOG.mdChangeLog→change_log与测试装配逻辑吻合。5.3 配套单元测试spec/lib/db/dynamic_finders/plugin_spec.rb验证finder_configs对 Aggressive/Passive 的过滤、versions_finders_configs只保留version: true条目、maybe_create_module的 slug 类名化含123-test-plugin等特殊字符情形、重复创建不报错等spec/lib/finders/dynamic_finder/version/body_pattern_spec.rb验证PATTERN/CONFIDENCE/PATH三类常量从配置合并进动态子类的行为以及默认置信度 60 与自定义置信度的覆盖。六、实战指引如何复现与利用该识别能力6.1 在测试环境中验证仓库中可以直接运行与 vbsso-lite 相关的动态查找器测试先bundle install安装依赖bundle exec rspec spec/lib/finders/dynamic_finder/plugin_version_spec.rb -e VbssoLite bundle exec rspec spec/lib/finders/dynamic_finder/version/body_pattern_spec.rb其中-e VbssoLite过滤出WPScan::Finders::PluginVersion::VbssoLite::ChangeLog的 Passive/Aggressive 行为。6.2 在真实站点上使用安装并更新 WPScan 后wpscan --update会下载含动态查找器配置的数据库针对安装过 vBSSO 插件的站点执行wpscan --url https://example.com --enumerate p --plugins-detection aggressive--enumerate p枚举插件--plugins-detection aggressive会主动请求插件目录下的CHANGELOG.md等已知文件从而命中 vbsso-lite 的 Change Log 查找器并报告1.4.3等版本若站点已配置 WPScan API Token--api-token识别出的版本会进一步与漏洞数据库比对输出已知漏洞。6.3 自行扩展配置的方法仅作理解参考若希望让 WPScan 识别其他同样带 CHANGELOG 的插件可在本地动态查找器 YAML 中按同样模式追加条目your-plugin-slug: ChangeLog: class: BodyPattern path: CHANGELOG.md pattern: !ruby/regexp /\#\# (?v\d\.[\.\d])/ version: true注意pattern必须包含名为v的命名捕获组且应针对目标文件的真实版本标题格式编写若版本号位于非标题行可调整正则但需保持捕获组一致。该配置随后会被versions_finders_configs收集并按 3.3 节的流程动态生成查找器。七、小结一条配置驱动的插件版本识别链路以vbsso-lite/CHANGELOG.md为例WPScan 的 Change Log 版本识别可归纳为五步链路数据源插件自带的CHANGELOG.md仓库夹具spec/fixtures/dynamic_finders/plugin_version/vbsso-lite/change_log/CHANGELOG.md配置dynamic_finders.yml中的ChangeLog条目声明了class: BodyPattern、path: CHANGELOG.md、正则与version: truespec/fixtures/db/dynamic_finders.yml加载与生成Plugin.versions_finders_configs收集配置create_versions_finders动态生成查找器类lib/wpscan/db/dynamic_finders/plugin.rb请求与匹配Aggressive 模式下请求wp-content/plugins/vbsso-lite/CHANGELOG.mdBodyPattern 用(?v...)命名捕获组提取1.4.3lib/wpscan/finders/dynamic_finder/version/body_pattern.rb验证expected.yml与plugin_version_spec.rb共同保障每个动态查找器产出结果的一致性与回归安全spec/fixtures/dynamic_finders/expected.yml、spec/lib/finders/dynamic_finder/plugin_version_spec.rb。理解这条链路后你不仅知道 WPScan 是如何“读 changelog 猜版本”的还能在遇到新插件时快速判断只要插件发布包内含格式规整的变更日志WPScan 就能以约 60 的置信度、无 API 请求成本地完成版本指纹识别为进一步的漏洞比对提供基础。赞分享网络安全漏洞扫描渗透测试应用安全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 动态查找器实战从插件 CHANGELOG.md 精确识别 WordPress 插件版本WPScan 动态查找器实战从插件 CHANGELOG.md 精确识别 WordPress 插件版本 导读 本文以 WPScan 仓库中 wiredrive网络安全漏洞扫描渗透测试应用安全CLIWPScan 动态查找器实战从插件 CHANGELOG.md 精确识别 WordPress 插件版本WPScan 动态查找器实战从插件 CHANGELOG.md 精确识别 WordPress 插件版本 导读 本篇文章以 WPScan 仓库内一份真实的 Wor网络安全漏洞扫描渗透测试应用安全CLI从 Change Log 到版本指纹WPScan 如何借助 changelog.md 动态识别 WordPress 插件版本从 Change Log 到版本指纹WPScan 如何借助 changelog.md 动态识别 WordPress 插件版本 导读 本文以 WPScan 仓库网络安全漏洞扫描渗透测试应用安全CLI上一篇Surya OCR 模型微调完整指南三步从环境到领域级识别下一篇[Task Name]创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

gsd-core 阶段目录前缀一致性修复:project_code 在 /gsd-discuss-phase 与 /gsd-plan-phase 首次触达路径的统一
gsd-core 阶段目录前缀一致性修复:project_code 在 /gsd-discuss-phase 与 /gsd-plan-phase 首次触达路径的统一

【免费下载链接】gsd-core Git. Ship. Done - Core 项目地址: https://gitcode.com/gh_mirrors/ge/gsd-core 点击查看 免费下载 导读 本文基于 gsd-core 仓库中已归档的 changeset(.changeset/archived/witty-geese-purr.md),剖… · 2026/9/28 2:57:36

Apereo CAS 委托认证配置:基于 Groovy / REST / SCIM 的外部身份源用户档案供给(Provisioning)实战指南
Apereo CAS 委托认证配置:基于 Groovy / REST / SCIM 的外部身份源用户档案供给(Provisioning)实战指南

后端认证鉴权单点登录 【免费下载链接】cas Apereo CAS - Identity & Single Sign On for all earthlings and beyond. 项目地址: https://gitcode.com/gh_mirrors/ca/cas 点击查看 免费下载 导读 当 CAS 通过 Pac4j 库 将认证委托给外部身份提供商&#xff0… · 2026/9/28 2:57:36

ng-zorro-antd Segmented 胶囊形状(Round Shape)完整指南:nzShape 参数详解与源码级实现剖析
ng-zorro-antd Segmented 胶囊形状(Round Shape)完整指南:nzShape 参数详解与源码级实现剖析

UI组件前端 【免费下载链接】ng-zorro-antd Angular UI Component Library based on Ant Design 项目地址: https://gitcode.com/gh_mirrors/ng/ng-zorro-antd 点击查看 免费下载 nz-segmented(分段控制器)是 ng-zorro-antd 中用于展示多个选… · 2026/9/28 2:57:36

顺义本土正骨名医——苏荫来的故事
顺义本土正骨名医——苏荫来的故事

在顺义本地骨伤正骨领域,有这样一位深耕三十余年的实力派老医者,一身古法正骨手艺,一手传承绝活,专治各类筋骨伤痛,凭借精准的手法、扎实的疗效、踏实的行医作风,深得邻里百姓信赖与认可。他就是杏园金方首… · 2026/9/28 3:29:27

2026实测百度网盘直链助手脚本,速度超越PanDownload工具
2026实测百度网盘直链助手脚本,速度超越PanDownload工具

随着我们手头的各种文档和视频资料越来越大,网盘在数据流转中扮演的角色也越来越重要。不管是工作交接还是备份生活点滴,它都帮了我们不少忙。 不过在日常使用中,偶尔遇到下载变慢也确实会让人感到有些苦恼。面对这种现象我们除了可以配合Pa… · 2026/9/28 3:29:08

剪映操作|输入文字后,能不能自动生成虚拟主播、配音和字幕
剪映操作|输入文字后,能不能自动生成虚拟主播、配音和字幕

适用对象:AI视频生成任务的创作者。本文只处理“输入文字后,能不能自动生成虚拟主播、配音和字幕?”这一件事。先确定这一条要解决什么先给结论:处理“输入文字后,能不能自动生成虚拟主播、配音和字幕?”&a… · 2026/9/28 3:28:21

运算符 文件操作 6
运算符 文件操作 6

运算符&#xff1a;算数运算: - * / % ////&#xff1a;整除%&#xff1a;求余比较运算&#xff1a;> < > < !赋值运算 &#xff1a; - *a21 b2 a,bb,a#只适合python print(a)#2 print(b)#21逻辑运算&#xff1a;and or not当and&#xff0c;or… · 2026/9/28 3:27:47

字符集和编码 bytes 5
字符集和编码 bytes 5

字符集和编码ascii——编排了128个文字字符&#xff0c;只需要7个0和1就可以表示了——1 byte8 bitANSI——每个字符 16 bit&#xff0c;2byteGBK编码Unicode&#xff1a;万国码utf-8&#xff1a;最短的字节长度8 英文&#xff1a;8bit&#xff0c;1 byte总结&#xff1a;as… · 2026/9/28 3:27:28

高效获取STM32开发参考方案:摆脱资料海洋,聚焦可落地项目
高效获取STM32开发参考方案:摆脱资料海洋,聚焦可落地项目

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

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介&#xff1a;这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程&#xff0c;从线性调频&#xff08;LFM&#xff09;信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑&#xff0c;面向电子信息工程、计算机、数学等专业学生&#xff0c;适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介&#xff1a;基于PyTorch的多模态虚假新闻检测项目完整代码包&#xff0c;面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者&#xff0c;解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征&#xff0c;以Res… · 2026/9/27 0:00:01

制作网页比较方便的软件怎么选?一文搞懂避坑指南
制作网页比较方便的软件怎么选?一文搞懂避坑指南

制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。… · 2026/9/28 0:00:06

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例… · 2026/9/28 0:00:19

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略
济南做网站多少钱:3个案例拆解,防黑源码下载全攻略

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?… · 2026/9/28 0:00:25

了解更多?预约专属演示

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

企业微信二维码