Web Security Academy

Cross-site scripting - Lab : Reflected XSS with event handlers and href attributes blocked

Objectif :

  • Injecter un objet dans le site web qui lorsqu'il est cliqué, invoque la fonction alert(), tout en contournant le WAF mis en place.

Solution :

En lançant le lab, on arrive sur un blog avec plusieurs posts publiés.

Une barre de recherche est mis à disposition.

Lorsqu'on recherche un mot, il apparaît de façon directe dans le body de la réponse comme dans l'exemple qui suit avec la recherche du mot "bleu" :

On pense donc à tenter une XSS réfléchie.

Quand on essaye par exemple de rentrer le tag <img> dans la barre de recherche, il est filtré :

Un WAF est effectivement présent. Le plus dur du travail commence ici : il faut le contourner.

Pour commencer, on va commencer par examiner quelles sont les tags qui sont acceptés.

On va utiliser l'outil Burp Intruder dans Burp Suite, qui va nous permettre de tester chaque tag à partir d'une "wordlist" récupérée sur le site portswigger.net ( https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#waf-bypass-global-objects ).

On aperçoit que les tags <svg>, <a>, <text>, <animate> et quelques autres sont autorisés.

On va donc essayer d'injecter un object du type svg.

Le payload final est : <svg><a><animate attributeName=href values=javascript:alert(1) /><text x=20 y=20>Click me</text></a>.

On l'écrit sur la barre de recherche et on clique sur Search.

Ce qui donne :

Il reste plus qu'à cliquer sur notre objet et la fonction alert() s'exécute :

le lab est désormais résolu !