# 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)')()}}
``` 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 `` 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%`](