WPScan 动态版本指纹识别实战:以 Download Monitor Learndash Integration 的 CHANGELOG 指纹为例

发布时间:2026/9/25 14:53:13

WPScan 动态版本指纹识别实战:以 Download Monitor Learndash Integration 的 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 是面向安全专业人员和博客维护者的 WordPress 安全扫描器其核心能力之一是动态指纹Dynamic Finders不依赖集中式版本数据库而是直接请求目标站点上的真实文件如CHANGELOG.md、readme.txt用正则从文件内容中提取插件或主题版本号。本文以仓库 fixture 中 download-monitor-learndash-integration/change_log/CHANGELOG.md 为样本完整讲解「CHANGELOG 版本指纹」从配置、正则设计、请求策略到源码落地的全过程读完即可自己为任意插件编写同类指纹。一、样本指纹与配套配置一份真实的 CHANGELOG 指纹先看这个插件的真实变更日志样本fixture 文件全文spec/fixtures/dynamic_finders/plugin_version/download-monitor-learndash-integration/change_log/CHANGELOG.md### 1.0.1: 23.09.2022 * Fixed: Checking group administrators ( [#1](https://github.com/WPChill/download-monitor-learndash-integration/issues/1) ) ### 1.0.0: TBA * Initial Release该插件 slug 为download-monitor-learndash-integration其在 WPScan 数据库中的指纹配置位于 spec/fixtures/db/dynamic_finders.ymldownload-monitor-learndash-integration: ChangeLog: class: BodyPattern path: CHANGELOG.md pattern: !ruby/regexp /\#\# (?v\d\.[\.\d])/ version: true Readme: path: readme.txt逐字段拆解字段值含义ChangeLog—该 finder 的名称key同时会作为动态生成的子类常量名classBodyPattern指定使用的动态查找器实现类本指纹属于「响应正文正则匹配」类型pathCHANGELOG.md需要请求的插件内相对路径启用 aggressive激进模式时访问pattern/\#\# (?v\d\.[\.\d])/用于从正文中捕获版本号的正则v为命名捕获组versiontrue标记该配置是版本指纹区别于Readme那种只用于收集候选文件名的配置注意同 slug 下还配置了Readme: path: readme.txt它没有version: true。这正是 WPScan 的设计细节Readme 不是真正的动态指纹它只是借助动态指纹系统来获取一个插件可能的文件名列表lib/wpscan/db/dynamic_finders/base.rb 的注释明确说明“The Readme is not put in there as its not a Real DF”而真正用于版本识别的是version: true的ChangeLog配置。二、模式一被动Passive——不额外发请求动态 finder 分为被动与激进两种执行路径由 lib/wpscan/finders/dynamic_finder/finder.rb 的基类控制def passive(opts {}) return if self.class::PATH # 配置了 path 的 finder 不做被动检测 homepage_result find(target.homepage_res, opts) return homepage_result unless homepage_result.nil? || homepage_result.empty? find(target.error_404_res, opts) end def aggressive(opts {}) return unless self.class::PATH # 没有 path 的 finder 不做激进检测 find(Browser.get(target.url(self.class::PATH)), opts) end对本样本的ChangeLog指纹而言由于配置了path: CHANGELOG.md被动模式直接跳过return if self.class::PATH不会在首页或 404 页面里寻找版本号激进模式才会发起GET {target_url}/wp-content/plugins/download-monitor-learndash-integration/CHANGELOG.md请求把响应正文交给BodyPattern解析。而Readme配置因为没有class、pattern只承担文件名提示功能不参与版本正则匹配。这种「被动零额外请求、激进按需请求」的设计保证了扫描器在默认被动枚举时不会引入多余流量。三、模式二激进Aggressive——请求真实文件并匹配正则当启用插件枚举如--enumerate p或--plugins-detection aggressive时WPScan 会按配置的path发起请求然后由BodyPattern实现类解析响应。核心逻辑在 lib/wpscan/finders/dynamic_finder/version/body_pattern.rbdef 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 响应直接返回nil目标站未安装该插件或文件被改名/删除非 404 时用配置的pattern对正文做正则匹配命中后取命名捕获组v作为版本号并记录interesting_entries包含有效 URL 与完整匹配片段作为取证信息写入扫描报告版本对象由 lib/wpscan/finders/dynamic_finder/version/finder.rb 的create_version构造默认置信度取子类常量CONFIDENCEBodyPattern为 60见 body_pattern.rb。针对本样本正则/\#\# (?v\d\.[\.\d])/匹配正文中的## 1.0.1、## 1.0.0最终返回1.0.1第一个命中。四、正则设计为什么这样写以及它的局限样本正则\#\# (?v\d\.[\.\d])反映了 Markdown 变更日志的通用形态\#\#匹配 Markdown 二级标题##本样本用的是###三级标题但##是###的前缀子串所以仍能命中版本号文本(?v...)命名捕获组\d\.[\.\d]匹配1.0.1这类「数字开头、点分隔」的版本串1.0.0、1.0.1均可只取第一个##开头的匹配——通常最新版本写在最上方符合绝大多数插件的变更日志惯例。对照组同仓库中另一插件 download-monitor-paid-membership-pro-integration 的正则/^\# (?v\d\.[\.\d])(?!.*\# \d\.[\.\d])/mi使用了行首锚定^、\#兼容#/##/###以及负向前瞻(?!...)来排除“标题中同时出现多个版本号”的干扰见 spec/fixtures/db/dynamic_finders.yml说明编写指纹时需针对具体文件的标题层级做微调。样本正则的局限也很明显属于可以如实说明的已知边界若变更日志把版本号写在## 1.0.1 (2022-09-23)这种带括号日期、且日期含.的标题里\d\.[\.\d]可能把日期也吃进去本样本的### 1.0.1: 23.09.2022中日期前有冒号和空格正则在1.0.1后的空格处停止恰好不受影响依赖文件存在且未改名的前提若站点把CHANGELOG.md改名或删除激进指纹即失效——这也正是 WPScan 同时配置多种 finder如Readme、BodyPattern、QueryParameter等互为补充的原因。五、源码链路从 YAML 配置到动态子类从配置到实际执行的完整调用链如下加载配置lib/wpscan/db/dynamic_finders/base.rb 将dynamic_finders.yml以 YAML 形式加载为all_df_data允许Regexp类型Plugin.df_data取其中的plugins段过滤版本指纹lib/wpscan/db/dynamic_finders/plugin.rb 的versions_finders_configs只收集带version: true的配置next unless config.key?(version)本样本的ChangeLog因此入选Readme被排除生成子类create_versions_finders先通过maybe_create_module按 slug 生成模块如DownloadMonitorLearndashIntegration再由 lib/wpscan/finders/dynamic_finder/finder.rb 的create_child_class用Class.new(self)动态创建子类把 YAML 中的path、pattern等写入子类常量执行匹配基类aggressive请求CHANGELOG.mdBodyPattern#find用子类常量PATTERN匹配并返回版本。类白名单在 lib/wpscan/db/dynamic_finders/base.rbComment、Xpath、HeaderPattern、BodyPattern、JavascriptVar、QueryParameter、ConfigParser非白名单类会被拒绝防止通过外部 YAML 注入任意类。六、配套测试与验证方式WPScan 为每种动态 finder 都配有 RSpec 测试位于 spec/lib/finders/dynamic_finder/version/其中 body_pattern_spec.rb 覆盖了BodyPattern的命中与未命中分支。fixture 目录 spec/fixtures/dynamic_finders/plugin_version/download-monitor-learndash-integration/ 正是为这类测试提供真实抓取样本change_log/CHANGELOG.md保存了目标插件真实变更日志测试通过 mock HTTP 响应来验证正则能否正确提取1.0.1。本地验证正则是否可用无需跑完整扫描直接用 Ruby 单行即可复现ruby -e body File.read(spec/fixtures/dynamic_finders/plugin_version/download-monitor-learndash-integration/change_log/CHANGELOG.md); if body ~ /\#\# (?v\d\.[\.\d])/ then puts Regexp.last_match[:v]; end预期输出1.0.1与配置声明的版本指纹一致。若输出与预期不符通常需要调整pattern的标题层级或版本号字符类。七、把该方法推广到其他插件的实操清单基于上述链路为任意 WordPress 插件新增 CHANGELOG 版本指纹的通用步骤抓取该插件站内真实CHANGELOG.md或readme.txt放入spec/fixtures/dynamic_finders/plugin_version/slug/change_log/作为样本在dynamic_finders.yml的plugins段为该 slug 增加ChangeLog配置字段为class: BodyPattern、path: CHANGELOG.md、pattern带(?v...)命名捕获组、version: true按样本实际标题格式调整正则三级标题用\#\#\#、兼容多级用^\#、存在日期后缀时用负向前瞻排除多版本行用ruby -e单行脚本对照 fixture 样本先本地验证再补充body_pattern_spec.rb风格的 RSpec 用例联调验证wpscan --url 目标站 --enumerate p --plugins-detection aggressive观察报告中的found_by: Body Pattern与置信度 60。八、小结Download Monitor Learndash Integration 的 CHANGELOG 指纹是理解 WPScan 动态指纹体系的最佳入门样本它同时展示了version: true真版本指纹与Readme文件名提示两种配置形态串起了「YAML 配置 → 动态子类生成 → 被动/激进请求分流 → 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 插件版本指纹实战以 OptinMonster CHANGELOG 指纹为例WPScan 插件版本指纹实战以 OptinMonster CHANGELOG 指纹为例 本文以 WPScan 仓库中一份真实测试样例——OptinMonst网络安全漏洞扫描渗透测试应用安全CLIWPScan 动态指纹机制实战解析以 addy-autocomplete-woocommerce 的 CHANGELOG 版本检测为例WPScan 动态指纹机制实战解析以 addy autocomplete woocommerce 的 CHANGELOG 版本检测为例 WPScanWord网络安全漏洞扫描渗透测试应用安全CLIWPScan 插件版本指纹识别实战以 nerd-wp CHANGELOG.md 测试样本为例解读 Change Log 动态指纹器WPScan 插件版本指纹识别实战以 nerd wp CHANGELOG.md 测试样本为例解读 Change Log 动态指纹器 本文以 WPScan网络安全漏洞扫描渗透测试应用安全CLI上一篇3分钟免费解锁Wand完整功能游戏修改器终极解决方案下一篇JuiceFS 如何用 fio 跑顺序读写基准测试并解读结果创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/25 14:53:13

昇腾Atlas 300V 24G部署YOLO:从硬件认知到工程实践

最近后台好几个朋友在同一个词上卡住了——atlas。有人以为是共享单车那个地图App,有人以为是某个开源数据库,结果点进来一看,好家伙,全是在问两件事:Atlas怎么部署YOLO,以及Atlas 300V 24G到底算不算运算加…

2026/9/25 14:53:13

Atlas 300V 24G部署YOLO模型实战:从环境搭建到推理调优

这两年在AI落地项目里,围绕“atlas部署yolo”来问的人越来越多。做工业质检、智慧安防、边缘计算盒子的朋友,手里拿着一块Atlas 300V 24G,第一反应基本都一样:这卡到底是不是运算加速卡,能不能把我这套YOLO模型跑起来&…

2026/9/25 16:48:19

2026校招测评考什么?网申测评如何通过 + 高分攻略

一、网申测评,到底在筛选什么2026届校招的网申测评环节正在发生一个微妙但重要的变化:企业不再只看你“答对了多少题”。北森AI人才科学研究院发布的报告显示,2026年预计有95%的应届生在求职中使用AI工具,一年前这个数字还是66.7%…

2026/9/25 16:48:19

基于SpringBoot的大学生科技社团管理系统设计与实现

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 1. 项目背景与意义 随着高校学生社团数量的不断增长,传统的人工管理方式在社团信息登记、活动组织、成员管理等方面逐渐暴露出效率低、易出错、信息不透明等…

2026/9/25 16:48:19

计算机为什么用二进制?十进制会有什么问题【庖丁解牛】

根因 计算机底层依靠电子元器件的物理状态来表达信息。硬件最容易稳定实现的是两种状态:通电/断电、高电平/低电平、磁畴正向/反向。二进制刚好只有0、1两个符号,完美匹配硬件双稳态特性;如果强行做十进制,需要电路稳定区分10种不…

2026/9/25 16:48:19

合肥纹眉哪家技术自然不生硬?合肥做野生眉避坑攻略

很多合肥的姐妹在纠结纹眉,怕做完像蜡笔小新、颜色发蓝发红,想找一家审美在线、不流水线操作的门店。在合肥做半永久纹眉,核心不是越便宜越好,重点看老师的审美、色料品质,还有会不会根据五官定制眉形。我对比了好几家…

2026/9/25 16:43:18

SNOMED CT 关系型数据库落地实战:语义完整性与SQL查询优化

简介:本资源是一套面向医疗信息学开发者与医学知识图谱工程师的SNOMED CT术语系统数据库化工具集,解决临床术语标准化数据在关系型及图数据库中快速建模、加载与查询的实际问题。包内共115个文件,涵盖64个SQL脚本(用于MySQL/Postg…

2026/9/24 20:24:47

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/25 0:02:35

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:02:35

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:02:35

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑