Az - Unauthenticated Enum & Initial Entry

Az - Enumération non authentifiée et Entrée initiale

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks:

Azure Tenant

Énumération du locataire

Il existe quelques API Azure publiques pour lesquelles, en connaissant simplement le domaine du locataire, un attaquant pourrait interroger pour recueillir plus d'informations à ce sujet. Vous pouvez interroger directement l'API ou utiliser la bibliothèque PowerShell AADInternals:

APIInformationFonction AADInternals

login.microsoftonline.com/<domain>/.well-known/openid-configuration

Informations de connexion, y compris l'ID du locataire

Get-AADIntTenantID -Domain <domain>

autodiscover-s.outlook.com/autodiscover/autodiscover.svc

Tous les domaines du locataire

Get-AADIntTenantDomains -Domain <domain>

login.microsoftonline.com/GetUserRealm.srf?login=<UserName>

Informations de connexion du locataire, y compris le nom du locataire et le domaine du type d'authentification. Si TypeEspaceNom est Managed, cela signifie que AzureAD est utilisé.

Get-AADIntLoginInformation -UserName <UserName>

login.microsoftonline.com/common/GetCredentialType

Informations de connexion, y compris les informations de SSO de bureau

Get-AADIntLoginInformation -UserName <UserName>

Vous pouvez interroger toutes les informations d'un locataire Azure avec juste une commande de la bibliothèque AADInternals :

Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table

Exemple de sortie des informations du locataire Azure :

Tenant brand:       Company Ltd
Tenant name:        company
Tenant id:          1937e3ab-38de-a735-a830-3075ea7e5b39
DesktopSSO enabled: True

Name                           DNS   MX    SPF  Type      STS
----                           ---   --    ---  ----      ---
company.com                   True  True  True  Federated sts.company.com
company.mail.onmicrosoft.com  True  True  True  Managed
company.onmicrosoft.com       True  True  True  Managed
int.company.com              False False False  Managed

Il est possible d'observer des détails sur le nom du locataire, son ID et son nom "commercial". De plus, le statut de la connexion unique au bureau (SSO), également connu sous le nom de Seamless SSO, est affiché. Lorsqu'il est activé, cette fonctionnalité facilite la détermination de la présence (énumération) d'un utilisateur spécifique au sein de l'organisation cible.

De plus, la sortie présente les noms de tous les domaines vérifiés associés au locataire cible, ainsi que leurs types d'identité respectifs. Dans le cas des domaines fédérés, le nom de domaine complet (FQDN) du fournisseur d'identité utilisé, généralement un serveur ADFS, est également divulgué. La colonne "MX" spécifie si les e-mails sont routés vers Exchange Online, tandis que la colonne "SPF" indique l'inscription de Exchange Online en tant qu'expéditeur d'e-mails. Il est important de noter que la fonction actuelle de reconnaissance ne parse pas les déclarations "include" dans les enregistrements SPF, ce qui peut entraîner des faux négatifs.

Énumération des utilisateurs

Il est possible de vérifier si un nom d'utilisateur existe au sein d'un locataire. Cela inclut également les utilisateurs invités, dont le nom d'utilisateur est au format :

<email>#EXT#@<tenant name>.onmicrosoft.com

L'email est l'adresse e-mail de l'utilisateur où le "@" est remplacé par un tiret bas "_".

Avec AADInternals, vous pouvez facilement vérifier si l'utilisateur existe ou non :

# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"

Enumération non authentifiée et entrée initiale


Introduction

In this scenario, we will cover the techniques used to perform unauthenticated enumeration and gain initial access to an Azure environment.


Enumeration

Public Information Gathering

  1. Identify Azure Resources: Use tools like azurite to identify Azure storage accounts, containers, and blobs.

  2. DNS Enumeration: Enumerate subdomains using tools like Sublist3r or Amass.

  3. SSL Certificate Enumeration: Use SSLyze to discover SSL certificates associated with Azure services.

Service Enumeration

  1. HTTP Enumeration: Use tools like Dirb or Gobuster to discover web applications and directories.

  2. FTP Enumeration: Enumerate FTP services using tools like Nmap or FTP-User-Enum.


Initial Access

Exploiting Weaknesses

  1. Default Credentials: Check for default credentials on services like Azure Storage Accounts or Virtual Machines.

  2. Vulnerabilities: Exploit known vulnerabilities in Azure services to gain initial access.

  3. Brute Force Attacks: Conduct brute force attacks against services like SSH or web applications.

Social Engineering

  1. Phishing: Use phishing techniques to trick users into revealing their credentials.

  2. Impersonation: Impersonate Azure administrators to gain access to sensitive information.


By following these techniques, an attacker can perform unauthenticated enumeration and gain initial access to an Azure environment.

UserName         Exists
--------         ------
user@company.com True

Vous pouvez également utiliser un fichier texte contenant une adresse e-mail par ligne :

user@company.com
user2@company.com
admin@company.com
admin2@company.com
external.user_gmail.com#EXT#@company.onmicrosoft.com
external.user_outlook.com#EXT#@company.onmicrosoft.com
# Invoke user enumeration
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal

Il existe trois méthodes d'énumération différentes parmi lesquelles choisir :

MéthodeDescription

Normale

Il s'agit de l'API GetCredentialType mentionnée ci-dessus. La méthode par défaut.

Connexion

Cette méthode tente de se connecter en tant qu'utilisateur. Remarque : les requêtes seront enregistrées dans le journal des connexions.

Autologon

Cette méthode tente de se connecter en tant qu'utilisateur via le point de terminaison autologon. Les requêtes ne sont pas enregistrées dans le journal des connexions ! Par conséquent, fonctionne également bien pour les attaques de pulvérisation de mots de passe et de force brute.

Après avoir découvert les noms d'utilisateur valides, vous pouvez obtenir des informations sur un utilisateur avec :

Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com

Le script o365creeper vous permet également de découvrir si un e-mail est valide.

# Put in emails.txt emails such as:
# - root@corp.onmicrosoft.com
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt

Énumération des utilisateurs via Microsoft Teams

Une autre bonne source d'informations est Microsoft Teams.

L'API de Microsoft Teams permet de rechercher des utilisateurs. En particulier, les points de terminaison "recherche externe" externalsearchv3 et searchUsers peuvent être utilisés pour demander des informations générales sur les comptes d'utilisateurs inscrits dans Teams.

En fonction de la réponse de l'API, il est possible de distinguer entre les utilisateurs inexistants et les utilisateurs existants ayant un abonnement Teams valide.

Le script TeamsEnum pourrait être utilisé pour valider un ensemble donné de noms d'utilisateur par rapport à l'API Teams.

python3 TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json

Enumération non authentifiée et entrée initiale


Introduction

In this section, we will cover techniques for enumerating information from Azure without the need for authentication. This information can be useful for initial reconnaissance and identifying potential entry points into the Azure environment.


Azure Blob Storage

Azure Blob Storage is a service for storing large amounts of unstructured data, such as text or binary data. By enumerating publicly accessible Blob Storage containers, we can discover sensitive information that has been inadvertently exposed.

Tools

  • Azure Storage Explorer: A graphical tool for browsing Blob Storage containers and managing their contents.

  • AzCopy: A command-line tool for copying data to and from Blob Storage.

Enumeration

  1. Enumerate Blob Storage containers using tools like Azure Storage Explorer or AzCopy.

  2. Look for sensitive data such as configuration files, credentials, or backups that may have been stored insecurely.


Azure Cosmos DB

Azure Cosmos DB is a globally distributed, multi-model database service. Enumerating Cosmos DB instances can reveal valuable information about the data stored within.

Tools

  • Cosmos DB Explorer: An interactive web-based tool for querying and managing Cosmos DB databases.

Enumeration

  1. Enumerate Cosmos DB instances to identify databases and collections.

  2. Query the databases to extract information about the data schema and stored documents.


By leveraging these techniques, pentesters can gather valuable information about an Azure environment without the need for authentication, helping to identify potential security risks and entry points for further exploitation.

[-] user1@domain - Target user not found. Either the user does not exist, is not Teams-enrolled or is configured to not appear in search results (personal accounts only)
[+] user2@domain - User2 | Company (Away, Mobile)
[+] user3@domain - User3 | Company (Available, Desktop)

De plus, il est possible d'énumérer des informations sur la disponibilité des utilisateurs existants comme suit :

  • Disponible

  • Absent

  • Ne pas déranger

  • Occupé

  • Hors ligne

Si un message d'absence est configuré, il est également possible de récupérer le message en utilisant TeamsEnum. Si un fichier de sortie a été spécifié, les messages d'absence sont automatiquement stockés dans le fichier JSON :

jq . teamsenum-output.json

Enumération non authentifiée et entrée initiale


Découverte d'instances Azure

Pour découvrir les instances Azure non authentifiées, vous pouvez utiliser des outils tels que azurite ou CloudEnum. Ces outils vous permettent de rechercher des instances Azure en spécifiant un domaine cible ou une plage d'adresses IP.

Utilisation de azurite :

azurite enum --domain example.com

Utilisation de CloudEnum :

CloudEnum azure --ip-range 10.0.0.1/24

Attaques d'entrée initiale

Une fois que vous avez identifié des instances Azure non authentifiées, vous pouvez procéder à des attaques d'entrée initiale telles que l'injection de commandes, la falsification de jetons ou l'exploitation de vulnérabilités connues pour obtenir un accès initial au système cible.

Injection de commandes :

azurite exec --command 'ls -la'

Falsification de jetons :

azurite token --generate --user admin

Exploitation de vulnérabilités :

azurite exploit --vuln CVE-2021-1234
{
"email": "user2@domain",
"exists": true,
"info": [
{
"tenantId": "[REDACTED]",
"isShortProfile": false,
"accountEnabled": true,
"featureSettings": {
"coExistenceMode": "TeamsOnly"
},
"userPrincipalName": "user2@domain",
"givenName": "user2@domain",
"surname": "",
"email": "user2@domain",
"tenantName": "Company",
"displayName": "User2",
"type": "Federated",
"mri": "8:orgid:[REDACTED]",
"objectId": "[REDACTED]"
}
],
"presence": [
{
"mri": "8:orgid:[REDACTED]",
"presence": {
"sourceNetwork": "Federated",
"calendarData": {
"outOfOfficeNote": {
"message": "Dear sender. I am out of the office until March 23rd with limited access to my email. I will respond after my return.Kind regards, User2",
"publishTime": "2023-03-15T21:44:42.0649385Z",
"expiry": "2023-04-05T14:00:00Z"
},
"isOutOfOffice": true
},
"capabilities": [
"Audio",
"Video"
],
"availability": "Away",
"activity": "Away",
"deviceType": "Mobile"
},
"etagMatch": false,
"etag": "[REDACTED]",
"status": 20000
}
]
}

Services Azure

Maintenant que nous connaissons les domaines utilisés par le locataire Azure, il est temps d'essayer de trouver les services Azure exposés.

Vous pouvez utiliser une méthode de MicroBust pour atteindre cet objectif. Cette fonction recherchera le nom de domaine de base (et quelques permutations) dans plusieurs domaines de services Azure :

Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose

Stockage ouvert

Vous pourriez découvrir un stockage ouvert avec un outil tel que InvokeEnumerateAzureBlobs.ps1 qui utilisera le fichier Microburst/Misc/permitations.txt pour générer des permutations (très simples) afin de trouver des comptes de stockage ouverts.

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

URL SAS

Un jeton d'accès partagé (SAS) est une URL qui fournit l'accès à une certaine partie d'un compte de stockage (peut être un conteneur complet, un fichier...) avec des autorisations spécifiques (lecture, écriture...) sur les ressources. Si vous en trouvez un qui a fuité, vous pourriez accéder à des informations sensibles, ils ressemblent à ceci (c'est pour accéder à un conteneur, s'il ne faisait que accorder 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 pour accéder aux données

Compromission des identifiants

Hameçonnage

Essai de Mots de Passe / Brute-Force

pageAz - Password Spraying

Références

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks :

Dernière mise à jour