Pentest web pour débutants : méthodologie et outils
Introduction au test d'intrusion web : reconnaissance, scan, exploitation avec Burp Suite, OWASP ZAP, et les 10 vulnérabilités à tester en priorité.
Le test d'intrusion web (pentest) consiste à attaquer légalement une application pour en trouver les failles avant les hackers malveillants. Ce guide introduit la méthodologie, les outils essentiels et les 10 vulnérabilités à tester en priorité selon l'OWASP Top 10 — avec des exemples concrets.
Cadre légal : AVANT TOUT, obtenez une autorisation écrite
Tester la sécurité d'un système sans autorisation écrite est un délit pénal en France (art. 323-1 Code pénal). Assurez-vous toujours d'avoir un périmètre défini et une autorisation signée avant tout test.
Pour pratiquer légalement :
- Vos propres applications et serveurs
- Des environnements de lab dédiés (DVWA, HackTheBox, TryHackMe, VulnHub)
- Les programmes de bug bounty (HackerOne, Bugcrowd, YesWeHack) avec règles d'engagement
- Sur contrat signé avec scope défini pour du pentest professionnel
Méthodologie PTES (Penetration Testing Execution Standard)
- 1Pré-engagement — définir le scope, les règles, les livrables et l'autorisation
- 2Collecte d'informations (Reconnaissance) — passive puis active
- 3Modélisation des menaces — identifier les surfaces d'attaque
- 4Analyse de vulnérabilités — scan et identification des failles
- 5Exploitation — confirmer les vulnérabilités identifiées
- 6Post-exploitation — mesurer l'impact réel (pivoting, persistance)
- 7Rapport — documenter les findings avec preuve et recommandations
Phase 1 : Reconnaissance
Reconnaissance passive (OSINT)
Collecte d'informations sans interagir directement avec la cible.
# Informations WHOIS
whois example.com
# Sous-domaines via certificats SSL (crt.sh — https://crt.sh)
curl "https://crt.sh/?q=%.example.com&output=json" | jq '.[].name_value' | sort -u
# Google Dorks (recherches avancées)
site:example.com filetype:pdf
site:example.com inurl:admin
site:example.com "Index of /"
"@example.com" filetype:xls
# Wayback Machine — anciennes versions du site
curl "https://web.archive.org/cdx/search/cdx?url=example.com/*&output=text&fl=original&collapse=urlkey"Reconnaissance active
- Nmap — scan de ports et détection de services/versions
- Subfinder — énumération passive de sous-domaines via sources OSINT
- Amass — cartographie complète de la surface d'attaque
- WhatWeb — identification des technologies (CMS, frameworks, serveurs)
- Gobuster / ffuf — bruteforce de répertoires et fichiers cachés
# Scan de ports et services
nmap -sV -sC -p 80,443,8080,8443 example.com
# Énumération de sous-domaines
subfinder -d example.com
amass enum -d example.com
# Identification des technologies
whatweb https://example.com
# Scan de répertoires et fichiers cachés
gobuster dir -u https://example.com -w /usr/share/wordlists/dirb/common.txt -x php,html,js,json
ffuf -u https://example.com/FUZZ -w wordlist.txtBurp Suite : l'outil central du pentesteur web
Burp Suite est un proxy d'interception qui permet d'analyser et modifier toutes les requêtes HTTP entre le navigateur et le serveur.
- Proxy — intercepter et modifier les requêtes/réponses en temps réel
- Repeater — rejouer et modifier des requêtes individuelles
- Intruder — fuzzing et attaques par dictionnaire sur des paramètres
- Scanner (Pro) — scan automatique de vulnérabilités
- Decoder — encoder/décoder Base64, URL, HTML entities
- Comparer — comparer deux réponses pour détecter des différences subtiles
# Installation Burp Suite Community (gratuit)
# https://portswigger.net/burp/communitydownload
# Configuration du proxy navigateur → 127.0.0.1:8080
# Installer le certificat CA Burp dans le navigateur :
# Naviguer vers http://burpsuite → Download CA Certificate
# Alternative open-source : OWASP ZAP
docker run -t owasp/zap2docker-stable zap-baseline.py -t https://example.comVersion Community de Burp Suite est gratuite et suffisante pour débuter. L'alternative open-source OWASP ZAP est 100% gratuite et inclut un scanner automatique.
OWASP Top 10 : les vulnérabilités à tester
A01 — Broken Access Control
Vérifier si un utilisateur peut accéder aux ressources d'un autre utilisateur (IDOR) ou à des fonctions admin.
# Test IDOR (Insecure Direct Object Reference)
GET /api/users/1234/profile → votre profil
GET /api/users/1235/profile → profil d'un autre ? 403 attendu
# Test accès horizontal
GET /admin/dashboard → 403 sans droits admin ?
GET /api/v1/export-all-users → uniquement admin ?A02 — Cryptographic Failures
- Données sensibles transmises en HTTP (non-HTTPS) ?
- Cookies sans flag Secure et HttpOnly ?
- Mots de passe hashés avec MD5 ou SHA1 (non salés) ?
- Tokens JWT signés avec algorithme 'none' ou HS256 avec secret faible ?
# Tester un token JWT
# Décoder sur jwt.io
echo "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." | base64 -d
# Tester l'algorithme 'none' (vulnérabilité classique)
# Modifier le header : {"alg":"none","typ":"JWT"}
# Supprimer la signature → le serveur accepte-t-il ?A03 — Injection (SQLi, XSS, SSTI)
Pour tester les injections SQL de façon automatisée, SQLMap est la référence. Pour les payloads XSS et SSTI, consultez PayloadsAllTheThings.
# Test SQL Injection basique
# Dans un champ de recherche ou paramètre URL :
' OR '1'='1
' OR '1'='1' --
' UNION SELECT 1,2,3 --
# Avec SQLMap (automatisé, utiliser sur vos propres cibles !)
sqlmap -u "https://example.com/search?q=test" --dbs --batch
# Test XSS réfléchi
<script>alert(1)</script>
"><script>alert(document.cookie)</script>
<img src=x onerror=alert(1)>
# Test SSTI (Server-Side Template Injection)
{{7*7}} → 49 ? (Jinja2/Twig)
49 → 49 ? (Java EL)
<%= 7*7 %> → 49 ? (ERB/JSP)A07 — Authentication Failures
- Brute force possible sur /login sans rate limiting ni lockout ?
- Réinitialisation de mot de passe par token prévisible ?
- Session non invalidée après déconnexion (cookie toujours valide) ?
- Absence de MFA sur les comptes admin ?
A10 — SSRF (Server-Side Request Forgery)
# Tester si le serveur peut être utilisé pour faire des requêtes internes
# Dans un paramètre URL (webhook, fetch, preview...)
url=http://169.254.169.254/latest/meta-data/ # AWS metadata
url=http://127.0.0.1:8080/admin # Services internes
url=file:///etc/passwd # Lecture de fichiers locaux
# Détecter avec Burp Collaborator ou ngrok (receive callback)
url=https://votre-ngrok.io/callbackRédiger un rapport de pentest
Un bon rapport de pentest doit être actionnable. Pour chaque finding :
- 1Titre clair et CVSS score
- 2Description de la vulnérabilité
- 3Étapes de reproduction (step-by-step)
- 4Preuve (screenshot, requête HTTP, output outil)
- 5Impact potentiel (données exposées, élévation de privilèges...)
- 6Recommandation de remédiation avec priorité
- 7Référence (CVE, CWE, OWASP)
Pratiquez sur HackTheBox ou TryHackMe pour vous entraîner légalement sur des machines vulnérables conçues à cet effet. Des dizaines de scénarios réalistes sont disponibles, du débutant au niveau avancé.
Ressources pour aller plus loin
- PortSwigger Web Security Academy — cours gratuits + labs interactifs (meilleure ressource web pentest)
- OWASP Testing Guide — méthodologie complète et gratuite
- HackTheBox / TryHackMe — plateformes de lab légaux avec machines vulnérables
- PayloadsAllTheThings — cheatsheets de payloads par type de vulnérabilité
- jwt.io — décoder et analyser les tokens JWT dans le navigateur
- OSCP / OffSec — certification reconnue en pentest professionnel
Sources & références
- 1OWASP Top 10 — 2021 (officiel)
Les 10 catégories de vulnérabilités web les plus critiques selon OWASP
- 2OWASP Testing Guide v4.2
Méthodologie de test d'intrusion web complète et gratuite
- 3PTES — Penetration Testing Execution Standard
Standard de référence pour la conduite de tests d'intrusion professionnels
- 4PortSwigger Web Security Academy
Cours gratuits et labs interactifs sur toutes les vulnérabilités web
- 5PayloadsAllTheThings — GitHub
Collection exhaustive de payloads et techniques d'exploitation
Testez vos configurations
Xytherion Tools propose des outils gratuits pour vérifier vos DNS, auditer votre SSL, tester SPF/DKIM/DMARC et bien plus — directement depuis votre navigateur.