Source - TryHackMe
SUMMARY
Debemos encontrar dos banderas en la maquina Source. Donde a partir del escaneo de puertos de Nmap pude saber que hay un servicio Webmin, en su versión 1.890, y levantado en el puerto 10000. Luego, accedí a la interfaz web del servicio Webmin a través de mi navegador web. Luego, busque en la base de datos de vulnerabilidad en línea Rapid7, vulnerabilidades asociadas con el servicio Webmin en su versión 1.890. Donde pude encontrar una vulnerabilidad RCE (CVE-2019-15107) asociada a esa versión. Luego, encontré un exploit en un repositorio de Github(https://github.com/n0obit4/Webmin_1.890-POC ), que utilice para explotar la vulnerabilidad, llegando a ejecutar un comando que me permitió cargar un script en Bash en el sistema destino con los privilegios del usuario root. Luego, ejecute otro comando para asignarle el permiso de ejecución al usuario root en el script, llegando a ejecutarlo y generar una reverse Shell con los privilegios del superusuario root.
FASE RECONOCIMIENTO ACTIVO
En este caso debemos acceder al sistema destino y obtener las banderas. Para ello empezaremos utilizando el comando openvpn con el fin de establecer una conexión VPN con la red virtual dónde está la máquina Source. Para ello utilizaremos el archivo de configuración, que lo podemos descargar en la plataforma de Tryhackme, que puede incluir información como la dirección del servidor VPN, los certificados y claves de seguridad, la configuración de encriptación, etc.
Luego de que se establece la conexión VPN se crea una interfaz virtual de red en nuestra máquina. Donde se enruta todo el tráfico de red a través de esa interfaz.
Además, la plataforma de Tryhackme nos muestra la dirección ip de la máquina Source.
FASE ESCANEO Y ENUMERACION
Luego pasaremos a la fase de Escaneo y Enumeración con el fin de poder escanear los puertos del nodo. Además, obtendremos los servicios que se han levantado en los puertos abiertos, las versiones de los servicios, y el sistema operativo de la máquina Source. Para ello utilizaremos Nmap
. Donde le pasaremos los siguientes parámetros:
- El parámetro -sC o –script=”default” para utilizar todos los scripts de la categoría default con el fin de realizar un escaneo y detección de los puertos de manera avanzada.
- El parámetros -sV con el fin de conocer las versiones de los servicios levantados en los puertos abiertos.
- El parámetro -n para evitar la resolución DNS, y el parámetro –max-rate para indicarle el número máximo de paquetes por segundo que va a utilizar Nmap para el escaneo con el fin de evitar sobrecargar la red con el tráfico generado por la herramienta.
- El parámetro -p- para realizar un escaneo de los 65535 puertos del nodo y el parámetro –open con el fin de que nos muestre información solo de los puertos abiertos.
Los resultados que obtuvimos del escaneo vienen a ser:
- Un servicio SSH levantado en el puerto 22 y el programa servidor SSH que se está corriendo, y la versión del programa servidor.
- Un servicio Webmin levantado en el puerto 10000, y que utiliza un servidor web liviano llamado MiniServ con el fin de proveer una interfaz web en que el administrador del sistema destino pude acceder desde su navegador web para administrar el sistema destino. Además, la versión del servicio Webmin es 1.890.
Ahora accederemos a la interfaz web, servida por el servidor web del servicio Webmin, desde mi navegador web.
Podemos observar que nos topamos con un login o formulario HTML para acceder al portal de administración del servicio Webmin. Además, observamos que los parámetros o campos del formulario no son vulnerables a SQLi. Por lo tanto, no podemos omitir la autenticación.
Ahora buscaremos en bases de datos de vulnerabilidades en línea como Rapid7 o Exploit-DB, vulnerabilidades asociadas a la versión del servicio Webmin.
Podemos observar que el servicio Webmin presenta la vulnerabilidad RCE (CVE-2019-15107). Adema, logramos encontrar un exploit con su PoC en un repositorio GitHub (https://github.com/n0obit4/Webmin_1.890-POC).
FASE GANAR ACCESO O HACKING O EXPLOTACION
Ahora clonaremos el repositorio en nuestro sistema, para saber que parámetros debemos configurarle.
Podemos observar los argumentos que debemos pasarle al exploit con el fin de que funcione correctamente.
Podemos observar que el exploit llego a ejecutarse exitosamente. Además, observamos que a través de la vulnerabilidad RCE, podemos ejecutar comando en el sistema operativo del sistema destino teniendo los privilegios del usuario root.
Ahora cargaremos un script Bash, de mi sistema, en nuestro sistema destino, pero antes levantaremos un servidor web local en nuestro sistema utilizando el módulo http.server de Python.
Podemos observar que se llegó a cargar exitosamente nuestro script Bash, que al ejecutarse nos generara una reverse Shell, pero antes debemos asignarle el permiso de ejecución al usuario root en nuestro script Bash.
Ahora si ejecutaremos nuestro script Bash utilizando el interprete de Bash, pero antes debemos habilitar el puerto 1500 en nuestro sistema para que este esperando la conexión entrante de la reverse Shell.
Podemos observar que llegamos acceder al sistema destino siendo el usuario root. Por lo tanto, en esta ocasión no habrá fase de escalada privilegios.
Ahora buscaremos nuestras dos banderas en los archivos root.txt y user.txt.