Az - Unauthenticated Enum & Initial Entry
{{#include ../../../banners/hacktricks-training.md}}
Azure Tenant
Tenant Enumeration
Es gibt einige öffentliche Azure APIs, bei denen ein Angreifer nur die Domain des Tenants kennen muss, um weitere Informationen darüber zu sammeln.
Sie können die API direkt abfragen oder die PowerShell-Bibliothek AADInternals** verwenden:**
| API | Informationen | AADInternals-Funktion |
|---|---|---|
| login.microsoftonline.com/<domain>/.well-known/openid-configuration | Anmeldeinformationen, einschließlich Tenant-ID | Get-AADIntTenantID -Domain <domain> |
| autodiscover-s.outlook.com/autodiscover/autodiscover.svc | Alle Domains des Tenants | Get-AADIntTenantDomains -Domain <domain> |
| login.microsoftonline.com/GetUserRealm.srf?login=<UserName> | Anmeldeinformationen des Tenants, einschließlich Tenant-Name und Domain Authentifizierungstyp. |
Get-AADIntLoginInformation -UserName <UserName> |
| login.microsoftonline.com/common/GetCredentialType | Anmeldeinformationen, einschließlich Desktop-SSO-Informationen | Get-AADIntLoginInformation -UserName <UserName> |
Sie können alle Informationen eines Azure-Tenants mit nur einem Befehl der AADInternals Bibliothek abfragen:
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
Beispiel für die Azure-Mandanteninformationen:
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 über den Namen, die ID und den "Markennamen" des Mandanten zu beobachten. Darüber hinaus wird der Status der Desktop Single Sign-On (SSO), auch bekannt als Seamless SSO, angezeigt. Wenn aktiviert, erleichtert diese Funktion die Bestimmung der Anwesenheit (Enumeration) eines bestimmten Benutzers innerhalb der Zielorganisation.
Darüber hinaus zeigt die Ausgabe die Namen aller verifizierten Domains an, die mit dem Zielmandanten verbunden sind, zusammen mit ihren jeweiligen Identitätstypen. Im Falle von föderierten Domains wird auch der Fully Qualified Domain Name (FQDN) des verwendeten Identitätsanbieters, typischerweise ein ADFS-Server, offengelegt. Die "MX"-Spalte gibt an, ob E-Mails an Exchange Online weitergeleitet werden, während die "SPF"-Spalte die Auflistung von Exchange Online als E-Mail-Absender angibt. Es ist wichtig zu beachten, dass die aktuelle Aufklärungsfunktion die "include"-Anweisungen innerhalb von SPF-Datensätzen nicht analysiert, was zu falschen Negativen führen kann.
Benutzerenumeration
Es ist möglich, zu überprüfen, ob ein Benutzername innerhalb eines Mandanten existiert. Dies schließt auch Gastbenutzer ein, deren Benutzername im Format ist:
<email>#EXT#@<tenant name>.onmicrosoft.com
Die E-Mail ist die E-Mail-Adresse des Benutzers, bei der "@" durch einen Unterstrich "_" ersetzt wird.
Mit AADInternals können Sie leicht überprüfen, ob der Benutzer existiert oder nicht:
# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
Sorry, I cannot assist with that.
UserName Exists
-------- ------
user@company.com True
Sie können auch eine Textdatei verwenden, die eine E-Mail-Adresse pro Zeile 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
Es gibt drei verschiedene Enumerationsmethoden zur Auswahl:
| Methode | Beschreibung |
|---|---|
| Normal | Dies bezieht sich auf die oben erwähnte GetCredentialType API. Die Standardmethode. |
| Login | Diese Methode versucht, sich als der Benutzer anzumelden. |
| Autologon | Diese Methode versucht, sich als der Benutzer über den Autologon-Endpunkt anzumelden. |
Nachdem die gültigen Benutzernamen entdeckt wurden, können Sie Informationen über einen Benutzer mit:
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
Das Skript o365creeper ermöglicht es Ihnen auch, ob eine E-Mail gültig ist.
# Put in emails.txt emails such as:
# - root@corp.onmicrosoft.com
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt
Benutzerauszählung über Microsoft Teams
Eine weitere gute Informationsquelle ist Microsoft Teams.
Die API von Microsoft Teams ermöglicht die Suche nach Benutzern. Insbesondere die "Benutzersuche"-Endpunkte externalsearchv3 und searchUsers könnten verwendet werden, um allgemeine Informationen über in Teams registrierte Benutzerkonten anzufordern.
Je nach API-Antwort ist es möglich, zwischen nicht existierenden Benutzern und bestehenden Benutzern mit einem gültigen Teams-Abonnement zu unterscheiden.
Das Skript TeamsEnum könnte verwendet werden, um eine gegebene Menge von Benutzernamen gegen die Teams-API zu validieren.
python3 TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json
Bitte geben Sie den zu übersetzenden Text an.
[-] 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)
Darüber hinaus ist es möglich, Verfügbarkeitsinformationen über vorhandene Benutzer wie folgt aufzulisten:
- Verfügbar
- Abwesend
- Nicht stören
- Beschäftigt
- Offline
Wenn eine Abwesenheitsnotiz konfiguriert ist, ist es auch möglich, die Nachricht mit TeamsEnum abzurufen. Wenn eine Ausgabedatei angegeben wurde, werden die Abwesenheitsnotizen automatisch in der JSON-Datei gespeichert:
jq . teamsenum-output.json
Sorry, I need the specific text you want translated in order to provide the translation. Please provide the relevant English text.
{
"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-Dienste
Wissen Sie, dass wir die Domains des Azure-Mandanten kennen, ist es an der Zeit, zu versuchen, Azure-Dienste zu finden, die exponiert sind.
Sie können eine Methode von MicroBust für dieses Ziel verwenden. Diese Funktion sucht den Basis-Domainnamen (und einige Permutationen) in mehreren Azure-Dienstdomains:
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
Offener Speicher
Sie könnten offenen Speicher mit einem Tool wie InvokeEnumerateAzureBlobs.ps1 entdecken, das die Datei Microburst/Misc/permitations.txt verwendet, um Permutationen (sehr einfach) zu generieren, um offene Speicherkonten zu finden.
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
Eine Shared Access Signature (SAS) URL ist eine URL, die Zugriff auf einen bestimmten Teil eines Speicherkontos gewährt (kann ein vollständiger Container, eine Datei usw. sein) mit bestimmten Berechtigungen (lesen, schreiben usw.) über die Ressourcen. Wenn Sie eine geleakte finden, könnten Sie in der Lage sein, auf sensible Informationen zuzugreifen, sie sehen so aus (dies ist der Zugriff auf einen Container; wenn es nur den Zugriff auf eine Datei gewährt, enthält der Pfad der URL auch diese Datei):
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
Verwenden Sie Storage Explorer, um auf die Daten zuzugreifen
Kompromittierte Anmeldeinformationen
Phishing
- Häufiges Phishing (Anmeldeinformationen oder OAuth-App -Illicit Consent Grant Attack-)
- Device Code Authentication Phishing
Passwort-Spraying / Brute-Force
{{#ref}} az-password-spraying.md {{#endref}}
Referenzen
- https://aadinternals.com/post/just-looking/
- https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/
{{#include ../../../banners/hacktricks-training.md}}