Web Security Academy

Cross-site scripting - Lab : Reflected XSS with some SVG markup allowed

Objectif :

  • Invoquer la fonction alert() ( en Javascript ) en injectant du script dans le site web.

Solution :

En lançant le lab, on atterrit sur un blog.

Une barre de recherche est mise à disposition.

Lorsqu'on essaye de rechercher un mot, il est directement affiché dans la page de réponse comme dans l'exemple qui suit avec le mot "voiture" :

On va donc tenter d'effectuer une XSS réfléchie.

Aussi, si on veut écrire un tag HTML sur la barre de recherche ( exemple <img> ), il est filtré et le serveur nous renvoie "Tag is not allowed".

De même que pour certains événements HTML :

Il va donc falloir contourner ce filtre.

Dans l'énoncé, il est dit que l'élément <svg> et quelques balises associées à cet objet sont autorisés. On se base sur cette affirmation pour construire notre payload.

On va maintenant essayer de savoir quels sont les événements et tags HTML qui ne sont pas filtrés. Pour cela, on va utiliser l'outil Burp Intruder du programme Burp Suite pour tester chaque événement et tag à partir de différentes "wordlists".

Parmi les mots autorisés, on trouve onbegin et le tag discard.

Notre payload sera donc : <svg><discard onbegin=alert(1)>

On le teste sur la barre de recherche et ça fonctionne : une fenêtre alert() est apparue.

Le lab est à présent résolu.

À noter que ce payload est destiné à fontionner seulement sur le navigateur Google Chrome.