Az - Unauthenticated Enum & Initial Entry

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Azure Tenant

Enumeracja Tenantów

Istnieją publiczne interfejsy API Azure, które znając jedynie domenę tenantów, atakujący może zapytać, aby uzyskać więcej informacji na ich temat. Możesz zapytać bezpośrednio API lub skorzystać z biblioteki PowerShell AADInternals:

APIInformacjeFunkcja AADInternals

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

Informacje logowania, w tym identyfikator tenantów

Get-AADIntTenantID -Domain <domain>

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

Wszystkie domeny tenantów

Get-AADIntTenantDomains -Domain <domain>

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

Informacje logowania tenantów, w tym nazwa tenantów i domena typu uwierzytelniania. Jeśli NameSpaceType to Managed, oznacza to, że używane jest AzureAD.

Get-AADIntLoginInformation -UserName <UserName>

login.microsoftonline.com/common/GetCredentialType

Informacje logowania, w tym informacje o jednokrotnym logowaniu do pulpitu

Get-AADIntLoginInformation -UserName <UserName>

Możesz zapytać o wszystkie informacje dotyczące tenantów Azure za pomocą tylko jednej komendy z biblioteki AADInternals:

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

Przykładowy wynik informacji o dzierżawcy Azure:

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żliwe jest obserwowanie szczegółów dotyczących nazwy, identyfikatora i nazwy "marki" najemcy. Dodatkowo wyświetlany jest status funkcji Jednokrotnego Logowania do Pulpitu (SSO), znanej również jako Seamless SSO. Gdy jest włączona, ta funkcja ułatwia określenie obecności (enumeracji) określonego użytkownika w organizacji docelowej.

Co więcej, wynik prezentuje nazwy wszystkich zweryfikowanych domen powiązanych z docelowym najemcą, wraz z odpowiadającymi im typami tożsamości. W przypadku domen federowanych ujawniany jest również Pełna Nazwa Domeny (FQDN) dostawcy tożsamości używanego, zazwyczaj serwera ADFS. Kolumna "MX" określa, czy e-maile są kierowane do Exchange Online, podczas gdy kolumna "SPF" oznacza wymienienie Exchange Online jako nadawcy e-maili. Warto zauważyć, że obecna funkcja rozpoznawania nie analizuje instrukcji "include" w rekordach SPF, co może prowadzić do fałszywych negatywów.

Enumeracja Użytkowników

Możliwe jest sprawdzenie, czy nazwa użytkownika istnieje wewnątrz najemcy. Dotyczy to również użytkowników gości, których nazwa użytkownika ma format:

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

Adres e-mail to adres e-mail użytkownika, w którym znak „@” został zastąpiony podkreśleniem „_“.

Z AADInternals łatwo sprawdzisz, czy użytkownik istnieje, czy nie:

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

Nieskategoryzowane: Wyliczanie i Początkowe Wejście

W tym module dowiesz się, jak przeprowadzić wyliczanie informacji i uzyskać początkowy dostęp do zasobów Azure bez uwierzytelnienia. To obejmuje wykorzystanie publicznie dostępnych informacji, takich jak subdomeny, adresy IP, nazwy kontenerów i wiele innych, aby zebrać istotne informacje i znaleźć potencjalne wejścia do ataku.

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

Możesz również użyć pliku tekstowego zawierającego jeden adres 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

Istnieją trzy różne metody wyliczania do wyboru:

MetodaOpis

Normal

Odnosi się to do wspomnianego powyżej interfejsu API GetCredentialType. Metoda domyślna.

Login

Ta metoda próbuje zalogować się jako użytkownik. Uwaga: zapytania zostaną zapisane w dzienniku logowań logowań.

Autologon

Ta metoda próbuje zalogować się jako użytkownik za pomocą punktu końcowego autologowania. Zapytania nie są rejestrowane w dzienniku logowań logowań! Dlatego dobrze działa również dla ataków typu password spray i brute-force.

Po odkryciu prawidłowych nazw użytkowników możesz uzyskać informacje o użytkowniku za pomocą:

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

Skrypt o365creeper pozwala również odkryć, czy adres e-mail jest poprawny.

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

Wymienianie użytkowników za pomocą Microsoft Teams

Kolejnym dobrym źródłem informacji jest Microsoft Teams.

API Microsoft Teams umożliwia wyszukiwanie użytkowników. W szczególności punkty końcowe "wyszukiwanie użytkowników" externalsearchv3 i searchUsers mogą być używane do żądania ogólnych informacji o kontach użytkowników zarejestrowanych w Teams.

W zależności od odpowiedzi API można odróżnić między nieistniejącymi użytkownikami a istniejącymi użytkownikami posiadającymi ważną subskrypcję Teams.

Skrypt TeamsEnum może być użyty do sprawdzenia określonego zestawu nazw użytkowników w stosunku do API Teams.

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

Nieskategoryzowane: Wyliczanie i Początkowe Wejście

W tym module omówimy techniki wyliczania informacji i początkowego dostępu bez uwierzytelnienia. To obejmuje identyfikację publicznie dostępnych zasobów, wykorzystanie niezabezpieczonych interfejsów API, przeglądanie publicznie dostępnych repozytoriów kodu źródłowego, oraz inne techniki pozwalające na zdobycie informacji lub dostęp do systemu bez konieczności posiadania poprawnych danych uwierzytelniających.

[-] 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 istnieje możliwość wyliczenia informacji o dostępności istniejących użytkowników, takich jak:

  • Dostępny

  • Z dala

  • Nie przeszkadzać

  • Zajęty

  • Offline

Jeśli skonfigurowano wiadomość o nieobecności, możliwe jest również pobranie tej wiadomości za pomocą TeamsEnum. Jeśli określono plik wyjściowy, wiadomości o nieobecności są automatycznie przechowywane w pliku JSON:

jq . teamsenum-output.json

Nieuweryfikowana enumeracja i początkowe wejście

W przypadku braku autoryzacji, atakujący może wykorzystać różne techniki do zbierania informacji i uzyskiwania dostępu do zasobów w chmurze. Poniżej znajdują się niektóre z tych technik:

Enumeracja usług

Atakujący może przeprowadzić enumerację usług chmurowych, takich jak Storage Accounts, Databases, Key Vaults, czy Virtual Machines, aby zebrać informacje na temat dostępnych zasobów.

Skanowanie otwartych portów

Wykorzystując narzędzia do skanowania portów, atakujący może identyfikować otwarte porty na maszynach w chmurze, co może pomóc w określeniu potencjalnych wektorów ataku.

Analiza konfiguracji

Analiza konfiguracji zasobów chmurowych może ujawnić słabe punkty, takie jak niewłaściwe ustawienia uprawnień dostępu czy niezabezpieczone dane, które mogą zostać wykorzystane do uzyskania nieautoryzowanego dostępu.

Próby ataków słownikowych

Atakujący może przeprowadzać próby ataków słownikowych na interfejsy API lub panele logowania, aby uzyskać dostęp do kont użytkowników lub kluczy API.

Wykorzystanie luk w zabezpieczeniach

Wykorzystując znalezione luki w zabezpieczeniach, atakujący może zdobyć dostęp do poufnych danych lub uzyskać kontrolę nad zasobami w chmurze.

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

Usługi Azure

Teraz, gdy znamy domeny, których używa najemca Azure, czas spróbować znaleźć odsłonięte usługi Azure.

Możesz skorzystać z metody z MicroBust w celu osiągnięcia tego celu. Ta funkcja będzie przeszukiwać nazwę domeny podstawowej (oraz kilka permutacji) w kilku domenach usług Azure:

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

Otwarte magazynowanie

Możesz odkryć otwarte magazynowanie za pomocą narzędzia takiego jak InvokeEnumerateAzureBlobs.ps1, które będzie używać pliku Microburst/Misc/permitations.txt do generowania permutacji (bardzo proste) w celu znalezienia otwartych kont magazynowych.

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

URL SAS

Wspólny podpis dostępu (SAS) to URL, który zapewnia dostęp do określonej części konta Storage (może to być pełny kontener, plik...) z określonymi uprawnieniami (odczyt, zapis...) do zasobów. Jeśli znajdziesz wyciekły, możesz uzyskać dostęp do poufnych informacji, wyglądają one tak (to jest dostęp do kontenera, jeśli dotyczył tylko pliku, ścieżka URL również zawierałaby ten plik):

https://<nazwa_konta_storage>.blob.core.windows.net/nowykontener?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

Użyj Storage Explorer, aby uzyskać dostęp do danych

Skompromitowane Dane Logowania

Phishing

Spraying Hasła / Bruteforce

pageAz - Password Spraying

Odnośniki

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated