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

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 API login.microsoftonline.com/<domain>/.well-known/openid-configuration)
  • Tutti i domini validi nel tenant
  • Get-AADIntTenantDomains -Domain <domain> (main API autodiscover-s.outlook.com/autodiscover/autodiscover.svc)
  • Informazioni di login dell’utente. Se NameSpaceType è Managed, significa che viene usato EntraID
  • Get-AADIntLoginInformation -UserName <UserName> (main API login.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

Az - Password Spraying

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

Filesystem Credentials

The az cli memorizza molte informazioni interessanti in <HOME>/.Azure:

  • azureProfile.json contiene informazioni sugli utenti che hanno effettuato l’accesso in passato
  • clouds.config contiene informazioni sulle sottoscrizioni
  • service_principal_entries.json contiene le credentials delle applicazioni (tenant id, clients and secret)
  • msal_token_cache.json contiene access tokens and refresh tokens

Nota che su macOS e linux questi file sono unprotected memorizzati in chiaro.

Riferimenti

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