Si un site Web code <
En <
Et que >
Devient >
, 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?
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.
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é.