From 77189501592c10188d3406f4eabd483026c3b142 Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 3 Jan 2025 03:21:47 +0000 Subject: [PATCH] Translated ['.github/pull_request_template.md', 'src/1911-pentesting-fox --- book.toml | 1 + hacktricks-preprocessor.py | 20 +-- .../README.md | 54 +++---- .../browext-clickjacking.md | 10 +- ...rowext-permissions-and-host_permissions.md | 16 +- .../browext-xss-example.md | 6 +- src/pentesting-web/cache-deception/README.md | 54 +++---- .../cache-deception/cache-poisoning-to-dos.md | 10 +- .../cache-poisoning-via-url-discrepancies.md | 2 +- .../README.md | 66 ++++---- ...ypass-self-+-unsafe-inline-with-iframes.md | 4 +- .../README.md | 18 +-- src/pentesting-web/deserialization/README.md | 60 +++---- ...er-gadgets-expandedwrapper-and-json.net.md | 10 +- ...ialization-objectinputstream-readobject.md | 2 +- .../exploiting-__viewstate-parameter.md | 12 +- ...ava-dns-deserialization-and-gadgetprobe.md | 20 +-- ...ava-transformers-to-rutime-exec-payload.md | 10 +- ...g-and-directory-interface-and-log4shell.md | 39 +++-- .../README.md | 28 ++-- .../client-side-prototype-pollution.md | 12 +- .../express-prototype-pollution-gadgets.md | 6 +- .../prototype-pollution-to-rce.md | 22 +-- .../php-deserialization-+-autoload-classes.md | 12 +- .../python-yaml-deserialization.md | 6 +- .../deserialization/ruby-_json-pollution.md | 2 +- .../deserialization/ruby-class-pollution.md | 8 +- src/pentesting-web/file-inclusion/README.md | 72 ++++----- ..._stream_prefer_studio-+-path-disclosure.md | 6 +- .../lfi2rce-via-eternal-waiting.md | 14 +- .../file-inclusion/lfi2rce-via-php-filters.md | 4 +- .../file-inclusion/lfi2rce-via-phpinfo.md | 2 +- .../lfi2rce-via-segmentation-fault.md | 2 +- .../lfi2rce-via-temp-file-uploads.md | 4 +- .../file-inclusion/phar-deserialization.md | 2 +- .../via-php_session_upload_progress.md | 6 +- src/pentesting-web/file-upload/README.md | 42 ++--- .../hacking-with-cookies/README.md | 44 +++--- .../cookie-jar-overflow.md | 4 +- .../http-connection-request-smuggling.md | 6 +- .../http-request-smuggling/README.md | 56 +++---- .../http-response-smuggling-desync.md | 18 +-- src/pentesting-web/iframe-traps.md | 4 +- src/pentesting-web/ldap-injection.md | 2 +- src/pentesting-web/login-bypass/README.md | 6 +- .../login-bypass/sql-login-bypass.md | 2 +- src/pentesting-web/nosql-injection.md | 4 +- .../oauth-to-account-takeover.md | 46 +++--- src/pentesting-web/orm-injection.md | 16 +- src/pentesting-web/parameter-pollution.md | 24 +-- .../postmessage-vulnerabilities/README.md | 10 +- ...blocking-main-page-to-steal-postmessage.md | 10 +- .../bypassing-sop-with-iframes-1.md | 12 +- .../bypassing-sop-with-iframes-2.md | 6 +- .../proxy-waf-protections-bypass.md | 32 ++-- src/pentesting-web/race-condition.md | 30 ++-- src/pentesting-web/rate-limit-bypass.md | 4 +- .../registration-vulnerabilities.md | 12 +- src/pentesting-web/reset-password.md | 26 +-- src/pentesting-web/reverse-tab-nabbing.md | 4 +- src/pentesting-web/saml-attacks/README.md | 18 +-- .../saml-attacks/saml-basics.md | 4 +- ...inclusion-edge-side-inclusion-injection.md | 8 +- src/pentesting-web/sql-injection/README.md | 41 +++-- .../sql-injection/ms-access-sql-injection.md | 14 +- .../sql-injection/mssql-injection.md | 10 +- .../sql-injection/mysql-injection/README.md | 8 +- .../mysql-injection/mysql-ssrf.md | 2 +- .../sql-injection/oracle-injection.md | 10 +- .../postgresql-injection/README.md | 6 +- .../big-binary-files-upload-postgresql.md | 6 +- ...and-ntlm-chanllenge-response-disclosure.md | 4 +- .../pl-pgsql-password-bruteforce.md | 4 +- .../rce-with-postgresql-extensions.md | 12 +- .../rce-with-postgresql-languages.md | 2 +- src/pentesting-web/sql-injection/sqlmap.md | 22 +-- .../sql-injection/sqlmap/README.md | 21 +-- .../sqlmap/second-order-injection-sqlmap.md | 6 +- .../README.md | 22 +-- .../cloud-ssrf.md | 30 ++-- .../url-format-bypass.md | 6 +- .../README.md | 58 +++---- .../el-expression-language.md | 10 +- .../jinja2-ssti.md | 12 +- src/pentesting-web/timing-attacks.md | 6 +- .../unicode-injection/README.md | 2 +- .../unicode-normalization.md | 10 +- .../web-vulnerabilities-methodology/README.md | 8 +- src/pentesting-web/websocket-attacks.md | 16 +- src/pentesting-web/xpath-injection.md | 26 +-- src/pentesting-web/xs-search.md | 148 +++++++++--------- src/pentesting-web/xs-search/README.md | 118 +++++++------- .../connection-pool-by-destination-example.md | 6 +- .../xs-search/connection-pool-example.md | 4 +- .../xs-search/css-injection/README.md | 34 ++-- .../event-loop-blocking-+-lazy-images.md | 12 +- .../performance.now-+-force-heavy-task.md | 2 +- ...ble-stylesheet-language-transformations.md | 6 +- .../xss-cross-site-scripting/README.md | 86 +++++----- .../abusing-service-workers.md | 8 +- .../chrome-cache-to-xss.md | 2 +- .../debugging-client-side-js.md | 4 +- .../dom-clobbering.md | 18 +-- .../xss-cross-site-scripting/dom-invader.md | 12 +- .../xss-cross-site-scripting/dom-xss.md | 20 +-- .../xss-cross-site-scripting/js-hoisting.md | 12 +- .../other-js-tricks.md | 6 +- .../xss-cross-site-scripting/pdf-injection.md | 2 +- .../server-side-xss-dynamic-pdf.md | 6 +- .../some-same-origin-method-execution.md | 8 +- .../xssi-cross-site-script-inclusion.md | 8 +- .../xxe-xee-xml-external-entity.md | 46 +++--- .../escaping-from-gui-applications/README.md | 24 +-- .../firmware-analysis/README.md | 12 +- .../firmware-analysis/bootloader-testing.md | 6 +- .../firmware-analysis/firmware-integrity.md | 2 +- src/physical-attacks/physical-attacks.md | 8 +- .../pentesting-ble-bluetooth-low-energy.md | 6 +- src/radio-hacking/pentesting-rfid.md | 22 +-- .../aw2exec-__malloc_hook.md | 2 +- .../arbitrary-write-2-exec/aw2exec-got-plt.md | 10 +- .../aws2exec-.dtors-and-.fini_array.md | 6 +- .../README.md | 2 +- .../aslr/README.md | 10 +- .../aslr/ret2plt.md | 6 +- .../pie/README.md | 2 +- .../pie/bypassing-canary-and-pie.md | 4 +- .../relro.md | 6 +- .../stack-canaries/README.md | 4 +- .../bf-forked-stack-canaries.md | 6 +- .../stack-canaries/print-stack-canary.md | 6 +- .../common-exploiting-problems.md | 2 +- .../linux-exploiting-basic-esp/elf-tricks.md | 22 +-- .../format-strings/README.md | 6 +- .../linux-exploiting-basic-esp/one-gadget.md | 2 +- .../stack-overflow/README.md | 16 +- .../stack-overflow/pointer-redirecting.md | 6 +- .../stack-overflow/ret2csu.md | 6 +- .../stack-overflow/ret2dlresolve.md | 4 +- .../stack-overflow/ret2lib/README.md | 12 +- .../rop-leaking-libc-address/README.md | 24 +-- .../rop-leaking-libc-template.md | 4 +- .../stack-overflow/ret2ret.md | 4 +- .../stack-overflow/ret2win.md | 12 +- .../rop-return-oriented-programing.md | 6 +- .../stack-pivoting-ebp2ret-ebp-chaining.md | 10 +- .../stack-overflow/stack-shellcode.md | 12 +- src/reversing/common-api-used-in-malware.md | 14 +- .../cryptographic-algorithms/README.md | 8 +- .../unpacking-binaries.md | 4 +- .../reversing-tools-basic-methods/README.md | 30 ++-- .../angr/README.md | 4 +- .../angr/angr-examples.md | 4 +- .../cheat-engine.md | 30 ++-- src/reversing/reversing-tools/README.md | 14 +- src/stego/stego-tricks.md | 20 +-- src/todo/android-forensics.md | 6 +- src/todo/burp-suite.md | 2 +- src/todo/cookies-policy.md | 2 +- src/todo/hardware-hacking/README.md | 4 +- src/todo/hardware-hacking/i2c.md | 4 +- src/todo/hardware-hacking/radio.md | 32 ++-- src/todo/hardware-hacking/spi.md | 14 +- src/todo/hardware-hacking/uart.md | 20 +-- .../README.md | 2 +- .../modbus.md | 2 +- src/todo/interesting-http.md | 2 +- src/todo/investment-terms.md | 12 +- .../0.-basic-llm-concepts.md | 26 +-- .../1.-tokenizing.md | 6 +- .../3.-token-embeddings.md | 10 +- .../4.-attention-mechanisms.md | 8 +- .../5.-llm-architecture.md | 46 +++--- .../7.0.-lora-improvements-in-fine-tuning.md | 6 +- ...7.2.-fine-tuning-to-follow-instructions.md | 6 +- .../llm-training-data-preparation/README.md | 8 +- src/todo/misc.md | 6 +- src/todo/more-tools.md | 6 +- src/todo/other-web-tricks.md | 12 +- src/todo/radio-hacking/README.md | 2 +- .../radio-hacking/fissure-the-rf-framework.md | 14 +- src/todo/radio-hacking/flipper-zero/README.md | 2 +- .../radio-hacking/flipper-zero/fz-ibutton.md | 4 +- .../radio-hacking/flipper-zero/fz-infrared.md | 8 +- src/todo/radio-hacking/flipper-zero/fz-nfc.md | 2 +- .../radio-hacking/flipper-zero/fz-sub-ghz.md | 14 +- src/todo/radio-hacking/ibutton.md | 6 +- src/todo/radio-hacking/infrared.md | 8 +- .../pentesting-ble-bluetooth-low-energy.md | 2 +- src/todo/radio-hacking/pentesting-rfid.md | 18 +-- src/todo/radio-hacking/proxmark-3.md | 6 +- src/todo/radio-hacking/sub-ghz-rf.md | 20 +-- src/todo/rust-basics.md | 4 +- ...itive-information-disclosure-from-a-web.md | 6 +- src/todo/test-llms.md | 4 +- src/welcome/about-the-author.md | 2 +- src/welcome/hacktricks-values-and-faq.md | 20 +-- .../active-directory-methodology/README.md | 98 ++++++------ .../abusing-ad-mssql.md | 10 +- .../acl-persistence-abuse/README.md | 6 +- .../shadow-credentials.md | 6 +- .../ad-certificates.md | 28 ++-- .../ad-certificates/README.md | 4 +- .../ad-certificates/account-persistence.md | 2 +- .../ad-certificates/certificate-theft.md | 16 +- .../ad-certificates/domain-escalation.md | 88 +++++------ .../ad-certificates/domain-persistence.md | 14 +- .../ad-dns-records.md | 2 +- .../ad-information-in-printers.md | 8 +- .../asreproast.md | 2 +- .../bloodhound.md | 2 +- .../constrained-delegation.md | 4 +- .../active-directory-methodology/dcshadow.md | 2 +- .../active-directory-methodology/dcsync.md | 2 +- .../diamond-ticket.md | 4 +- .../dsrm-credentials.md | 4 +- ...external-forest-domain-one-way-outbound.md | 8 +- .../golden-ticket.md | 2 +- .../kerberoast.md | 8 +- .../kerberos-double-hop-problem.md | 4 +- .../active-directory-methodology/laps.md | 6 +- .../over-pass-the-hash-pass-the-key.md | 2 +- .../pass-the-ticket.md | 2 +- .../printers-spooler-service-abuse.md | 4 +- .../privileged-groups-and-token-privileges.md | 8 +- .../resource-based-constrained-delegation.md | 30 ++-- .../security-descriptors.md | 2 +- .../sid-history-injection.md | 8 +- .../silver-ticket.md | 32 ++-- .../skeleton-key.md | 2 +- .../unconstrained-delegation.md | 24 +-- .../authentication-credentials-uac-and-efs.md | 10 +- .../README.md | 20 +-- .../uac-user-account-control.md | 30 ++-- src/windows-hardening/av-bypass.md | 44 +++--- .../basic-powershell-for-pentesters/README.md | 10 +- .../powerview.md | 4 +- .../checklist-windows-privilege-escalation.md | 26 +-- src/windows-hardening/cobalt-strike.md | 16 +- .../lateral-movement/dcom-exec.md | 12 +- .../lateral-movement/psexec-and-winexec.md | 4 +- .../lateral-movement/smbexec.md | 6 +- .../lateral-movement/wmiexec.md | 6 +- src/windows-hardening/ntlm/README.md | 30 ++-- .../ntlm/psexec-and-winexec.md | 4 +- src/windows-hardening/ntlm/wmiexec.md | 2 +- .../stealing-credentials/README.md | 34 ++-- .../credentials-mimikatz.md | 18 +-- .../credentials-protections.md | 12 +- .../stealing-credentials/wts-impersonator.md | 2 +- .../README.md | 70 ++++----- .../access-tokens.md | 4 +- .../acls-dacls-sacls-aces.md | 32 ++-- ...ectory-permission-over-service-registry.md | 2 +- .../com-hijacking.md | 4 +- .../create-msi-with-wix.md | 4 +- .../dll-hijacking.md | 14 +- .../dll-hijacking/README.md | 47 +++--- ...ritable-sys-path-+dll-hijacking-privesc.md | 20 +-- .../dpapi-extracting-passwords.md | 12 +- .../integrity-levels.md | 16 +- .../juicypotato.md | 2 +- .../leaked-handle-exploitation.md | 12 +- .../privilege-escalation-abusing-tokens.md | 26 +-- .../README.md | 24 +-- ...vilege-escalation-with-autorun-binaries.md | 18 +-- .../sedebug-+-seimpersonate-copy-token.md | 4 +- .../seimpersonate-from-high-to-system.md | 8 +- .../uac-user-account-control.md | 24 +-- theme/book.js | 55 +++++++ theme/css/chrome.css | 52 +++++- theme/index.hbs | 78 ++++++--- theme/sponsor.js | 2 - 273 files changed, 2098 insertions(+), 1984 deletions(-) diff --git a/book.toml b/book.toml index 55f8eeb4f..3d588387c 100644 --- a/book.toml +++ b/book.toml @@ -22,6 +22,7 @@ after = ["links"] [preprocessor.hacktricks] command = "python3 ./hacktricks-preprocessor.py" +env = "prod" [output.html] additional-css = ["theme/pagetoc.css", "theme/tabs.css"] diff --git a/hacktricks-preprocessor.py b/hacktricks-preprocessor.py index 37f549101..fedfdef99 100644 --- a/hacktricks-preprocessor.py +++ b/hacktricks-preprocessor.py @@ -30,14 +30,16 @@ def ref(matchobj): href = matchobj.groups(0)[0].strip() title = href if href.startswith("http://") or href.startswith("https://"): - # pass - 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 + 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 ``, `` und ``-Elemente. - **base-uri**: Gibt erlaubte URLs für das Laden mit ``-Elementen an. - **form-action**: Listet gültige Endpunkte für Formularübermittlungen auf. -- **plugin-types**: Beschränkt MIME-Typen, die eine Seite aufrufen kann. +- **plugin-types**: Beschränkt MIME-Typen, die eine Seite aufrufen darf. - **upgrade-insecure-requests**: Weist Browser an, HTTP-URLs in HTTPS umzuschreiben. -- **sandbox**: Wendet Einschränkungen an, die ähnlich sind wie das Sandbox-Attribut eines ` ``` In [**diesem CTF-Bericht**](https://github.com/aszx87410/ctf-writeups/issues/48) war es möglich, über **HTML-Injection** eine **CSP** weiter zu **beschränken**, sodass ein Skript, das CSTI verhinderte, deaktiviert wurde und daher die **Schwachstelle ausnutzbar wurde.**\ -CSP kann restriktiver gestaltet werden, indem **HTML-Meta-Tags** verwendet werden und Inline-Skripte können deaktiviert werden, indem der **Eintrag** entfernt wird, der ihren **Nonce** erlaubt, und **bestimmte Inline-Skripte über sha aktiviert werden:** +CSP kann restriktiver gestaltet werden, indem **HTML-Meta-Tags** verwendet werden und inline Skripte können deaktiviert werden, indem der **Eintrag** entfernt wird, der ihren **Nonce** erlaubt, und **bestimmte inline Skripte über sha aktiviert werden:** ```html ` 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