网络安全漏洞扫描渗透测试应用安全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 插件页面中自动提取版本号而 spec/fixtures/dynamic_finders/plugin_version/monk/change_log/CHANGELOG.md 正是验证其中ChangeLog检测方式的典型测试固件它是一份完整的 Monk 多语言插件更新日志。读完本文你既能掌握 Monk 插件从 0.1.0 到 0.7.0 的完整版本演进脉络又能理解 WPScan 是如何用一个正则表达式从 CHANGELOG 文件里解析出版本号并生成检测证据链的。一、固件主体内容Monk 插件 0.1.0 → 0.7.0 的完整版本史该 CHANGELOG.md 记录了 WordPress 多语言插件 Monk一款提供站点内容翻译、语言切换器、语言包自动下载等功能的多语言插件的全部已知版本。以下按版本倒序完整继承原文档内容版本主要变更0.7.0新增 hreflang 标签新增后台按文章语言过滤评论功能新增monk_get_translations函数可用于自定义语言切换器改写数据库查询以提升性能修复静态首页 bug修复自定义 meta 查询被覆盖的问题修复旧版 PHP 激活插件时的语法错误修复 terms 过滤按钮不显示的问题修复打开最后编辑菜单时语言选项显示错误的问题0.6.0重构 Monk 设置页更新时的通知系统改进 Language Switcher 组件的自定义器设置新增 terms 语言过滤器新增monk_custom_language_slug过滤器允许用户自定义语言 slug0.5.2修复文章从回收站恢复时的 bug修复默认分类english翻译错误修复文章/页面语言选择器选中All languages时的 bug0.5.1修复媒体库更新流程中的 bug改进后台控件的无障碍属性修复某文章类型无文章时语言过滤器持续残留的问题0.5.0新增站点标题和描述翻译新增获取翻译链接的 shortcode新增uncategorized分类翻译修复语言切换器中自定义分类法链接修复文章编辑页媒体按语言过滤的问题0.4.1修复伪静态未启用时前端站点翻译的 bug修复 Travis CI 警告修复与get_current_screen函数调用的兼容性问题修复 Language Switcher 组件中损坏的归档链接修复日期归档链接 URL 中语言 slug 重复的问题修复 term 编辑页链接携带错误分类法名称的问题0.4.0新增语言包自动下载新增默认语言 slug 是否出现在 URL 中的选项实现完整语言支持可翻译到 100 多种语言改进语言切换器 UI修复上一篇/下一篇文章链接0.3.1优化整体链接结构改进语言切换器组件改进文本一致性改进文章公共过滤器修复日期和分类归档链接0.3.0新增菜单翻译支持新增Monk Love致谢支持0.2.0改进后台和前台按语言过滤文章/terms 的查询新增媒体翻译支持将语言写入永久链接permalinks0.1.0初始发布从这份变更史可以看出几个与 WordPress 插件开发直接相关的技术细节monk_custom_language_slug这类xxx_前缀命名是典型的 WordPress action/filter 钩子命名规范monk_get_translations则是暴露给开发者用于构建自定义语言切换器的公共 API。0.4.0 版本引入语言包自动下载 100 余种语言是该插件功能跃升的分水岭。需要强调的是在 WPScan 仓库中这份文件的身份并不是产品文档而是测试固件fixture——它模拟一个真实部署在wp-content/plugins/monk/CHANGELOG.md路径下的插件更新日志用于验证 WPScan 的插件版本动态检测逻辑。二、固件在仓库中的角色monk 的动态查找器配置WPScan 的动态查找器数据库位于 spec/fixtures/db/dynamic_finders.yml其中monk条目约第 79958 行起声明了两种互补的版本检测策略monk: QueryParameter: files: - public/css/monk-public.css - public/css/monk-widget.css - admin/css/monk-flags.css - public/js/monk-public.js - public/js/monk-widget.js version: true ChangeLog: class: BodyPattern path: CHANGELOG.md pattern: !ruby/regexp /(?v\d\.[\.\\d])/ version: true两条策略的分工是QueryParameter被动检测不发出额外请求只解析已抓取页面中插件静态资源 URL 的?verx.y.z查询参数如monk-public.css?ver0.7.0ChangeLog主动检测使用BodyPattern查找器类主动请求CHANGELOG.md文件并用正则/(?v\d\.[\.\\d])/从响应体中提取第一个版本号。对应的期望输出保存在 spec/fixtures/dynamic_finders/expected.ymlmonk条目约在第 36630 行测试运行时逐字段比对monk: QueryParameter: number: 0.7.0 found_by: Query Parameter (Passive Detection) interesting_entries: - http://wp.lab/wp-content/plugins/monk/public/css/monk-public.css?ver0.7.0 # ... 其余 4 个带 ?ver0.7.0 的资源 URL confidence: 50 ChangeLog: number: 0.7.0 found_by: Change Log (Aggressive Detection) interesting_entries: - http://wp.lab/wp-content/plugins/monk/CHANGELOG.md, Match: 0.7.0两个查找器都收敛到同一个版本号0.7.0——这正是本固件中 Changelog 的第一个最新条目标题## [0.7.0]与?ver0.7.0保持一致的原因固件文件与期望输出必须互相吻合测试才能通过。三、源码原理BodyPattern 查找器如何解析 CHANGELOG真正执行从 CHANGELOG 中抠版本号动作的实现是 lib/wpscan/finders/dynamic_finder/version/body_pattern.rb# param [ Typhoeus::Response ] response # param [ Hash ] opts # return [ Version ] 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逐行拆解这个流程它解释了 expected.yml 中每一项输出的来源response.code ! 404目标文件必须真实存在404 直接放弃检测response.body ~ self.class::PATTERN将响应体与配置中的命名捕获组正则/(?v\d\.[\.\\d])/匹配。本固件第一行标题## Changelog之后首个符合\d\.\d...的串即0.7.0命名组:v恰好捕获它所以Regexp.last_match[:v]返回0.7.0create_version(Regexp.last_match[:v], ...)用捕获的版本号构造Version模型版本号语义校验由lib/wpscan/models/version.rb承担interesting_entries生成一条形如url, Match: 完整匹配文本的证据字符串——这与 expected.yml 里http://wp.lab/wp-content/plugins/monk/CHANGELOG.md, Match: 0.7.0逐字对应。插件场景下查找器类通过 lib/wpscan/finders/dynamic_finder/wp_item_version.rb 中的别名WpItemVersion::BodyPattern复用上述实现即查找器类名 目标项类型决定了正则作用的对象是插件目录还是主题目录。此外BodyPattern的默认置信度常量CONFIDENCE: 60见 body_pattern.rb 第 12 行会参与最终版本判定的置信度合并——同一插件多个查找器命中同一版本时置信度会累加因此 QueryParameter默认基础置信度更低与 ChangeLog 同时命中时最终置信度显著高于单一来源。四、这套固件与测试流程的实践价值从源码结构看这类固件的验证链路是dynamic_finders.yml提供查找器配置配置数据由 WPScan 社区维护并随版本更新→ 扫描流程按配置对模拟站点wp.lab执行被动/主动检测 → 结果与expected.yml断言比对。这带来三点实战启示对安全评估者理解Passive Detection / Aggressive Detection的区分——被动检测零额外请求、可在不增加站点负担的前提下完成主动检测如请求 CHANGELOG.md覆盖面更广但会留下访问日志扫描时应结合--aggressive相关选项权衡对插件开发者若你的插件希望被 WPScan 正确识别版本除readme.txt外保持 CHANGELOG 中版本号与静态资源?ver参数一致如 monk 固件所做能提高版本识别的准确性对贡献者新增或修正某插件的查找器配置时需要在spec/fixtures/db/dynamic_finders.yml声明查找器、在spec/fixtures/dynamic_finders/plugin_version/slug/下放置与配置匹配的固件内容并同步更新expected.yml的期望输出三者缺一不可。五、小结spec/fixtures/dynamic_finders/plugin_version/monk/change_log/CHANGELOG.md 是一份双重身份的文件表面上是 Monk 多语言插件 0.1.0 至 0.7.0 的完整更新日志实质上是 WPScan 动态查找器体系中ChangeLog/BodyPattern版本检测路径的标准测试固件。围绕它展开的三处仓库资产——查找器配置、期望输出 与 BodyPattern 实现——共同构成了一条从正则匹配响应体到生成可审计证据链的完整版本识别流水线也是理解 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 插件版本检测实战以 get-the-image 的 changelog.md 为例解析 ChangeLog 动态查找机制WPScan 插件版本检测实战以 get the image 的 changelog.md 为例解析 ChangeLog 动态查找机制 导读 WordPres网络安全漏洞扫描渗透测试应用安全CLIWPScan 插件版本检测实战以 ACF Options for Polylang 的 CHANGELOG.md 为指纹案例WPScan 插件版本检测实战以 ACF Options for Polylang 的 CHANGELOG.md 为指纹案例 WPScan 作为 WordPr网络安全漏洞扫描渗透测试应用安全CLI深度解析 WPScan ChangeLog 动态版本探测以 adblock-notify-by-bweb 插件 CHANGELOG.md 为例深度解析 WPScan ChangeLog 动态版本探测以 adblock notify by bweb 插件 CHANGELOG.md 为例 WPScan网络安全漏洞扫描渗透测试应用安全CLI上一篇GyroFlow 索尼镜头配置文件加载不了视频稳定排障与解决指南下一篇5分钟搞定OFD转PDFOfd2Pdf免费开源工具完整使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
