Burp
P.Leclercq dans Sécurité 2024-11-10 technologie
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.

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.

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

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

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

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.
![]() |
![]() |
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é.

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.

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.

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.

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 vous signalera que l’interception est 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

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.

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

La requête est envoyée à Burp.

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

Et transmettons-la au site web. Bien entendu, la réponse contiendra notre valeur 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.

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

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

Étape 3 : Essayer d’acheter un article
Accédez à la page Home pour consulter le catalogue.

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

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

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

Passez votre commande en cliquant sur le bouton Place order.

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

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

La réponse contient les variables cachées productID et, curieusement, price (en centimes).
Vérifions l’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.

Notre panier est maintenant 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.

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.

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

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

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.

Vérifions notre panier.

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.


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.

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.

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.

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

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.

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.

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.

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

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

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.

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.

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

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.

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.

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

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.

Lancez ensuite la nouvelle attaque.

Laissez-la s’exécuter.

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

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.

Victoire !!

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…

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.




