Az - Unauthenticated Enum & Initial Entry
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Azure Tenant
Tenant Enumeration
Istnieją pewne public Azure APIs, dzięki którym atakujący, znając tylko domenę tenant’a, może wykonać zapytania, aby zebrać więcej informacji o nim.\
Możesz zapytać bezpośrednio API lub użyć biblioteki PowerShell AADInternals (Install-Module AADInternals):
- Informacje o logowaniu, w tym tenant ID
Get-AADIntTenantID -Domain <domain>(main APIlogin.microsoftonline.com/<domain>/.well-known/openid-configuration)- Wszystkie poprawne domeny w tenant
Get-AADIntTenantDomains -Domain <domain>(main APIautodiscover-s.outlook.com/autodiscover/autodiscover.svc)- Informacje o logowaniu użytkownika. Jeśli
NameSpaceTypejestManaged, oznacza to, że używane jest EntraID Get-AADIntLoginInformation -UserName <UserName>(main APIlogin.microsoftonline.com/GetUserRealm.srf?login=<UserName>)
Możesz uzyskać wszystkie informacje o Azure tenant za pomocą jednego polecenia z 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
Można zobaczyć szczegóły dotyczące nazwy tenanta, ID oraz nazwy “brand”. Dodatkowo wyświetlany jest status Desktop Single Sign-On (SSO), znanego również jako Seamless SSO. Po włączeniu funkcja ta ułatwia ustalenie obecności (enumerację) konkretnego użytkownika w docelowej organizacji.
Dodatkowo wynik przedstawia nazwy wszystkich zweryfikowanych domen powiązanych z docelowym tenantem wraz z ich typami tożsamości. W przypadku domen federowanych ujawniany jest również Fully Qualified Domain Name (FQDN) dostawcy tożsamości w użyciu, zazwyczaj serwera ADFS. Kolumna “MX” określa, czy wiadomości e-mail są kierowane do Exchange Online, natomiast kolumna “SPF” wskazuje, czy Exchange Online jest wymienione jako nadawca e-maili. Ważne: aktualna funkcja rozpoznawcza nie parsuje instrukcji “include” w rekordach SPF, co może skutkować fałszywie negatywnymi wynikami.
Enumeracja użytkowników
Tip
Należy pamiętać, że nawet jeśli tenant używa kilku adresów e-mail dla tego samego użytkownika, username is unique. Oznacza to, że będzie to działać tylko z domeną powiązaną z użytkownikiem, a nie z innymi domenami.
Można sprawdzić, czy username istnieje w obrębie tenanta. Dotyczy to również guest users, których username ma format:
<email>#EXT#@<tenant name>.onmicrosoft.com
Adres e-mail to adres użytkownika, w którym znak „@” został zastąpiony znakiem podkreślenia „_”.
Za pomocą AADInternals możesz łatwo sprawdzić, czy użytkownik istnieje, czy nie:
# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
Nie otrzymałem treści pliku README.md. Proszę wklej zawartość (z zachowaniem oryginalnego markdown/html), a przetłumaczę ją na polski zgodnie z wytycznymi.
UserName Exists
-------- ------
user@company.com True
Możesz też użyć pliku tekstowego z jednym adresem e-mail na wiersz:
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
Obecnie dostępne są 4 różne metody enumeracji do wyboru. Informacje można znaleźć w Get-Help Invoke-AADIntUserEnumerationAsOutsider:
Obsługuje następujące metody enumeracji: Normal, Login, Autologon i RST2.
-
Metoda Normal wydaje się obecnie działać we wszystkich tenants. Wcześniej wymagała włączenia Desktop SSO (aka Seamless SSO) dla przynajmniej jednej domeny.
-
Metoda Login działa w każdym tenants, ale zapytania enumeracyjne będą rejestrowane w Azure AD sign-in log jako nieudane zdarzenia logowania!
-
Metoda Autologon wydaje się już nie działać we wszystkich tenants. Prawdopodobnie wymaga, aby DesktopSSO lub directory sync były włączone.
Po odkryciu poprawnych nazw użytkowników możesz uzyskać informacje o użytkowniku za pomocą:
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
Skrypt o365spray pozwala również sprawdzić czy adres e-mail jest prawidłowy.
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
Innym dobrym źródłem informacji jest Microsoft Teams.
API Microsoft Teams umożliwia wyszukiwanie użytkowników. W szczególności endpointy “user search” externalsearchv3 i searchUsers mogą być użyte do pobrania ogólnych informacji o kontach użytkowników zarejestrowanych w Teams.
W zależności od odpowiedzi API można rozróżnić między użytkownikami nieistniejącymi a istniejącymi użytkownikami posiadającymi ważną subskrypcję Teams.
Skrypt TeamsEnum może służyć do weryfikacji podanego zestawu nazw użytkowników za pomocą Teams API, ale wymaga dostępu do konta użytkownika z dostępem do Teams.
# 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
I don’t have the README.md content. Proszę wklej zawartość pliku README.md, którą chcesz przetłumaczyć na polski.
[-] 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)
Ponadto możliwe jest wyenumerowanie informacji o dostępności istniejących użytkowników, takich jak:
- Dostępny
- Nieobecny
- Nie przeszkadzać
- Zajęty
- Niedostępny
Jeśli skonfigurowano wiadomość poza biurem, możliwe jest również pobranie tej wiadomości przy użyciu TeamsEnum. Jeśli określono plik wyjściowy, wiadomości poza biurem są automatycznie zapisywane w pliku JSON:
jq . teamsenum-output.json
Proszę wklej zawartość pliku src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md, który chcesz przetłumaczyć na polski.
{
"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
Usługi Azure używające domen
Można również spróbować znaleźć usługi Azure ujawnione w popularnych subdomenach Azure, takich jak opisane w tym poście:
- 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
Możesz użyć metody z MicroBust w tym celu. Funkcja przeszuka nazwę domeny bazowej (oraz kilka permutacji) w kilku domenach Azure:
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
Phishing
- Common Phishing do pozyskania credentials lub przez OAuth Apps
- Device Code Authentication Phishing
System plików Credentials
The az cli przechowuje wiele interesujących informacji w <HOME>/.Azure:
azureProfile.jsonzawiera informacje o użytkownikach zalogowanych w przeszłościclouds.configzawiera informacje o subskrypcjachservice_principal_entries.jsonzawiera credentials aplikacji (tenant id, clients and secret)msal_token_cache.jsonzawiera access tokens and refresh tokens
Zauważ, że w macOS i linux te pliki są niechronione i przechowywane w postaci jawnej.
Źródła
- 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
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

