Capture! - TryHackMe

SUMMARY

Debemos encontrar una bandera. Donde a partir de un escaneo de puertos pude saber que hay un servidor web que aloja una aplicación web construida con Python. Además, esta aplicación web esta compuesta de un login, y luego de un numero intentos fallidos, aparece un Captcha que viene a ser una operación matemática como suma o resta o multiplicación o división. Este captcha ha sido creado para evitar ataques automatizados de fuerza bruta pero debido a que es una operación matemática, logre crear un script en Python que me permitió primero realizar fuerza bruta de usernames aprovechando el mensaje de error “The user name does not exist”. Luego, conociendo un username valido, puede crear otro script en Python que me permitió realizar fuerza bruta de contraseñas, logrando encontrar unas credenciales valida.

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 Capture This!. 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 Capture this!.

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 Capture this!. 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 en el puerto 80. Además, nos encontramos con una respuesta HTTP con código de estado HTTP 302 y con el encabezado HTML Location igual a login. Esto generara que cuando acceda al servidor web a traves del navegador web , se me redirigirá al recurso login que viene a ser lo más probable el login de una aplicación web creada a partir de Python.

Ahora accederemos al recurso login desde nuestro navegador web.

Podemos observar que se trata de un login o formulario HTML que nos solicitan credenciales para autenticarnos. Además, obtenemos un mensaje de error en la respuesta HTML de la aplicación web, que nos indica si el username corresponde a un usuario registrado o no. Por lo que, podemos utilizar este mensaje de error para realizar un ataque de fuerza bruta username contra el login.

Otra cosa mas que nos damos cuenta es que si tenemos varios intentos fallidos de autenticación, nos aparecerá un captcha con el fin de dificultar el ataque de fuerza bruta automatizada con herramientas como Hydra, Burp Suite, OWASP ZAP, etc. Pero al tratarse el captcha de operaciones matemática básicas como +.-,*,/, si podemos crear un script en Python para obtener las respuestas a estas operaciones y poder autenticarnos de manera automatizada.

FASE GANAR ACCESO O EXPLOTACION O HACKING

Ahora que conocemos todas las condiciones de nuestro problema, crearemos un script en Python que automatiza la fuerza bruta de usernames.

Podemos observar que logramos encontrar un username valido a partir de mi script en Python. además, si nos autenticamos con este username, nos topamos con otro mensaje de error, indicándonos que el password ingresado para el usuario Natalie no es el correcto.

Ahora crearemos otro script en Python para realizar el ataque de fuerza bruta de contraseñas contra ellogin teniendo en cuenta el mensaje de error mostrado en la respuesta HTML de la aplicación web.

De esta manera logramos omitir la autenticación del login, y logramos encontrar la bandera solicitada. Además, el código de los scripts lo puedes encontrar en mi repositorio Github.