Az - Unauthenticated Enum & Initial Entry
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Azure Tenant
Tenant Enumeration
Υπάρχουν μερικά public Azure APIs που με την απλή γνώση του domain του tenant ένας επιτιθέμενος μπορεί να ερωτήσει για να συλλέξει περισσότερες πληροφορίες για αυτό.
Μπορείτε να κάνετε query απευθείας το API ή να χρησιμοποιήσετε τη PowerShell βιβλιοθήκη AADInternals (Install-Module AADInternals):
- Login information including tenant ID
Get-AADIntTenantID -Domain <domain>(main APIlogin.microsoftonline.com/<domain>/.well-known/openid-configuration)- All valid doimains in the tenant
Get-AADIntTenantDomains -Domain <domain>(main APIautodiscover-s.outlook.com/autodiscover/autodiscover.svc)- Login information of the user. If
NameSpaceTypeisManaged, it means EntraID is used Get-AADIntLoginInformation -UserName <UserName>(main APIlogin.microsoftonline.com/GetUserRealm.srf?login=<UserName>)
Μπορείτε να ανακτήσετε όλες τις πληροφορίες ενός Azure tenant με μόνο μία εντολή από 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
Είναι δυνατή η παρατήρηση λεπτομερειών σχετικά με το όνομα του tenant, το ID και το “brand” name. Επιπλέον, εμφανίζεται η κατάσταση του Desktop Single Sign-On (SSO), γνωστό και ως Seamless SSO. Όταν είναι ενεργοποιημένο, αυτή η λειτουργία διευκολύνει τον εντοπισμό (enumeration) της παρουσίας ενός συγκεκριμένου χρήστη στον οργανισμό-στόχο.
Επιπλέον, η έξοδος παρουσιάζει τα ονόματα όλων των επαληθευμένων domains που σχετίζονται με τον tenant-στόχο, μαζί με τους αντίστοιχους τύπους ταυτότητας. Στην περίπτωση των federated domains, αποκαλύπτεται επίσης το Fully Qualified Domain Name (FQDN) του identity provider που χρησιμοποιείται, συνήθως ένας ADFS server. Η στήλη “MX” υποδεικνύει αν τα emails δρομολογούνται προς το Exchange Online, ενώ η στήλη “SPF” δηλώνει αν το Exchange Online περιλαμβάνεται ως αποστολέας email. Σημειώστε ότι η τρέχουσα reconnaissance λειτουργία δεν αναλύει τις δηλώσεις “include” εντός των SPF records, κάτι που μπορεί να οδηγήσει σε false negatives.
User Enumeration
Tip
Σημειώστε ότι ακόμη και αν ένας tenant χρησιμοποιεί αρκετά emails για τον ίδιο χρήστη, το username είναι μοναδικό. Αυτό σημαίνει ότι θα λειτουργήσει μόνο με το domain που έχει συσχετίσει ο χρήστης και όχι με τα άλλα domains.
Είναι δυνατό να ελέγξετε αν ένα username υπάρχει μέσα σε έναν tenant. Αυτό περιλαμβάνει επίσης guest users, των οποίων το username έχει τη μορφή:
<email>#EXT#@<tenant name>.onmicrosoft.com
Το email είναι η διεύθυνση email του χρήστη όπου το “@” έχει αντικατασταθεί με κάτω παύλα “_“.
Με AADInternals, μπορείτε εύκολα να ελέγξετε αν ο χρήστης υπάρχει ή όχι:
# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
Δεν υπάρχει περιεχόμενο για μετάφραση. Παρακαλώ επικολλήστε εδώ το περιεχόμενο του αρχείου README.md (ή του τμήματος που θέλετε να μεταφραστεί) και θα το μεταφράσω στα Ελληνικά διατηρώντας την ίδια markdown/HTML σύνταξη.
UserName Exists
-------- ------
user@company.com True
Μπορείτε επίσης να χρησιμοποιήσετε ένα αρχείο κειμένου που περιέχει μία διεύθυνση email ανά γραμμή:
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
Προς το παρόν υπάρχουν 4 different enumeration methods για να επιλέξετε. Μπορείτε να βρείτε πληροφορίες στο Get-Help Invoke-AADIntUserEnumerationAsOutsider:
Υποστηρίζει τις ακόλουθες enumeration methods: Normal, Login, Autologon, and RST2.
-
Η Normal μέθοδος φαίνεται ότι προς το παρόν λειτουργεί με όλους τους tenants. Παλαιότερα απαιτούσε να είναι ενεργοποιημένο το Desktop SSO (aka Seamless SSO) για τουλάχιστον ένα domain.
-
Η Login μέθοδος λειτουργεί με οποιονδήποτε tenant, αλλά τα enumeration queries θα καταγραφούν στο Azure AD sign-in log ως failed login events!
-
Η Autologon μέθοδος φαίνεται ότι πλέον δεν λειτουργεί σε όλους τους tenants. Πιθανώς απαιτεί να είναι ενεργοποιημένο το DesktopSSO ή το directory sync.
Μετά την ανακάλυψη των έγκυρων usernames μπορείτε να λάβετε info about a user με:
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
Το script o365spray σας επιτρέπει επίσης να ανακαλύψετε εάν ένα email είναι έγκυρο.
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
Μια ακόμη καλή πηγή πληροφοριών είναι το Microsoft Teams.
Το API του Microsoft Teams επιτρέπει την αναζήτηση χρηστών. Ειδικότερα, τα endpoints “user search” externalsearchv3 και searchUsers μπορούν να χρησιμοποιηθούν για να ζητήσουν γενικές πληροφορίες σχετικά με λογαριασμούς χρηστών εγγεγραμμένους στο Teams.
Ανάλογα με την απάντηση του API, είναι δυνατόν να διακριθούν οι μη υπάρχοντες χρήστες από χρήστες που υπάρχουν και έχουν έγκυρη συνδρομή στο Teams.
Το script TeamsEnum μπορεί να χρησιμοποιηθεί για να επικυρώσει ένα δοθέν σύνολο ονομάτων χρηστών απέναντι στο Teams API, αλλά χρειάζεστε πρόσβαση σε έναν χρήστη με πρόσβαση στο 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
Παρακαλώ επικολλήστε το περιεχόμενο του README.md που θέλετε να μεταφράσω στα Ελληνικά.
[-] 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)
Επιπλέον, είναι δυνατόν να απαριθμηθούν πληροφορίες διαθεσιμότητας για υπάρχοντες χρήστες όπως οι εξής:
- Available
- Away
- DoNotDisturb
- Busy
- Offline
Εάν έχει ρυθμιστεί ένα μήνυμα εκτός γραφείου, είναι επίσης δυνατό να ανακτηθεί το μήνυμα χρησιμοποιώντας το TeamsEnum. Αν έχει καθοριστεί αρχείο εξόδου, τα μηνύματα εκτός γραφείου αποθηκεύονται αυτόματα μέσα στο αρχείο JSON:
jq . teamsenum-output.json
Δεν παρέχετε το περιεχόμενο του αρχείου. Παρακαλώ επικολλήστε εδώ το κείμενο του src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md που θέλετε να μεταφράσω (θα διατηρήσω ανέπαφα markdown, tags, links και paths).
{
"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 που χρησιμοποιούν τομείς
Είναι επίσης δυνατό να προσπαθήσετε να βρείτε υπηρεσίες Azure εκτεθειμένες σε κοινά azure subdomains όπως τα τεκμηριωμένα σε αυτό το 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
Μπορείτε να χρησιμοποιήσετε μια μέθοδο από MicroBust για αυτόν τον σκοπό. Αυτή η συνάρτηση θα αναζητήσει το βασικό όνομα τομέα (και μερικές παραλλαγές) σε αρκετά azure domains:
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
Phishing
- Common Phishing για credentials ή μέσω OAuth Apps
- Device Code Authentication Phishing
Filesystem Credentials
Το az cli αποθηκεύει πολλές ενδιαφέρουσες πληροφορίες μέσα στο <HOME>/.Azure:
azureProfile.jsonπεριέχει πληροφορίες για χρήστες που έχουν συνδεθεί στο παρελθόνclouds.configπεριέχει πληροφορίες για συνδρομέςservice_principal_entries.jsonπεριέχει τις credentials των εφαρμογών (tenant id, clients and secret)msal_token_cache.jsonπεριέχει access tokens and refresh tokens
Σημειώστε ότι σε macOS και linux αυτά τα αρχεία είναι μη προστατευμένα και αποθηκεύονται σε απλό κείμενο.
Αναφορές
- 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
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

