Az - Unauthenticated Enum & Initial Entry

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Azure Tenant

Απαρίθμηση Ενοικιαστή

Υπάρχουν μερικά δημόσια APIs του Azure που απλώς γνωρίζοντας το domain του ενοικιαστή μια επιτιθέμενη μπορεί να ερευνήσει για περισσότερες πληροφορίες σχετικά με αυτόν. Μπορείτε να ερευνήσετε απευθείας το API ή να χρησιμοποιήσετε τη βιβλιοθήκη PowerShell AADInternals:

APIΠληροφορίεςΛειτουργία AADInternals

login.microsoftonline.com/<domain>/.well-known/openid-configuration

Πληροφορίες σύνδεσης, συμπεριλαμβανομένου του αναγνωριστικού ενοικιαστή

Get-AADIntTenantID -Domain <domain>

autodiscover-s.outlook.com/autodiscover/autodiscover.svc

Όλα τα domains του ενοικιαστή

Get-AADIntTenantDomains -Domain <domain>

login.microsoftonline.com/GetUserRealm.srf?login=<UserName>

Πληροφορίες σύνδεσης του ενοικιαστή, συμπεριλαμβανομένου του ονόματος και του domain του ενοικιαστή τύπου πιστοποίησης. Αν το NameSpaceType είναι Managed, σημαίνει ότι χρησιμοποιείται το AzureAD.

Get-AADIntLoginInformation -UserName <UserName>

login.microsoftonline.com/common/GetCredentialType

Πληροφορίες σύνδεσης, συμπεριλαμβανομένων των πληροφοριών Desktop SSO

Get-AADIntLoginInformation -UserName <UserName>

Μπορείτε να αναζητήσετε όλες τις πληροφορίες ενός ενοικιαστή Azure με μόνο έναν εντολή της βιβλιοθήκης AADInternals:

Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table

Παράδειγμα εξόδου πληροφοριών του Azure tenant:

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

Είναι δυνατόν να παρατηρηθούν λεπτομέρειες σχετικά με το όνομα του ενοικιαστή, το αναγνωριστικό και το όνομα "brand". Επιπλέον, εμφανίζεται η κατάσταση του Desktop Single Sign-On (SSO), γνωστό και ως Seamless SSO. Όταν είναι ενεργοποιημένο, αυτό το χαρακτηριστικό διευκολύνει τον προσδιορισμό της παρουσίας (απαρίθμηση) ενός συγκεκριμένου χρήστη μέσα στον οργανισμό-στόχο.

Επιπλέον, η έξοδος παρουσιάζει τα ονόματα όλων των επαληθευμένων τομέων που σχετίζονται με τον ενοικιαστή-στόχο, μαζί με τους αντίστοιχους τύπους ταυτότητας τους. Στην περίπτωση των συνδεδεμένων τομέων, αποκαλύπτεται επίσης το Fully Qualified Domain Name (FQDN) του παρόχου ταυτότητας που χρησιμοποιείται, συνήθως ένας διακομιστής ADFS. Η στήλη "MX" καθορίζει εάν τα emails δρομολογούνται προς το Exchange Online, ενώ η στήλη "SPF" υποδεικνύει την καταχώριση του Exchange Online ως αποστολέα email. Σημειώνεται ότι η τρέχουσα λειτουργία αναγνώρισης δεν αναλύει τις δηλώσεις "include" εντός των εγγραφών SPF, πράγμα που μπορεί να οδηγήσει σε ψευδείς αρνητικές απαντήσεις.

Απαρίθμηση Χρηστών

Είναι δυνατόν να ελεγχθεί εάν υπάρχει ένα όνομα χρήστη μέσα σε έναν ενοικιαστή. Αυτό περιλαμβάνει επίσης τους χρήστες επισκέπτες, των οποίων το όνομα χρήστη έχει τη μορφή:

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

Το email είναι η διεύθυνση email του χρήστη όπου το "@" αντικαθίσταται με το υποκάτω παύλα "_".

Με το AADInternals, μπορείτε εύκολα να ελέγξετε εάν ο χρήστης υπάρχει ή όχι:

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

Έξοδος:

Αυτό το σενάριο επικεντρώνεται στην ανίχνευση και αρχική είσοδο σε έναν Azure περιβάλλοντα χωρίς πιστοποίηση. Αυτό μπορεί να περιλαμβάνει την εξαγωγή πληροφοριών για υπηρεσίες, χρήστες, και πολιτικές, καθώς και την εκτέλεση επιθέσεων όπως phishing.

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

Υπάρχουν τρεις διαφορετικές μεθόδοι απαρίθμησης για να επιλέξετε:

ΜέθοδοςΠεριγραφή

Κανονική

Αναφέρεται στο API GetCredentialType που αναφέρθηκε παραπάνω. Η προεπιλεγμένη μέθοδος.

Σύνδεση

Αυτή η μέθοδος προσπαθεί να συνδεθεί ως ο χρήστης. Σημείωση: οι ερωτήσεις θα καταγραφούν στο αρχείο καταγραφής συνδέσεων.

Αυτόματη Σύνδεση

Αυτή η μέθοδος προσπαθεί να συνδεθεί ως ο χρήστης μέσω της αυτόματης σύνδεσης. Οι ερωτήσεις δεν καταγράφονται στο αρχείο καταγραφής συνδέσεων! Ως εκ τούτου, λειτουργεί επίσης καλά για επιθέσεις password spray και brute-force.

Αφού ανακαλύψετε τα έγκυρα ονόματα χρηστών, μπορείτε να λάβετε πληροφορίες σχετικά με έναν χρήστη με:

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

Το script o365creeper σας επιτρέπει επίσης να ανακαλύψετε αν ένα email είναι έγκυρο.

# Put in emails.txt emails such as:
# - root@corp.onmicrosoft.com
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt

Απαρίθμηση Χρηστών μέσω του Microsoft Teams

Μια άλλη καλή πηγή πληροφοριών είναι το Microsoft Teams.

Το API του Microsoft Teams επιτρέπει την αναζήτηση χρηστών. Συγκεκριμένα, τα σημεία πρόσβασης "externalsearchv3" και "searchUsers" μπορούν να χρησιμοποιηθούν για να ζητηθούν γενικές πληροφορίες σχετικά με λογαριασμούς χρηστών που έχουν εγγραφεί στο Teams.

Ανάλογα με την απάντηση του API, είναι δυνατόν να διακριθεί μεταξύ μη υπαρκτών χρηστών και υπαρκτών χρηστών που έχουν μια έγκυρη συνδρομή στο Teams.

Το σενάριο TeamsEnum μπορεί να χρησιμοποιηθεί για την επικύρωση ενός συγκεκριμένου συνόλου ονομάτων χρηστών έναντι του API του Teams.

python3 TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json

Ανεξέλεγκτη Απαρίθμηση και Αρχική Είσοδο

Σε αυτό το σενάριο, θα εξετάσουμε πώς μπορούμε να αξιοποιήσουμε την ανεξέλεγκτη απαρίθμηση χρηστών για να αποκτήσουμε πρόσβαση σε ένα λογαριασμό χρήστη στο Azure. Αυτή η ευπάθεια μπορεί να επιτρέψει σε έναν επιτιθέμενο να ανακαλύψει έγκυρους λογαριασμούς χρηστών χωρίς την ανάγκη ελέγχου ταυτότητας.

Βήματα Εκτέλεσης:

  1. Ανεξέλεγκτη Απαρίθμηση Χρηστών: Χρησιμοποιώντας εργαλεία όπως το enum4linux, εκτελέστε ανεξέλεγκτη απαρίθμηση χρηστών για να εντοπίσετε έγκυρους λογαριασμοών χρηστών στο Azure.

  2. Αρχική Είσοδο με Ανεπαρκή Πιστοποίηση: Χρησιμοποιώντας τις πληροφορίες που συγκεντρώσατε από την απαρίθμηση χρηστών, προσπαθήστε να συνδεθείτε σε έναν έγκυρο λογαριασμό χρήστη χωρίς την απαραίτητη πιστοποίηση.

Ακολουθώντας αυτά τα βήματα, μπορείτε να αξιοποιήσετε την ανεξέλεγκτη απαρίθμηση χρηστών για να προσπαθήσετε να αποκτήσετε πρόσβαση σε ένα λογαριασμό χρήστη στο Azure.

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

Επιπλέον, είναι δυνατόν να απαριθμηθούν πληροφορίες διαθεσιμότητας σχετικά με υπάρχοντες χρήστες όπως τα παρακάτω:

  • Διαθέσιμος

  • Μακριά

  • Μην Ενοχλείτε

  • Απασχολημένος

  • Εκτός σύνδεσης

Εάν έχει ρυθμιστεί ένα μήνυμα εκτός γραφείου, είναι επίσης δυνατόν να ανακτηθεί το μήνυμα χρησιμοποιώντας το TeamsEnum. Εάν έχει καθοριστεί ένα αρχείο εξόδου, τα μηνύματα εκτός γραφείου αποθηκεύονται αυτόματα στο JSON αρχείο:

jq . teamsenum-output.json

Ανεξέλεγκτη Απαρίθμηση και Αρχική Είσοδο

Σε αυτό το σενάριο, θα εξετάσουμε πώς μπορούμε να εκμεταλλευτούμε την ανεξέλεγκτη απαρίθμηση χρηστών για να αποκτήσουμε πρόσβαση σε ένα λογαριασμό χρήστη στο Azure. Αυτή η ευπάθεια μπορεί να οδηγήσει σε αρχική είσοδο σε ένα λογαριασμό χρήστη χωρίς την ανάγκη για διαπίστευση.

Βήμα 1: Ανεξέλεγκτη Απαρίθμηση Χρηστών

Αρχικά, θα χρησιμοποιήσουμε ένα εργαλείο ανεξέλεγκτης απαρίθμησης χρηστών για να εντοπίσουμε έγκυρους λογαριασμούς χρηστών στο Azure.

Βήμα 2: Αρχική Είσοδο με Ανεξέλεγκτη Απαρίθμηση

Αφού εντοπίσουμε έναν έγκυρο λογαριασμό χρήστη, θα χρησιμοποιήσουμε τις πληροφορίες που συλλέξαμε από το βήμα 1 για να προσπελάσουμε το λογαριασμό αυτόν χωρίς την ανάγκη για διαπίστευση.

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

Υπηρεσίες Azure

Αφού γνωρίζουμε τα domains που χρησιμοποιεί ο Azure tenant είναι καιρός να προσπαθήσουμε να βρούμε τις εκτεθειμένες υπηρεσίες Azure.

Μπορείτε να χρησιμοποιήσετε μια μέθοδο από το MicroBust για αυτόν τον σκοπό. Αυτή η λειτουργία θα αναζητήσει το βασικό domain name (και μερικές παραλλαγές) σε διάφορα domains υπηρεσιών Azure:

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

Ανοιχτή Αποθήκευση

Μπορείτε να ανακαλύψετε ανοιχτές αποθήκευσης με ένα εργαλείο όπως το InvokeEnumerateAzureBlobs.ps1 το οποίο θα χρησιμοποιήσει το αρχείο Microburst/Misc/permitations.txt για να δημιουργήσει περιπτώσεις (πολύ απλές) προκειμένου να βρεί ανοιχτούς λογαριασμούς αποθήκευσης.

Import-Module .\MicroBurst\MicroBurst.psm1
Invoke-EnumerateAzureBlobs -Base corp
[...]
https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
[...]

# Access https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
# Check: <Name>ssh_info.json</Name>
# Access then https://corpcommon.blob.core.windows.net/secrets/ssh_info.json

SAS URLs

Ένα shared access signature (SAS) URL είναι ένα URL που παρέχει πρόσβαση σε συγκεκριμένο τμήμα ενός λογαριασμού αποθήκευσης (μπορεί να είναι ένας πλήρης container, ένα αρχείο...) με κάποιες συγκεκριμένες άδειες (ανάγνωση, εγγραφή...) πάνω στους πόρους. Αν βρείτε ένα διαρρεύσει, θα μπορούσατε να έχετε πρόσβαση σε ευαίσθητες πληροφορίες, μοιάζουν με αυτό (αυτό είναι για πρόσβαση σε ένα container, αν απλά χορηγούσε πρόσβαση σε ένα αρχείο, το μονοπάτι του URL θα περιείχε επίσης αυτό το αρχείο):

https://<storage_account_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D

Χρησιμοποιήστε το Storage Explorer για πρόσβαση στα δεδομένα

Κατάχρηση Διαπιστεύσεων

Phishing

Az - Password Spraying

Αναφορές

Μάθετε την κακόβουλη εισβολή στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated