Files
hacktricks-cloud/src/pentesting-cloud/azure-security

Azure Pentesting

{{#include ../../banners/hacktricks-training.md}}

Informations de base

{{#ref}} az-basic-information/ {{#endref}}

Méthodologie de Pentesting/Red Team Azure

Pour auditer un environnement AZURE, il est très important de savoir : quels services sont utilisés, ce qui est exposé, qui a accès à quoi, et comment les services internes Azure et les services externes sont connectés.

Du point de vue d'une Red Team, la première étape pour compromettre un environnement Azure est d'obtenir des identifiants pour Azure AD. Voici quelques idées sur comment y parvenir :

  • Fuites sur github (ou similaire) - OSINT
  • Ingénierie Sociale
  • Réutilisation de mots de passe (fuites de mots de passe)
  • Vulnérabilités dans les applications hébergées sur Azure
  • Server Side Request Forgery avec accès au point de terminaison des métadonnées
  • Lecture de fichiers locaux
  • /home/USERNAME/.azure
  • C:\Users\USERNAME\.azure
  • Le fichier accessTokens.json dans az cli avant 2.30 - Jan2022 - stockait les jetons d'accès en texte clair
  • Le fichier azureProfile.json contient des informations sur l'utilisateur connecté.
  • az logout supprime le jeton.
  • Les anciennes versions de Az PowerShell stockaient les jetons d'accès en texte clair dans TokenCache.dat. Il stocke également le ServicePrincipalSecret en texte clair dans AzureRmContext.json. La cmdlet Save-AzContext peut être utilisée pour stocker les jetons.
    Utilisez Disconnect-AzAccount pour les supprimer.
  • Tiers violés
  • Employé interne
  • Phishing Commun (identifiants ou application Oauth)
  • Phishing par Authentification par Code de Dispositif
  • Password Spraying Azure

Même si vous n'avez compromis aucun utilisateur à l'intérieur du locataire Azure que vous attaquez, vous pouvez rassembler des informations à partir de celui-ci :

{{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}}

Note

Après avoir réussi à obtenir des identifiants, vous devez savoir à qui appartiennent ces identifiants, et à quoi ils ont accès, donc vous devez effectuer une énumération de base :

Énumération de base

Note

Rappelez-vous que la partie la plus bruyante de l'énumération est le login, pas l'énumération elle-même.

SSRF

Si vous avez trouvé un SSRF sur une machine à l'intérieur d'Azure, consultez cette page pour des astuces :

{{#ref}} https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html {{#endref}}

Contournement des Conditions de Connexion

Dans les cas où vous avez des identifiants valides mais que vous ne pouvez pas vous connecter, voici quelques protections courantes qui pourraient être en place :

  • 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 pays au moins)
  • 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.

Prise de Contrôle de Sous-domaine

Whoami

Caution

Apprenez comment installer az cli, AzureAD et Az PowerShell dans la section Az - Entra ID.

L'une des premières choses que vous devez savoir est qui vous êtes (dans quel environnement vous êtes) :

{{#tabs }} {{#tab name="az cli" }}

az account list
az account tenant list # Current tenant info
az account subscription list # Current subscription info
az ad signed-in-user show # Current signed-in user
az ad signed-in-user list-owned-objects # Get owned objects by current user
az account management-group list #Not allowed by default

{{#endtab }}

{{#tab name="AzureAD" }}

#Get the current session state
Get-AzureADCurrentSessionInfo
#Get details of the current tenant
Get-AzureADTenantDetail

{{#endtab }}

{{#tab name="Az PowerShell" }}

# Get the information about the current context (Account, Tenant, Subscription etc.)
Get-AzContext
# List all available contexts
Get-AzContext -ListAvailable
# Enumerate subscriptions accessible by the current user
Get-AzSubscription
#Get Resource group
Get-AzResourceGroup
# Enumerate all resources visible to the current user
Get-AzResource
# Enumerate all Azure RBAC role assignments
Get-AzRoleAssignment # For all users
Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user

{{#endtab }} {{#endtabs }}

Caution

L'une des commandes les plus importantes pour énumérer Azure est Get-AzResource depuis Az PowerShell car elle vous permet de savoir quels ressources votre utilisateur actuel peut voir.

Vous pouvez obtenir les mêmes informations dans la console web en allant sur https://portal.azure.com/#view/HubsExtension/BrowseAll ou en recherchant "Toutes les ressources"

Énumération d'Entra ID

Par défaut, tout utilisateur devrait avoir suffisamment de permissions pour énumérer des éléments tels que, utilisateurs, groupes, rôles, services principaux... (vérifiez les permissions par défaut d'AzureAD).
Vous pouvez trouver ici un guide :

{{#ref}} az-services/az-azuread.md {{#endref}}

Note

Maintenant que vous avez des informations sur vos identifiants (et si vous êtes une équipe rouge, espérons que vous n'avez pas été détecté). Il est temps de déterminer quels services sont utilisés dans l'environnement.
Dans la section suivante, vous pouvez vérifier quelques façons d'énumérer certains services courants.

App Service SCM

Console Kudu pour se connecter au 'conteneur' du Service d'Application.

Webshell

Utilisez portal.azure.com et sélectionnez le shell, ou utilisez shell.azure.com, pour un bash ou powershell. Le 'disque' de ce shell est stocké sous forme de fichier image dans un compte de stockage.

Azure DevOps

Azure DevOps est séparé d'Azure. Il a des dépôts, des pipelines (yaml ou release), des tableaux, un wiki, et plus encore. Les Groupes de Variables sont utilisés pour stocker des valeurs de variables et des secrets.

{{#include ../../banners/hacktricks-training.md}}