Break Out The Cage - TryHackMe

SUMMARY

Debemos encontrar 2 banderas. Primero, a partir de un escaneo de puertos pude saber que un servidor FTP permitía conexiones anónimas,logrando enumerar un recurso compartido que contenía un mensaje codificado con Base64 y Vigenere. Además, para conocer la clave utilizada en el cifrado Vigenere, observe el espectrograma de un archivo de audio, que fue encontrado a partir de una fuerza bruta de directorios desde el directorio raíz del servidor web. Luego, de decodificar y descifrar el mensaje, logre saber el password de un usuario local del sistema destino. Luego, en la escalada de privilegio horizontal, aproveche que un script Python era ejecutado de manera periódica y automatizada con los privilegios de un usuario local, logrando realizar un Command Injection para ejecutar una reverse Shell con los privilegios de dicho usuario. Luego, en la escalada de privilegios vertical, aproveche que el usuario pertenencia al grupo secundario lxd para ejecutar un contenedor donde se ejecuta una Shell Bash con privilegios de root, y monte el directorio raíz del sistema anfitrión en uno de sus directorios.

FASE RECONOCIMIENTO ACTIVO

En este caso debemos acceder al sistema destino y obtener dos banderas. Primero, empezaremos utilizando el comando openvpn y el archivo de configuración OpenVPN con el fin de establecer una conexión VPN y poder acceder a los laboratorios donde están las máquinas virtuales y vulnerables.

Además, la plataforma de Tryhackme nos muestra la dirección IP de la máquina Break Out The Cage. 1.

FASE ESCANEO Y ENUMERACION

Ahora pasaremos a la fase de Escaneo y Enumeración con el fin de poder escanear los puertos del sistema destino. Además, obtendremos los servicios que se han levantado en los puertos abiertos, las versiones de los servicios, y el sistema operativo del sistema destino.

Los resultados que obtenemos son:

  • Un programa servidor FTP que se ejecuta en el puerto 21. Ademas, podemos observar que admite conexiones anonimas, es decir, sin proveer credenciales.
  • Un programa servidor Apache que se ejecuta en el puerto 80 y que aloja un sitio web.
  • Un programa servidor SSH que se ejecuta en el puerto 22.

Ahora accederemos al servidor FTP mediante una conexión anonima con el fin de enumerar los recursos compartidos.

Podemos observar que nos encontramos con un archivo de texto compartido que contiene un mensaje codificiado en Base64, pero luego de que lo decodificamos, nos topamos con otro mensaje codificado o cifrado. Luego, intente descifrarlo utilizando el cifrado Cesar y sus variantes como ROT13 o ROT47, pero no tuve éxito. Luego, mediante una herramienta en linea, intente conocer la cifrado que utiliza el texto, pero me tope con cifrados que requieren de una clave. Por tal razon solo queda seguir enumerando.

Ahora accederemos a la pagina de inicio del sitio web mediante el navegador web.

Podemos observar que el sitio web es estatico ya que no presenta ningun funcionalidad desarrollada, y solo contenido estatico. Aunque, analizando el contenido de la pagina de inicio, podemos encontrar los posbiles usernames validos weston, cage, anget.

Ahora realizaremos fuerza bruta de directorios desde el directorio raiz del sitio web con el fin de encontrar recursos escondidos.

Podemos encontrar que nos topamos con varios recursos escondidos pero la gran mayoria son Directory Listing vacios y uno de ellos contenide varios archivos sin nignuna informacion credencial asociada a los posibles usernames. Luego, me encontre con un archivo de audio MP3 que tiene un audio extraño con ruido, pero lo analizaremos con Audicity para observar su espectrograma y saber si contiene algun mensaje oculto.

FASE GANAR ACCESSO O HACKING O EXPLOTACION

Podemos observar que logramos visualizar un mensaje oculto que viene a ser la clave necesaria en el cifrado Vigenere, logrando decodificar el mensaje, Ademas, si analizamos el mensaje decodificado, viene a ser una lista de tareas escrita por Weston donde la ultima parte no guarda relacion con las anteriores lineas, por lo que lo mas probable viene a ser la credencial del usuario Weston.

Podemos observar que nuestra suposicion fue exitosa, y logramos acceder al sistema destino mediante el servicio SSH.

FASE ESCALADA PRIVILEGIOS

Ahora realizaremos enumeracion manual en el sistema de archivos del usuario eston para buscar vectores de escalada de privilegios.

Podemos observar que nos encontramos con un script Python en un subdirectorio oculto del directorio opt. Ademas, si analizamos el codigo del script, podremos notar que primero abre y leer un archivo oculto llamado quotes. Ademas, cada linea del archivo oculto va ser almacenado como elemento de una lista llamdo lines debido a la funcion splitlines. Luego, con el metodo choice se escoge un elemento alteatorio de la lista que contiene las entradas del archivo oculto quotes. Luego, se ejecuta el comando wall con el elemento aleatorio con el fin de enviar un mensaje a todo los usuarios que estan actulamente conectados en el siste4ma. Ademas, este mensaje viene a ser una entrada aleatorio del archivo oculto quotes.

Podemos observar que este script se ejecuta periodicamente con los privilegios de cage de manera automatizada debido a los mensajes que recibimos. Ademas, nos percatamos que no se realiza una verificacion del valor asginado a la variable quote por lo que podemos realizar un Command Injection para ejecutar una reverse shell. Para ello aprovecharemos que podemos modificar el contenido del archivo oculto quotes para sobreescribir todo su contenidocon nuestro payload y de esa manera siempre va ser elegido por el metodo choice del modulo random.

Podemos observar que nuestro payload consta del operador shell $() que nos permite ejecutar un comando dentro de otro comando, y de esta manera logramos realizar una escalada de privilegio horizontal. Ahora, seguiremos enumerando de manera manual en busca de mas vectores de escalada de privilegio en el sistema de archivos.

Podemos observar que nuestro usuario pertenece al grupo secundario lxd por lo que puede gestionar contenedores Linux como crear, detener o eliminar contenedores. Ademas, ya es bastante conocido que esto viene a ser un vector de escalada de privilegios vertical, pero si no conoce el procedimiento de como realizarlo puede leer este articulo donde esta bien explicado la explotacion https://www.hackingarticles.in/lxd-privilege-escalation/.

El procedimiento explicado en el articulo, consiste en ejecutar un contenedor con el sisitema operativo Alpine en su version 3.10. Ademas, en el contenedor se ejecutara una shell bash con los privilegios de root, y montaremos el directorio raiz del sistema anfitrion el directorio /mnt/root del contenedor. De esta manera podremos navegar por el sistema de archivos del usuario root sin ningun problema, pero aun asi seguiremos estando en un contenedor mas no tendremos los privilegios elevados en el sistema anfitrion.

De esta manera logramos obtener el contenido de las dos banderas, pero para realizar una escalada de privielgio vertical en el sistema anfitrion, debemos ser muy quisquilloso con el contenido de uno de los emails del directorio home de cage ya que se proporciona un mensaje cifrado, y si intentamos averiguar el cifrado que utiliza, nos topamos con cifrados que requiere una clave como Vigenere, y la clave esta en el mismo correo y viene a ser la palabra face, pero padar poder conocer la clave tuve que preguntar en el Discord de TryHackMe para que me dieran alguna pista porque esta muy dificil encontrar esa clave. Luego, debemos suponer que el mensaje descifrado viene a ser la clave de root, para poder realizar la escalada de privilegio vertical en el sistema anfitrion.