Curiosidades De Hackers
OWASP TOP 10

Bypass al 2FA(segundo factor de autenticación); Explicación y PoC


¿Qué es 2FA (Autenticación de Dos Factores)?

    2FA (Two-Factor Authentication) es un método de seguridad que requiere dos pasos diferentes para verificar la identidad de un usuario. En lugar de depender únicamente de una contraseña, el 2FA agrega una segunda capa de seguridad. Generalmente, los dos factores incluyen:

        1. Algo que sabes: Una contraseña o PIN.

        2. Algo que tienes: Un dispositivo (como un teléfono móvil) para recibir un código de verificación o usar una aplicación como Google Authenticator.

    El objetivo de 2FA es hacer que sea mucho más difícil para un atacante acceder a una cuenta, ya que incluso si tiene la contraseña, aún necesita el segundo factor (generalmente un código temporal) para completar el acceso.

¿Cómo se Implementa el 2FA?

Después de ingresar el nombre de usuario y la contraseña (primer factor), se nos solicita un código de verificación de 4 o mas dígitos (segundo factor) para poder completar el inicio de sesión. Este código generalmente cambia cada vez y tiene una validez muy corta.

¿Cómo Vamos a Bypassear el 2FA?

Vamos a bypassear el 2FA utilizando un ataque de fuerza bruta, en el que intentamos todos los posibles códigos de 4 dígitos (desde 0000 hasta 9999). Dado que el código es relativamente corto (solo 4 dígitos), podemos automatizar el proceso para probar todas las combinaciones en un tiempo razonable.

1. Intercepción de la solicitud de autenticación 2FA: Usamos una herramienta de proxy como Burp Suite para interceptar la solicitud HTTP que se envía cuando ingresamos el código 2FA.

2. Automatización del proceso: Configuramos Burp Intruder para realizar múltiples solicitudes con diferentes códigos de 4 dígitos, cubriendo todas las combinaciones posibles (de 0000 a 9999). Esto simula el ingreso de diferentes códigos de verificación de forma automática.

3. Manejo de sesiones: Como el servidor puede cerrar la sesión después de algunos intentos fallidos, configuramos un macro que vuelve a iniciar sesión automáticamente y continúa probando códigos. El macro inicia sesión con las credenciales conocidas y procede a probar los códigos 2FA.

4. Detección del código correcto: Observamos la respuesta del servidor. Cuando el código correcto es enviado, recibiremos una respuesta con un código de estado HTTP **302** (redirección), lo que indica que la autenticación ha sido exitosa.

5. Acceso a la cuenta:  Una vez que se ha descubierto el código correcto, podemos usarlo para acceder a la cuenta de Carlos y evitar el bloqueo del sistema 2FA.

Consideraciones de Seguridad.

El bypass del 2FA mediante fuerza bruta se aprovecha de la falta de medidas de seguridad adicionales, como:

– Bloqueo de cuentas después de varios intentos fallidos.

 Rate limit, que limita el número de intentos en un periodo de tiempo.

– Códigos más largos o dinámicos, como los generados por aplicaciones de autenticación.

    En la vida real, estos mecanismos son fundamentales para proteger las cuentas contra ataques automatizados como el que estamos ejecutando en el laboratorio.

PoC

En este contexto nos encontramos ante un panel de inicio de sesión a nuestra cuenta, la cual ya tenemos las credenciales.

Pero nos pide un 2FA(arriba explicado), el cual no tenemos, pero sabemos que contiene 4 dígitos, tras algunos intentos fallidos, en este caso 3, nos cierra la sesión automáticamente.

Lo primero que haremos será irnos a Burpsuite, mas en concreto a la sección de «Session Handling«, es decir un proceso de sesiones que nos ayudara a gestionar las diferentes sesiones que utilizaremos mas adelante y nos mantendrá el estado sin perderlo, en esta sesión le daremos un scope de que nos incluya todas las URLs que visitemos.

Y añadiremos una regla, que será añadir una macro (un conjunto de tareas repetitivas), «como un script para automatizar»

En esta macro añadiremos las siguientes solicitudes:

– La solicitud GET para cargar la página de inicio de sesión.

– La solicitud POST para enviar las credenciales de inicio de sesión.

– La solicitud GET que genera el código 2FA.

Hay que tener en cuenta que las solicitudes obtenidas, si nos fijamos son validas, en las que el login a sido aceptado captando nuestro token, y la solicitud GET que nos genera el token de «2FA». En caso de que no capte nuestro token no funcionara.

Para probar que estas solicitudes son correctas y no hay ningún error le daremos a probar macro.

Como vemos en la solitud POST de «login«, podemos ver nuestro inicio de sesión correcto junto a nuestro CSRF token y la solicitud del 2FA.

En este momento lo tenemos todo bien configurado.

Nos iremos a la ultima solitud valida, en este caso la solitud POST de la petición de el «2FA» y lo mandaremos al intruder para proceder al ataque.

Añadiremos el campo «1111«, que es la prueba de inicio con el «2FA«, y pondremos un ataque modo «sniper«. Es decir queremos atacar donde esta el numero «1111«.

Queremos un ataque de números, que sea secuencial, es decir, que vaya en orden determinado (0000,0001,0002, así hasta el 9999), pondremos que lo queremos desde el numero 0 hasta el 9999, y que queremos un máximo y un mínimo de 4 números, ya que sabemos que el código «2FA» solo contiene 4 números.

Y le pediremos que si falla 3 veces consecutivas haga una pausa, recordemos que al principio, pudimos comprobar manualmente que al 3º intento nos expulsa de la sesión.

Iniciaremos el ataque, en busca del código 302, es decir un código de redirección.

A la espera de un rato y en función de la versión que tengas en Burpsuite conseguimos el código de redirección.

Ya sabemos que el código «2FA» es el 1553, pero podemos indicarle que nos enseñe la respuesta directamente en el navegador, copiamos la URL que nos proporciona.

Y finalmente conseguimos entrar en la cuenta de Carlos consiguiendo bypassear el código de «2FA«


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *