Stored XSS   Version imprimable de cet article

Explication de la faille XSS Stockée


par Podalirius , Ruulian

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

Définition

Une XSS stockée est possible lorsque l’entrée utilisateur est stockée en base de données et afficher sur la page. On peut prendre comme exemple une page de forum.

Explication de la faille

Prenons comme exemple une page de forum qui affiche les messages postés.

Voici la partie du code PHP qui affiche les messages :

//Connexion à la base de données//

// Récupération des informations grâce à une requête SQL $request = $database->query('SELECT user, message FROM messages ORDER BY id DESC LIMIT 0, 5');

// Affichage des messages while($data = $request->fetch()){ echo "<p>" . $data['user'] . ": " . $data['message'] . "</p>"; }

La partie intéressante dans ce code, est la fonction echo, qui affiche les messages et les pseudos sans filtre. 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 interprète les balises. 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éter 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é. À partir du moment où on peut exécuter du Javascript on peut par exemple récupérer les cookies des autres utilisateurs.

Références

Documentations publiées dans cette rubrique Documentations publiées dans cette rubrique