Az - Unauthenticated Enum & Initial Entry

Tip

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstütze HackTricks

Azure Tenant

Tenant Enumeration

Es gibt einige public Azure APIs, bei denen ein Angreifer allein durch Kenntnis der Tenant-Domain weitere Informationen darüber abfragen kann.
Du kannst die API direkt abfragen oder die PowerShell-Bibliothek AADInternals verwenden (Install-Module AADInternals):

  • Login-Informationen inklusive Tenant ID
  • Get-AADIntTenantID -Domain <domain> (main API login.microsoftonline.com/<domain>/.well-known/openid-configuration)
  • Alle gültigen Domains im Tenant
  • Get-AADIntTenantDomains -Domain <domain> (main API autodiscover-s.outlook.com/autodiscover/autodiscover.svc)
  • Login-Informationen des Users. Wenn NameSpaceType Managed ist, bedeutet das, dass EntraID verwendet wird
  • Get-AADIntLoginInformation -UserName <UserName> (main API login.microsoftonline.com/GetUserRealm.srf?login=<UserName>)

Du kannst alle Informationen eines Azure-Tenants mit nur einem Befehl aus AADInternals abfragen:

# 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

Es ist möglich, Details zum Tenant-Namen, zur Tenant-ID und zum „Brand“-Namen zu sehen. Zusätzlich wird der Status von Desktop Single Sign-On (SSO), auch bekannt als Seamless SSO, angezeigt. Wenn aktiviert, erleichtert diese Funktion die Feststellung (enumeration), ob ein bestimmter Benutzer in der Zielorganisation vorhanden ist.

Außerdem zeigt die Ausgabe die Namen aller verifizierten Domains des Ziel-Tenants sowie deren jeweilige Identity-Typen. Bei föderierten Domains wird außerdem der Fully Qualified Domain Name (FQDN) des verwendeten Identity Providers, typischerweise ein ADFS-Server, offengelegt. Die Spalte “MX” gibt an, ob E-Mails an Exchange Online geleitet werden, während die Spalte “SPF” angibt, ob Exchange Online als E-Mail-Sender aufgeführt ist. Es ist wichtig zu beachten, dass die aktuelle reconnaissance-Funktion die “include”-Anweisungen in SPF-Records nicht parst, was zu false negatives führen kann.

User Enumeration

Tip

Beachte, dass selbst wenn ein Tenant mehrere E-Mails für denselben Benutzer verwendet, der username ist eindeutig. Das bedeutet, dass es nur mit der Domain funktioniert, die der Nutzer zugeordnet hat, und nicht mit anderen Domains.

Es ist möglich zu prüfen, ob ein username innerhalb eines Tenants existiert. Dies schließt auch guest users ein, deren username im Format:

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

Die E-Mail ist die E-Mail-Adresse des Benutzers, wobei das „@“ durch einen Unterstrich „_“ ersetzt ist.

Mit AADInternals können Sie leicht prüfen, ob der Benutzer existiert oder nicht:

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

Bitte den Inhalt von src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md hier einfügen, damit ich ihn ins Deutsche übersetzen kann.

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

Sie können auch eine Textdatei verwenden, die pro Zeile eine E-Mail‑Adresse enthält:

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

Derzeit gibt es 4 verschiedene enumeration methods zur Auswahl. Weitere Informationen finden Sie in Get-Help Invoke-AADIntUserEnumerationAsOutsider:

Es unterstützt folgende enumeration methods: Normal, Login, Autologon, and RST2.

  • Die Normal-Methode scheint derzeit mit allen tenants zu funktionieren. Früher erforderte sie jedoch Desktop SSO (aka Seamless SSO), das für mindestens eine Domain aktiviert sein musste.

  • Die Login-Methode funktioniert mit jedem tenant, aber enumeration queries werden im Azure AD sign-in log als failed login events protokolliert!

  • Die Autologon-Methode scheint nicht mehr bei allen tenants zu funktionieren. Vermutlich erfordert sie, dass DesktopSSO oder directory sync aktiviert ist.

Nachdem Sie die gültigen Benutzernamen entdeckt haben, können Sie info about a user mit:

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

Das Skript o365spray ermöglicht es Ihnen außerdem, zu prüfen, ob eine E‑Mail gültig ist.

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

Eine weitere gute Informationsquelle ist Microsoft Teams.

Die API von Microsoft Teams ermöglicht die Suche nach Benutzern. Insbesondere die “user search”-Endpoints externalsearchv3 und searchUsers können verwendet werden, um allgemeine Informationen über bei Teams registrierte Benutzerkonten abzufragen.

Abhängig von der API-Antwort ist es möglich, zwischen nicht existierenden Benutzern und existierenden Benutzern zu unterscheiden, die ein gültiges Teams-Abonnement haben.

Das Skript TeamsEnum kann verwendet werden, um eine gegebene Menge von Benutzernamen gegen die Teams-API zu validieren, allerdings benötigen Sie Zugriff auf einen Benutzer mit Teams-Zugang, um es zu nutzen.

# 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

Bitte den Inhalt der Datei src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md hier einfügen, damit ich ihn ins Deutsche übersetzen kann.

[-] 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)

Außerdem ist es möglich, Verfügbarkeitsinformationen über vorhandene Benutzer wie folgt abzufragen:

  • Available
  • Away
  • DoNotDisturb
  • Busy
  • Offline

Wenn eine Abwesenheitsnotiz konfiguriert ist, ist es außerdem möglich, die Nachricht mit TeamsEnum abzurufen. Falls eine Ausgabedatei angegeben wurde, werden die Abwesenheitsnachrichten automatisch in der JSON-Datei gespeichert:

jq . teamsenum-output.json

Bitte füge hier den Inhalt der Datei src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md ein. Ich übersetze ihn dann ins Deutsche und behalte dabei exakt alle Markdown-/HTML-Tags, Links, Pfade und die nicht zu übersetzenden Begriffe bei.

{
"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

Azure-Services mit Domains

Es ist auch möglich, zu versuchen, exponierte Azure Services in gängigen Azure-Subdomains zu finden, wie in diesem Beitrag:

  • 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

You can use a method from MicroBust for such goal. This function will search the base domain name (and a few permutations) in several Azure-Domains:

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

Phishing

Dateisystem-Credentials

Das az cli speichert viele interessante Informationen in <HOME>/.Azure:

  • azureProfile.json enthält Informationen über in der Vergangenheit angemeldete Benutzer
  • clouds.config enthält Informationen über Abonnements
  • service_principal_entries.json enthält Anwendungs-credentials (tenant id, clients und secret)
  • msal_token_cache.json enthält access tokens und refresh tokens

Beachte, dass unter macOS und linux diese Dateien ungeschützt im Klartext gespeichert sind.

Referenzen

Tip

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstütze HackTricks