新闻详情

新闻详情

首页 / 资讯中心 / 详情

WPScan 动态查找器实战:如何借助 CHANGELOG.md 精准识别 WordPress 插件版本

发布时间:2026/9/25 14:01:42来源:尧图网络
WPScan 动态查找器实战:如何借助 CHANGELOG.md 精准识别 WordPress 插件版本
网络安全漏洞扫描渗透测试应用安全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 仓库中收录的better-rest-endpoints插件 CHANGELOG 为切入点完整解读该插件从 1.0.1 到 1.5.2 的版本演进并深入剖析 WPScan 动态查找器Dynamic Finders如何把CHANGELOG.md这类随插件分发的文档当作版本指纹来源在扫描目标站点时自动提取插件版本号。读完本文你将掌握 WPScan 版本识别链路fixture 夹具 → 查找配置 → 动态生成查找类 → 主动检测的完整工作机制并理解 Keep a Changelog 风格文档为何对扫描器格外友好。一、CHANGELOG.md 在 WPScan 动态查找体系中的定位在 WPScan 仓库中spec/fixtures/dynamic_finders/plugin_version/better-rest-endpoints/change_log/CHANGELOG.md是插件版本查找器plugin version finder的测试夹具fixture与同目录下的 composer_file/package.json 一起为better-rest-endpoints插件提供两份相互独立的版本证据源。这两份夹具在测试期望文件中都有对应条目。在 spec/fixtures/dynamic_finders/expected.yml 中可以看到better-rest-endpoints: ComposerFile: number: 1.2.0 found_by: Composer File (Aggressive Detection) interesting_entries: - http://wp.lab/wp-content/plugins/better-rest-endpoints/package.json, Match: 1.2.0 ChangeLog: number: 1.5.2 found_by: Change Log (Aggressive Detection) interesting_entries: - http://wp.lab/wp-content/plugins/better-rest-endpoints/CHANGELOG.md, Match: ## [1.5.2]同一个插件由两条查找器路径共同覆盖ComposerFile从package.json的version字段得到 1.2.0而ChangeLog从CHANGELOG.md的## [1.5.2]标题得到 1.5.2。两者都被标记为Aggressive Detection主动检测意味着扫描器需要实际请求对应文件路径才能命中。而真正驱动扫描的查找配置位于 spec/fixtures/db/dynamic_finders.ymlbetter-rest-endpoints: ComposerFile: class: ConfigParser path: package.json key: version version: true ChangeLog: class: BodyPattern path: CHANGELOG.md pattern: !ruby/regexp /\#\# \[(?v\d\.[\.\d])\]/ version: true这里给出了better-rest-endpoints插件 CHANGELOG 查找器的完整配置语义配置键值含义classBodyPattern使用动态查找器基类体系中的 BodyPattern 版本查找器对响应正文直接应用正则pathCHANGELOG.md主动检测阶段请求的相对路径插件根目录下pattern/\#\# \[(?v\d\.[\.\d])\]/提取版本号的正则命中形如## [1.5.2]的 Markdown 标题行捕获组v即版本号versiontrue该配置用于版本探测而非插件存在性探测二、better-rest-endpoints CHANGELOG 全量解读从 1.0.1 到 1.5.2better-rest-endpoints 是一个以“提供更精简的 WordPress REST API 端点”为目标的插件其package.json中的描述为 Serves up slimmer WordPress Rest API endpoints。以下版本历史完整取自本仓库收录的 CHANGELOG.md按时间倒序呈现2.1 2019 年SVN 修复与菜单端点1.5.22019-02-12修复SVN Version1.5.12019-02-12修复SVN Version1.5.02019-02-11新增按 location 获取菜单的端点Endpoint to get menu by location1.5.x 的三连发集中在 2019 年 2 月前两个补丁版本都在处理 SVN 版本同步问题随后 1.5.0 带来实质性新功能允许通过菜单位置location直接查询菜单数据这属于 WordPress REST API 中导航菜单能力的补充。2.2 1.4.1层级页面、modified date 与 ACF 选项页1.4.12019-01-23新增按 slug 或路径获取层级页面hierarchical pages的功能新增为所有带date的端点补充modified date新增支持 ACF options 页面修复空页面数组Empty page array这一版本同时发力于内容查询灵活性与数据完整性既支持用 slug/path 精确定位层级结构中的页面又在所有返回日期的端点中统一补充修改时间字段并接入了 ACFAdvanced Custom Fields的 options 页面数据。2.3 1.3.0 与 1.2.xYoast SEO、Permalinks 与响应瘦身1.3.02018-06-05新增Yoast SEO 输出详见对应文档更新响应中的 slug 输出1.2.12018-06-04新增为所有 page/post 端点补充 permalinks1.2.02018-02-07新增在端点 URL 中提供acf查询参数可在适用的集合collections响应中隐藏 ACF 值新增在端点 URL 中提供media查询参数可在适用的集合响应中隐藏特色媒体featured media从 1.2.0 起插件的“瘦身”理念体现为请求侧控制调用方可以在 URL 上附加查询参数按需裁掉响应中的 ACF 字段或特色媒体减少不必要的数据传输。1.2.1 则为页面/文章端点补充了永久链接1.3.0 把 Yoast SEO 输出纳入响应并调整了 slug 的返回形式。2.4 1.1.x按 slug 取文章与命名修正1.1.22018-01-25修复按 slug 获取文章时此前只返回第一篇的问题修复残留的$bwe变量命名1.1.12018-01-25更新更新插件版本以重新触发构建1.1.02018-01-25新增按 slug 获取文章的端点post by slug endpoint1.1.0 是功能分水岭——引入“按 slug 直接取文章”的端点1.1.1 属于发布流程层面的版本号调整1.1.2 则修复了该端点的一个真实缺陷多篇文章匹配时只返回首篇并清理了尚未改完的旧变量命名。2.5 1.0.x改名与底座1.0.22018-01-19修复静态实例警告static instance warning修复通过引入 admin 的plugin.php修复 ACF 函数调用失败更新将所有bwe*函数重命名为bre*1.0.12018-01-19新增CHANGELOG新增面向 WP 仓库的readme.txt初始阶段的两个版本侧重于工程收尾统一函数前缀bwe*→bre*呼应插件名 better-rest-endpoints、修复静态实例与依赖加载问题并补齐了 CHANGELOG 与 WP 官方仓库所需的readme.txt。值得注意的是正是 1.0.1 这一步“新增 CHANGELOG”的动作为后来 WPScan 通过 CHANGELOG 指纹识别该插件版本创造了前提。三、WPScan 如何从 CHANGELOG.md 中提取版本号3.1 动态查找器的加载入口所有插件/主题的查找配置由 lib/wpscan/db/dynamic_finders/plugin.rb 统一管理。其中create_versions_finders(slug)会读取dynamic_finders.yml中对应 slug 的配置为每个查找器动态生成子类finder_configs(finder_class, aggressive: false)则负责按检测模式筛选配置主动检测aggressive只保留带path的配置即需要实际请求具体文件的查找器被动检测passive只保留不带path的配置即从首页等已有响应中匹配。better-rest-endpoints的ChangeLog与ComposerFile都带path因此均属于主动检测路径。生成出的子类会被注册进WPScan::Finders::PluginVersion::BetterRestEndpoints模块maybe_create_module负责把 slug 转换为常量名js_composer这类 slug 会对应JsComposer从而与 app/finders/plugin_version 中的常规查找器协同工作。3.2 BodyPattern 查找器的实现原理ChangeLog配置指定的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其工作流程非常直接请求CHANGELOG.md对应的 URL由path与目标站点插件目录拼接响应状态码非 404 时把响应正文与配置中的PATTERN正则做匹配若匹配成功从捕获组v取出版本号连同effective_url与完整匹配串一起记录为interesting_entries即前面 expected.yml 中Match: ## [1.5.2]的由来默认置信度为 60CONFIDENCE: 60可被配置中的confidence覆盖。从源码注释看BodyPattern 的定位是“响应不是 HTML 文档、无法使用 XPath 时的版本查找方式”——CHANGELOG.md 正是典型场景它是纯文本/Markdown 文档不适合用节点树解析正则匹配反而最高效。3.3 与其他版本查找器类型的对照WPScan 的动态版本查找器家族还包括见 lib/wpscan/finders/dynamic_finder/version查找器适用场景默认行为BodyPattern任意响应正文CHANGELOG、changelog.txt 等纯文本正则匹配 body置信度 60XpathHTML/XML 响应默认XPATH 正则捕获组置信度 60CommentHTML 注释中的版本信息即XPATH: //comment()的 Xpath 特化见 comment.rbConfigParserpackage.json、composer.json等结构化文件按key读取版本字段QueryParameter静态资源 URL 的?ver参数被动检测即可命中HeaderPatternHTTP 响应头正则匹配头部字段better-rest-endpoints恰好同时示范了ConfigParserpackage.json的version键与BodyPatternCHANGELOG.md标题两条路径二者互为印证提高了版本判定的鲁棒性。四、测试验证夹具如何被消费WPScan 为动态查找器配置了完整的测试链路。版本查找器子类生成的常量/默认值行为由 spec/lib/finders/dynamic_finder/version/body_pattern_spec.rb 等测试覆盖例如配置只给pattern时子类PATTERN取配置值、CONFIDENCE取默认 60、PATH为 nil配置带path时PATH生效。而expected.yml中better-rest-endpoints的两个条目则用于验证端到端行为测试模拟出wp-content/plugins/better-rest-endpoints/package.json与.../CHANGELOG.md两个资源后断言扫描器能分别产出 1.2.0 与 1.5.2 的版本结论及对应interesting_entries。这意味着只要站点上该插件的CHANGELOG.md可被公开访问WPScan 就能独立于readme.txt完成版本确认。五、实战启示为什么 CHANGELOG 是可靠的版本指纹对安全扫描而言CHANGELOG.md是一份“免费”的高价值指纹随插件分发、路径可预测多数插件将 changelog 放在根目录文件名CHANGELOG.md、changelog.txt、CHANGELOG.txt均有出现本仓库expected.yml中a-z-listing匹配## 2.2.0、404-solution匹配Version 2.15.4、300form匹配v0.2.1a等即是不同命名/格式的实例格式高度规整遵循 Keep a Changelog 与 SemVer 的项目版本行呈现## [x.y.z]的统一形态正则捕获非常稳定与版本号强绑定changelog 的每条记录都对应真实发布版本其头部版本号与插件当前版本通常一致或至少揭示其历史版本区间可结合其他指纹交叉验证。正因如此WPScan 把 changelog 类文档纳入动态查找器体系并以 fixture 形式沉淀了better-rest-endpoints等大量真实插件的样本见 spec/fixtures/dynamic_finders/plugin_version便于持续回归验证。当你使用 WPScan 扫描目标站点并开启插件枚举时若输出中出现Change Log (Aggressive Detection)来源的版本结论其背后就是本文所述的这一整套“配置驱动、正则提取、测试兜底”的机制在起作用。赞分享网络安全漏洞扫描渗透测试应用安全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 插件版本 导读 在 WordPress 安全扫描中判断站点网络安全漏洞扫描渗透测试应用安全CLIWPScan 动态查找器实战从插件 CHANGELOG.md 精确识别 WordPress 插件版本WPScan 动态查找器实战从插件 CHANGELOG.md 精确识别 WordPress 插件版本 导读 本篇文章以 WPScan 仓库内一份真实的 Wor网络安全漏洞扫描渗透测试应用安全CLIWPScan 动态指纹实战如何利用插件的 CHANGELOG.md 精准识别 WordPress 插件版本WPScan 动态指纹实战如何利用插件的 CHANGELOG.md 精准识别 WordPress 插件版本 导读 本文以 WPScan 仓库中 dispens网络安全漏洞扫描渗透测试应用安全CLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Atlas 300V 24G推理卡实战:从ONNX到OM跑通YOLOv5/YOLOv8 2026/9/25 14:35:39

Atlas 300V 24G推理卡实战:从ONNX到OM跑通YOLOv5/YOLOv8

先说个最近的真实场景。手里有一个YOLO检测项目要上线,常规思路是直接买GPU,结果一看价格和功耗,人直接麻了。后来同事问了一句:“Atlas 300V 24G那张卡能不能跑YOLO?”我查了一圈资料、拿卡实测了几周,发现…

阅读更多 →
AI与机器学习如何辅助硬件设计:从器件选型到PCB布局的实战指南 2026/9/25 14:35:33

AI与机器学习如何辅助硬件设计:从器件选型到PCB布局的实战指南

1. 硬件设计为什么需要AI和机器学习介入干了十几年硬件设计,从最早的51单片机最小系统,到后来DDR4的布线、ESP32-C6-WROOM-1的射频接口设计,我最大的感受就是:硬件设计本质上是一个“在约束条件里找最优解”的过程,而人…

阅读更多 →
Themida/WinLicense 1.8-2.x 脱壳与调试辅助:从识别版本到拿到原始 OEP 2026/9/25 14:35:26

Themida/WinLicense 1.8-2.x 脱壳与调试辅助:从识别版本到拿到原始 OEP

简介:这是一套面向逆向分析人员的Themida WinLicense脱壳与调试辅助工具集,覆盖1.8.X至2.X版本保护程序,适合具备一定Windows逆向基础、需要开展加壳识别、特征提取与脱壳流程验证的从业者。包内共292个文件,约2.23MB,…

阅读更多 →
工业Agent与实时控制:概念辨析、落地层次与工程实践 2026/9/25 14:35:26

工业Agent与实时控制:概念辨析、落地层次与工程实践

1. 先搞清楚“工业Agent”和“实时控制”到底在说什么1.1 两个被混为一谈的概念“工业Agent”这个词最近两年被炒得很热,但很多人把它和“实时控制”绑在一起讲,其实这俩压根不是一回事。我先把定义掰开揉碎说清楚。工业Agent,通常指部署在工…

阅读更多 →
AI会话越用越慢?上下文管理与压缩策略实战指南 2026/9/25 14:35:26

AI会话越用越慢?上下文管理与压缩策略实战指南

1. 上下文管理的本质:为什么你的会话越用越慢很多人第一次意识到上下文管理的重要性,是在某个连续用了几个小时的会话里突然发现:回复变慢了,回答开始跑偏,甚至前面明确说过的约束它转头就忘。这不是模型变笨了&#x…

阅读更多 →
IIS日志中SQLMap布尔盲注的ASCII溯源分析 2026/9/25 14:35:20

IIS日志中SQLMap布尔盲注的ASCII溯源分析

1. 这不是一道CTF题,而是一次真实攻防视角下的日志溯源实战“[闽盾杯 2021]日志分析 WP”——看到这个标题,很多刚接触红蓝对抗的朋友第一反应是:“哦,又一道CTF Web题,估计就是SQL注入日志伪造盲注拿flag”。但我要说…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉