Nur für autorisierte Tests und defensive Lernzwecke.
Dieses Repository ist für kontrollierte Laborumgebungen (z.B. CTF/HTB-ähnliche Setups) vorgesehen, in denen Sie Eigentümer des Ziels sind oder eine ausdrückliche schriftliche Genehmigung zum Testen haben.
Kontext
Dieses Repository enthält einen pädagogischen Python-Proof-of-Concept (pterodactyl_rce.py) für eine echte Sicherheitslücke, die Pterodactyl Panel Versionen vor v1.11.11 betrifft. Unter anfälligen Konfigurationen kann ein nicht authentifizierter Angreifer über den Endpunkt /locales/locale.json aufgrund unsachgemäßer Handhabung der Parameter locale und eine erreichen.
namespace
Remote Code Execution
Diese PoC-Variante zielt auf Umgebungen ab, in denen PHP-PEAR installiert ist, und wurde gegen die inzwischen ausgemusterte Hack The Box-Maschine Pterodactyl erstellt und validiert: https://app.hackthebox.com/machines/Pterodactyl. Sie kann auch in anderen Laborumgebungen funktionieren, in denen die gleichen Bedingungen erfüllt sind.
Generiert ein Linux x64 Reverse-TCP-ELF-Payload mit msfvenom.
Serviert dieses ELF über einen HTTP-Server (eine Anfrage, dann beendet er sich).
Missbraucht die anfällige Verarbeitung von /locales/locale.json, um einen PHP-„Stager“ in /tmp zu schreiben (über einen PEAR pearcmd config-create-Trick).
Löst den Stager über den Locales-Endpunkt aus, sodass dieser:
das ELF in /tmp herunterlädt,
es ausführbar macht,
es ausführt, um eine Verbindung zu Ihrem Listener herzustellen.
Das Skript verwendet für den „Upload“-Schritt einen rohen HTTP-Client anstelle von curl, da einige Tools Zeichen normalisieren oder kodieren und so die konstruierte Anfrage zerstören könnten.
Hinweis: Diese README bleibt bewusst auf einem defensiven/lehrreichen Niveau. Verwenden Sie den Code nur in Umgebungen, die Sie testen dürfen.
Voraussetzungen (lokal)
Python 3.10+ (getestet nur mit der Standardbibliothek)
msfvenom im $PATH verfügbar (Metasploit Framework)
nc (netcat), falls der PoC einen automatischen Listener starten soll
Netzwerkzugriff zwischen Ihrer Labormaschine und Ihrer Pterodactyl-Instanz im Labor
Konfiguration
Das Skript erwartet derzeit einen Panel-HTB-Hostnamen im Quellcode:
root@kitploit:~
host = "panel.pterodactyl.htb"
Zusätzlich ist der hartcodierte Pfad zu PHP-PEAR auf ../../../../../usr/share/php/PEAR gesetzt. Wenn Sie dies außerhalb der Pterodactyl-Box testen, müssen Sie diesen Pfad entsprechend Ihrer lokalen Konfiguration anpassen.
Verwendung (nur kontrolliertes Labor)
1) Basisausführung (Auto-Listener aktiviert)
root@kitploit:~
python3 pterodactyl_rce.py <LHOST> <LPORT>
<LHOST>: Ihre Rückruf-IP, die vom Laborserver erreichbar ist
<LPORT>: Port zum Empfangen der Reverse-Shell
2) Ausführung ohne Auto-Listener
Wenn Sie lieber einen eigenen Listener betreiben möchten:
Generiert ein ELF-Payload (zufälliger Dateiname wie shell_ab12cd34)
Startet einen One-Shot-HTTP-Server auf :8080
Erstellt einen PHP-Stager unter /tmp/<zufall>.php
Löst den Stager aus
Entfernt die lokale ELF-Datei nach dem Auslösen
Zeigt einen Tipp zum Upgrade Ihrer Shell (PTY)
Screenshot der erfolgreichen Ausnutzung
Bekannte Probleme / Laborhinweise
Laborinstabilität: Die Ziel-Box/das Zielservice kann instabil sein (Timeouts, gelegentliche 5xx-Fehler, verzögerte Ausführung). Falls ein Lauf fehlschlägt, wiederholen Sie ihn nach einer kurzen Pause.
Wiederverwendung alter Payloads: Die Umgebung kann manchmal eine ältere hochgeladene/gestagte Datei auslösen. Das Skript bereinigt nur eine lokale Datei auf der Angreiferbox, berührt jedoch keine Dateien im /tmp/-Ordner auf der Maschine.
Workarounds:
Führen Sie das Skript mit einem neuen zufälligen Payload-Namen erneut aus (Standardverhalten in diesem Skript).
Ändern Sie den anfänglichen Port des HTTP-Servers von 8080 auf einen anderen Port.
Ändern Sie Ihren Listener-Port (z.B. 4444 → 5555) und generieren Sie das Payload neu.
Stellen Sie sicher, dass Ihr HTTP-Server die aktuelle Datei ausliefert (stoppen Sie vorherige Server/Listener).
Wenn Sie Zugriff haben, entfernen Sie alte /tmp/<name>.php-Artefakte auf dem Ziel manuell; warten Sie andernfalls eine Weile und wiederholen Sie den Vorgang.
Defensive Anleitung (was zu beheben / wie zu erkennen ist)
Patch / Abhilfe
Upgrade auf Pterodactyl Panel v1.11.11 oder höher.
Es gibt keine In-App-Umgehung außer dem Patchen; Sie können den Endpunkt /locales/locale.json auf Webserver-Ebene blockieren, aber dies könnte Lokalisierungsfunktionen beeinträchtigen.
Erkennungsideen
Achten Sie auf verdächtige Anfragen wie:
Anfragen an /locales/locale.json mit ungewöhnlichen locale=-Traversierungssequenzen
Seltsame namespace=-Werte (unerwartete Namen, lange Zeichenketten, seltsame Zeichen)
Plötzliche Erstellung unerwarteter Dateien in /tmp/ auf dem Panel-Host
Korrelieren Sie Weblogs mit:
neuen Prozessen, die vom www-/PHP-FPM-Benutzer gestartet wurden
ausgehenden Verbindungen zu ungewöhnlichen Zielen/Ports
unerwarteter Verwendung von curl/wget auf dem Panel-Host
Hinweise zur verantwortungsvollen Nutzung
Scannen oder testen Sie keine öffentlichen Instanzen.
Wenn Sie Betreiber einer anfälligen Instanz sind, behandeln Sie dies als kritisch und patchen Sie sofort.
Melder / Entdeckungsgutschrift: Die GitHub-Advisory schreibt @azimoff337 die Meldung von GHSA-24wv-6c99-f843 / CVE-2025-49132 zu.
GitHub Advisory Database / CVE-Prozess: für das Verfolgen und Veröffentlichen der Schwachstellendetails.
Hack The Box (HTB): Dieser PoC wurde in einer kontrollierten HTB-ähnlichen Laborumgebung für Lern- und Defensivforschung erstellt/validiert. Keine Spoiler für aktive HTB-Inhalte.