Web Security Academy

Cross-site scripting - Lab : Reflected DOM XSS

Objectif :

  • Invoquer la fonction alert() ( en Javascript ) en exécutant du script dans site web.

Solution :

On lance le lab et on se retrouve dans un blog avec une barre de recherche disponible :

On regarde le code source et un fichier Javascript est exécuté:

On jette un oeil à ce fichier et une partie du début du code semble intéressante :

Lors de la bonne réception de la requête définie, la fonction eval() est utilisée : elle assigne à la variable searchResultsObj la réponse de la requête GET soumis vers l'URL /search-results avec comme paramètre ( nommé "search" ) le mot recherché .

La réponse de cette requête est du format JSON, comme dans l'exemple ci-dessous avec la recherche du mot "rouge" qui donne 0 résultat :

Avec cette réponse, la fonction eval() évalue cette expression : var searchResultsObj = {"searchTerm":"rouge", "results":[ ] }.

À présent, le but est de remplacer le mot rouge par notre payload qui doit bien s'intégrer syntaxiquement.

On va injecter cette chaîne : \"};alert(1);//

Avec ce payload, on contourne le fait que le caractère guillemet est filtré grâce à l'ajout de l'antislash.

Ce qui donne en argument de la fonction eval() : var searchResultsObj = {"searchTerm":"\\"};alert(1);//","results":[ ] }.

On soumet notre payload et une fenêtre pop-up s'affiche :

Le script s'est exécuté et le lab est désormais résolu !