Le blog de Philippe

Burp

P.Leclercq dans Sécurité    2024-11-10   technologie 

article header image

Introduction à Burp Suite

Introduction

Cet article dévie un peu des contenus précédents pour décrire un outil offensif utilisé pour tester les sites web: Burp.

Burp Suite est un outil graphique permettant de tester la sécurité des applications web. Développé en Java et multiplateforme, il a été créé par Dafydd Stuttard, auteur du Web Application Hacker’s Handbook, une référence en matière de tests d’applications web et de pénétration. Il est désormais commercialisé et supporté par sa société anglaise, PortSwigger Web Security.

Burp Suite est actuellement disponible en trois éditions :

  • Community — version gratuite, installée par défaut sous Kali Linux.
  • Professional — ajoute des outils d’automatisation et de tests avancés, pour un coût d’environ 449 €/an et par utilisateur.
  • Enterprise — conçue pour l’analyse continue, avec une option cloud à partir d’environ 4.000 €/an.

L’édition Community est disponible en téléchargement sur le site web de PortSwigger.

Burp est un proxy web qui s’intercale entre votre navigateur et le site web cible. Par défaut, il écoute sur le port 8080 de l’interface de bouclage (loopback). Pour l’utiliser, vous devez donc configurer votre navigateur pour utiliser un proxy sur localhost:8080.

Burp comme proxy

Situé entre votre navigateur et le site web cible, Burp vous permet d’intercepter, de visualiser et de modifier les requêtes et réponses web.

Surveillance du trafic web

La description suivante est basée sur l’édition Community gratuite.

Démarrage de Burp Suite

Dans le menu, démarrez Burp Suite.

Le premier écran s’ouvre et vous avertit que l’édition Community ne peut pas stocker les paramètres de votre projet sur le disque.

Ouverture de Burp

Cliquez sur Next. Burp demande alors un fichier de configuration.

Burp - configuration

Cliquez sur Start Burp. L’écran Dashboard s’ouvre.

Burp - Tableau de bord

Cet écran est principalement utile pour l’édition Pro. Cliquez sur Proxy->Intercept dans le menu supérieur.

Burp - Interception désactivée

Cet écran vous informe que la fonction Intercept est actuellement désactivée, ce qui signifie que Burp laisserait le trafic web circuler de manière transparente sans interagir avec lui.
Cliquez sur Open browser. Burp Suite inclut un navigateur Chrome/Chromium préconfiguré pour utiliser Burp comme proxy. Cela évite d’avoir à modifier les paramètres de votre navigateur habituel. Le navigateur s’ouvre dans une fenêtre séparée, avec une page Portswigger préconfigurée.

Burp - Interception désactivée Burp - Navigateur interne

Capture du trafic

Cliquez sur HTTP history. Si vous saisissez une URL dans la barre d’adresse du navigateur, Burp affichera désormais l’ensemble du trafic entre le navigateur que vous venez d’ouvrir et les URL demandées dans cette fenêtre.
Le panneau supérieur affichera un résumé de tous les échanges, tandis que le panneau inférieur affichera le détail des requêtes et réponses HTTP relatives à l’échange sélectionné.

Burp - historique HTTP

Les données capturées pour la requête contiennent le type de requête HTTP (GET), le chemin demandé (/), les en-têtes complets (Host, Cache-Control, User-Agent, types de documents acceptés…), les cookies et les valeurs des variables (pour les requêtes POST). Les données de la réponse contiennent le code de réponse HTTP (200), les en-têtes, les cookies et le code complet de la page.

Journalisation du trafic

Par défaut, Burp enregistre le trafic en mémoire. Vous pouvez modifier les paramètres du projet pour l’enregistrer dans un fichier journal.
Cliquez sur l’icône engrenage - Settings en haut à droite de la fenêtre Burp, puis, dans la colonne de gauche, cliquez sur Project -> Logging.

Burp - Journalisation

Cochez la case correspondant à la source de journalisation souhaitée (généralement All tools). Vous serez alors invité à saisir le répertoire et le nom du fichier journal (après votre premier clic). Cliquez à nouveau sur les autres options à inclure dans la journalisation.

Burp - Fichier de journalisation

Fermez la fenêtre Settings. Le trafic ultérieur sera enregistré dans le fichier journal jusqu’à ce que vous fermiez Burp ou que vous rétablissiez les paramètres en décochant les cases Requests et Responses dans la page Settings->Project->Logging.
Voici un extrait d’un fichier journal :

======================================================
7:03:15/PM  http://localhost:4321  [127.0.0.1]
======================================================
GET / HTTP/1.1
Host: localhost:4321
sec-ch-ua: "Chromium";v="119", "Not?A_Brand";v="24"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Linux"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.159 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Connection: close


======================================================
HTTP/1.0 200 OK
Server: BaseHTTP/0.6 Python/3.8.10
Date: Tue, 01 Oct 2024 17:03:15 GMT
Content-Type: text/html


            <html>
                <body>
                    <form action="/" method="post">
                        <label for="username"> Enter your name: </label>
                        <input type="text" id="username" name="username" required><br><br>
                        <input type="submit" value="Submit">
                    </form>
                </body>
            </html>

======================================================

Interception du trafic

Le principal intérêt de Burp est qu’il peut intercepter le trafic provenant du navigateur et vous permettre de le modifier avant de le transmettre à sa cible.

Commençons par exécuter une transaction sur un site web basique qui demande simplement votre nom et vous accueille par ce nom.

Navigateur - entrez votre nom Navigateur - bonjour

Nous allons maintenant modifier les données envoyées par la requête POST.

Pour activer l’interception, cliquez sur Proxy->Intercept, puis sur le bouton Intercept is off.

Burp - activer interception

Burp vous signalera que l’interception est activée.

Burp - interception activée

À partir de maintenant, Burp mettra en mémoire tampon chaque requête envoyée par le navigateur, vous permettra d’examiner et de modifier son contenu, puis attendra que vous appuyiez sur le bouton Forward pour la transmettre.
Commençons avec un nouveau navigateur. Saisissez l’URL cible dans la barre d’adresse et appuyez sur . La requête est envoyée à Burp et apparaît dans l’onglet Intercepter.

Navigateur - URL Navigateur - requête

Cliquez sur Forward dans la fenêtre Burp pour transférer la requête au site web.

La requête est envoyée au site web et la réponse est reçue par le navigateur. Cliquez sur l’onglet HTTP History pour visualiser le trafic.

Navigateur - réponse Burp - réponse

Saisissez un nom dans la zone de texte du formulaire et cliquez sur Submit.

Navigateur - envoi

La requête est envoyée à Burp.

Burp - envoi

Modifions maintenant la valeur de la variable de formulaire dans l’onglet Intercepter.

Burp - modification envoi

Et transmettons-la au site web. Bien entendu, la réponse contiendra notre valeur modifiée.

Navigateur - réponse modifiée Burp - réponse modifiée

Cet exemple est simple et peut paraître un peu bête, mais la puissance de Burp réside dans la possibilité de modifier n’importe quelle partie de la réponse, même les données non modifiables directement depuis la page affichée, comme les en-têtes, les cookies, les variables cachées…

Modification des requêtes avec les outils Burp

Dans les chapitres suivants, nous utiliserons Burp pour modifier les requêtes afin de tester la vulnérabilité des applications web. Nous utiliserons les exemples d’applications gratuits de la Portswigger Web Academy. Il s’agit d’applications web vulnérables mises à disposition pour apprendre les tests de sécurité des applications.

Vous pouvez vous inscrire gratuitement sur le site de la Web Academy et suivre des centaines de leçons et d’exercices pratiques pour apprendre les tests de sécurité des applications web depuis l’onglet Academy avec Burp.

Danger

N’ESSAYEZ PAS LES ACTIONS SUIVANTES SUR DES SITES WEB RÉELS sans l’autorisation écrite du propriétaire.** Dans la plupart des pays, toute tentative d’attaque contre un site web est un délit et fait l’objet de poursuites judiciaires.

Utilisation de Repeater

Étape 1 : Accéder à l’application

L’exemple suivant est disponible sur le site de l’académie Portswigger, dans le menu : Web Security Academy -> Business logic vulnerabilities -> Examples -> Lab, ou via le lien : https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-excessive-trust-in-client-side-controls.

L’application simule une boutique en ligne où vous disposez d’un crédit de 100 $. Nous allons essayer de manipuler les transactions pour acheter un article plus cher.

Ouvrons la page de l’exercice.

Page de départ de l'exercice

Étape 2 : Connexion

Cliquez sur My account pour vous connecter à la boutique avec les identifiants fournis dans les instructions de l’exercice (wiener:peter).

Connexion

Une fois que vous êtes connecté, le site affiche votre nom d’utilisateur et votre crédit (100 $).

Mon compte

Étape 3 : Essayer d’acheter un article

Accédez à la page Home pour consulter le catalogue.

Accueil de la boutique

Essayez maintenant d’acheter cette veste en cuir trop chère. Cliquez sur View details.

Détails de l'article

Faites défiler la page vers le bas et cliquez sur Add to cart.

Mettre dans le panier

L’article est maintenant dans votre panier. Procédez au paiement en cliquant sur l’icône panier.

Panier

Passez votre commande en cliquant sur le bouton Place order.

Passer commande

Bien sûr, votre achat est refusé car votre crédit est insuffisant.

Commande refusée

Étape 4 : Analyse des actions d’achat

Vérifions maintenant l’historique HTTP de la transaction, et plus particulièrement l’action GET pour l’article acheté.

Burp - action GET

La réponse contient les variables cachées productID et, curieusement, price (en centimes).

Vérifions l’action POST.

Burp - action POST

Les variables productID, quantity et price sont renvoyées au serveur. Supposons qu’elles servent à effectuer la transaction et, entre autres, à comparer le prix au crédit. Si cette hypothèse est correcte, modifier le prix avant d’envoyer le POST devrait nous permettre de tricher. Nous allons essayer, mais vidons d’abord notre panier en supprimant l’article qu’il contient. Cliquez sur le bouton Remove.

Vider le panier

Notre panier est maintenant vide.

Panier vide

Étape 5 : Modifier la requête

Pour effectuer à nouveau l’achat et modifier la valeur du prix dans l’action POST, nous pourrions répéter l’opération : accéder au catalogue, sélectionner la veste en cuir, la mettre dans le panier, activer l’interception, cliquer sur Place order, modifier la valeur price et la transmettre au serveur.

Nous allons plutôt utiliser un raccourci et utiliser l’action POST déjà enregistrée pour la copier et la modifier. Pour ce faire, nous utiliserons le composant de la suite Burp appelé Repeater. Burp Repeater est un outil qui vous permet de modifier et d’envoyer un message HTTP (ou WebSocket) pertinent.

Tout d’abord, copiez le message à renvoyer dans l’onglet Repeater. Dans l’historique HTTP, cliquez sur le message POST, puis faites un clic droit et sélectionnez Send to repeater.

Burp - envoyer à Repeater

Cliquez ensuite sur l’onglet Repeater dans le menu supérieur. La fenêtre Repeater apparaît, avec le message copié dans le volet de gauche.

Burp - Repeater

Modifions la valeur de la variable price à 1 et envoyons-la au serveur en cliquant sur le bouton Send.

Repeater - prix modifié

Dans le volet droit de Repeater, nous pouvons voir la réponse du serveur.

Repeater - réponse

Notre message n’a généré aucune erreur.
Vérifions maintenant la fenêtre du navigateur. Bien sûr, elle n’a pas changé, car la réponse ne contenait aucune donnée affichable.

Navigateur après envoi

Vérifions notre panier.

Panier rempli

Victoire ! La veste a été ajoutée à notre panier au prix de 1 centime grâce à notre POST modifié.
Pour être sûr, finalisons notre transaction.

Passer commande

Commande acceptée

Ceci illustre l’utilisation de l’outil Repeater pour modifier et renvoyer un message.

Remarque

Cet exercice montre qu’une application web ne doit jamais s’appuyer sur les données envoyées par le client, car elles peuvent être modifiées. Toutes les validations doivent être effectuées côté serveur.

Utilisation d’Intruder

L’exemple suivant est disponible sur le site de l’académie Portswigger via le lien : https://portswigger.net/web-security/authentication/password-based/lab-username-enumeration-via-different-responses.

Burp Intruder est un outil permettant d’envoyer plusieurs fois la même requête HTTP, en insérant à chaque fois des charges utiles différentes à des emplacements prédéfinis. Dans cet exemple, nous l’utiliserons pour forcer le nom d’utilisateur et le mot de passe afin d’accéder à une application web.

Étape 1 : Accéder à l’application

Cliquez sur le lien ci-dessus, puis sur Access the lab.

Étape 2 : Tenter de se connecter

La page d’accueil de l’application s’ouvre. Cliquez sur My account pour essayer de vous connecter.

Accueil

La page de connexion s’ouvre. Comme nous ne disposons pas d’identifiants valides, nous allons essayer avec un nom d’utilisateur et un mot de passe aléatoires et observer le contenu de la requête POST et de la réponse.

Complétez les champs Username et Password, puis cliquez sur Log in.

Tentative de connexion

Comme prévu, l’application renvoie une erreur, mais avec une information précieuse : le nom d’utilisateur est erroné. Il est donc probable que, si nous retrouvons le nom d’utilisateur, l’application renvoie une erreur du type Mot de passe invalide.

Nom d'utilisateur erroné

Étape 3 : Définir la position de la charge utile

Nous allons maintenant essayer d’envoyer la requête de connexion POST avec des noms d’utilisateur classiques, c’est-à-dire d’effectuer une attaque “force brute” sur le champ du nom d’utilisateur, en utilisant Intruder.

Dans l’historique HTTP de Burp, accédez à la requête de connexion POST, double-cliquez sur la valeur de la variable username sur la dernière ligne, faites un clic droit sur la requête et sélectionnez Send to Intruder.

Burp - envoyer à Intruder

Accédez à l’onglet Intruder. La requête de connexion POST a été copiée, la valeur sélectionnée étant entourée de paragraphes (§). Ceci indique la position à laquelle Intruder insérera une valeur spécifique pour la charge utile.

Intruder

Vérifiez que Attack type en haut de l’écran est défini sur Sniper. Une attaque “sniper” insère un ensemble unique de charges utiles, une à la fois, à un ou plusieurs emplacements de la requête.

Étape 4 : Ajouter la charge utile

Dans Intruder, cliquez sur l’onglet Payloads. Cette fenêtre vous permet de saisir une liste de valeurs pour la charge utile ou de spécifier un fichier contenant cette liste.

Intruder - charger les valeurs de la charge utile

Dans notre cas, nous allons charger un fichier contenant une liste de noms d’utilisateur courants. Cliquez sur le bouton Load et sélectionnez le nom du fichier dans la boîte de dialogue.

Intruder - dialogue charger fichier

Notez que les valeurs Payload count et Request count sont mises à jour en fonction du nombre d’entrées dans la liste.

Intruder - liste et nombre d'entrées

Étape 5 : Lancer l’attaque

Cliquez sur le bouton Start attack. Une fenêtre contextuelle s’affiche, vous avertissant que l’édition Community ne prend en charge qu’un nombre limité de fonctionnalités d’Intruder et limite la fréquence d’envoi des requêtes. Plus le nombre de requêtes est élevé, plus le délai entre deux requêtes est long. Ignorez l’avertissement.

Intruder - remarque

Une fenêtre d’attaque s’ouvre, vous permettant d’afficher un résumé de chaque requête envoyée par Intruder, avec la valeur de la charge utile.

Intruder - attaque

Une fois l’attaque terminée, triez les réponses par longueur en cliquant sur le titre de la colonne Length. Vous constaterez qu’une des réponses est différente.

Intruder - liste des réponses

Cliquez sur la ligne correspondante et examinez le contenu de la requête.

Intruder - requête correspondant à la réponse intéressante

La réponse différente correspond à la requête contenant le nom d’utilisateur adserver. Examinez maintenant la réponse en cliquant sur l’onglet Response.

Intruder - réponse intéressante

Le message d’erreur a changé et indique Incorrect password. Cela signifie que le nom d’utilisateur proposé est correct.

Essayons maintenant de trouver le mot de passe. Nous utiliserons les mêmes outils, avec une liste de données utiles différente correspondant aux mots de passe fréquemment utilisés. Fermez d’abord la fenêtre d’attaque en cours. Intruder vous demandera confirmation. Cliquez sur Discard.

Intruder - fin de l'attaque

Dans la fenêtre principale de Burp, revenez au message de connexion POST d’origine, sélectionnez la variable password et renvoyez-la à Intruder.

Burp - envoyer à Intruder pour le mot de passe

Dans Intruder, remplacez le nom d’utilisateur par le bon, cliquez sur l’onglet Payloads et chargez le fichier contenant la liste des mots de passe.

Intruder - chargement des mots de passe

Lancez ensuite la nouvelle attaque.

Intruder - lancement de la deuxième attaque

Laissez-la s’exécuter.

Intruder - deuxième attaque

Une fois l’attaque terminée, triez les réponses par longueur et sélectionnez celle qui est unique.

Intruder - liste des réponses

Aucun message d’erreur n’est affiché ; nous pouvons donc supposer qu’il s’agit du bon mot de passe, dans notre cas shadow.

Confirmons dans le navigateur en effectuant une connexion interactive avec les identifiants trouvés.

Test des identifiants

Victoire !!

Succès

Autres outils

Decoder

Comme son nom l’indique, Decoder est un encodeur/décodeur/calculateur de hachage. Il encode/décode depuis/vers du texte brut, des URL codées, du HTML, du base64, de l’hexadécimal, de l’octal, du binaire, du gzip, et calcule des hachages avec de nombreux algorithmes, notamment MD4, MD5, SHA-1, SHA-256…

Burp - Decoder

Comparer

Comparer est un utilitaire de comparaison visuelle. Vous pouvez y envoyer des données provenant d’autres outils Burp, les coller ou les charger depuis des fichiers.

Dans l’exemple suivant, nous avons envoyé les réponses à notre attaque par nom d’utilisateur décrite ci-dessus et les avons comparées dans les deux fenêtres de Comparer.

Burp - envoyer à Comparer

Burp - envoyer 2ème page à Comparer

Burp - onglet Comparer

Burp - comparaison

Accueil   Début