Az - Unauthenticated Enum & Initial Entry

Tip

Nauči & vežbaj AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Azure Tenant

Tenant Enumeration

Postoje neki javni Azure API-ji koje, samo poznavanjem domena tenant-a, napadač može upitom ispitati da bi prikupio više informacija o njemu.
Možete direktno upitati API ili koristiti PowerShell biblioteku AADInternals (Install-Module AADInternals):

  • Podaci za prijavu uključujući tenant ID
  • Get-AADIntTenantID -Domain <domain> (main API login.microsoftonline.com/<domain>/.well-known/openid-configuration)
  • Svi važeći domeni u tenant-u
  • Get-AADIntTenantDomains -Domain <domain> (main API autodiscover-s.outlook.com/autodiscover/autodiscover.svc)
  • Informacije o prijavi korisnika. Ako je NameSpaceType Managed, to znači da se koristi EntraID
  • Get-AADIntLoginInformation -UserName <UserName> (main API login.microsoftonline.com/GetUserRealm.srf?login=<UserName>)

Možete dohvatiti sve informacije o Azure tenant-u sa samo jednom komandom iz 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

Moguće je videti detalje o imenu tenant-a, ID-u i „brand“ nazivu. Dodatno, prikazan je i status Desktop Single Sign-On (SSO), poznat i kao Seamless SSO. Kada je omogućen, ova funkcija olakšava utvrđivanje prisustva (enumeraciju) određenog korisnika unutar ciljne organizacije.

Štaviše, izlaz prikazuje nazive svih verifikovanih domena povezanih sa ciljnim tenant-om, zajedno sa njihovim tipovima identiteta. U slučaju federisanih domena, FQDN identity providera u upotrebi, tipično ADFS server, je takođe prikazan. Kolona “MX” označava da li su mejlovi usmereni na Exchange Online, dok kolona “SPF” označava da li je Exchange Online naveden kao pošiljalac mejlova. Važno je napomenuti da trenutna funkcija izviđanja ne parsira “include” naredbe unutar SPF zapisa, što može dovesti do lažno negativnih rezultata.

Enumeracija korisnika

Tip

Imajte na umu da čak i ako tenant koristi više email adresa za istog korisnika, korisničko ime je jedinstveno. To znači da će raditi samo sa domenom sa kojom je korisnik povezan, a ne sa drugim domenima.

Moguće je proveriti da li korisničko ime postoji u okviru tenant-a. Ovo uključuje i guest users, čije je korisničko ime u formatu:

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

Email je korisnikova adresa gde je znak “@” zamenjen donjom crtom “_“.

Pomoću AADInternals možete lako proveriti da li korisnik postoji ili ne:

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

Navedite sadržaj datoteke src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md koju želite da prevedem. Ne prevodim kod, nazive tehnika, imena platformi, linkove, putanje i markdown/tagove.

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

Takođe možete koristiti tekstualnu datoteku koja sadrži po jednu email adresu u svakom redu:

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

Trenutno postoje 4 različite metode enumeracije koje možete izabrati. Informacije možete pronaći u Get-Help Invoke-AADIntUserEnumerationAsOutsider:

Podržava sledeće metode enumeracije: Normal, Login, Autologon, and RST2.

  • Metoda Normal trenutno izgleda da radi sa svim tenantima. Ranije je zahtevala da Desktop SSO (aka Seamless SSO) bude omogućen za bar jedan domen.

  • Metoda Login radi sa bilo kojim tenantom, ali će upiti za enumeraciju biti zabeleženi u Azure AD sign-in log kao neuspešni događaji prijave!

  • Metoda Autologon izgleda više ne radi sa svim tenantima. Verovatno zahteva da DesktopSSO ili directory sync budu omogućeni.

Nakon što otkrijete validna korisnička imena, možete dobiti informacije o korisniku pomoću:

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

Skripta o365spray vam takođe omogućava da otkrijete da li je email validan.

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 putem Microsoft Teams

Još jedan dobar izvor informacija je Microsoft Teams.

API Microsoft Teams omogućava pretragu korisnika. Konkretno, “user search” endpointi externalsearchv3 i searchUsers mogu se koristiti za zahtev opštih informacija o korisničkim nalozima registrovanim u Teams.

U zavisnosti od odgovora API-ja moguće je razlikovati nepostojeće korisnike od postojećih korisnika koji imaju važeću Teams pretplatu.

Skript TeamsEnum može se koristiti za validaciju zadatog skupa korisničkih imena prema Teams API-ju, ali je za njegovo korišćenje potreban nalog koji ima pristup 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

Molim vas pošaljite sadržaj fajla src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md koji želite da prevedem.

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

Pored toga, moguće je izlistati informacije o dostupnosti postojećih korisnika poput sledećih:

  • Available
  • Away
  • DoNotDisturb
  • Busy
  • Offline

Ako je konfigurisana poruka o odsutnosti, takođe je moguće preuzeti poruku koristeći TeamsEnum. Ako je naveden izlazni fajl, poruke o odsutnosti se automatski čuvaju u JSON fajlu:

jq . teamsenum-output.json

Molim pošaljite sadržaj datoteke src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md koji treba da prevedem.

{
"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 koji koriste domene

Takođe je moguće pokušati pronaći izložene Azure servise u uobičajenim azure poddomenima kao što su oni dokumentovani u ovom postu:

  • 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žete koristiti metodu iz MicroBust za tu svrhu. Ova funkcija će pretražiti osnovni naziv domena (i nekoliko permutacija) u nekoliko azure domains:

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

Phishing

Fajlsistem credentials

az cli čuva mnogo zanimljivih informacija u <HOME>/.Azure:

  • azureProfile.json sadrži informacije o korisnicima koji su se ranije prijavljivali
  • clouds.config sadrži informacije o pretplatama
  • service_principal_entries.json sadrži aplikacijske credentials (tenant id, clients and secret)
  • msal_token_cache.json sadrži access tokens and refresh tokens

Imajte na umu da su na macOS i linux ovi fajlovi nezaštićeni i pohranjeni u običnom tekstu.

Reference

Tip

Nauči & vežbaj AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks