XSS DOM avec jQuery et événement hashchange
DOM XSS in jQuery selector sink using a hashchange event
Ce laboratoire contient une vulnérabilité XSS côté client sur la page d'accueil. Le code utilise la fonction sélecteur $() de jQuery pour cibler automatiquement un article dont le titre est passé via location.hash. L'objectif du lab est d'obtenir un exploit qui, lorsqu'un visiteur l'ouvre, appelle print() dans son navigateur.
La fonction récupère le fragment d'URL (
window.location.hash), en retire le#avecslice(1)et le décode avecdecodeURIComponent.Ce texte est ensuite concaténé directement dans un sélecteur jQuery
:contains(...). Comme il n'y a pas d'échappement, un contenu spécialement construit peut casser la syntaxe et injecter du HTML/JS via des vecteurs comme des attributsonerror.Le code déclenche l'action uniquement quand le hash change (
hashchange), donc un simple lien initial sans hash ne déclenchera rien tant que le fragment ne sera pas modifié côté client.


On profite du fait que la modification du
#déclenche l'événement. L'exploit doit donc forcer le navigateur de la victime à charger une URL avec un fragment contenant le payload.Une méthode courante consiste à utiliser un
<iframe>référençant la page cible, puis, lors duonload, à modifier dynamiquement sonsrcpour y ajouter le fragment malveillant (ce qui provoquera lehashchangeet l'exécution du sélecteur vulnérable).Le payload injecté doit provoquer l'exécution de
print()dans le contexte de la victime.
Injection basique pour provoquer une erreur d'image (test) :


Exploit via iframe — première version (alerte) :
Exploit final visant
print()(version adaptée) :

Mis à jour
Ce contenu vous a-t-il été utile ?