Contournement d’une limitation de débit via Race condition

Bypassing rate limits via race conditions

Le mécanisme d’authentification met en place une limitation du nombre de tentatives afin d’empêcher les attaques par force brute. Cependant, on observe que cette protection peut être contournée à cause d’une condition de course lors du traitement des requêtes simultanées.

Objectif du lab :

  • Exploiter la condition de course pour contourner la limitation.

  • Retrouver le mot de passe de l’utilisateur carlos.

  • Se connecter à l’application.

  • Accéder au panneau d’administration.

  • Supprimer l’utilisateur carlos.

Wordlist utilisée

Observation du mécanisme de connexion

Lors de l’envoi du formulaire de login, on observe qu’une requête POST est transmise avec les paramètres suivants :

  • csrf

  • username

  • password

Après plusieurs tentatives incorrectes consécutives, on constate l’apparition du message :

You have made too many incorrect login attempts. Please try again in XX seconds.

Cela confirme la présence d’un rate limit côté serveur.

Contournement par condition de course (tests manuels)

  • Création d’un groupe “race condition”.

  • Duplication de l’onglet 10 fois.

  • Envoi de toutes les requêtes en parallèle.

Test :

Observation : en envoyant en parallèle, le blocage ne se déclenche pas dans ce cas.

Brute force parallèle sur carlos avec Turbo Intruder

  • Installation / utilisation de l’extension Turbo Intruder.

  • Depuis la requête de login : Send to Turbo Intruder.

  • Choix du script race single packet attack.py.

  • Copie de la wordlist dans le clipboard, puis exécution avec ce script :

Résultat observé

En testant toutes les valeurs en parallèle, on constate qu’un mot de passe renvoie un code HTTP 302 (indicateur de succès de login).

“66666” renvoie 302 (mot de passe candidat, à valider tel quel selon la valeur exacte testée).

Mis à jour