Az - Unauthenticated Enum & Initial Entry
Tip
Impara & pratica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Impara & pratica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Impara & pratica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Sostieni HackTricks
- Controlla i subscription plans!
- Unisciti al đŹ Discord group o al telegram group o seguici su Twitter đŚ @hacktricks_live.
- Condividi hacking tricks inviando PRs ai HackTricks e HackTricks Cloud github repos.
Azure Tenant
Tenant Enumeration
Esistono alcune API pubbliche di Azure che, conoscendo semplicemente il dominio del tenant, un attaccante può interrogare per raccogliere piÚ informazioni su di esso.
Puoi interrogare direttamente lâAPI o usare la libreria PowerShell AADInternals (Install-Module AADInternals):
- Informazioni di login, incluso il tenant ID
Get-AADIntTenantID -Domain <domain>(main APIlogin.microsoftonline.com/<domain>/.well-known/openid-configuration)- Tutti i domini validi nel tenant
Get-AADIntTenantDomains -Domain <domain>(main APIautodiscover-s.outlook.com/autodiscover/autodiscover.svc)- Informazioni di login dellâutente. Se
NameSpaceTypeèManaged, significa che viene usato EntraID Get-AADIntLoginInformation -UserName <UserName>(main APIlogin.microsoftonline.com/GetUserRealm.srf?login=<UserName>)
Puoi interrogare tutte le informazioni di un tenant Azure con un solo comando di 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
Ă possibile osservare dettagli sul tenant, come il nome, lâID e il âbrandâ name. Inoltre viene mostrato lo stato del Desktop Single Sign-On (SSO), noto anche come Seamless SSO. Quando abilitato, questa funzionalitĂ facilita la determinazione della presenza (enumeration) di uno specifico utente allâinterno dellâorganizzazione target.
Inoltre, lâoutput mostra i nomi di tutti i domini verificati associati al tenant target, insieme ai rispettivi identity types. Nel caso di domini federati, viene anche rivelato il Fully Qualified Domain Name (FQDN) dellâidentity provider in uso, tipicamente un server ADFS. La colonna âMXâ specifica se le email sono instradate verso Exchange Online, mentre la colonna âSPFâ indica la presenza di Exchange Online come mittente email. Ă importante notare che la funzione di reconnaissance attuale non analizza le istruzioni âincludeâ allâinterno dei SPF records, il che può portare a false negative.
User Enumeration
Tip
Nota che anche se un tenant usa piĂš email per lo stesso utente, il username è unico. Questo significa che funzionerĂ solo con il dominio associato allâutente e non con gli altri domini.
Ă possibile verificare se un username esiste allâinterno di un tenant. Questo include anche i guest users, il cui username ha il formato:
<email>#EXT#@<tenant name>.onmicrosoft.com
Lâemail è lâindirizzo dellâutente dove la â@â è sostituita dallâunderscore â_â.
Con AADInternals, puoi facilmente verificare se lâutente esiste o meno:
# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
Non ho il contenuto del file. Per favore incolla il testo di src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md e lo tradurrò in italiano mantenendo intatti markdown, tag e link.
UserName Exists
-------- ------
user@company.com True
Puoi anche usare un file di testo contenente un indirizzo email per riga:
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
Attualmente ci sono 4 diversi metodi di enumerazione tra cui scegliere. Puoi trovare informazioni in Get-Help Invoke-AADIntUserEnumerationAsOutsider:
Supporta i seguenti metodi di enumerazione: Normal, Login, Autologon e RST2.
-
Il metodo Normal sembra attualmente funzionare con tutti i tenant. In precedenza richiedeva che Desktop SSO (aka Seamless SSO) fosse abilitato per almeno un dominio.
-
Il metodo Login funziona con qualsiasi tenant, ma le query di enumerazione verranno registrate nei log di accesso di Azure AD come eventi di login non riusciti!
-
Il metodo Autologon non sembra piĂš funzionare con tutti i tenant. Probabilmente richiede che DesktopSSO o la sincronizzazione della directory siano abilitati.
Dopo aver scoperto gli username validi puoi ottenere info su un utente con:
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
Lo script o365spray permette anche di scoprire se unâemail è valida.
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
Unâaltra buona fonte di informazioni è Microsoft Teams.
LâAPI di Microsoft Teams permette di cercare utenti. In particolare gli endpoint âuser searchâ externalsearchv3 e searchUsers possono essere usati per richiedere informazioni generali sugli account utente registrati a Teams.
A seconda della risposta dellâAPI è possibile distinguere tra utenti non esistenti e utenti esistenti che hanno una sottoscrizione valida a Teams.
Lo script TeamsEnum può essere usato per verificare un insieme di nomi utente rispetto allâAPI di Teams, ma è necessario disporre di un account con accesso a Teams per poterlo usare.
# 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
Non hai incluso il contenuto del file. Per favore incolla il testo di src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md che desideri tradurre (manterrò intatti markdown, tag, link e percorsi).
[-] 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)
Ă inoltre possibile enumerare informazioni di disponibilitĂ sugli utenti esistenti come le seguenti:
- Available
- Away
- DoNotDisturb
- Busy
- Offline
Se è configurato un messaggio di assenza dallâufficio, è anche possibile recuperare il messaggio usando TeamsEnum. Se è stato specificato un file di output, i messaggi di assenza dallâufficio vengono automaticamente salvati nel file JSON:
jq . teamsenum-output.json
Non hai incluso il contenuto del file. Per favore incolla qui il testo di src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md che vuoi tradurre in italiano.
{
"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
Servizi Azure che usano domini
Ă anche possibile provare a individuare Azure services exposed in comuni sottodomini azure come quelli documentati in questo 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
Puoi usare un metodo di MicroBust per questo scopo. Questa funzione cercherĂ il nome di dominio base (e alcune permutazioni) in diversi azure domains:
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
Phishing
- Common Phishing per credentials o tramite OAuth Apps
- Device Code Authentication Phishing
Filesystem Credentials
The az cli memorizza molte informazioni interessanti in <HOME>/.Azure:
azureProfile.jsoncontiene informazioni sugli utenti che hanno effettuato lâaccesso in passatoclouds.configcontiene informazioni sulle sottoscrizioniservice_principal_entries.jsoncontiene le credentials delle applicazioni (tenant id, clients and secret)msal_token_cache.jsoncontiene access tokens and refresh tokens
Nota che su macOS e linux questi file sono unprotected memorizzati in chiaro.
Riferimenti
- 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
Impara & pratica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Impara & pratica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Impara & pratica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Sostieni HackTricks
- Controlla i subscription plans!
- Unisciti al đŹ Discord group o al telegram group o seguici su Twitter đŚ @hacktricks_live.
- Condividi hacking tricks inviando PRs ai HackTricks e HackTricks Cloud github repos.
HackTricks Cloud

