# Client Side Template Injection (CSTI) {{#include ../banners/hacktricks-training.md}} ## Summary Це схоже на [**Server Side Template Injection**](ssti-server-side-template-injection/index.html), але в **клієнті**. **SSTI** може дозволити вам **виконувати код** на віддаленому сервері, **CSTI** може дозволити вам **виконувати довільний JavaScript** код у браузері жертви. **Тестування** на цю вразливість дуже **схоже** на випадок **SSTI**, інтерпретатор очікує **шаблон** і виконає його. Наприклад, з корисним навантаженням, як `{{ 7-7 }}`, якщо додаток **вразливий**, ви побачите `0`, а якщо ні, ви побачите оригінал: `{{ 7-7 }}` ## AngularJS AngularJS - це широко використовуваний JavaScript фреймворк, який взаємодіє з HTML через атрибути, відомі як директиви, одна з яких - **`ng-app`**. Ця директива дозволяє AngularJS обробляти HTML вміст, що дозволяє виконувати JavaScript вирази всередині подвійних фігурних дужок. У сценаріях, де введення користувача динамічно вставляється в HTML тіло, позначене `ng-app`, можливо виконати довільний JavaScript код. Це можна досягти, використовуючи синтаксис AngularJS у введенні. Нижче наведені приклади, які демонструють, як можна виконати JavaScript код: ```javascript {{$on.constructor('alert(1)')()}} {{constructor.constructor('alert(1)')()}}
``` Ви можете знайти дуже **базовий онлайн приклад** вразливості в **AngularJS** за посиланням [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) та в [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression) > [!CAUTION] > [**Angular 1.6 видалив пісочницю**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html), тому з цієї версії корисне навантаження, таке як `{{constructor.constructor('alert(1)')()}}` або ``, повинно працювати. ## VueJS Ви можете знайти **вразливу реалізацію Vue** за посиланням [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\ Працююче корисне навантаження: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](