网络安全漏洞扫描渗透测试应用安全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.txt、CSS 或 JS 资源而是直接抓取插件仓库中的 CHANGELOG.md并从版本历史标题中提取当前版本号。本文以本仓库中 Kirki 插件的 CHANGELOG 夹具CHANGELOG.md为样本完整讲解 WPScan 的“动态发现器Dynamic Finders”体系如何完成这一任务包括配置语法、底层实现原理与可复现的实战流程。这份 CHANGELOG 在 WPScan 中的角色先明确一个容易混淆的事实spec/fixtures/dynamic_finders/plugin_version/kirki/change_log/CHANGELOG.md并不是 WPScan 的源码或运行时数据而是测试夹具fixture。它复制了 Kirki 插件GitHub 上开源的 WordPress Customizer 工具包官方变更日志的内容用于在单元测试中模拟目标站点返回的CHANGELOG.md响应体。从夹具内容可以看到完整的版本历史脉络例如 3.0.442019-06-25、3.0.432019-06-16、3.0.422019-06-16直到 0.22014-05-09 初始版本每个版本条目均以 Markdown 二级标题## x.y.z开头。正是这个稳定的格式约定构成了 WPScan 版本提取的匹配基础。动态发现器的入口dynamic_finders.yml 中的 Kirki 配置WPScan 将各种被动式指纹统一沉淀在一个巨型 YAML 配置文件中spec/fixtures/db/dynamic_finders.yml测试环境中的镜像生产环境对应DB_DIR/dynamic_finders.yml。该文件按插件/主题 slug 分组每种检测方式是一个独立 finder 条目。在配置文件中搜索kirki:可以找到如下真实配置dynamic_finders.yml 第 69739-69750 行kirki: QueryParameter: files: - modules/webfonts/kirki-webfonts.js version: true ChangeLog: class: BodyPattern path: CHANGELOG.md pattern: !ruby/regexp /\#\# (?v\d\.[\.\d])/ version: true Readme: path: readme.txt其中与本文主题直接相关的ChangeLog条目含义如下配置键值作用ChangeLog—该 finder 的名称同时被用作动态生成的类名后缀classBodyPattern指定使用的检测器类型对应 body_pattern.rbpathCHANGELOG.md相对插件根目录的请求路径即扫描时会请求{site}/wp-content/plugins/kirki/CHANGELOG.mdpattern/\#\# (?v\d\.[\.\d])/匹配响应体的正则(?v...)命名捕获组用于提取版本号versiontrue标记该 finder 用于版本探测注意path键的存在与否同时决定了扫描模式归属从 plugin.rb 的finder_configs方法可以看到aggressive模式会筛出带path的配置如本条ChangeLog而passive模式只使用不带path的配置。也就是说基于 CHANGELOG 的版本探测属于主动aggressive扫描行为。底层实现BodyPattern 检测器如何提取版本号class: BodyPattern对应的实现位于 lib/wpscan/finders/dynamic_finder/version/body_pattern.rb。该类的注释明确说明了设计意图它通常用于响应不是 HTML 文档、无法使用 XPath 的场景——CHANGELOG.md 正是典型的纯文本响应因此被指派给 BodyPattern。核心逻辑非常精简整个检测过程只有两步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执行流程可拆解为排除 404请求CHANGELOG.md返回 404说明该版本插件未附带变更日志时直接放弃正则匹配将响应体与/\#\# (?v\d\.[\.\d])/进行匹配。结合夹具内容理解\#\#对应 Markdown 二级标题前缀(?v\d\.[\.\d])捕获形如3.0.44、2.3.8的版本号且不限定##必须位于行首——这一设计保证了格式容错生成版本模型通过基类 Finder#create_version 构造Model::Version并自动附加found_by与默认置信度CONFIDENCE: 60定义在 body_pattern.rb 第 12 行记录取证信息interesting_entries中保存了命中的 URL 与完整匹配文本供漏洞报告与取证展示使用。值得一提的细节是该正则匹配到的是 CHANGELOG 中最新文件顶部最先出现的版本号因为扫描器拿到的始终是插件目录中当前部署那份 CHANGELOG.md 的最新内容——这正好对应插件当前安装版本。动态类生成从 YAML 到可执行 finderWPScan 不会为每个插件手写版本检测代码而是在运行时根据 YAML 配置动态生成 finder 类。这一机制由 lib/wpscan/db/dynamic_finders/plugin.rb 驱动maybe_create_module(slug)将 slugkirki类名化为Kirki在Finders::PluginVersion命名空间下创建同名模块create_versions_finders(slug)遍历该 slug 的所有version: true配置通过version_finder_super_class找到WPScan::Finders::DynamicFinder::WpItemVersion::BodyPattern作为父类再动态创建子类类名即ChangeLog并注入配置中的PATTERN、PATH等常量兼容性保护若 YAML 中出现了当前 WPScan 版本不认识的 finder 类allowed_classes之外create_versions_finders 会直接跳过而不是抛异常保证旧版扫描器在数据库更新后依然能正常扫描。允许的类清单定义在 base.rb 第 18-22 行Comment、Xpath、HeaderPattern、BodyPattern、JavascriptVar、QueryParameter、ConfigParser。数据加载入口在 base.rbYAML.safe_load_file读取dynamic_finders.yml并显式放行Regexp类对应配置中的!ruby/regexp标签。完整实战流程与验证路径综合以上原理一次基于 CHANGELOG 的 Kirki 版本探测在扫描过程中大致如下扫描器进入插件枚举阶段发现目标站点安装了kirki插件由于ChangeLogfinder 带有path配置被归入 aggressive 扫描WPScan 发起请求GET /wp-content/plugins/kirki/CHANGELOG.md若响应非 404则用模式/\#\# (?v\d\.[\.\d])/匹配响应体提取首个匹配的版本号如3.0.44以置信度 60 生成版本结论并将{url}, Match: ...写入interesting_entries该版本随后进入漏洞匹配阶段与 WPScan 漏洞数据库Vuln API / 本地数据库比对最终呈现在扫描报告中。如果想在本地验证这一整套机制仓库提供了完整的测试基础测试夹具模拟 Kirki 站点响应spec/fixtures/dynamic_finders/plugin_version/kirki/change_log/CHANGELOG.md配置镜像finders 定义spec/fixtures/db/dynamic_finders.yml第 69739-69750 行动态发现器数据层测试spec/lib/db/dynamic_finders/plugin_spec.rb 等BodyPattern 实现lib/wpscan/finders/dynamic_finder/version/body_pattern.rb运行测试的方式可参考仓库的 Rakefile 与 README.md常规做法为bundle exec rspec spec/lib/db/dynamic_finders/以确认动态 finder 的加载与版本提取行为符合预期。小结通过 Kirki 这个案例可以看出 WPScan 版本检测体系的一个精妙之处它把任何可稳定携带版本号的公开文件都当作潜在指纹源。CHANGELOG.md 这种开发者为人类维护的文档在 WPScan 中经过请求 → BodyPattern 正则匹配 → 动态类生成 → 版本模型四步转换成为与 readme.txt、CSS 版本参数同等重要的攻击面测绘线索。理解这条链路不仅有助于读懂 WPScan 的扫描结果也为研究如何在安全评估中最大化利用公开暴露的插件元数据提供了清晰范本。赞分享网络安全漏洞扫描渗透测试应用安全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 插件版本检测实战以 formgimp CHANGELOG 夹具解析 Change Log 动态发现机制WPScan 插件版本检测实战以 formgimp CHANGELOG 夹具解析 Change Log 动态发现机制 本篇文章聚焦 WPScanWordPr网络安全漏洞扫描渗透测试应用安全CLIWPScan 插件版本动态检测实战解析以 elementor-templater CHANGELOG 为例WPScan 插件版本动态检测实战解析以 elementor templater CHANGELOG 为例 导读 本文以 WPScan 仓库中的测试夹具 el网络安全漏洞扫描渗透测试应用安全CLIWPScan 动态版本检测实战以 Grid Plus 插件 CHANGELOG.md 为例解析 ChangeLog 版本指纹机制WPScan 动态版本检测实战以 Grid Plus 插件 CHANGELOG.md 为例解析 ChangeLog 版本指纹机制 WPScan 作为面向 Wo网络安全漏洞扫描渗透测试应用安全CLI上一篇告别卡顿移动端实时风格迁移的Fast Neural Style模型部署指南下一篇3行代码实现AutoGluon自动化机器学习框架安装全平台终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考