2️2FA
Dernière mise à jour
Dernière mise à jour
Changer le code 4XX en code 200 OK.
Intercepter la demande de 2FA avec burp
Forward la requête
Regarder si il n'y a pas de leak en réponse
Chercher d'éventuels leaks dans les fichiers JS.
Vérifier si on peu utiliser plusieurs fois le même code.
Vérifier si il y a un rate limit en tentant de brute force le code.
Tenter des contournements de rate limit génériques.
Vérifier si la fonction de resend ne réinitialise pas le compteur.
Vérifier si changer de mot de passe ou d'email désactive le 2FA.
Tester s'il est possible d'utiliser du clickjacking avec des iframes pour forcer l'utilisateur à désactiver son 2FA.
Tenter d'utiliser un code "null" ou "000000"
Méthode 9:
Tenter de passer la page de 2FA (https://target.com/login => https://target.com/account)
Utiliser le header referer pour faire croire à l'application qu'on est bien passé par cette étape.
Exemple:
GET /account
Host: target.com
Referer: https://target.com/login
Utiliser le code de validation de l'attaquant sur le compte d'une cible.
Essayer de générer 2 codes de vérifications pour le même compte et regarder si celui-ci est bien changé à chaque demande.
Vérifier si la génération du code est basé sur le moment de la demande en envoyant la demande exactement au même moment. (race condition)
Manipulation des méthodes HTTP, URL, Paramètres (aléatoires ou malformés)
Se connecter sur des navigateurs différents puis vérifier si activer ou modifier les paramètres de 2FA déconnecte la première session.
Vérifier la requête d'authentification avec puis sans 2FA permet parfois de relever quelques informations utiles.
Sans
Requête:
{"email" : "abc@gmail.com" , "password" : " abc1234" , "mfa" : null , "code" : ""}
Réponse:
Location: https://target.com/user/dashboard
Avec
Requête:
{"email" : "abc@gmail.com" , "password" : " abc1234" , "mfa" : true , "code" : ""}
Réponse:
Location: https://target.com/v1/proxy/authentication/authenticate
Dans ce cas, peut-être que si on modifie la requête en envoyant ceci avec le 2FA d'activé on pourra bypass le bypass.
{"email" : "abc@gmail.com" , "password" : " abc1234" , "mfa" : null , "code" : ""}
ou en allant directement sur le lien vers le dashboard.
Dans le cas ou le 2FA serait géré avec une appli mobile tier type Google authenticator. L'application devrait vous donner des codes de backup uniques à sauvegarder.
Dans ce cas, sélectionner la connexion avec le code de backup et vérifier la bonne validation de la fonctionnalité en entrant un code aléatoire. (Avec un peu de chance aucune vérification n'est faite)
ressource: https://medium.com/@ultranoob/weird-and-simple-2fa-bypass-without-any-test-b869e09ac261
Envoyer une demande de mot de passe oublié ave 2FA.
Entrer un mauvais code de vérification.
Si un code d'erreur est généré dans l'url, essayer de changer la valeur de ce code.
Si après plusieurs demandes de vérification sont raté, il arrive que certains site demande de se connecter avec username et password après 3 code de vérification raté par exemple.
Dans ce cas voici une technique pour bypass cette méthode.
Dans burp:
Récupérez les page de login et de vérification GET et POST dans le HTTP history.
Allez dans "Projet options" puis dans Session handling rules cliquez sur "Add"
Dans scope choisissez "include all URLs"
Ensuite, dans Details > Rule Actions, cliqez su "Add".
Sélectionnez les requêtes:
GET /login
POST /login
GET /verification
Cliquez sur "OK" puis sur "Test macro", dans la réponse à la requête POST /verification, sélectionnez le dtexte de la demande de code (Veuillez entrer le code de vérification 4-digit)
Retournez dans Proxy > HTTP history.
Envoyez le POST /verification dans "Intruder".
Bruteforce le paramètre contenant le code de 0000 à 9999.
2FA implémenté en api REST (exp: /rest/login)
Exp: { "username":"user","pass":"password":"SecurityToken":"173572537"}
Vérifier si un des endpoints accepte SOAP (exp: /endpoint/Soap/version).
Si c'est le cas, écrire un message sans SecurityToken et envoyer la requête.
Exp:
Si les développeurs ont oublié d'implémenter le 2FA dans les endpoints SOAP alors vous devriez être connecté
Changer d'adresse email
Si un lien est envoyé à l'ancien email pour prévenir du changement et qu'il y a un lien permettant d'annuler le changement,
Suivre le lien (si il redirige vers la page de connexion)
Entrer ses identifiants
Si le second facteur n'est pas demandé alors la manipulation a fonctionné.
Vérifier si il existe une API d'une ancienne version qui n'avait pas encore le 2FA.
Vérifier la durée de validité du code.
Vérifier si passer par un lien tier contourne la demande de 2FA (lien de réinitialisation de mot de passe, lien dans une newsletter...)
Si utilisation de OAuth, tenter de se connecter en OAuth via un sous-domaine et vérifier si la demande de 2FA est effectuée.
MFASweep est un script powershell créé spécifiquement pour les contournements de MFA Microsoft (O365, Azure, ADFS...)
Exemple d'utilisation:
> Invoke-MFASweep -Username target@example.xyz -Password P@ssw0rd123!
ressource: https://github.com/dafthack/MFASweep