Madeye’s Castle - TryHackMe
SUMMARY
Debemos encontrar tres banderas. Donde a partir de un escaneo de puertos pude saber que hay un servicio web, SSH y SMB. Luego, encontré un directorio compartido en el servidor SMB que contenía un wordlist y tres username. Luego, encontré un nombre de dominio de una aplicación web en desarrollo en la pagina web que viene por defecto en la instalación del programa servidor Apache. Luego, realicé un ataque de fuerza bruta fallido contra un formulario HTML de la aplicación el wordlist y los usernames encontrados. Luego, realice fuerza bruta de directorios en el directorio raíz de la aplicación y el servidor web, y encontré un recurso que contenía dos usernames y realice otro intento de ataque de fuerza bruta fallido. Luego, realice un SQLi sobre el formulario, logrando extraer y crakear un hash. Luego, para la escala horizontal aproveché que podía ejecutar el archivo binario pico con los privilegios de otro usuario, y para la escalada vertical encontré dos formas: Baron Samedit y un archivo SUID desconocido.
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 Madeye Castle. 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 Madeye Castle
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 Madeye Castle. 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 podemos observar el valor de la etiqueta title de la página web que viene por defecto en la instalación del programa servidor web.
- Un servicio SMB levantado en el puerto 445, que va a permitir compartir recursos a través de la red local., y al parecer se utiliza el servicio NetBios Session, levantado en el puerto 139, para establecer la sesión entre los sistemas que van a compartir recursos.
- Un servidor SSH levantado en el puerto 22.
Ahora utilizaremos el script smb-enum-shares de Nmap para enumerar los recursos compartidos y enum4linux para enumerar los usuarios locales en el servidor SMB objetivo.
Podemos observar un recurso compartido llamado sambashare que viene a ser un directorio que parece pertenecer al usuario local Harry. Además, con enum4linux se llego a encontrar otro usuario local llamado hermonine.
Ahora accederemos al directorio compartido con smbclient a través de una conexión anónima al servidor SMB.
Podemos observar que viene a ser una página web que forma parte de un sitio web, y que consta con la funcionalidad de realizar búsqueda. Para ello se ha implementado una función en Javascript que se ejecutara cuando presionemos enter sobre el campo de entrada o si presionamos el botón Search. Además, podemos observar que nuestra búsqueda se ve reflejada en la página web, esto nos da la idea de probar si el parámetro GET q es vulnerable a XSS.
Podemos observar que el directorio compartido contenía dos archivos donde uno de ellos viene a ser un wordlist que puede ser una lista de contraseñas para ser usado con un ataque de fuerza bruta hacia un login o formulario HTML, y el otro archivo contiene el username Hagrid que puede ser de un usuario local del sistema destino.
Ahora accederemos a la página web, que viene por defecto cuando se instala el programa servidor Apache, a través de mi navegador web con el fin de verificar si no han dejado algún comentario en su código fuente.
Podemos observar que el código fuente de la página web tiene un comentario que hace referencia a un nombre de dominio donde lo mas probable es que corresponda a una aplicación o sitio web en desarrollo es decir que no es publica aun, por lo tanto, debemos colocar el nombre de dominio en nuestro archivo /etc/hosts asociada con la dirección IP del servidor web con el fin de poder acceder al sitio o aplicación web ya que cuando nuestro navegador web intente realizar la consultas DNS hacia lo servidores recursivos DNS proveídos por nuestro ISP web no podrá obtener la dirección IP del servidor web que lo aloja.
Ahora accederemos al sitio o aplicación web desde mi navegador web.
Podemos observar que nos topamos con una página web que consta de un login o formulario HTML que tiene los parámetros user y password. Es la ocasión perfecta para realizar un ataque de fuerza bruta contra este formulario con Hydra y utilizando el archivo spellnames.txt como wordlists y recopilaremos todos los usernames encontrados hasta ahora para utilizarlos en el ataque.
Podemos observar que la herramienta no logro encontrar ninguna credencial valida.
Ahora realizaremos fuerza bruta de directorios con Gobuster sobre los directorio raíz del servidor web y de la aplicación web.
Podemos observar que la herramienta llego a encontrar un directorio llamado backup en el directorio raíz del servidor web y el directorio static en el directorio raíz de la aplicación o sitio web.
Ahora accederemos solo al directorio backup a través de mi navegador web ya que el directorio static comúnmente solo contiene hojas de estilo CSS, imágenes y otros recursos sin importancia.
Podemos observar que no podemos acceder al directorio backup.
Ahora realizaremos fuerza bruta de directorios con Gobuster sobre el directorio backup con el fin de saber si podemos acceder a un recurso dentro de él.
Podemos observar que la herramienta llego a encontrar un recurso llamado email.
Ahora accederemos a este recurso a través de mi navegador web.
Podemos observar que el recurso viene a ser como un registro de correos electrónicos entre los usuarios Roar y Madeye.
Ahora realizaremos otro ataque de fuerza bruta con Hydra contra el login encontrado anteriormente y con el mismo wordlist spellnames.txt pero con estos dos usernames nuevos.
Podemos observar que la herramienta no logro encontrar credenciales validas.
Ahora intentaremos ingresar una consulta SQLi maliciosa sencilla en el parámetro user del formulario HTML con el fin de saber si podemos omitir la autenticación.
Podemos observar que no logramos omitir la autenticación, pero la respuesta HTTP, que recibimos del servidor web, contiene datos en formato JSON. Esto nos da a sospechar que nuestras consultas SQL maliciosas si se están concatenando con la consulta SQL legitimas que realiza la aplicación web.
Ahora intentaremos ingresar otra consulta SQL maliciosa bastante conocida en el parámetro user del formulario HTML.
Podemos observar que en este caso la respuesta HTTP del servidor viene a contener el mensaje Inertnal Server Error correspondiente al código de estado HTTP 500 por lo que el servidor web no ha logrado procesar mi solicitud HTTP, pero esto nos da a sospechar que nuestras consultas SQL maliciosas si se están concatenando con la consulta SQL que realiza la aplicación web, pero no estamos utilizando el payload adecuado.
Ahora utilizaremos sqlmap para observar los resultados que nos genera, pero antes capturaremos una solicitud HTTP realizada al servidor web destino con Burp Suite para utilizarla en sqlmap.
Podemos observar que la herramienta logro saber que el DBMS instalado en el sistema destino es SQLite, y enumero la tabla users de la base de datos SQLite_masterdb a partir del parámetro user vulnerable pero no logra determinar sus columnas debido a que ha recibido respuestas HTTP con código de estado 400 HTTP del servidor web ya que los payload utilizado por la herramienta en sus solicitudes HTTP no han sido los correctos.
FASE EXPLOTACION O GANAR ACCESO O HACKING
Ahora realizaremos la explotación manual teniendo en cuenta que la tabla consultada por la aplicación web consta de 4 columna por lo que nuestra consulta SQL con UNION SELECT también deberá tenerlo.
Podemos observar que la tabla users consta de 4 columna: name,password, admin, notes.
Ahora volcaremos los registros de estas 4 columnas:
-
name:
-
admin:
-
password:
-
notes:
Podemos observar que en los registros de la columna name nos encontramos con el usuario Harry Turner que viene a tener el mismo nombre que el propietario del directorio compartido que encontramos en el servidor SMB. Por lo tanto, lo mas posible es que se refiere al usuario local en el sistema objetivo.
Ahora identificaremos el tipo de algoritmo hash utiliza el hash, e intentaremos crackear el hash correspondiente al usuario Harry con John the Ripper, pero debemos tener en cuenta que un registro de la columna notes nos dice que el password esta utilizando la regla de manipulacion best64.
Podemos observar que la herramienta logro crackear el hash utilizando la regla best64 y el wordlist spellnames.txt.
Ahora nos autenticaremos al formulario HTML encontrado anteriormente.
Podemos observar un mensaje en la página web redirigida después de autenticarnos que nos indica que el usuario Harry tiende a reutilizar sus credenciales. Por lo tanto, utilizaremos las mismas credenciales para iniciar sesión en el sistema destino mediante el servicio SSH.
Podemos observar que logramos acceder al sistema destino.
FASE ESCALADA PRIVILEGIOS
Ahora debemos buscar un vector de escalada privilegios para ser un usuario con mayores privilegios. Para ello enumeraremos los comandos o programas que el usuario Harry puede ejecutar con los privilegios de otros usuarios a través del comando sudo.
Podemos observar que el usuario Harry puede ejecutar el archivo ejecutable del editor de texto de terminal pico con los privilegios del usuarioHermonine.
Ahora aprovecharemos esto para utilizar la funcionalidad de ejecutar comandos a través de la interfaz del editor de texto pico y ejecutar el siguiente comandos que nos generara una nueva shell en su estado predeterminado con los privilegios del usuario Hermonine.
De esta manera realizamos una escalada de privilegios horizontal.
Ahora utilizaremos linpeas para enumerar posibles vectores escalada de privilegios en el sistema de archivos del usuario hermonine.
Podemos observar que la herramienta encontró dos posibles vectores de escalada de privilegios. Uno viene a ser un archivo binario SUID desconocido y otro viene a ser la versión del programa sudo en el sistema destino.
Ahora trabajaremos con la versión del programa sudo para ello veremos si presenta la vulnerabilidadBaron Samedit con el siguiente comando obtenida de la PoC de este repositorio GitHub: https://github.com/lockedbyte/CVE-Exploits/tree/master/CVE-2021-3156.
Podemos observar que la versión del programa sudo instalada del sistema destino es vulnerable.
Ahora utilizaremos un exploit encontrado en este repositorio GitHub: https://github.com/blasty/CVE-2021-3156 para realizar la explotación.
De esta manera realizamos una escala de privilegios vertical mediante la explotación de la vulnerabilidad Baron Samedit.
Ahora utilizaremos el segundo vector de escalada privilegios que viene a ser el archivo binario desconocido con el bit SUID habilitado. Para ello lo ejecutaremos con el fin de saber su funcionalidad y que posibles comandos conocidos en segundo plano se están ejecutando.
Podemos observar que nos solicitan que adivinemos un numero y luego lo compara con numero que se genera de manera aleatoria.
Ahora trasladaremos el archivo binario a nuestro sistema con Netcat, y utilizaremos Ghidra para realizar ingeniería inversa y poder observar el código fuente del archivo binario desconocido de manera clara.
Podemos observar que el numero aleatorio mostrado en la salida de la ejecución del archivo binario es obtenido a partir de la funciónrand pero antes se utiliza la función srand para inicializar la semilla que se basa en el valor actual del instante tiempo que se ejecuta el archivo binario. Por lo tanto, en cada instante de tiempo diferente siempre obtendremos un numero aleatoria diferente, y si logramos adivinar ese número aleatorio se ejecutará el comando uname -a.
Ahora aprovecharemos que el archivo binario ejecuta el comando uname sin proveer la ruta absoluta del archivo binario ejecutable de uname para crear un archivo ejecutable malicioso para que suplante el archivo binario de uname mediante la modificación de la variable de entorno PATH del sistema destino, pero antes utilizaremos el siguiente comando para adivinar correctamente el número que se genere en este instante de tiempo.
Este comando consiste en utilizar los pipes |
para redirigir la salida de los comandos como entrada los comandos adyacentes. De esta manera logramos extraer la segunda línea de texto del mensaje que obteníamos cuando no adivinamos correctamente, y luego extraíamos el numero aleatorio de ese instante de tiempo con cut para utilizarlo como entrada nuevamente en el archivo binario en ese mismo instante de tiempo para evitar de que cambiase el numero aleatorio.
Ahora si suplantaremos el archivo binario original del comando uname con uno malicioso que nos generara una reverse Shell cuando ejecutemos el archivo binario desconocido ya que el sistema operativo del sistema objetivo buscara el archivo binario ejecutable del comando uname en la lista de directorios de la variable de entorno PATH, y se encontrara con nuestro archivo maliciosos en el primero directorio tmp.
Podemos observar que logramos realizar la escalada privilegios vertical de otra forma.
Ahora buscaremos las banderas en los archivos root.txt, user1.txt, y user2.txt.