# Client Side Template Injection (CSTI) {{#include ../banners/hacktricks-training.md}} ## Özet Bu, **Sunucu Tarafı Şablon Enjeksiyonu** (SSTI) gibidir, ancak **istemci** tarafındadır. **SSTI**, uzaktaki sunucuda **kod çalıştırmanıza** izin verebilir, **CSTI** ise kurbanın tarayıcısında **rastgele JavaScript** kodu çalıştırmanıza izin verebilir. Bu zafiyeti **test etmek**, **SSTI** durumunda olduğu gibi çok **benzer**dir, yorumlayıcı **bir şablon** bekler ve bunu çalıştırır. Örneğin, `{{ 7-7 }}` gibi bir yük ile, uygulama **zayıfsa** `0` göreceksiniz, değilse orijinalini göreceksiniz: `{{ 7-7 }}` ## AngularJS AngularJS, HTML ile direktifler olarak bilinen öznitelikler aracılığıyla etkileşimde bulunan yaygın olarak kullanılan bir JavaScript framework'üdür, bunlardan biri **`ng-app`**'dir. Bu direktif, AngularJS'nin HTML içeriğini işlemesine olanak tanır ve çift süslü parantezler içinde JavaScript ifadelerinin çalıştırılmasını sağlar. Kullanıcı girdisinin `ng-app` ile etiketlenmiş HTML gövdesine dinamik olarak eklendiği senaryolarda, rastgele JavaScript kodu çalıştırmak mümkündür. Bu, girdinin içinde AngularJS sözdizimini kullanarak gerçekleştirilebilir. Aşağıda JavaScript kodunun nasıl çalıştırılabileceğini gösteren örnekler bulunmaktadır: ```javascript {{$on.constructor('alert(1)')()}} {{constructor.constructor('alert(1)')()}}
``` Bir **temel çevrimiçi örneği** **AngularJS**'deki zafiyetin [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) ve [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression) adresinde bulabilirsiniz. > [!CAUTION] > [**Angular 1.6 kum havuzunu kaldırdı**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) bu nedenle bu versiyondan itibaren `{{constructor.constructor('alert(1)')()}}` veya `` gibi bir yük çalışmalıdır. ## VueJS **Zayıf bir Vue** uygulamasını [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh) adresinde bulabilirsiniz.\ Çalışan yük: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](