Ignite - TryHackMe

SUMMARY

Debemos encontrar dos banderas en la maquina Ignite VM. Donde a partir del escaneo de puertos de Nmap pude saber que hay un servicio HTTP. Además, a partir de un script de Nmap pude saber que había una página web de inicio que viene por defecto en la instalación del CMS Fuel. Luego, pude conocer la versión del CMS Fuel, y pude encontrar en las bases de datos de vulnerabilidades Exploit-DB y NIST, la vulnerabilidad Command Injection o RCE asociada a la versión del CMS Fuel. Luego, analice el código de un exploit y recree la explotación manual, modificando el payload del exploit. Luego, para la escalada privilegios vertical, realice una enumeración manual sobre los archivos del directorio raíz del CMS Fuel, llegando a encontrar unas credenciales validas 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 Ignite VM. 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 Ignite VM.

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 Ignite VM. 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 HTTP o web levantado en el puerto 80, y el programa servidor web que está corriendo, y la versión del programa servidor. Además, a partir del script http-title, se pudo saber que hay una pagina web cuya etiqueta HTML title toma el valor de Welcome to FUEL CMS. Por lo tanto, lo más probable es que se trate de una página de inicio que viene por defecto durante la instalación del sistema de gestión de contenido o CMS FUEL.

Ahora accederemos a la página web desde mi navegador web.

Podemos observar que se nuestras suposiciones estaban en lo correcto. Además, el CMS Fuel instalada en el sistema destino es de la versión 1.4.

Ahora investigaremos en Internet, vulnerabilidades que pueda presentar el CMS Fuel en la versión 1.4

Podemos observar en los resultados de búsqueda de las bases de datos de vulnerabilidades y exploits NIST y Exploit-Db, que el CMS Fuel en su versión 1.4 presenta la vulnerabilidad RCE debido a que la aplicación no valida o sanatiza adecuadamente las entradas controladas por el usuario hacia el parámetro GET filter localizado en la ruta /pages/select/.

Ahora analizaremos el código fuente de un exploit encontrado en la base de datos Exploit-DB con el fin de recrear la explotación de manera manual.

Podemos observar en el código del exploit, que el payload introducido en el parámetro vulnerable filter es: %27%2b%70%69%28%70%72%69%6e%74%28%24%61%3d%27%73%79%73%74%65%6d%27%29%29%2b%24%61%28%27"+quote(cmd)+"%27%29%2b7. Además, el payload está utilizando la codificación URL, y el comando que introduciremos como parámetro en el exploit se va a almacenar en la variable cmd y se va a aplicar la codificación URL sobre su valor con la función quote.

Ahora decodificaremos el payload para analizar su contenido.

Podemos observar en el payload decodificado, que se le asigna el string system a la variable a, y luego se le pasa nuestro comando. Por lo tanto, se está ejecutando el comando en el sistema operativo del sistema destino a través de la función system, pero me parece innecesario utilizar el print y esa función pi.

Ahora modificaremos el payload para que sea más legible y entendible.

FASE GANAR ACCESO O EXPLOTACION O HACKING

Ahora probaremos nuestro payload modificado.

Podemos observar que nuestro payload se ejecuto exitosamente, y obtuvimos el resultado de nuestro comando en el código fuente del recurso select.

Ahora cargaremos un archivo PHP, que me generara una reverse Shell cuando lo ejecutemos, en el sistema destino, pero antes levantaremos un servidor web local en nuestro sistema utilizando el módulo http.server de Python.

Podemos observar que se llego a descargar nuestro archivo PHP, pero no tiene asignado el permiso de ejecución para el usuario www-data. Por lo tanto, utilizaremos el comando chmod para arreglar esto.

Ahora ejecutaremos nuestro archivo PHP con el interprete PHP del sistema destino, pero antes debemos habilitar el puerto 1500 en nuestro sistema para que este esperando la conexión entrante de la reverse Shell.

De esta manera obtenemos acceso al sistema destino mediante la explotación de la vulnerabilidad Command Injection.

Además, Podemos observar que al usuario www-data se le ha configurado para que utilice la Shell nologin cuando inicie sesión en el sistema destino. Esta Shell viene a ser no interactiva e inestable. Por lo tanto, realizaremos un tratamiento de la tty para tener una Shell estable e interactiva.

FASE ESCALADA PRIVILEGIOS

Ahora debemos buscar un vector de escalada privilegios. Para ello realizaremos una enumeración manual sobre los archivos del directorio raíz del CMS Fuel, con el fin de encontrar información sensible o posibles credenciales.

Podemos observar que llegamos a encontrar unas credenciales en el archivo database.php.

Ahora probaremos estas credenciales para iniciar sesión en el sistema destino siendo el superusuario root.

Podemos observar que llegamos acceder al sistema destino siendo el usuario root a través de la reutilización de credenciales.

Ahora buscaremos las dos banderas en los archivos: flag.txt y root.txt.