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
- Sieh dir die Abonnementpläne an!
- Tritt der 💬 Discord group oder der telegram group bei oder folge uns auf Twitter 🐦 @hacktricks_live.
- Teile Hacking-Tricks, indem du PRs an die HackTricks und HackTricks Cloud GitHub-Repos einreichst.
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 APIlogin.microsoftonline.com/<domain>/.well-known/openid-configuration)- Alle gültigen Domains im Tenant
Get-AADIntTenantDomains -Domain <domain>(main APIautodiscover-s.outlook.com/autodiscover/autodiscover.svc)- Login-Informationen des Users. Wenn
NameSpaceTypeManagedist, bedeutet das, dass EntraID verwendet wird Get-AADIntLoginInformation -UserName <UserName>(main APIlogin.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
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
- Common Phishing für credentials oder über OAuth Apps
- Device Code Authentication Phishing
Dateisystem-Credentials
Das az cli speichert viele interessante Informationen in <HOME>/.Azure:
azureProfile.jsonenthält Informationen über in der Vergangenheit angemeldete Benutzerclouds.configenthält Informationen über Abonnementsservice_principal_entries.jsonenthält Anwendungs-credentials (tenant id, clients und secret)msal_token_cache.jsonenthält access tokens und refresh tokens
Beachte, dass unter macOS und linux diese Dateien ungeschützt im Klartext gespeichert sind.
Referenzen
- 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
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
- Sieh dir die Abonnementpläne an!
- Tritt der 💬 Discord group oder der telegram group bei oder folge uns auf Twitter 🐦 @hacktricks_live.
- Teile Hacking-Tricks, indem du PRs an die HackTricks und HackTricks Cloud GitHub-Repos einreichst.
HackTricks Cloud

