Intruder et Repeater

Repeater

Burp Repeater est un outil qui vous permet de modifier et d'envoyer un message HTTP ou WebSocket intéressant à plusieurs reprises.

Vous pouvez utiliser Repeater à toutes sortes de fins, par exemple pour :

  • Envoyer une requête avec des valeurs de paramètres variables pour tester les vulnérabilités basées sur les entrées.

  • Envoyer une série de requêtes HTTP dans une séquence spécifique pour tester les vulnérabilités dans les processus à plusieurs étapes, ou les vulnérabilités qui reposent sur la manipulation de l'état de la connexion.

  • Vérifier manuellement les problèmes signalés par Burp Scanner.

Repeater vous permet de travailler simultanément sur plusieurs messages, chacun dans son propre onglet. Toutes les modifications apportées à un message sont enregistrées dans l'historique de l'onglet. La fonction de regroupement vous permet de gérer facilement un grand nombre d'onglets ouverts.

Envoi d'une requête à Burp Repeater

La façon la plus courante d'utiliser Burp Repeater est de lui envoyer une requête à partir d'un autre outil de Burp. Dans cet exemple, nous enverrons une requête à partir de l'onglet "Proxy > Intercept".

Target

Pour cette partie, nous allons utilisé la cible suivante:

C'est une application en mode "jeu" qui possède plusieurs niveaux de failles XSS.

Petit rappel:

XSS:

Cross-site scripting (XSS) est une faille de sécurité qui permet à un attaquant d'injecter dans un site web un code client malveillant. Ce code est exécuté par les victimes et permet aux attaquants de contourner les contrôles d'accès et d'usurper l'identité des utilisateurs. Selon le projet Open Web Application Security, XSS était la troisième cause de vulnérabilité des applications du web en 2013. Définition: DEVELOPPER.MOZILLA.ORG

Étape 1 : Envoyer la requête au Repeater

Dans le tutoriel précédent, vous avez appris à intercepter une requête. Nous allons faire de même avec le niveau 1 sur notre cible.

Dans le premier niveau, il nous est demandé d'introduire une demande dans la barre de recherche, nous allons donc intercepter cette requête:

Maintenant, nous allons faire un clique-droit sur la requête et faire "Send to Repeater" ou le raccourci clavier "CTRL-R":

Dans l'onglet "Repeater", nous voyons notre requête à gauche, une fois que nous cliquons sur le bouton "Send", nous voyons la réponse apparaître sur le volet de droite:

Étape 2: Modifier la valeur dans le Repeater

Il est donc possible de modifier notre requête à gauche pour tenter de trouver la faille et passer au niveau 2 de notre jeu XSS.

Essayons de remplacer la valeur de "query" par "</script>alert('1')</script>".

</script>alert('1')</script> est un payload XSS. La fonction alert() en javascript permet d'afficher une fenêtre "pop-up" pour afficher le message (dans notre cas le chiffre 1).

Ce payload est très utilisé et il permet d'avoir directement un visuel sur notre browser si la fonction est appelée.

Nous voyons dans la sortie que mes balises de script sont toujours intactes, ce qui signifie que notre attaque XSS pourrait fonctionner.

À partir de là, deux options s'offrent à nous:

  • Copier/coller l'url avec le payload dans le site web et le tester manuellement;

  • Utiliser Burp pour automatiser une requête du navigateur.

Pour la démonstration nous allons montrer l'input directement sur le site:

  • Dans la barre de recherche, on introduit notre payload:

  • Le résultat:

-> On obtient bien un "pop-up" qui indique que la vulnérabilité a été exploitée et que nous pouvons passer au niveau suivant.

  • La réponse de notre requête:

-> Identique à celle que nous avons dans le Repeater

Conclusion

Repeater est un outil d'altération manuelle qui vous permet de copier des requêtes provenant d'autres outils (Proxy, Target, etc.) et de les modifier avant de les envoyer à nouveau à la cible. Le Repeater permet de modifier facilement la charge utile et fournit également des liens permettant de répéter rapidement l'attaque dans le navigateur.

Voila pour notre introduction du Repeater, passons maintenant à l'intruder !

Intruder

Imaginons que nous voulions nous connecter à une application mais que nous ne connaissions pas le nom d'utilisateur ou le mot de passe. Nous pourrions copier une demande de connexion dans l'outil Repeater, puis sélectionner manuellement le nom d'utilisateur et le mot de passe et les remplacer à chaque fois par des options d'une liste.

Bien sûr, nous devrions faire cela des centaines, voire des milliers de fois. Si nous voulons automatiser un processus comme celui-ci, où nous avons un paramètre changeant et un ensemble connu de valeurs que nous voulons essayer, alors il est temps d'utiliser l'outil Intruder.

Burp Intruder est un outil permettant d'automatiser des attaques personnalisées contre des applications web. Il vous permet de configurer des attaques qui envoient la même requête HTTP à plusieurs reprises, en insérant à chaque fois des charges utiles différentes dans des positions prédéfinies.

Target

Pour cette partie, on va utiliser l'application Google Gruyere qui nous permet de nous connecter à un compte.

Étape 1 : Envoyer la requête à l'Intruder

Comme nous avons fait pour le Repeater, nous allons intercepter la requête de connexion avec le nom d'utilisateur et le mot de passe.

La fonction de connexion est le "Sign In" dans Google Gruyere:

La requête capturée sur Burp:

Maintenant, nous allons faire un clique-droit sur la requête et faire "Send to Intruder" ou le raccourci clavier "CTRL-I":

Étape 2: Modifier les valeurs dans l'onglet Positions

Dans l'onglet "Intruder", nous voyons plusieurs onglets ainsi que notre requête:

  • Tout d'abord, on remarque que des valeurs sont surlignées:

-> Nous allons donc "Clear" toutes les informations et sélectionner juste la valeur du mot de passe (derrière le "pw=").

Types d'attaque

Nous allons définir les différents types d'attaque:

Dans notre cas, nous avons le nom d'utilisateur et nous devons trouver le mot de passe, du coup il nous faut l'attaque Sniper.

Étape 3: Modifier les valeurs dans l'onglet Payload

Nous utiliserons "Simple list" comme type de charge utile, mais il existe de nombreuses autres options, comme "numbers", qui pourrait être utilisé pour trouver des identifiants ou modifier une valeur dans une chaîne de caractères plus longue.

Si vous disposez de la version Pro, vous pouvez utiliser des listes prédéfinies dans Burp. Si vous utilisez la version gratuite, vous pouvez soit charger une liste (par exemple "Rock you" pour les mots de passe, etc.), soit créer votre propre liste.

Pour cet exemple, je vais créer ma propre liste de 10 mots de passe possibles en les tapant et en cliquant sur ajouter. Comme l'ensemble de données utiles "1" a été sélectionné dans la section des ensembles de données utiles, cela s'applique à mon premier paramètre, qui est le mot de passe.

Nous voyons maintenant que le nombre de requêtes est de 10, ce qui est logique. J'ai 1 nom d'utilisateur (Test) et 10 mots de passe.

Si nous essayons toutes les combinaisons (puisque nous avons réglé notre type d'attaque sur "Sniper"), nous allons avoir 10 requêtes au total.

Ensuite, nous cliquons sur "Start Attack" dans les options "Payload Sets". Si vous avez la version gratuite, vos attaques seront limitées, donc les grandes listes prendront beaucoup de temps. Les 10 requêtes devraient toutefois être traitées très rapidement.

Une fois l'attaque lancée, nous avons une fenêtre pop-up ouverte qui énumère toutes les requêtes.

Dès que l'attaque est terminée, nous remarquons qu'un des payloads (charges utiles) à une plus grande valeur dans la longueur de la réponse:

Vu que tous les statuts des réponses sont à 200, la longueur indiquerait que nous avons trouvé la bonne valeur.

Code 200 OK:

Le code de statut de réponse HTTP 200 OK indique la réussite d'une requête. Une réponse 200 peut être mise en cache par défaut.

La signification de la réussite dépend de la méthode de requête HTTP :

  • GET : la ressource a été récupérée et est transmise dans le corps du message.

  • HEAD : l'ensemble des en-têtes est présent dans la réponse, celle-ci n'a pas de corps.

  • POST : la ressource qui décrit le résultat d'une action est transmise dans le corps du message.

  • TRACE : le corps du message contient le message de requête reçu par le serveur.

SOURCE: developer.mozilla.org

Essayons notre mot de passe sur la page de login:

Ceci termine notre chapitre sur le Repeater et l'Intruder, il y a biensûr encore des options à parcourir surtout dans la partie Intruder, on en discutera par la suite 😄