网络安全漏洞扫描渗透测试应用安全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),仅供参考
