hacktricks/pentesting-web/reset-password.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

15 KiB

Bypass de restablecimiento/olvido de contraseña

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Sigue a HackenProof para aprender más sobre errores web3

🐞 Lee tutoriales de errores web3

🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores

💬 Participa en discusiones comunitarias

Las siguientes técnicas de recompilación se tomaron de https://anugrahsr.github.io/posts/10-Password-reset-flaws/

Fuga de token de restablecimiento de contraseña a través del referente

El referente HTTP es un campo de encabezado HTTP opcional que identifica la dirección de la página web que está vinculada al recurso que se está solicitando. El encabezado de solicitud Referer contiene la dirección de la página web anterior desde la cual se siguió un enlace a la página solicitada actualmente.

Explotación

  • Solicita el restablecimiento de la contraseña a tu dirección de correo electrónico
  • Haz clic en el enlace de restablecimiento de contraseña
  • No cambies la contraseña
  • Haz clic en cualquier sitio web de terceros (por ejemplo, Facebook, Twitter)
  • Intercepta la solicitud en el proxy de Burpsuite
  • Comprueba si el encabezado del referente está filtrando el token de restablecimiento de contraseña.

Impacto

Permite a la persona que tiene el control de un sitio en particular cambiar la contraseña del usuario (ataque CSRF), porque esta persona conoce el token de restablecimiento de contraseña del usuario.

Referencia:

Envenenamiento de restablecimiento de contraseña

¡Si encuentras un ataque de encabezado de host y está fuera de alcance, intenta encontrar el botón de restablecimiento de contraseña!

Explotación

  • Intercepta la solicitud de restablecimiento de contraseña en Burpsuite
  • Agrega el siguiente encabezado o edita el encabezado en Burpsuite (prueba uno por uno)
Host: attacker.com
 Host: target.com
 X-Forwarded-Host: attacker.com
 Host: target.com
 Host: attacker.com
  • Verificar si el enlace para cambiar la contraseña dentro del correo electrónico apunta a attacker.com

Parche

Usar $_SERVER['SERVER_NAME'] en lugar de $_SERVER['HTTP_HOST']

$resetPasswordURL = "https://{$_SERVER['HTTP_HOST']}/reset-password.php?token=12345678-1234-1234-1234-12345678901";

Impacto

El usuario víctima recibirá el enlace malicioso en su correo electrónico y, al hacer clic en él, filtrará el enlace / token de restablecimiento de contraseña del usuario al atacante, lo que llevará a la toma completa de la cuenta.

Referencia:

Restablecimiento de contraseña manipulando el parámetro de correo electrónico

Explotación

  • Agregar el correo electrónico del atacante como segundo parámetro usando &
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
  • Agregar el correo electrónico del atacante como segundo parámetro usando %20
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
  • Agregar el correo electrónico del atacante como segundo parámetro usando |
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
  • Agregar el correo electrónico del atacante como segundo parámetro usando cc
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
  • Agregar el correo electrónico del atacante como segundo parámetro usando bcc
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
  • Agregar el correo electrónico del atacante como segundo parámetro usando ,
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
  • Agregar el correo electrónico del atacante como segundo parámetro en el arreglo json
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}

Referencia

Cambiando el correo electrónico y la contraseña de cualquier usuario a través de parámetros de API

Explotación

  • El atacante debe iniciar sesión con su cuenta e ir a la función de Cambiar contraseña
  • Inicie Burp Suite e intercepte la solicitud
  • Después de interceptar la solicitud, envíela al repetidor y modifique los parámetros Correo electrónico y Contraseña.
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})

Referencia

Sin límite de tasa: bombardeo de correo electrónico

Explotación

  • Inicie Burp Suite e intercepte la solicitud de restablecimiento de contraseña
  • Envíelo a intruso
  • Use carga útil nula

Referencia

Descubra cómo se genera el token de restablecimiento de contraseña

Descubra el patrón del token de restablecimiento de contraseña

Si es

  • Generado en función de la marca de tiempo
  • Generado en función del ID de usuario
  • Generado en función del correo electrónico del usuario
  • Generado en función del nombre y apellido
  • Generado en función de la fecha de nacimiento
  • Generado en función de la criptografía

Use Burp Sequencer para encontrar la aleatoriedad o previsibilidad de los tokens.

GUID adivinable

Existen diferentes tipos de GUID:

  • Versión 0: Solo se ve en el GUID nulo ("00000000-0000-0000-0000-000000000000").
  • Versión 1: El GUID se genera de manera predecible en función de:
    • La hora actual
    • Una "secuencia de reloj" generada aleatoriamente que permanece constante entre GUID durante el tiempo de actividad del sistema generador
    • Un "ID de nodo", que se genera en función de la dirección MAC del sistema si está disponible
  • Versión 3: El GUID se genera utilizando un hash MD5 de un nombre y un espacio de nombres proporcionados.
  • Versión 4: El GUID se genera aleatoriamente.
  • Versión 5: El GUID se genera utilizando un hash SHA1 de un nombre y un espacio de nombres proporcionados.

Es posible echar un vistazo a un GUID y descubrir su versión, hay una pequeña herramienta para eso: guidtool****

guidtool -i 1b2d78d0-47cf-11ec-8d62-0ff591f2a37c
UUID version: 1
UUID time: 2021-11-17 17:52:18.141000
UUID timestamp: 138564643381410000
UUID node: 17547390002044
UUID MAC address: 0f:f5:91:f2:a3:7c
UUID clock sequence: 3426

Si se utiliza la versión 1 para generar un GUID de restablecimiento de contraseña, es posible realizar un ataque de fuerza bruta sobre los GUID.

guidtool 1b2d78d0-47cf-11ec-8d62-0ff591f2a37c -t '2021-11-17 18:03:17' -p 10000
a34aca00-47d0-11ec-8d62-0ff591f2a37c
a34af110-47d0-11ec-8d62-0ff591f2a37c

Referencias

Manipulación de respuesta: Reemplazar una respuesta mala por una buena

Busque solicitudes y respuestas como estas.

HTTP/1.1 401 Unauthorized
(“message”:”unsuccessful”,”statusCode:403,”errorDescription”:”Unsuccessful”)

Cambiar la respuesta

Descripción

A veces, cuando se solicita un restablecimiento de contraseña, el servidor devuelve una respuesta que puede ser útil para un atacante. Por ejemplo, puede indicar si el correo electrónico proporcionado está registrado en el sistema o no. Si el servidor devuelve una respuesta diferente para una dirección de correo electrónico que está registrada en el sistema y otra para una que no lo está, un atacante puede usar esto para enumerar direcciones de correo electrónico válidas.

Prueba de concepto

Para probar si el servidor devuelve diferentes respuestas para direcciones de correo electrónico válidas e inválidas, puede enviar solicitudes de restablecimiento de contraseña para direcciones de correo electrónico que sabe que están registradas en el sistema y para direcciones que no lo están. Luego, compare las respuestas para ver si hay alguna diferencia.

Mitigación

Para evitar que un atacante use este método para enumerar direcciones de correo electrónico válidas, el servidor debe devolver la misma respuesta para todas las solicitudes de restablecimiento de contraseña, independientemente de si la dirección de correo electrónico proporcionada está registrada en el sistema o no.

HTTP/1.1 200 OK
(“message”:”success”,”statusCode:200,”errorDescription”:”Success”)

Referencia

Usando Token Expirado

  • Verificar si el token expirado puede ser reutilizado.

Fuerza Bruta en Token de Restablecimiento de Contraseña

Intentar hacer fuerza bruta en el token de restablecimiento de contraseña usando Burpsuite.

POST /resetPassword
[...]
email=victim@email.com&code=$BRUTE$
  • Usa IP-Rotator en burpsuite para evitar el límite de velocidad basado en IP.

Referencia

Intenta Usar Tu Token

  • Intenta agregar tu token de restablecimiento de contraseña con la cuenta de la víctima.
POST /resetPassword
[...]
email=victim@email.com&code=$YOUR_TOKEN$

Referencia

Invalidación de sesión en cierre de sesión / restablecimiento de contraseña

Cuando un usuario cierra sesión o restablece su contraseña, la sesión actual debe invalidarse.
Por lo tanto, captura las cookies mientras el usuario está conectado, cierra sesión y verifica si las cookies siguen siendo válidas.
Repite el proceso cambiando la contraseña en lugar de cerrar sesión.

Tiempo de expiración del token de restablecimiento

Los tokens de restablecimiento deben tener un tiempo de expiración, después del cual el token no debería ser válido para cambiar la contraseña de un usuario.

Comprobaciones adicionales

  • Usa username@burp_collab.net y analiza la devolución de llamada
  • Usuario con copia de correo electrónico = victim@mail.com%0a%0dcc:hacker@mail.com
  • Una contraseña larga (> 200) conduce a DoS
  • Agrega un segundo parámetro y valor de correo electrónico

Sigue a HackenProof para aprender más sobre errores web3

🐞 Lee tutoriales de errores web3

🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores

💬 Participa en discusiones comunitarias

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥