Recent Posts

Fortress - TryHackMe

Primero a partir del escaneo de puertos de Nmap pude saber qué servicios se ejecutaban en los puertos abiertos. Luego, enumerando los recursos compartidos del servidor FTP, pude obtener un bytecode que había sido compilado con Python 2.7, logrando decompilarlo con uncompyle2, y obteniendo el script Python que implementaba un servidor que escuchaba conexiones en el puerto 5752, y que tenía un método de autenticación, logrando omitirlo y obtener la ruta de dos recursos. Uno de ellos era un script PHP, donde genere la colisión hash SHA-1 con el fin de obtener la ruta de un recurso que contenía la clave privada SSH del usuario h4rdy. Luego, omití la shell rbash asignado al usuario h4rdy, y en la escalada horizontal, aproveché que h4rdy podía ejecutar el comando cat con los privilegios de j4x0n con el fin de obtener su clave privada SSH. Luego, en la escalada vertical, encontré la credencial de j4x0n en un script en Bash, pudiendo ejecutar cualquier comando con los privilegios de root mediante sudo.

Athena - TryHackMe

En este caso debemos encontrar dos banderas ubicadas en la maquina Athenav1.9. Donde a partir del escaneo de puertos de Nmap pude saber que el servicio SMB se está ejecutando en los puertos 139 y 445. Luego, enumerando los recursos compartidos del servidor Samba, pude saber que hay un archivo de texto compartido donde encontré la ruta de un endpoint de una API que ofrece una funcionalidad similar al comando ping. Luego, aprovechando que el endpoint era vulnerable a Command Injection, logre inyectar un comando que genere un reverse Shell. Luego, para la escalada privilegio horizontal, logre encontrar un script en Bash que era ejecutado de manera automatizada y periódica con los privilegios del usuario athena, logrando modificar su contenido y realizar una reverse Shell. Luego, en la escalada vertical, aproveche que athena podía cargar un módulo kernel, que viene a ser un LKM rootkit, con los privilegios del usuario root, logrando analizar su código fuente con Ghidra.

Password brute-force via password change

Debemos autenticarnos en el login de un sitio web siendo carlos. Luego, me doy cuenta de que el sitio web consta con la funcionalidad de Resetear Contraseña. Además, su logica es primero ingresar un username o correo electrónico de un usuario valido en un formulario, luego le llega un correo electrónico al usuario ingresado, con una URL que tiene un token asociado a su cuenta, y al darle clic a la URL, eres redireccionado a una página web para resetear tu contraseña. La vulnerabilidad de la lógica de esta funcionalidad radica en que la URL es generada a partir del valor de la cabecera Host de la solicitud POST del primero formulario. Por lo que podemos usar la cabecera X-Forwarded-Host en la solicitud para alterar el valor de la cabecera Host, y de esa manera el sitio web enviara un correo electronico con una URL fraudulenta a carlos. Luego, cuando carlos haga clic en la URL, podremos observar el token en el registro de acceso de nuestro servidor web.

Password reset poisoning via middleware

Debemos autenticarnos en el login de un sitio web siendo carlos. Luego, me doy cuenta de que el sitio web consta con la funcionalidad de Resetear Contraseña. Además, su logica es primero ingresar un username o correo electrónico de un usuario valido en un formulario, luego le llega un correo electrónico al usuario ingresado, con una URL que tiene un token asociado a su cuenta, y al darle clic a la URL, eres redireccionado a una página web para resetear tu contraseña. La vulnerabilidad de la lógica de esta funcionalidad radica en que la URL es generada a partir del valor de la cabecera Host de la solicitud POST del primero formulario. Por lo que podemos usar la cabecera X-Forwarded-Host en la solicitud para alterar el valor de la cabecera Host, y de esa manera el sitio web enviara un correo electronico con una URL fraudulenta a carlos. Luego, cuando carlos haga clic en la URL, podremos observar el token en el registro de acceso de nuestro servidor web.

Offline password cracking

Debemos eliminar la cuenta del usuario carlos de un sitio web. Además, el enunciado del laboratorio nos provee las credenciales del usuario wiener. Primero, analice la lógica utilizada en la funcionalidad Stay logged in, que se establecia a traves de una cookie persistente, y que permitía omitir la autenticación del login del sitio web a pesar de que cierre todas las sesiones del navegador web. Luego, debido a que la cookie no tenía un alto grado de entropía, pude saber qué estaba conformado por el username y password del usuario. Luego, cree un script en Python para intentar obtener la cookie de carlos, pero no pude hacerlo debido a que no tenia el wordlist adecuado. Luego, aproveche la vulnerabilidad XSS en la funcionalidad de comentarios en los posts del sitio web, para robar las cookies de los usuarios que se autenticaron con la funcionalidad Stay logged, logrando obtener el password del usuario carlos.

Brute-forcing a stay-logged-in cookie

Debemos autenticarnos con la cuenta del usuario carlos a traves del login de un sitio web. Además, el enunciado del laboratorio nos provee las credenciales del usuario wiener. Primero, analice la lógica utilizada en la funcionalidad Stay logged in, que me permitía omitir la autenticación del login del sitio web a pesar de que cierre todas las sesiones del navegador web. Luego, me di cuenta de que el sitio web establece una cookie en nuestro navegador web para la implementación de esta funcionalidad. Luego, debido a que la cookie no tenía un alto grado de entropía, pude saber qué estaba conformado por el username y password del usuario, y utilizaba la codificación base64 y un hash MD5. Luego, cree un script en Python para encontrar la cookie y contraseña correcta del usuario carlos con el fin de omitir la autenticación del login del sitio web.

Password Reset Broken Logic

Debemos autenticarnos con la cuenta del usuario carlos a traves del login de un sitio web. Además, el enunciado del laboratorio nos provee las credenciales del usuario wiener. Primero, analice la lógica utilizada en la funcionalidad Restablecer Contraseña, que me redirigía a una página web que constaba de un formulario HTML donde debía indicar el username o un email donde se iba a enviar un correo electrónico con la URL de la página web donde iba a restablecer la contraseña de la cuenta del usuario especificado. Luego, accedí a la bandeja de entrada del correo electrónico del usuario wiener para acceder a la URL, que constaba de un parámetro GET token que tenía un valor con un alto grado de entropía.Luego, fui redirigido a una pagina web que constaba de un formulario con dos campos escondidos que contenían el valor del token y el username.Luego, modifique el username y elimine el valor del token de la solicitud POST realizada desde el formulario, logrando modificar el password de carlos.

2FA bypass using a brute-force attack

Debemos lograr omitir el segundo factor de autenticación, que viene a ser un código de verificación de 4 dígitos asignado a la cuenta del usuario carlos, de un sitio web. Además, el enunciado del laboratorio nos provee las credenciales del usuario Carlos para lograr autenticarnos en el primer factor. Luego, analicé la lógica implementada en el segundo factor de autenticación donde me di cuenta de que luego de 2 dos intentos fallidos se cerraba automáticamente la sesión, y tenía que autenticarme de nuevo en el primer factor, de esta manera ralentizaba el ataque de fuerza bruta sobre el código de verificación. Además, una nota en el enunciado del laboratorio nos dice que después de los dos intentos fallidos, el código de verificación se reiniciara, es decir, cambiara de valor. Luego, teniendo en cuenta toda las restricciones cree un script en Python para automatizar el ataque de fuerza bruta, y ejecute el script varias veces simultáneamente aunque con cierto retraso para evitar omitir el codigo.

2FA broken logic

Debemos autenticarnos con la cuenta del usuario carlos a traves del mecanismo 2FA de un sitio web. Además, el enunciado del laboratorio nos provee las credenciales del usuario wiener. Primero, analice la lógica utilizada por el 2FA. Para ello capture la respuesta HTTP de la solicitud POST realizada en la autenticación del login con las credenciales de wiener, dándome cuenta de que el servidor web establecía dos cookies de sesión donde uno de ellos tomaba el valor del username por lo que cambia su valor a carlos. Luego, debido a que la respuesta tenía un código de estado HTTP igual a 302, fui redirigido a otra página web donde debía insertar el código de verificación de 4 dígitos. Luego, debido a que no había una medida preventiva que evitara o ralentizara el ataque de fuerza bruta sobre el código de verificación, es que realice un script en Python para automatizar el ataque de fuerza bruta sobre el código de verificación.

Broken brute-force protection, multiple credentials per request

Debemos encontrar la contraseña del usuario Carlos para autenticarnos exitosamente en el login del sitio web. Para ello primero analizo la lógica implementada en el login, obteniendo un mensaje de error genérico en las respuestas HTTP, independiente de si me autentique con un username valido o no. Además, si intento autenticarme fallidamente muchas veces seguidas con el username valido Carlos, obtengo un mensaje de error indicándome que no puedo autenticarme por un minuto. Además, si intento omitir esta restricción con la cabecera X-Forwarded-For, no tendré éxito ya que el servidor web no admite su uso. Luego, analizando el cuerpo de la solicitud HTTP, me doy cuenta de que los datos son transmitidos en un formato JSON, permitiéndome realizar una solicitud con múltiples contraseñas en el parámetro asociado al password. De esta manera logre autenticarme exitosamente. Luego, para obtener el password, elabore un script teniendo en cuenta el mensaje de restricción, error genérico, y el tiempo de bloqueo.