Prérequis

Pour comprendre l’ensemble de cet article, il vous faudra:

  • Savoir coder en HTML
  • Connaître les bases du Javascript
  • Savoir ce qu'est une XSS (voir mon article sur les XSS si besoin)
  • Qu’est ce que le DOM ?

    Le Document Object Model (DOM) est une interface de programmation normalisée par le W3C, qui permet à des scripts d’examiner et de modifier le contenu du navigateur web. On peut utiliser le DOM pour changer de couleur le texte au moment du clic d’un bouton, ou encore rendre visible ou invisible certaines parties de la page en fonction des actions utilisateur.

    Le DOM est représenté par la variable document.

    Définition

    Une XSS basée sur le DOM a lieu lorsqu’une entrée utilisateur est directement mise dans le code Javascript d’une page. Cette injection se fait donc sans passer par des balises html.

    Exploitation

    Prenons pour exemple une page qui récupère l’entrée utilisateur et la multiplie par 10.

    Voici le code la page:

    <script>
    var number = <entrée utilisateur>;
    
    var result = number * 10;
    
    console.log('The result is ' + result);
    
    </script>
    

    Ici la variable number stocke l’entrée utilisateur qui sera multipliée par 10 par la suite. Le problème de ce script c’est que si on entre autre chose qu’un nombre, par exemple bonjour, on aura l’erreur undefined dans la console. Ce qui signifie que notre entrée est interprété comme du code Javascript.

    On peut donc entrer une fonction qui sera appelée par la variable, par exemple alert(). A partir de là on peut facilement faire une redirection et voler le cookies d’autres utilisateurs. :)

    Petits conseils pour les XSS Basées sur le DOM

    Regardez le rendu de votre entrée sur le code source.

    Sur ce genre de faille, on a la possibilité de pouvoir visualiser nos actions et les répercussions qu’elles ont. Par exemple, vérifier que des guillemets ont bien été échappées.

    Regardez les erreurs que vous affiche la console de votre navigateur.

    Les erreurs permettent de comprendre bien des choses sur le code, et souvent dans ce genre de XSS les erreurs, c’est bon signe ! Ca signifie qu’on a réussi à faire éxecuter des choses au site qui n’étaient pas prévues initialement. Regarder les erreurs est donc primordial.