Az - Unauthenticated Enum & Initial Entry
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Azure Tenant
Tenant Enumeration
Il existe certaines public Azure APIs telles que, en connaissant simplement le domain of the tenant, un attaquant peut les interroger pour obtenir plus dâinformations.
Vous pouvez interroger directement lâAPI ou utiliser la bibliothĂšque PowerShell AADInternals (Install-Module AADInternals):
- Informations de connexion incluant le tenant ID
Get-AADIntTenantID -Domain <domain>(API principalelogin.microsoftonline.com/<domain>/.well-known/openid-configuration)- Tous les domaines valides dans le tenant
Get-AADIntTenantDomains -Domain <domain>(API principaleautodiscover-s.outlook.com/autodiscover/autodiscover.svc)- Informations de connexion de lâutilisateur. Si
NameSpaceTypeestManaged, cela signifie quâEntraID est utilisĂ© Get-AADIntLoginInformation -UserName <UserName>(API principalelogin.microsoftonline.com/GetUserRealm.srf?login=<UserName>)
Vous pouvez interroger toutes les informations dâun Azure tenant avec une seule commande de AADInternals:
# Doesn't work in macos because 'Resolve-DnsName' doesn't exist
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
## Output Example of the Azure tenant info:
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 tenant, son ID et son nom de âbrandâ. De plus, le statut du Desktop Single Sign-On (SSO), aussi 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 ciblĂ©e.
De plus, la sortie prĂ©sente les noms de tous les domaines vĂ©rifiĂ©s associĂ©s au tenant ciblĂ©, ainsi que leurs types dâidentitĂ© respectifs. Dans le cas de domaines fĂ©dĂ©rĂ©s, le Fully Qualified Domain Name (FQDN) du fournisseur dâidentitĂ© utilisĂ©, typiquement un serveur ADFS, est Ă©galement divulguĂ©. La colonne âMXâ prĂ©cise si les e-mails sont routĂ©s vers Exchange Online, tandis que la colonne âSPFâ indique si Exchange Online est listĂ© comme expĂ©diteur dâe-mails. Il est important de noter que la fonction de reconnaissance actuelle nâanalyse pas les dĂ©clarations âincludeâ dans les enregistrements SPF, ce qui peut entraĂźner des faux nĂ©gatifs.
ĂnumĂ©ration des utilisateurs
Tip
Notez que mĂȘme si un tenant utilise plusieurs adresses e-mail pour le mĂȘme utilisateur, le nom dâutilisateur est unique. Cela signifie que cela ne fonctionnera quâavec le domaine associĂ© Ă lâutilisateur et pas avec les autres domaines.
Il est possible de vĂ©rifier si un nom dâutilisateur existe au sein dâun tenant. Cela inclut Ă©galement les guest users, dont le nom dâutilisateur est au format :
<email>#EXT#@<tenant name>.onmicrosoft.com
Lâemail correspond Ă lâadresse e-mail de lâutilisateur oĂč le «@» est remplacĂ© par un underscore «_». Avec AADInternals, vous pouvez facilement vĂ©rifier si lâutilisateur existe ou non :
# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
Veuillez fournir le contenu de src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md que vous souhaitez traduire.
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
Actuellement il existe 4 mĂ©thodes dâĂ©numĂ©ration diffĂ©rentes parmi lesquelles choisir. Vous pouvez trouver des informations dans Get-Help Invoke-AADIntUserEnumerationAsOutsider :
Il prend en charge les mĂ©thodes dâĂ©numĂ©ration suivantes : Normal, Login, Autologon et RST2.
-
La méthode Normal semble actuellement fonctionner avec tous les tenants. Auparavant, elle nécessitait que Desktop SSO (aka Seamless SSO) soit activé pour au moins un domaine.
-
La mĂ©thode Login fonctionne avec nâimporte quel tenant, mais les requĂȘtes dâĂ©numĂ©ration seront consignĂ©es dans le Azure AD sign-in log comme failed login events !
-
La méthode Autologon ne semble plus fonctionner avec tous les tenants. Elle nécessite probablement que DesktopSSO ou directory sync soit activé.
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 o365spray vous permet également de découvrir si un email est valide.
git clone https://github.com/0xZDH/o365spray
cd o365spray
python3 -m pip install -r requirements.txt
# Check 1 email
python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -u carlos
# Check a list of emails
python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -U /tmp/users.txt
User Enumeration via Microsoft Teams
Une autre bonne source dâinformation est Microsoft Teams.
LâAPI de Microsoft Teams permet de rechercher des utilisateurs. En particulier les âuser searchâ endpoints externalsearchv3 et searchUsers peuvent ĂȘtre utilisĂ©s pour demander des informations gĂ©nĂ©rales sur les comptes utilisateur inscrits Ă Teams.
Selon la rĂ©ponse de lâAPI, il est possible de distinguer les utilisateurs inexistants des utilisateurs existants qui ont un abonnement Teams valide.
Le script TeamsEnum peut ĂȘtre utilisĂ© pour valider un ensemble donnĂ© de noms dâutilisateur contre lâAPI Teams, mais vous avez besoin dâun compte utilisateur disposant dâun accĂšs Ă Teams pour lâutiliser.
# Install
git clone https://github.com/lucidra-security/TeamsEnum
cd TeamsEnum
python3 -m pip install -r requirements.txt
# Login and ask for password
python3 ./TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json
Je nâai pas le contenu du fichier. Veuillez coller ici le contenu de src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md que vous souhaitez traduire. Je renverrai la traduction en français en respectant vos consignes (ne pas traduire le code, les noms de plateformes, les liens, les tags, les chemins, etc.).
[-] 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 les informations de 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 enregistrĂ©s dans le fichier JSON :
jq . teamsenum-output.json
I donât have the README.md content. Please paste the file contents you want translated (Iâll keep code, tags, links and paths unchanged).
{
"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
}
]
}
Password Spraying / Brute-Force
Services Azure utilisant des domaines
Il est aussi possible dâessayer de trouver des services Azure exposĂ©s dans des sous-domaines Azure courants comme ceux documentĂ©s dans ce post:
- App Services:
azurewebsites.net - App Services â Management:
scm.azurewebsites.net - App Services:
p.azurewebsites.net - App Services:
cloudapp.net - Storage Accounts-Files:
file.core.windows.net - Storage Accounts-Blobs:
blob.core.windows.net - Storage Accounts-Queues:
queue.core.windows.net - Storage Accounts-Tables:
table.core.windows.net - Databases-Redis:
redis.cache.windows.net - Databases-Cosmos DB:
documents.azure.com - Databases-MSSQL:
database.windows.net - Key Vaults:
vault.azure.net - Microsoft Hosted Domain:
onmicrosoft.com - Email:
mail.protection.outlook.com - SharePoint:
sharepoint.com - CDN:
azureedge.net - Search Appliance:
search.windows.net - API Services:
azure-api.net
Vous pouvez utiliser une méthode de MicroBust pour cet objectif. Cette fonction recherchera le nom de domaine de base (et quelques permutations) dans plusieurs domaines Azure :
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
Phishing
- Common Phishing pour les credentials ou via OAuth Apps
- Device Code Authentication Phishing
Credentials du systĂšme de fichiers
Le az cli stocke beaucoup dâinformations intĂ©ressantes dans <HOME>/.Azure :
azureProfile.jsoncontient des infos sur les utilisateurs qui se sont connectés dans le passéclouds.configcontient des infos sur les abonnementsservice_principal_entries.jsoncontient les credentials des applications (tenant id, clients and secret)msal_token_cache.jsoncontient des access tokens et refresh tokens
Notez que sur macOS et linux ces fichiers sont non protégés, stockés en clair.
Références
- https://aadinternals.com/post/just-looking/
- https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/
- https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

