Writeup du Dojo #22 de YesWeHack — DOM Clobbering sur le challenge Butters Adventure v2.
Description
Le DOM Clobbering se produit quand du HTML injecté crée des éléments DOM qui masquent des fonctions ou variables JavaScript natives, perturbant la logique applicative.
Exploitation
Le payload injecte une balise <img> avec name="getElementById", ce qui fait que document.getElementById retourne l’élément HTML au lieu de la fonction native. Quand le script tente de l’appeler, une TypeError est levée — c’est le déclencheur de la solution.
Payload :
"></input><img name="getElementById">
Mécanisme :
- On échappe le champ input avec
"> - On crée un élément nommé
getElementById document.getElementByIddevient l’élément HTML- L’appel échoue → exception capturée → flag
Mitigation
- Valider la légitimité des objets/fonctions avant usage
- Utiliser des librairies comme DOMPurify
- Éviter les variables globales avec opérateurs
||