diff --git a/src/pentesting-web/xss-cross-site-scripting/README.md b/src/pentesting-web/xss-cross-site-scripting/README.md
index 4982a1d9a..e012aec1c 100644
--- a/src/pentesting-web/xss-cross-site-scripting/README.md
+++ b/src/pentesting-web/xss-cross-site-scripting/README.md
@@ -2,82 +2,83 @@
{{#include ../../banners/hacktricks-training.md}}
-## Methodologie
+## Methodology
-1. Überprüfen Sie, ob **irgendein Wert, den Sie kontrollieren** (_Parameter_, _Pfad_, _Header_?, _Cookies_?) im HTML **reflektiert** oder von **JS**-Code **verwendet** wird.
-2. **Finden Sie den Kontext**, in dem es reflektiert/verwendet wird.
-3. Wenn **reflektiert**:
-1. Überprüfen Sie, **welche Symbole Sie verwenden können** und bereiten Sie je nach dem die Payload vor:
-1. In **rohem HTML**:
-1. Können Sie neue HTML-Tags erstellen?
-2. Können Sie Ereignisse oder Attribute verwenden, die das `javascript:`-Protokoll unterstützen?
-3. Können Sie Schutzmaßnahmen umgehen?
-4. Wird der HTML-Inhalt von einer clientseitigen JS-Engine (_AngularJS_, _VueJS_, _Mavo_...) interpretiert, könnten Sie eine [**Client Side Template Injection**](../client-side-template-injection-csti.md) ausnutzen.
-5. Wenn Sie keine HTML-Tags erstellen können, die JS-Code ausführen, könnten Sie eine [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/index.html) ausnutzen?
-2. Innerhalb eines **HTML-Tags**:
-1. Können Sie in den rohen HTML-Kontext wechseln?
-2. Können Sie neue Ereignisse/Attribute erstellen, um JS-Code auszuführen?
-3. Unterstützt das Attribut, in dem Sie gefangen sind, die Ausführung von JS?
-4. Können Sie Schutzmaßnahmen umgehen?
-3. Innerhalb **JavaScript-Code**:
-1. Können Sie das ``**-Tags einer HTML-Seite, in einer `.js`-Datei oder innerhalb eines Attributs mit dem **`javascript:`**-Protokoll reflektiert:
+In diesem Fall wird deine Eingabe zwischen **``**-Tags einer HTML-Seite, in einer `.js`-Datei oder in einem Attribut mit dem **`javascript:`**-Protokoll reflektiert:
-- Wenn sie zwischen **``**-Tags reflektiert wird, können Sie versuchen, `` einzufügen und aus diesem Kontext auszubrechen, 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 ``-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 zwischen **``**-Tags reflektiert wird, selbst wenn deine Eingabe in irgendeiner Art von Anführungszeichen steht, kannst du versuchen `` zu injizieren und aus diesem Kontext auszubrechen. Das funktioniert, weil der **Browser zuerst die HTML-Tags** und dann den Inhalt parst; daher wird er nicht bemerken, dass dein injiziertes ``-Tag innerhalb des HTML-Codes liegt.
+- Wenn es **innerhalb eines JS-Strings** reflektiert wird und der letzte Trick nicht funktioniert, musst du den **String verlassen**, deinen Code **ausführen** und den JS-Code **rekonstruieren** (wenn ein Fehler auftritt, wird er nicht ausgeführt:
- `'-alert(1)-'`
- `';-alert(1)//`
- `\';alert(1)//`
-- Wenn sie innerhalb von Template-Literalen reflektiert wird, können Sie **JS-Ausdrücke** mit der `${ ... }`-Syntax einbetten: `` var greetings = `Hello, ${alert(1)}` ``
-- **Unicode-Encoding** funktioniert, um **gültigen JavaScript-Code** zu schreiben:
+- Wenn es innerhalb von template literals reflektiert wird, kannst du **JS-Ausdrücke einbetten** mit der `${ ... }`-Syntax: `` var greetings = `Hello, ${alert(1)}` ``
+- **Unicode-Encoding** funktioniert, um **gültigen javascript-Code** zu schreiben:
```javascript
alert(1)
alert(1)
@@ -85,29 +86,29 @@ alert(1)
```
#### Javascript Hoisting
-Javascript Hoisting bezieht sich auf die Möglichkeit, **Funktionen, Variablen oder Klassen nach ihrer Verwendung zu deklarieren, sodass Sie Szenarien ausnutzen können, in denen ein XSS nicht deklarierte Variablen oder Funktionen verwendet.**\
-**Überprüfen Sie die folgende Seite für weitere Informationen:**
+Javascript Hoisting bezieht sich auf die Möglichkeit, **Funktionen, Variablen oder Klassen erst nach ihrer Verwendung zu deklarieren, sodass man Szenarien ausnutzen kann, in denen ein XSS undeclared variables oder functions benutzt.**\
+**Check the following page for more info:**
{{#ref}}
js-hoisting.md
{{#endref}}
-### Javascript Funktion
+### Javascript Function
-Mehrere Webseiten haben Endpunkte, die **den Namen der auszuführenden Funktion als Parameter akzeptieren**. Ein häufiges Beispiel, das man in der Wildnis sieht, ist etwas wie: `?callback=callbackFunc`.
+Mehrere Webseiten haben Endpoints, die **als Parameter den Namen der auszuführenden Funktion akzeptieren**. Ein gängiges Beispiel in der Praxis ist so etwas wie: `?callback=callbackFunc`.
-Eine gute Möglichkeit herauszufinden, ob etwas, das direkt vom Benutzer gegeben wird, versucht wird auszuführen, ist **den Parameterwert zu ändern** (zum Beispiel auf 'Vulnerable') und in der Konsole nach Fehlern zu suchen wie:
+Eine gute Methode, um herauszufinden, ob etwas, das direkt vom Nutzer kommt, ausgeführt werden soll, ist **den Parameterwert zu verändern** (zum Beispiel zu 'Vulnerable') und in der Konsole nach Fehlern zu suchen wie:
.png>)
-Falls es anfällig ist, könnten Sie in der Lage sein, **einen Alert auszulösen**, indem Sie einfach den Wert senden: **`?callback=alert(1)`**. Es ist jedoch sehr häufig, dass diese Endpunkte **den Inhalt validieren**, um nur Buchstaben, Zahlen, Punkte und Unterstriche zuzulassen (**`[\w\._]`**).
+Falls es verwundbar ist, könntest du ein **alert** auslösen, indem du einfach den Wert sendest: **`?callback=alert(1)`**. Sehr häufig validieren diese Endpoints jedoch den Inhalt, um nur Buchstaben, Zahlen, Punkte und Unterstriche zu erlauben (**`[\w\._]`**).
-Dennoch ist es selbst mit dieser Einschränkung möglich, einige Aktionen durchzuführen. Das liegt daran, dass Sie diese gültigen Zeichen verwenden können, um **auf jedes Element im DOM zuzugreifen**:
+Allerdings ist es selbst mit dieser Einschränkung noch möglich, bestimmte Aktionen auszuführen. Das liegt daran, dass du diese erlaubten Zeichen nutzen kannst, um **auf beliebige Elemente im DOM zuzugreifen**:
.png>)
-Einige nützliche Funktionen dafür:
+Some useful functions for this:
```
firstElementChild
lastElementChild
@@ -115,11 +116,12 @@ nextElementSibiling
lastElementSibiling
parentElement
```
-Sie können auch versuchen, **Javascript-Funktionen** direkt auszulösen: `obj.sales.delOrders`.
+Du kannst 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 selben Ursprung** haben ein **interessanteres DOM**, um mehr Aktionen durchzuführen.
+Allerdings sind die Endpunkte, die die angegebene Funktion ausführen, normalerweise Endpunkte ohne viel interessanten DOM. **Andere Seiten in derselben Origin** haben oft einen **interessanteren DOM**, um mehr Aktionen durchzuführen.
+
+Daher wurde, um **diese Verwundbarkeit in einem anderen DOM zu missbrauchen**, die Exploitation **Same Origin Method Execution (SOME)** entwickelt:
-Daher wurde zur **Ausnutzung dieser Schwachstelle in einem anderen DOM** die **Same Origin Method Execution (SOME)**-Ausnutzung entwickelt:
{{#ref}}
some-same-origin-method-execution.md
@@ -127,36 +129,39 @@ some-same-origin-method-execution.md
### DOM
-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.
+Es gibt **JS code**, der **unsicher** mit Daten umgeht, die von einem Angreifer kontrolliert werden, wie `location.href`. Ein Angreifer könnte dies ausnutzen, um beliebigen JS-Code auszuführen.
+
{{#ref}}
dom-xss.md
{{#endref}}
-### **Universelles XSS**
+### **Universal XSS**
-Diese Art von XSS kann **überall** gefunden werden. Sie hängt nicht nur von der Client-Ausnutzung einer Webanwendung ab, sondern von **jedem** **Kontext**. Diese Art der **beliebigen JavaScript-Ausführung** kann sogar ausgenutzt werden, um **RCE** zu erhalten, **beliebige** **Dateien** auf Clients und Servern zu lesen und mehr.\
+Diese Art von XSS kann **überall** gefunden werden. Sie hängen nicht nur von der Client-Ausnutzung einer Webanwendung ab, sondern von **jedem** **Kontext**. Diese Art der **beliebigen JavaScript-Ausführung** kann sogar dazu missbraucht werden, **RCE** zu erlangen, **beliebige** **Dateien** auf Clients und Servern zu **lesen** und mehr.\
Einige **Beispiele**:
+
{{#ref}}
server-side-xss-dynamic-pdf.md
{{#endref}}
+
{{#ref}}
../../network-services-pentesting/pentesting-web/electron-desktop-apps/
{{#endref}}
-## WAF-Bypass-Codierung Bild
+## WAF bypass encoding image
-.jpg>)
+.jpg>)
-## In rohem HTML injizieren
+## Injektion in rohes HTML
-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**.\
-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._
+Wenn deine Eingabe **im HTML der Seite** reflektiert wird oder du in diesem Kontext HTML-Code escapen und injizieren kannst, ist das **erste**, was du tun musst, zu prüfen, ob du `<` missbrauchen kannst, um neue Tags zu erstellen: Versuche einfach, dieses **Zeichen** zu **reflektieren** und prüfe, ob es **HTML encoded** oder **gelöscht** wird oder ob es **unverändert reflektiert** wird. **Nur im letzten Fall wirst du diese Schwachstelle ausnutzen können**.\
+Für diese Fälle solltest du auch [**Client Side Template Injection**](../client-side-template-injection-csti.md) **im Hinterkopf behalten**.\
+_**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 falls kein Black/Whitelisting verwendet wird, könntest du Payloads wie:
```html
`-Tags oder zwischen HTML-Events, die JS-Code ausführen können, oder zwischen Attributen, die das `javascript:`-Protokoll akzeptieren, **reflektiert**.
+In diesen Fällen wird dein **input** innerhalb des JS-Codes einer `.js`-Datei oder zwischen ``-Tags oder zwischen HTML-Events, die JS-Code ausführen können, oder in Attributen, die das `javascript:`-Protokoll akzeptieren, reflektiert.
-### Escaping des \` eingefügt wird, könntest du leicht **das schließende `` eingefügt wird, kannst du leicht das Schließen des `
```
-Beachten Sie, dass wir in diesem Beispiel **das einfache Anführungszeichen nicht einmal geschlossen haben**. Dies liegt daran, dass **die HTML-Analyse zuerst vom Browser durchgeführt wird**, was die Identifizierung von Seitenelementen, einschließlich Skriptblöcken, umfasst. Die Analyse von JavaScript, um die eingebetteten Skripte zu verstehen und auszuführen, erfolgt erst danach.
+Beachte, dass wir in diesem Beispiel **nicht einmal das einfache Anführungszeichen geschlossen haben**. Das liegt daran, dass das **HTML-Parsen zuerst vom Browser durchgeführt wird**, wobei Seiten-Elemente identifiziert werden, einschließlich Script-Blöcken. Das Parsen von JavaScript, um die eingebetteten Skripte zu verstehen und auszuführen, erfolgt erst danach.
-### Innerhalb des JS-Codes
+### Innerhalb von JS-Code
-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:
+Wenn `<>` bereinigt werden, kannst du trotzdem die **Zeichenkette escapen** dort, wo deine Eingabe **sich befindet**, und **beliebigen JS-Code ausführen**. Es ist wichtig, die **JS-Syntax zu korrigieren**, denn wenn Fehler vorhanden sind, wird der JS-Code nicht ausgeführt:
```
'-alert(document.domain)-'
';alert(document.domain)//
\';alert(document.domain)//
```
-### Template literals \`\`
+#### JS-in-JS string break → inject → repair pattern
-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.\
-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:
+Wenn Benutzereingaben in eine zitierte JavaScript-Zeichenkette gelangen (z. B. serverseitiges Echo in ein Inline-Skript), kannst du die Zeichenkette beenden, Code injizieren und die Syntax reparieren, damit das Parsen gültig bleibt. Generisches Grundgerüst:
+```
+" // end original string
+; // safely terminate the statement
+ // attacker-controlled JS
+; a = " // repair and resume expected string/statement
+```
+Beispiel für ein URL-Muster, wenn der verwundbare Parameter in einen JS-String reflektiert wird:
+```
+?param=test";;a="
+```
+This führt attacker JS aus, ohne den HTML-Kontext berühren zu müssen (pure JS-in-JS). Mit blacklist bypasses unten kombinieren, wenn Filter keywords blockieren.
-Dies kann **missbraucht** werden mit:
+### Template literals ``
+
+Um **strings** zu erzeugen akzeptiert JS neben single und double quotes auch **backticks** **` `` `**. Dies ist als template literals bekannt, da sie das Einbetten von **embedded JS expressions** mittels `${ ... }`-Syntax erlauben.\
+Wenn dein Input also innerhalb eines JS-Strings, der backticks verwendet, **reflected** wird, kannst du die Syntax `${ ... }` missbrauchen, um **arbitrary JS code** auszuführen:
+
+Das lässt sich wie folgt **missbrauchen**:
```javascript
;`${alert(1)}``${`${`${`${alert(1)}`}`}`}`
```
@@ -507,20 +526,35 @@ return loop
}
loop``
```
-### Codierte Codeausführung
+### Encoded code execution
```html
This is a 1 line comment, but "-->" must to be at the beggining of the first line
```
-**JavaScript-Zeilenumbrüche (aus** [**JavaScript-Zeilenumbruch**](#javascript-new-lines) **Trick)**
+**JavaScript Zeilenumbrüche (aus** [**JavaScript new line**](#javascript-new-lines) **dem Trick)**
```javascript
//Javascript interpret as new line these chars:
String.fromCharCode(10)
@@ -595,7 +629,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:
```
-**Javascript innerhalb eines Kommentars**
+**Javascript in einem Kommentar**
```javascript
//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
@@ -681,7 +715,7 @@ try{throw onerror=alert}catch{throw 1}
- [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md)
- [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix)
-**Willkürlicher Funktionsaufruf (alert)**
+**Beliebiger Funktionsaufruf (alert)**
```javascript
//Eval like functions
eval('ale'+'rt(1)')
@@ -741,56 +775,56 @@ top['al\x65rt'](1)
top[8680439..toString(30)](1)
```
-## **DOM-Schwachstellen**
+## **DOM vulnerabilities**
-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-Schwachstellen wurde es auf diese Seite verschoben**](dom-xss.md)**:**
+Es gibt **JS code**, der **unsichere Daten verwendet, die von einem attacker kontrolliert werden**, wie `location.href`. Ein attacker könnte dies missbrauchen, um beliebigen JS code auszuführen.\
+**Due to the extension of the explanation of** [**DOM vulnerabilities it was moved to this page**](dom-xss.md)**:**
{{#ref}}
dom-xss.md
{{#endref}}
-Dort finden Sie eine detaillierte **Erklärung, was DOM-Schwachstellen 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.
+Dort findest du eine ausführliche **Erklärung, was DOM vulnerabilities sind, wie sie provoziert werden und wie man sie ausnutzen kann**.\
+Außerdem findest du **am Ende des genannten Beitrags** eine Erklärung zu [**DOM Clobbering attacks**](dom-xss.md#dom-clobbering).
-### Selbst-XSS aufrüsten
+### Upgrading Self-XSS
-### 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:
+If you can trigger a XSS by sending the payload inside a cookie, this is usually a self-XSS. However, if you find a **vulnerable subdomain to XSS**, you could abuse this XSS to inject a cookie in the whole domain managing to trigger the cookie XSS in the main domain or other subdomains (the ones vulnerable to cookie XSS). For this you can use the cookie tossing attack:
{{#ref}}
../hacking-with-cookies/cookie-tossing.md
{{#endref}}
-Sie finden einen großartigen Missbrauch dieser Technik in [**diesem Blogbeitrag**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html).
+You can find a great abuse of this technique in [**this blog post**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html).
-### Ihre Sitzung an den Administrator senden
+### Sending your session to the admin
-Vielleicht kann ein Benutzer sein Profil mit dem Administrator teilen, und wenn das Selbst-XSS im Profil des Benutzers ist und der Administrator darauf zugreift, wird er die Schwachstelle auslösen.
+Vielleicht kann ein user sein Profil mit dem admin teilen; befindet sich das Self-XSS im Profil des user und der admin greift darauf zu, löst er die Sicherheitslücke aus.
-### Sitzungs-Spiegelung
+### Session Mirroring
-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 aus seiner Sitzung heraus.
+Wenn du ein Self XSS findest und die Webseite eine **session mirroring for administrators** hat, z. B. wenn Clients um Hilfe bitten können und der admin dir helfen soll, sieht er genau das, was du in deiner session siehst, aber aus seiner session.
-Sie könnten den **Administrator dazu bringen, Ihr Selbst-XSS auszulösen** und seine Cookies/Sitzung stehlen.
+Du könntest den **administrator dazu bringen, dein self XSS auszulösen** und so seine cookies/session stehlen.
-## Andere Umgehungen
+## Andere Bypasses
-### Normalisierte Unicode
+### Normalised Unicode
-Sie könnten überprüfen, ob die **reflektierten Werte** auf dem Server (oder auf der Client-Seite) **unicode-normalisiert** werden und diese Funktionalität ausnutzen, um Schutzmaßnahmen zu umgehen. [**Hier ein Beispiel finden**](../unicode-injection/index.html#xss-cross-site-scripting).
+Du könntest prüfen, ob die **reflected values** auf dem Server (oder clientseitig) **unicode normalized** werden und diese Funktionalität ausnutzen, um Schutzmaßnahmen zu bypassen. [**Find an example here**](../unicode-injection/index.html#xss-cross-site-scripting).
-### PHP FILTER_VALIDATE_EMAIL-Flag-Umgehung
+### PHP FILTER_VALIDATE_EMAIL flag Bypass
```javascript
">