Web Security Academy

Cross-site scripting - Lab : Reflected XSS into a JavaScript string with angle brackets HTML encoded

Objectif :

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

Solution :

Tout d'abord on lance le lab et on se retrouve dans un blog avec une barre de recherche disponible.

Lorsqu'on recherche un mot, il apparaît directement sur la page comme dans l'image suivante avec le mot "rouge" :

On va donc tenter une XSS réfléchie.

En jetant un oeil au code source, on constate que le mot recherché est présent à l'intérieur d'une balise <script> dans une string :

Premièrement, on va essayer de fermer la balise <script> pour ensuite en injecter une nouvelle comme dans le payload suivant :

</script><script>alert(1)</script>

On le soumet au serveur mais rien ne se passe. En effet, si on regarde le code source, on s'aperçoit que les caractères "<" et ">" sont encodés.

On va maintenant tenter de profiter que le mot recherché est une string dans le code source. Il faut proprement fermer les guillemets de la chaîne de caractères et ensuite noter du code syntaxiquement correct pour que tout puisse bien s'exécuter.

On peut écrire par exemple : ';alert("hello")//. Ici on ferme les simples guillemets présents de base, puis on écrit la fonction alert() et on finit par ouvrir un commentaire. Avec ce payload, tout le code Javascript est bien construit et peut donc s'exécuter.

On soumet ce payload et une fenêtre alert() s'affiche avec "hello" comme message :

Le script injecté s'est bien exécuté. Le lab est désormais résolu.