mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 19:11:41 -08:00
Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes
This commit is contained in:
@@ -18,9 +18,9 @@ Du point de vue d'une Red Team, la **première étape pour compromettre un envir
|
||||
|
||||
### Énumération externe & Accès initial
|
||||
|
||||
La première étape est bien sûr d'énumérer des informations sur le locataire que vous attaquez et d'essayer d'obtenir un point d'accès.
|
||||
La première étape est bien sûr d'énumérer les informations sur le locataire que vous attaquez et d'essayer d'obtenir un point d'accès.
|
||||
|
||||
En fonction du nom de domaine, il est possible de savoir **si l'entreprise utilise Azure**, d'obtenir l'**ID de locataire**, d'obtenir d'autres **domaines valides** dans le même locataire (s'il y en a plus) et d'obtenir des **informations pertinentes** comme si SSO est activé, les configurations de messagerie, les e-mails d'utilisateurs valides...
|
||||
En fonction du nom de domaine, il est possible de savoir **si l'entreprise utilise Azure**, d'obtenir l'**ID de locataire**, d'obtenir d'autres **domaines valides** dans le même locataire (s'il y en a plus) et d'obtenir des **informations pertinentes** comme si SSO est activé, les configurations de messagerie, les emails d'utilisateurs valides...
|
||||
|
||||
Consultez la page suivante pour apprendre à effectuer l'**énumération externe** :
|
||||
|
||||
@@ -38,24 +38,31 @@ Avec ces informations, les moyens les plus courants d'essayer d'obtenir un point
|
||||
- Vulnérabilités dans les applications hébergées sur Azure
|
||||
- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) avec accès au point de terminaison des métadonnées
|
||||
- **Prises de contrôle de sous-domaines** comme dans [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)
|
||||
- **Autres erreurs de configuration des services Azure**
|
||||
- Si un ordinateur portable de développeur est compromis ([WinPEAS et LinPEAS](https://github.com/peass-ng/PEASS-ng) peuvent trouver cette info) :
|
||||
- À l'intérieur de **`<HOME>/.Azure`**
|
||||
- **`azureProfile.json`** contient des informations sur les utilisateurs connectés dans le passé
|
||||
- **`clouds.config`** contient des informations sur les abonnements
|
||||
- **`clouds.config` contient** des informations sur les abonnements
|
||||
- **`service_principal_entries.json`** contient les identifiants des applications (ID de locataire, clients et secret). Seulement sur Linux & macOS
|
||||
- **`msal_token_cache.json`** contient des jetons d'accès et des jetons de rafraîchissement. Seulement sur Linux & macOS
|
||||
- **`service_principal_entries.bin`** et **`msal_token_cache.bin`** sont utilisés sous Windows et sont cryptés avec DPAPI
|
||||
- **`service_principal_entries.bin`** et msal_token_cache.bin sont utilisés sous Windows et sont cryptés avec DPAPI
|
||||
- **`msal_http_cache.bin`** est un cache de requêtes HTTP
|
||||
- Chargez-le : `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
|
||||
- **`AzureRmContext.json`** contient des informations sur les connexions précédentes utilisant Az PowerShell (mais pas d'identifiants)
|
||||
- À l'intérieur de **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** se trouvent plusieurs fichiers `.bin` avec des **jetons d'accès**, des jetons d'identité et des informations de compte cryptées avec le DPAPI des utilisateurs.
|
||||
- À l'intérieur de **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** se trouvent plusieurs fichiers `.bin` avec des **jetons d'accès**, des jetons d'identité et des informations de compte cryptées avec le DPAPI de l'utilisateur.
|
||||
- Il est possible de trouver plus de **jetons d'accès** dans les fichiers `.tbres` à l'intérieur de **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`** qui contiennent un base64 crypté avec DPAPI avec des jetons d'accès.
|
||||
- Sur Linux et macOS, vous pouvez obtenir des **jetons d'accès, jetons de rafraîchissement et jetons d'identité** depuis Az PowerShell (s'il est utilisé) en exécutant `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"`
|
||||
- Sous Windows, cela génère uniquement des jetons d'identité.
|
||||
- Il est possible de voir si Az PowerShell a été utilisé sur Linux et macOS en vérifiant si `$HOME/.local/share/.IdentityService/` existe (bien que les fichiers contenus soient vides et inutiles)
|
||||
- Il est possible de voir si Az PowerShell a été utilisé sous Linux et macOS en vérifiant si `$HOME/.local/share/.IdentityService/` existe (bien que les fichiers contenus soient vides et inutiles)
|
||||
|
||||
Trouvez d'autres **erreurs de configuration des services Azure** qui peuvent mener à un point d'accès à la page suivante :
|
||||
|
||||
{{#ref}}
|
||||
az-unauthenticated-enum-and-initial-entry/
|
||||
{{#endref}}
|
||||
|
||||
> [!NOTE]
|
||||
> N'oubliez pas que généralement, la partie **la plus bruyante** de l'énumération est la **connexion**, pas l'énumération elle-même.
|
||||
> N'oubliez pas que généralement, la partie **la plus bruyante** de l'énumération est la **connexion**, et non l'énumération elle-même.
|
||||
|
||||
### Outils Azure & Entra ID
|
||||
|
||||
@@ -73,7 +80,7 @@ Dans les cas où vous avez des identifiants valides mais que vous ne pouvez pas
|
||||
|
||||
- **Liste blanche d'IP** -- Vous devez compromettre une IP valide
|
||||
- **Restrictions géographiques** -- Trouvez où vit l'utilisateur ou où se trouvent les bureaux de l'entreprise et obtenez une IP de la même ville (ou du même pays au moins)
|
||||
- **Navigateur** -- Peut-être qu'un navigateur d'un certain OS (Windows, Linux, Mac, Android, iOS) est autorisé. Découvrez quel OS la victime/l'entreprise utilise.
|
||||
- **Navigateur** -- Peut-être qu'un seul navigateur d'un certain OS (Windows, Linux, Mac, Android, iOS) est autorisé. Découvrez quel OS la victime/l'entreprise utilise.
|
||||
- Vous pouvez également essayer de **compromettre les identifiants de Service Principal** car ils sont généralement moins limités et leur connexion est moins examinée
|
||||
|
||||
Après avoir contourné cela, vous pourriez être en mesure de revenir à votre configuration initiale et vous aurez toujours accès.
|
||||
@@ -128,9 +135,9 @@ Get-AzureADTenantDetail
|
||||
{{#endtabs }}
|
||||
|
||||
|
||||
### Énumération et élévation de privilèges Entra ID
|
||||
### Énumération d'Entra ID et élévation de privilèges
|
||||
|
||||
Par défaut, tout utilisateur devrait avoir **suffisamment de permissions pour énumérer** des éléments tels que des utilisateurs, des groupes, des rôles, des principaux de service... (voir [permissions par défaut AzureAD](az-basic-information/index.html#default-user-permissions)).\
|
||||
Par défaut, tout utilisateur devrait avoir **suffisamment de permissions pour énumérer** des éléments tels que les utilisateurs, groupes, rôles, principaux de service... (vérifiez [les permissions par défaut d'AzureAD](az-basic-information/index.html#default-user-permissions)).\
|
||||
Vous pouvez trouver ici un guide :
|
||||
|
||||
{{#ref}}
|
||||
@@ -148,13 +155,32 @@ az-enumeration-tools.md#automated-post-exploitation-tools
|
||||
|
||||
Une fois que vous savez qui vous êtes, vous pouvez commencer à énumérer les **services Azure auxquels vous avez accès**.
|
||||
|
||||
La commande Az PowerShell **`Get-AzResource`** vous permet de **savoir quels sont les ressources visibles par votre utilisateur actuel**.
|
||||
Vous devriez commencer par découvrir les **permissions que vous avez** sur les ressources. Pour cela :
|
||||
|
||||
1. **Trouvez la ressource à laquelle vous avez accès** :
|
||||
|
||||
La commande Az PowerShell **`Get-AzResource`** vous permet de **savoir quelles ressources votre utilisateur actuel peut voir**.
|
||||
|
||||
De plus, vous pouvez obtenir les mêmes informations dans la **console web** en allant sur [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) ou en recherchant "Toutes les ressources" ou en exécutant : `az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"`
|
||||
|
||||
En outre, avec suffisamment de permissions, le rôle **`Get-AzRoleAssignment`** peut être utilisé pour **énumérer tous les rôles** dans l'abonnement ou les permissions sur une ressource spécifique en l'indiquant comme dans : **`Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4`**
|
||||
2. **Trouvez les permissions que vous avez sur les ressources auxquelles vous avez accès et trouvez les rôles qui vous sont assignés** :
|
||||
|
||||
Dans la section suivante, vous pouvez trouver des informations sur les services Azure les plus courants et comment les énumérer :
|
||||
Notez que vous avez besoin de la permission **`Microsoft.Authorization/roleAssignments/read`** pour exécuter cette action.
|
||||
|
||||
De plus, avec suffisamment de permissions, le rôle **`Get-AzRoleAssignment`** peut être utilisé pour **énumérer tous les rôles** dans l'abonnement ou la permission sur une ressource spécifique en l'indiquant comme dans : **`Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4`**.
|
||||
|
||||
Il est également possible d'obtenir ces informations en exécutant **`az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"`** comme dans :
|
||||
|
||||
- **`az rest --method GET --uri "https://management.azure.com//subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"`**
|
||||
|
||||
3. **Trouvez les permissions granulaires des rôles qui vous sont attachés** :
|
||||
|
||||
Ensuite, pour obtenir la permission granulaire, vous pourriez exécuter **`(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions`**.
|
||||
|
||||
Ou appeler l'API directement avec **`az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2020-08-01-preview" | jq ".properties"`**.
|
||||
|
||||
|
||||
Dans la section suivante, vous pouvez trouver **des informations sur les services Azure les plus courants et comment les énumérer** :
|
||||
|
||||
{{#ref}}
|
||||
az-services/
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
# Az - Escalade de privilèges
|
||||
@@ -0,0 +1,41 @@
|
||||
# Az - Storage Unauth
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Storage Unauth
|
||||
|
||||
Pour plus d'informations sur le stockage, consultez :
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-storage.md
|
||||
{{#endref}}
|
||||
|
||||
### Open Storage
|
||||
|
||||
Vous pouvez découvrir un stockage ouvert avec un outil tel que [**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1) qui utilisera le fichier **`Microburst/Misc/permutations.txt`** pour générer des permutations (très simples) afin d'essayer de **trouver des comptes de stockage ouverts**.
|
||||
```bash
|
||||
Import-Module .\MicroBurst\MicroBurst.psm1
|
||||
Invoke-EnumerateAzureBlobs -Base corp
|
||||
[...]
|
||||
https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
|
||||
[...]
|
||||
|
||||
# Access https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
|
||||
# Check: <Name>ssh_info.json</Name>
|
||||
# Access then https://corpcommon.blob.core.windows.net/secrets/ssh_info.json
|
||||
```
|
||||
Vous pouvez également utiliser une méthode de [**MicroBust**](https://github.com/NetSPI/MicroBurst) pour cet objectif. Cette fonction recherchera le nom de domaine de base (et quelques permutations) dans plusieurs **domaines azure** (y compris les domaines de stockage) :
|
||||
```bash
|
||||
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
|
||||
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
|
||||
```
|
||||
### SAS URLs
|
||||
|
||||
Un _**signature d'accès partagé**_ (SAS) URL est une URL qui **fournit un accès** à une certaine partie d'un compte de stockage (cela peut être un conteneur complet, un fichier...) avec des permissions spécifiques (lecture, écriture...) sur les ressources. Si vous en trouvez un qui a été divulgué, vous pourriez être en mesure d'accéder à des informations sensibles, elles ressemblent à ceci (c'est pour accéder à un conteneur, si cela accordait simplement l'accès à un fichier, le chemin de l'URL contiendrait également ce fichier) :
|
||||
|
||||
`https://<storage_account_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D`
|
||||
|
||||
Utilisez [**Storage Explorer**](https://azure.microsoft.com/en-us/features/storage-explorer/) pour accéder aux données
|
||||
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
Reference in New Issue
Block a user