尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

WPScan 动态指纹识别解析:以 analytics-for-cloudflare 的 CHANGELOG 指纹为例

WPScan 动态指纹识别解析:以 analytics-for-cloudflare 的 CHANGELOG 指纹为例 网络安全漏洞扫描渗透测试应用安全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 仓库中 analytics-for-cloudflare 插件的 CHANGELOG.md 这份指纹样本讲解 WPScan 如何借助插件自带的更新日志ChangeLog文件通过BodyPattern动态指纹机制在扫描时远程识别 WordPress 插件及其版本。读完本文你将理解dynamic_finders.yml指纹条目的完整字段含义、BodyPattern版本探测的底层匹配逻辑以及该机制如何驱动 WPScan 插件枚举与版本漏洞判定。一、WPScan 动态指纹体系概览WPScan 是一款面向 WordPress 站点的安全扫描器其插件与主题识别并不完全依赖字典式的路径探测还大量使用动态指纹Dynamic Finders机制通过扫描目标站点响应中的特征注释、XPath 节点、响应头、JS 变量、配置解析结果、正文模式等来判断某个插件/主题是否存在并尽可能提取其版本号。动态指纹的配置集中存放于 spec/fixtures/db/dynamic_finders.yml数据库更新时对应的线上dynamic_finders.yml由 lib/wpscan/db/dynamic_finders/base.rb 加载解析。该文件允许的指纹类型class定义在Base.allowed_classes中%i[Comment Xpath HeaderPattern BodyPattern JavascriptVar QueryParameter ConfigParser]每种类型对应一个独立的 finder 实现类分别位于 app/finders/plugins 与 lib/wpscan/finders/dynamic_finder而ChangeLog并非一种独立类型它只是对BodyPattern的一种语义化命名——表示指纹源是插件自带的CHANGELOG文件。二、analytics-for-cloudflare 指纹条目解读在 dynamic_finders.yml 中analytics-for-cloudflare的指纹条目如下analytics-for-cloudflare: ChangeLog: class: BodyPattern path: CHANGELOG.md pattern: !ruby/regexp /\#\# (?v\d\.[\.\d])/ version: true各字段含义字段值作用ChangeLog—指纹块名称表示探测源是插件的更新日志文件classBodyPattern指定使用正文模式匹配BodyPattern类来执行探测pathCHANGELOG.md主动aggressive模式下要请求的插件内文件路径即wp-content/plugins/analytics-for-cloudflare/CHANGELOG.mdpattern/\#\# (?v\d\.[\.\d])/用于从响应正文中提取版本号的正则其中命名捕获组(?v...)是版本号的出口versiontrue表明该指纹用于探测版本而非仅确认插件存在也就是说只要目标站点返回的CHANGELOG.md正文中能匹配到## 1.1这样的 Markdown 二级标题行WPScan 就能据此判定该插件存在并取出标题后的版本号。这份 CHANGELOG.md 正是被用作该指纹的夹具fixture数据其内容即真实插件的更新日志# Analytics For Cloudflare ## 1.1 - 2017-02-09 ### Fixed - Match Wordpress-Extra coding standards. - Fix text domain in i18n (make static instead of variable). - Fix domains not appearing properly if you have more than 20 ## 1.0.2 - 2015-11-26 ### Added - Developer hooks to filter api values ### Fixed - Update to WordPress coding standards ...注意该文件的CHANGELOG.md路径位于change_log/子目录中这是 WPScan 测试夹具目录spec/fixtures/dynamic_finders/plugin_version的组织方式——每个插件 slug 对应一个目录其内部文件布局用于模拟线上插件的真实文件结构。三、BodyPattern 版本探测的底层实现3.1 指纹类的动态生成WPScan 并不为每个指纹条目手写一个类而是在运行时根据配置动态生成。核心逻辑在 lib/wpscan/finders/dynamic_finder/finder.rb 的create_child_classdef self.create_child_class(mod, klass, config) class_constants child_class_constants mod.const_set( klass, Class.new(self) do class_constants.each do |key, value| const_set(key, config[key.downcase.to_s] || value) end end ) end它会从dynamic_finders.yml的配置中读取pattern、confidence、path等键统一转成小写覆盖到子类常量上。BodyPattern子类的默认常量定义于 lib/wpscan/finders/dynamic_finder/version/body_pattern.rbdef self.child_class_constants child_class_constants || super.merge(PATTERN: nil, CONFIDENCE: 60) end即PATTERN必须由配置提供CONFIDENCE默认 60未配置时使用该值。create_child_class与默认常量的行为在 spec/lib/finders/dynamic_finder/version/body_pattern_spec.rb 中有完整测试覆盖验证了未提供PATH/CONFIDENCE时默认值生效、显式提供时覆盖默认值的两种路径。3.2 passive 与 aggressive 两种扫描路径动态指纹 finder 基类定义了两种调用方式lib/wpscan/finders/dynamic_finder/finder.rbpassive被动仅当指纹配置没有path时才执行直接对目标主页target.homepage_res与 404 页面target.error_404_res做匹配不额外发起请求aggressive主动仅当指纹配置有path时才执行主动请求target.url(self.class::PATH)拼接出的文件 URL。analytics-for-cloudflare的ChangeLog指纹配置了path: CHANGELOG.md因此它属于 aggressive 探测扫描器会主动请求https://目标站点/wp-content/plugins/analytics-for-cloudflare/CHANGELOG.md。3.3 版本提取的匹配执行真正执行匹配的是 lib/wpscan/finders/dynamic_finder/version/body_pattern.rb 的find方法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 时直接放弃文件不存在即插件未安装用配置中的PATTERN对响应正文做正则匹配通过命名捕获组(?v...)取出Regexp.last_match[:v]作为版本号将匹配到的 URL 与原始匹配串记录为interesting_entries供最终报告溯源。针对本条目/\#\# (?v\d\.[\.\d])/会把## 1.1 - 2017-02-09中的1.1提取出来捕获组会命中该行第一个版本号从而实现版本识别。随后create_version见 lib/wpscan/finders/dynamic_finder/version/finder.rb用Model::Version封装版本对象并补充found_by与置信度信息。四、ChangeLog 指纹与插件存在性探测的分工除了版本探测WPScan 插件枚举中还有一类插件存在性动态指纹例如 app/finders/plugins/body_pattern.rb位于插件 finders 层注意与版本层的lib/wpscan/finders/dynamic_finder/version/body_pattern.rb区分DEFAULT_CONFIDENCE 30 def process_response(opts, response, slug, klass, config) return unless response.body.match?(config[pattern]) Model::Plugin.new( slug, target, opts.merge(found_by: found_by(klass), confidence: config[confidence] || DEFAULT_CONFIDENCE) ) end两者的分工可以总结为层级类路径职责插件存在性app/finders/plugins/body_pattern.rb命中模式即新建Model::Plugin默认置信度 30版本探测lib/wpscan/finders/dynamic_finder/version/body_pattern.rb命中模式并提取命名捕获组v默认置信度 60dynamic_finders.yml中version: true的条目如本案例走版本探测链路而只关心插件是否存在的条目则通过插件层 finder 处理。两者共用同一份 YAML 指纹库但消费路径不同这是理解 WPScan 指纹机制的关键。五、如何在实践中使用与验证5.1 触发条件要复现本指纹的探测行为需要满足目标 WordPress 站点确实安装了analytics-for-cloudflare插件插件目录下的CHANGELOG.md可被公开访问未做访问限制扫描时启用了插件枚举且该插件在指纹库中dynamic_finders.yml中的analytics-for-cloudflare条目。5.2 关联测试与夹具指纹配置断言见 spec/fixtures/db/dynamic_finders.yml可在 WPScan 数据库相关测试中验证条目加载正确性BodyPattern动态子类的生成与默认值行为见 spec/lib/finders/dynamic_finder/version/body_pattern_spec.rb夹具数据即 spec/fixtures/dynamic_finders/plugin_version/analytics-for-cloudflare/change_log/CHANGELOG.md其内容与线上插件更新日志保持一致保证指纹匹配测试的真实性。5.3 扩展思路如果你要为其他插件编写类似指纹可以遵循本案例的结构在dynamic_finders.yml中新增 slug 条目选择指纹类型本案例为ChangeLogclass: BodyPattern给出正确的path如CHANGELOG.md与可提取版本的pattern注意使用命名捕获组(?v...)设置version: true并可选覆盖confidence在 spec/fixtures/dynamic_finders/plugin_version 下按 slug 建立夹具目录放入与线上一致的CHANGELOG.md样本。六、小结analytics-for-cloudflare的ChangeLog指纹是理解 WPScan 动态指纹体系的最小完整样例一份 CHANGELOG.md 夹具 一条 dynamic_finders.yml 配置经由BodyPattern版本 finder 的运行时子类生成、被动/主动路径分派与正则命名捕获组提取最终完成文件可访问 → 插件存在 → 版本确定 → 关联漏洞库的完整扫描链路。理解这条链路就能触类旁通地读懂 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 插件版本指纹实战以 OptinMonster CHANGELOG 指纹为例WPScan 插件版本指纹实战以 OptinMonster CHANGELOG 指纹为例 本文以 WPScan 仓库中一份真实测试样例——OptinMonst网络安全漏洞扫描渗透测试应用安全CLI深度解析 WPScan 动态版本识别以 404-solution 插件 CHANGELOG.md 指纹为例深度解析 WPScan 动态版本识别以 404 solution 插件 CHANGELOG.md 指纹为例 WPScan 作为 WordPress 安全扫描器网络安全漏洞扫描渗透测试应用安全CLIWPScan 插件版本检测实例以 MultiSafepay CHANGELOG.md 为例解析 ChangeLog 动态指纹机制WPScan 插件版本检测实例以 MultiSafepay CHANGELOG.md 为例解析 ChangeLog 动态指纹机制 本文以 WPScan 测试夹网络安全漏洞扫描渗透测试应用安全CLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表