22FA

Mindmap

Checklist

Méthode 1:

Changer le code 4XX en code 200 OK.

Méthode 2:

  • Intercepter la demande de 2FA avec burp

  • Forward la requĂȘte

  • Regarder si il n'y a pas de leak en rĂ©ponse

Méthode 3:

Chercher d'éventuels leaks dans les fichiers JS.

Méthode 4:

VĂ©rifier si on peu utiliser plusieurs fois le mĂȘme code.

Méthode 5:

  • 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.

Méthode 6:

Vérifier si changer de mot de passe ou d'email désactive le 2FA.

Méthode 7:

Tester s'il est possible d'utiliser du clickjacking avec des iframes pour forcer l'utilisateur à désactiver son 2FA.

Méthode 8:

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

Méthode 10:

Utiliser le code de validation de l'attaquant sur le compte d'une cible.

Méthode 11:

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.

Méthode 12:

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)

Méthode 13:

Manipulation des méthodes HTTP, URL, ParamÚtres (aléatoires ou malformés)

Méthode 14:

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.

Méthode 15:

VĂ©rifier la requĂȘte d'authentification avec puis sans 2FA permet parfois de relever quelques informations utiles.

Sans

RequĂȘte:

{"email" : "[email protected]" , "password" : " abc1234" , "mfa" : null , "code" : ""}

Réponse:

Location: https://target.com/user/dashboard

Avec

RequĂȘte:

{"email" : "[email protected]" , "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" : "[email protected]" , "password" : " abc1234" , "mfa" : null , "code" : ""}

ou en allant directement sur le lien vers le dashboard.

Méthode 16:

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

Méthode 17:

  • 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.

Méthode 18:

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.

Méthode 19:

  • 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Ă©

Méthode 20:

  • 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é.

Méthode 21:

Vérifier si il existe une API d'une ancienne version qui n'avait pas encore le 2FA.

Méthode 22:

Vérifier la durée de validité du code.

Méthode 23:

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...)

Méthode 24:

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.

Si il n'y a pas de 2FA sur le sous-domaine et que le cookie de session s'applique à des domaines qui demandent du 2FA vous devriez pouvoir ouvrir une session sans avoir besoin de passer par l'étape de 2FA.

Outils

MFASweep

MFASweep est un script powershell créé spécifiquement pour les contournements de MFA Microsoft (O365, Azure, ADFS...)

Exemple d'utilisation:

> Invoke-MFASweep -Username [email protected] -Password P@ssw0rd123!

ressource: https://github.com/dafthack/MFASweep

Mis Ă  jour

Ce contenu vous a-t-il Ă©tĂ© utile ?