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 !