# XS-Suche/XS-Leaks
Verwenden Sie [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=xs-search), um mühelos **Workflows zu erstellen und zu automatisieren**, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.\ Heute Zugriff erhalten: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=xs-search" %}
Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: * Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen 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 einreichen.
## Grundlegende Informationen XS-Suche ist eine Methode, die zur **Extraktion von Informationen über verschiedene Ursprünge** durch Ausnutzen von **Seitenkanal-Schwachstellen** verwendet wird. Zu den Schlüsselkomponenten dieses Angriffs gehören: * **Verwundbare Website**: Die Zielwebsite, von der die Informationen extrahiert werden sollen. * **Web des Angreifers**: Die bösartige Website, die vom Angreifer erstellt wurde und die der Opfer besucht, um den Exploit zu hosten. * **Einbindungsmethode**: Die Technik, die verwendet wird, um die verwundbare Website in die Website des Angreifers zu integrieren (z. B. window.open, iframe, fetch, HTML-Tag mit href usw.). * **Leak-Technik**: Techniken, die verwendet werden, um Unterschiede im Zustand der verwundbaren Website anhand der durch die Einbindungsmethode gesammelten Informationen zu erkennen. * **Zustände**: Die beiden potenziellen Zustände der verwundbaren Website, die der Angreifer zu unterscheiden versucht. * **Erkennbare Unterschiede**: Beobachtbare Variationen, auf die der Angreifer angewiesen ist, um den Zustand der verwundbaren Website zu erschließen. ### Erkennbare Unterschiede Es können mehrere Aspekte analysiert werden, um die Zustände der verwundbaren Website zu unterscheiden: * **Statuscode**: Unterscheidung zwischen **verschiedenen HTTP-Antwortstatuscodes** über Ursprungsgrenzen hinweg, wie Serverfehler, Clientfehler oder Authentifizierungsfehler. * **API-Nutzung**: Identifizierung der **Nutzung von Web-APIs** auf verschiedenen Seiten, um festzustellen, ob eine Seite über Ursprungsgrenzen hinweg eine bestimmte JavaScript-Web-API verwendet. * **Weiterleitungen**: Erkennen von Navigationen zu verschiedenen Seiten, nicht nur HTTP-Weiterleitungen, sondern auch solche, die durch JavaScript oder HTML ausgelöst werden. * **Seiteninhalt**: Beobachtung von **Variationen im HTTP-Antwortkörper** oder in Seiten-Subressourcen, wie der **Anzahl eingebetteter Frames** oder Größenunterschieden bei Bildern. * **HTTP-Header**: Feststellen der Anwesenheit oder möglicherweise des Werts eines **spezifischen HTTP-Antwortheaders**, einschließlich Header wie X-Frame-Options, Content-Disposition und Cross-Origin-Resource-Policy. * **Timing**: Feststellen von konsistenten Zeitunterschieden zwischen den beiden Zuständen. ### Einbindungsmethoden * **HTML-Elemente**: HTML bietet verschiedene Elemente für die **Einbindung von Ressourcen über Ursprungsgrenzen hinweg**, wie Stylesheets, Bilder oder Skripte, die den Browser dazu zwingen, eine nicht-HTML-Ressource anzufordern. Eine Zusammenstellung potenzieller HTML-Elemente für diesen Zweck finden Sie unter [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks). * **Frames**: Elemente wie **iframe**, **object** und **embed** können HTML-Ressourcen direkt in die Seite des Angreifers einbetten. Wenn die Seite **keinen Framing-Schutz aufweist**, kann JavaScript über die contentWindow-Eigenschaft auf das Fensterobjekt der gerahmten Ressource zugreifen. * **Pop-ups**: Die Methode **`window.open`** öffnet eine Ressource in einem neuen Tab oder Fenster und bietet einen **Fenstergriff**, über den JavaScript mit Methoden und Eigenschaften gemäß der SOP interagieren kann. Pop-ups, die häufig bei der Einmalanmeldung verwendet werden, umgehen die Einschränkungen von Framing und Cookies einer Zielressource. Moderne Browser beschränken jedoch die Erstellung von Pop-ups auf bestimmte Benutzeraktionen. * **JavaScript-Anfragen**: JavaScript ermöglicht direkte Anfragen an Zielressourcen mithilfe von **XMLHttpRequests** oder der **Fetch-API**. Diese Methoden bieten eine präzise Kontrolle über die Anfrage, z. B. die Möglichkeit, HTTP-Weiterleitungen zu verfolgen. ### Leak-Techniken * **Ereignisbehandler**: Eine klassische Leak-Technik in XS-Leaks, bei der Ereignisbehandler wie **onload** und **onerror** Einblicke in den Erfolg oder Misserfolg des Ressourcenladens bieten. * **Fehlermeldungen**: JavaScript-Ausnahmen oder spezielle Fehlerseiten können Informationen über Lecks bereitstellen, entweder direkt aus der Fehlermeldung oder durch Unterscheidung zwischen deren Vorhandensein und Abwesenheit. * **Globale Grenzen**: Physische Einschränkungen eines Browsers, wie Speicherkapazität oder andere durchgesetzte Browsergrenzen, können signalisieren, wenn eine Schwelle erreicht ist, und als Leak-Technik dienen. * **Globaler Zustand**: Erkennbare Interaktionen mit den **globalen Zuständen von Browsern** (z. B. das History-Interface) können ausgenutzt werden. Beispielsweise kann die **Anzahl der Einträge** im Browserverlauf Hinweise auf Seiten über Ursprungsgrenzen hinweg bieten. * **Performance-API**: Diese API liefert **Leistungsdaten der aktuellen Seite**, einschließlich Netzwerkzeitmessung für das Dokument und geladene Ressourcen, was Rückschlüsse auf angeforderte Ressourcen ermöglicht. * **Lesbare Attribute**: Einige HTML-Attribute sind **über Ursprungsgrenzen hinweg lesbar** und können als Leak-Technik verwendet werden. Beispielsweise ermöglicht die Eigenschaft `window.frame.length` JavaScript, die in einer Webseite über Ursprungsgrenzen hinweg enthaltenen Frames zu zählen. ## XSinator-Tool & Paper XSinator ist ein automatisches Tool, um **Browser gegen mehrere bekannte XS-Leaks** zu überprüfen, wie in seinem Paper erklärt: [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf) Sie können auf das Tool unter [**https://xsinator.com/**](https://xsinator.com/) zugreifen {% hint style="warning" %} **Ausgeschlossene XS-Leaks**: Wir mussten XS-Leaks ausschließen, die auf **Service-Workern** beruhen, da sie mit anderen Lecks in XSinator interferieren würden. Darüber hinaus haben wir uns entschieden, XS-Leaks auszuschließen, die auf Fehlkonfigurationen und Fehlern in einer bestimmten Webanwendung beruhen. Zum Beispiel Cross-Origin Resource Sharing (CORS)-Fehlkonfigurationen, postMessage-Lecks oder Cross-Site Scripting. Darüber hinaus haben wir zeitbasierte XS-Leaks ausgeschlossen, da sie oft langsam, ungenau und unzuverlässig sind. {% endhint %}
\ Verwenden Sie [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=xs-search), um mühelos **Workflows zu erstellen und zu automatisieren**, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.\ Heute Zugriff erhalten: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=xs-search" %} ## **Techniken basierend auf Zeitmessung** Einige der folgenden Techniken verwenden Timing als Teil des Prozesses, um Unterschiede in den möglichen Zuständen der Webseiten zu erkennen. Es gibt verschiedene Möglichkeiten, die Zeit in einem Webbrowser zu messen. **Uhren**: Die [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) API ermöglicht es Entwicklern, hochauflösende Zeitmessungen zu erhalten.\ Es gibt eine beträchtliche Anzahl von APIs, die Angreifer missbrauchen können, um implizite Uhren zu erstellen: [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), [Message Channel API](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel), [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame), [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), CSS-Animationen und andere.\ Für weitere Informationen: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/). ## Techniken für Ereignisbehandler ### Onload/Onerror * **Einbindungsmethoden**: Frames, HTML-Elemente * **Erkennbarer Unterschied**: Statuscode * **Weitere Informationen**: [https://www.usenix.org/conference/usenixsecurity19/presentation/staicu](https://www.usenix.org/conference/usenixsecurity19/presentation/staicu), [https://xsleaks.dev/docs/attacks/error-events/](https://xsleaks.dev/docs/attacks/error-events/) * **Zusammenfassung**: Wenn beim Laden einer Ressource die onerror/onload-Ereignisse ausgelöst werden, wenn die Ressource erfolgreich/nicht erfolgreich geladen wird, ist es möglich, den Statuscode herauszufinden. * **Codebeispiel**: [https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)](https://xsinator.com/testing.html#Event%20Handler%20Leak%20\(Script\)) {% content-ref url="cookie-bomb-+-onerror-xs-leak.md" %} [cookie-bomb-+-onerror-xs-leak.md](cookie-bomb-+-onerror-xs-leak.md) {% endcontent-ref %} Das Codebeispiel versucht, **Skriptobjekte aus JS zu laden**, aber auch **andere Tags** wie Objekte, Stylesheets, Bilder, Audios könnten verwendet werden. Außerdem ist es auch möglich, das **Tag direkt einzufügen** und die `onload`- und `onerror`-Ereignisse innerhalb des Tags zu deklarieren (anstatt es von JS aus einzufügen). Es gibt auch eine skriptlose Version dieses Angriffs: ```html ``` In diesem Fall wird, wenn `example.com/404` nicht gefunden wird, `attacker.com/?error` geladen. ### Onload Timing * **Einschlussmethoden**: HTML-Elemente * **Erkennbarer Unterschied**: Timing (generell aufgrund von Seiteninhalt, Statuscode) * **Weitere Informationen**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) * **Zusammenfassung:** Die [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** kann verwendet werden, um zu messen, wie lange es dauert, eine Anfrage durchzuführen. Es könnten jedoch auch andere Uhren verwendet werden, wie z.B. die [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming), die Aufgaben identifizieren kann, die länger als 50 ms laufen. * **Codebeispiel**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) ein weiteres Beispiel in: {% content-ref url="performance.now-example.md" %} [performance.now-example.md](performance.now-example.md) {% endcontent-ref %} #### Onload Timing + Erzwungene schwere Aufgabe Diese Technik ist ähnlich wie die vorherige, aber der **Angreifer** wird auch **eine Aktion erzwingen**, die eine **relevante Menge Zeit** in Anspruch nimmt, wenn die **Antwort positiv oder negativ** ist, und diese Zeit messen. {% content-ref url="performance.now-+-force-heavy-task.md" %} [performance.now-+-force-heavy-task.md](performance.now-+-force-heavy-task.md) {% endcontent-ref %} ### Unload/Beforeunload Timing * **Einschlussmethoden**: Frames * **Erkennbarer Unterschied**: Timing (generell aufgrund von Seiteninhalt, Statuscode) * **Weitere Informationen**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) * **Zusammenfassung:** Die [SharedArrayBuffer-Uhr](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#sharedarraybuffer-and-web-workers) kann verwendet werden, um zu messen, wie lange es dauert, eine Anfrage durchzuführen. Es könnten auch andere Uhren verwendet werden. * **Codebeispiel**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) Die Zeit, die benötigt wird, um eine Ressource abzurufen, kann gemessen werden, indem die Ereignisse [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload\_event) und [`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload\_event) genutzt werden. Das **`beforeunload`**-Ereignis wird ausgelöst, wenn der Browser kurz davor ist, zu einer neuen Seite zu navigieren, während das **`unload`**-Ereignis auftritt, wenn die Navigation tatsächlich stattfindet. Der Zeitunterschied zwischen diesen beiden Ereignissen kann berechnet werden, um die **Dauer zu bestimmen, die der Browser damit verbracht hat, die Ressource abzurufen**. ### Sandboxed Frame Timing + onload * **Einschlussmethoden**: Frames * **Erkennbarer Unterschied**: Timing (generell aufgrund von Seiteninhalt, Statuscode) * **Weitere Informationen**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) * **Zusammenfassung:** Die [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API kann verwendet werden, um zu messen, wie lange es dauert, eine Anfrage durchzuführen. Es könnten auch andere Uhren verwendet werden. * **Codebeispiel**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) Es wurde beobachtet, dass in Abwesenheit von [Framing-Schutzmaßnahmen](https://xsleaks.dev/docs/defenses/opt-in/xfo/) die Zeit, die für das Laden einer Seite und ihrer Unterressourcen über das Netzwerk benötigt wird, von einem Angreifer gemessen werden kann. Diese Messung ist in der Regel möglich, weil das `onload`-Handler eines Iframes nur nach Abschluss des Ressourcenladens und der JavaScript-Ausführung ausgelöst wird. Um die durch die Skriptausführung eingeführte Variabilität zu umgehen, könnte ein Angreifer das [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe)-Attribut innerhalb des ` ``` ### #ID + Fehler + onload * **Einschlussmethoden**: Frames * **Feststellbarer Unterschied**: Seiteninhalt * **Weitere Informationen**: * **Zusammenfassung**: Wenn die Seite einen Fehler anzeigt, wenn auf den richtigen Inhalt zugegriffen wird, und korrekt geladen wird, wenn auf beliebigen Inhalt zugegriffen wird, können Sie eine Schleife erstellen, um alle Informationen ohne Zeitmessung zu extrahieren. * **Codebeispiel**: Angenommen, Sie können die Seite einfügen, die den geheimen Inhalt in einem Iframe enthält. Sie können das Opfer nach der Datei suchen lassen, die "_flag_" enthält, indem Sie ein Iframe verwenden (zum Beispiel eine CSRF ausnutzen). Im Iframe wissen Sie, dass das _onload-Ereignis_ mindestens einmal ausgeführt wird. Dann können Sie die URL des Iframes ändern, indem Sie nur den Inhalt des Hashes in der URL ändern. Zum Beispiel: 1. **URL1**: www.attacker.com/xssearch#try1 2. **URL2**: www.attacker.com/xssearch#try2 Wenn die erste URL **erfolgreich geladen** wurde, wird das **onload**-Ereignis beim **Ändern** des **Hash**-Teils der URL **nicht erneut ausgelöst**. Aber **wenn** die Seite einen **Fehler** beim **Laden** hatte, wird das **onload**-Ereignis **erneut ausgelöst**. Dann können Sie zwischen einer **korrekt** geladenen Seite oder einer Seite unterscheiden, die einen **Fehler** aufweist, wenn sie aufgerufen wird. ### Javascript-Ausführung * **Einschlussmethoden**: Frames * **Feststellbarer Unterschied**: Seiteninhalt * **Weitere Informationen**: * **Zusammenfassung**: Wenn die **Seite** den **sensiblen** Inhalt **zurückgibt** oder einen **Inhalt**, der vom Benutzer **kontrolliert** werden kann. Der Benutzer könnte im negativen Fall **gültigen JS-Code festlegen** und jeden Versuch innerhalb von **`