Road - TryHackMe
SUMMARY
Debemos encontrar dos banderas. Donde a partir de un escaneo de puertos pude saber que hay un servicio Web, SSH. Además, gracias a un script de Nmap, logre determinar que hay una página web de un sitio web, que contenía el nombre de dominio asociado al sitio web, y dos páginas web para registrarse y autenticarse. Luego, accedí a un portal de administración donde encontré la funcionalidad de cambiar contraseñas, pero debido a que el sitio web no realiza una correcta verificación en uno de los campos es que pude cambiar las contraseñas del usuario admin, logrando acceder al portal siendo el usuario admin. Luego, accedí al sistema destino mediante la vulnerabilidad File Upload. Luego, para la escalada privilegio horizontal, encontré unas credenciales en uno de los documentos de una base de datos MongoDB. Luego, para la escalada vertical, aproveche que la variable de entorno LD_PRELOAD estaba asignada a la configuración env_keep.
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 Road. 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 Road.
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 Road. 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 -Pn para evitar que Nmap, que realice ningún tipo de sondeo o ping hacia el sistema destino con el fin de determinar si el host está vivo o activo, y realice el escaneo de puertos directamente.
- 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 programa servidor web Apache levantado en el puerto 80. Además, gracias al script http-tittle obtuvimos el valor de la etiqueta HTML title de una pagina web alojada en el servidor web.
- Un programa servidor SSH levantado en el puerto 22.
Ahora accederemos a la página web a traves del navegador web.
Podemos observar que se trata de un sitio web que esta aun en desarrollo ya que la mayoría de sus enlaces nos redirigen a la misma pagina web de inicio del sitio web, pero consta de dos paginas web para registrarse y para autenticarse a traves de un formulario. Además, logramos encontrar un nombre de dominio que podría estar asociado a este sitio web o a otro. Para averiguar esto asociaremos la dirección IP del servidor con este nombre de dominio en mi archivo /etc/hosts, e ingresamos dominio a traves del navegador web.
Podemos observar que el nombre de dominio está asociado al mismo sitio web. Además, si realizamos una enumeración de subdominios sobre el dominio con Wfuzz, no logramos encontrar ningún subdominio.
Ahora nos registraremos y nos autenticaremos en el login del sitio web.
FASE GANAR ACCESO O HACKING O EXPLOTACION
Podemos observar que accedimos a un portal de administración donde la mayoría de sus secciones no han sido desarrollado aun ya que, al hacer clic en ellas, se nos redirige al mismo portal de administración. Además, si revisamos nuestro perfil, nos encontramos con la funcionalidad de cargar archivos, pero solo está habilitado para el admin cuyo correo es admin@sky.thm. Además, podemos observar que el portal consta de la funcionalidad de cambiar contraseñas. Podemos aprovechar esto para capturar la solicitud HTTP enviada al servidor web al momento de que queramos renovar la contraseña de nuestra cuenta. Luego, cambiaremos el correo del campo Username al correo del admin con el fin de que el servidor web realice el cambio de contraseña para la cuenta admin al momento de que reciba la solicitud POST modificada.
Podemos observar que logramos modificar la contraseña del usuario admin debido a que el sitio web no realiza una correcta verificación de si un usuario tiene los permisos necesarios para modificar la cuenta de otro usuario. De esta logramos acceder al panel de administración del sitio web siendo el usuario admin.
Ahora utilizaremos la funcionalidad de cargar archivos habilitada para el usuario admin, para cargar un archivo PHP que me genere una reverse Shell. Además, utilizaremos el submódulo Site map del módulo Target de Burp Suite para poder saber en que directorio se guardara nuestro archivo PHP.
Podemos observar que en el mapeo del sitio web, nos encontramos con un directorio que hace referencia a las imágenes en el perfil. Además, si accedemos a este directorio, nos encontramos con que el listado de directorio no está habilitado, pero eso no quita el hecho de que estén nuestros archivos almacenados en este directorio. Por lo que accederemos directamente a mi archivo PHP a traves de la URL, para ejecutar la reverse Shell.
De esta manera logramos acceder al sistema destino mediante la vulnerabilidad File Upload.
Ahora convertiremos nuestra reverse Shell en una Shell más estable e interactiva con el fin evitar de que se cierre con errores simples. Luego, buscaremos vectores de escalada privilegio de manera manual en el sistema de archivos del sistema destino.
FASE ESCALADA PRIVILEGIOS
Ahora realizaremos una enumeración automatizada con Linpeas sobre el sistema de archivos del sistema destino con el fin de buscar vectores de escalada privilegio.
Podemos observar que en uno de los procesos ejecutados en el sistema destino, nos encontramos con un comando que ejecuta un DBMS MongoDB con ciertas configuraciones contenidas en un archivo. Además, observamos que este servidor MongoDB se ejecuta en el puerto por defecto 27017 y solo admite conexiones locales es decir provenientes del mismo sistema.
Ahora accederemos al servidor MongoDB con el cliente mongo. Además, enumeraremos los documentos de las colecciones de las bases de datos con el fin de encontrar algún vector de escalada de privilegio.
Podemos observar que la base de datos backup presentaba la colección user donde constaba de 5 documentos que vienen a ser una variable del tipo diccionario ya que tienen estructuras de pares clave-valor. Además, uno de los documentos contiene las credenciales de un usuario local en el sistema destino. De esta manera logramos realizar una escalada privilegio horizontal.
Ahora realizaremos una enumeración de los programas o comandos que podemos ejecutar con los privilegios de otro usuario mediante el comando sudo con el fin de buscar vectores escalada privilegio.
Podemos observar que podemos ejecutar un archivo binario ejecutable con los privilegios del usuario root. Además, si utilizamos el comando strings sobre el con el fin de observar cadenas de caracteres legibles de su contenido, nos topamos con el comando tar con el fin de comprimir todos los archivos y subdirectorios del directorio /var/www/html en un archivo tar, que va a ser comprimido con el formato de compresión gzip.
Ahora utilizaremos la vulnerabilidad Wilcard Injection con el fin de crear dos archivos en el directorio /var/www/html, con nombres particulares para que sean tomados como parámetros del comando tar al momento de que quieran comprimirlos, y nos ejecuten una nueva instancia de Shell con los privilegios de root.
Podemos observar que fallo el intento de explotar la vulnerabilidad Wilcard Injection ya que los nombres de los archivos que creamos no fueron reconocidos como parámetros sino como nombres de archivos que fueron comprimidos en un archivo tar.
Ahora aprovecharemos que en la salida del comando sudo -l, nos dimos cuenta de que la configuración env_keep
apunta a la variable de entorno LD_PRELOAD
que es utilizada para cargar bibliotecas compartidas antes de ejecutar un comando o programa. Por lo tanto, podemos ejecutar el archivo binario ejecutable con el comando sudo y con la variable de entorno LD_PRELOAD para que se carga una biblioteca compartida que me generara una nueva instancia de Shell con los privilegios de root.
De esta manera logramos realizar una escalada privilegio vertical.
Ahora buscaremos las dos banderas.