web-dev-qa-db-fra.com

Scriptage intersite lorsque les signes supérieur et inférieur à sont échappés?

Si un site Web code < En &lt; Et que > Devient &gt;, Est-il toujours possible d'effectuer des scripts intersites? Dans quoi mettriez-vous les balises de script?

Par exemple, sur l'un de mes sites, je peux utiliser <script>alert(1)</script> normalement, mais comment faire la même chose lors de l'encodage?

19
Bob John

Oh oui ça l'est!

Considérez ce HTML:

<a href="{{str}}">

et considérez une entrée comme:

" onmouseover="alert('GOTCHA')"

Vous obtenez l'image.

Si votre javascript est injecté dans une balise, vous n'avez pas besoin des crochets angulaires. J'ai emprunté cela à ce post S/O similaire: https://stackoverflow.com/questions/5696244/xss-is-escaping-and-sufficient

Si vous êtes intéressé par l'évasion du filtre comme celui-ci, consultez:

https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

Cela a tous les trucs communs.

En ce qui concerne la sécurité: encodez tout! On ne sait jamais à quel point l'attaquant est intelligent.

20
baordog

En ce qui concerne les scripts intersites, la chose la plus importante est le contexte. Le contexte dans lequel il est reflété ou stocké, je vais le démontrer avec un exemple réel de mon expérience. Une fois, lors de la chasse aux bogues, j'ai remarqué qu'un paramètre d'URL se reflétait dans une variable:

http://www.example.com/blah.php?id=test&var=101011

La valeur de var était reflétée dans la source de la page lors du chargement de la page, à peu près au format suivant, à l'intérieur d'un bloc de script:

var a = "101011";

et injecter autant qu'un "<" détournerait la demande vers le WAF qui lancerait une page d'erreur, donc ma charge utile réelle pour y faire face était:

Prompt(1)";eval(a);

qui a contourné le WAF et est devenu un cas réussi de XSS réfléchi. Ainsi, la charge utile doit être modifiée en fonction du contexte et vous n'aurez peut-être pas besoin des balises. J'espère que cela a aidé.

3
racec0ndition