Web Security Academy

Authentication - Lab : Username enumeration via response timing

Objectif :

  • Réussir à se connecter sur un compte utilisateur qui nous appartient pas sur le site, en contournant le pare-feu mis en place.

Solution :

On lance le lab et on se trouve dans un blog.

On clique ensuite sur login pour accéder à la page de connexion :

On essaye de rentrer des informations au hasard pour observer comment le serveur nous répond. Le message d'erreur "Invalid username or password" apparaît sur la page :

On va donc essayer d'effectuer une attaque du type brute-force sur le champ username et et vérifier si pour une entrée, le serveur nous répondra différemment. On va inscrire un long mot de passe pour observer une différence dans le temps de réponse si le serveur le traite. Cela signifiera sans doute que l'on aura trouvé un username existant.

Pour contourner la protection mise en place par le serveur, basée sur l'adresse IP contre le "brute-forcing", on va inclure dans nos requêtes l'en-tête "X-Forwarded-For" pour lui indiquer une différente adresse IP à chaque itération.

On va utiliser l'outil Brup intruder du programme Burp Suite pour effectuer notre attaque en utilisant une "wordlist" présente sur cette page : https://portswigger.net/web-security/authentication/auth-lab-usernames.

Après exécution, on trouve que si on essaye de se loguer avec le nom de compte "test", le temps de réponse du serveur est largement plus élevé. On va garder ce nom de compte pour "bruteforcer" le champ password avec la liste de mots présente ici : https://portswigger.net/web-security/authentication/auth-lab-passwords.

On trouve qu'avec le mot de passe "matthew", le statut de la réponse change.

On essaye de se connecter avec les identifiants trouvés et ça marche ! On a réussi à se connecter sur un compte utilisateur. Il suffit alors de cliquer sur "My account" pour valider le lab.