Prérequis

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

  • Savoir coder en HTML
  • Connaître les bases du PHP et du Javascript
  • Savoir ce qu'est une XSS (voir mon article sur les XSS si besoin)
  • Définition

    Une XSS volatile (Reflected XSS) est un type de XSS où l’entrée utilisateur est dans un paramètre de l’url et que ce paramètre est affiché sur la page.

    Explication de la faille

    Prenons comme exemple une page d’un site qui affiche les résultats de la recherche de l’utilisateur.
    Voici le code PHP de la page vulnerable:

    <form action method="get">
    <input type="text" name="search" id="search">
    <input type="submit" value="Search">
    </form>
    
    <?php
    if(isset($_GET['search'])) {
        echo 'Résultats pour la recherche"' . $_GET['search'] . '"';
    }
    ?>
    

    La partie intéressante dans ce code, est la fonction echo, qui affiche la recherche sans filtres. Ceci nous permet donc d’entrer des balises qui vont par la suite être interprétées.

    Par exemple si on tente d’injecter <u>bonjour</u>, le rendu sur la page sera:
    bonjour
    La fonction echo a interprété les balises <u>. Vous vous sûrement demandez en quoi c’est dangereux qu’un utilisateur envoie un message souligné, et bien c’est parce que si echo interprète les balises <u>, il va aussi interpréter les balises <script>.

    Exploitation

    Maintenant qu’on a la capacité d’interprété nos balises, on peut passer à l’exploitation. En entrant <script>alert()</script>, au moment du chargement de la page le script va être exécuté, et l’alert va être affiché. A partir du moment où on peut exécuter du Javascript on peut par exemple récupérer les cookies des autres utilisateurs.
    Je vous laisse voir ma Cheat Sheet XSS pour voir comment récupérer ces fameux cookies. :)

    XSS Cheat Sheet