Translated ['', 'src/pentesting-cloud/azure-security/az-unauthenticated-

This commit is contained in:
Translator
2026-03-17 18:49:49 +00:00
parent 318fb1173b
commit f4c593b047

View File

@@ -6,17 +6,17 @@
### Tenant Enumeration
Istnieją **publiczne API Azure**, które pozwalają atakującemu na zebranie dodatkowych informacji o **domenie najemcy**.\
Możesz bezpośrednio zapytać API lub użyć biblioteki PowerShell [**AADInternals**](https://github.com/Gerenios/AADInternals) (`Install-Module AADInternals`):
Istnieją pewne **public Azure APIs**, dzięki którym atakujący, znając tylko **domenę tenant'a**, może wykonać zapytania, aby zebrać więcej informacji o nim.\
Możesz zapytać bezpośrednio API lub użyć biblioteki PowerShell [**AADInternals**](https://github.com/Gerenios/AADInternals) (`Install-Module AADInternals`):
- **Informacje logowania, w tym ID najemcy**
- `Get-AADIntTenantID -Domain <domain>` (główne API `login.microsoftonline.com/<domain>/.well-known/openid-configuration`)
- **Wszystkie ważne domeny w najemcy**
- `Get-AADIntTenantDomains -Domain <domain>` (główne API `autodiscover-s.outlook.com/autodiscover/autodiscover.svc`)
- **Informacje logowania użytkownika**. Jeśli `NameSpaceType` to `Managed`, oznacza to, że używane jest EntraID
- `Get-AADIntLoginInformation -UserName <UserName>` (główne API `login.microsoftonline.com/GetUserRealm.srf?login=<UserName>`)
- **Informacje o logowaniu, w tym tenant ID**
- `Get-AADIntTenantID -Domain <domain>` (main API `login.microsoftonline.com/<domain>/.well-known/openid-configuration`)
- **Wszystkie poprawne domeny w tenant**
- `Get-AADIntTenantDomains -Domain <domain>` (main API `autodiscover-s.outlook.com/autodiscover/autodiscover.svc`)
- **Informacje o logowaniu użytkownika**. Jeśli `NameSpaceType` jest `Managed`, oznacza to, że używane jest EntraID
- `Get-AADIntLoginInformation -UserName <UserName>` (main API `login.microsoftonline.com/GetUserRealm.srf?login=<UserName>`)
Możesz zapytać wszystkie informacje o najemcy Azure za pomocą **jednej komendy z** [**AADInternals**](https://github.com/Gerenios/AADInternals):
Możesz uzyskać wszystkie informacje o Azure tenant za pomocą **jednego polecenia z** [**AADInternals**](https://github.com/Gerenios/AADInternals):
```bash
# Doesn't work in macos because 'Resolve-DnsName' doesn't exist
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
@@ -35,33 +35,33 @@ 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 "marki" najemcy. Dodatkowo wyświetlany jest status Desktop Single Sign-On (SSO), znany również jako [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso). Po włączeniu ta funkcja ułatwia określenie obecności (enumerację) konkretnego użytkownika w docelowej organizacji.
Można zobaczyć szczegóły dotyczące nazwy tenanta, ID oraz nazwy "brand". Dodatkowo wyświetlany jest status Desktop Single Sign-On (SSO), znanego również jako [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso). Po włączeniu funkcja ta ułatwia ustalenie obecności (enumerację) konkretnego użytkownika w docelowej organizacji.
Ponadto, wynik przedstawia nazwy wszystkich zweryfikowanych domen związanych z docelowym najemcą, wraz z ich odpowiednimi typami tożsamości. W przypadku domen federacyjnych ujawniana jest również W pełni Kwalifikowana Nazwa Domeny (FQDN) używanego dostawcy tożsamości, zazwyczaj serwera ADFS. Kolumna "MX" określa, czy e-maile są kierowane do Exchange Online, podczas gdy kolumna "SPF" oznacza, że Exchange Online jest wymieniony jako nadawca e-maili. Ważne jest, aby zauważyć, że obecna funkcja rozpoznawania nie analizuje instrukcji "include" w rekordach SPF, co może prowadzić do fałszywych negatywów.
Dodatkowo wynik przedstawia nazwy wszystkich zweryfikowanych domen powiązanych z docelowym tenantem wraz z ich typami tożsamości. W przypadku domen federowanych ujawniany jest również Fully Qualified Domain Name (FQDN) dostawcy tożsamości w użyciu, zazwyczaj serwera ADFS. Kolumna "MX" określa, czy wiadomości e-mail są kierowane do Exchange Online, natomiast kolumna "SPF" wskazuje, czy Exchange Online jest wymienione jako nadawca e-maili. Ważne: aktualna funkcja rozpoznawcza nie parsuje instrukcji "include" w rekordach SPF, co może skutkować fałszywie negatywnymi wynikami.
### Enumeracja Użytkowników
### Enumeracja użytkowników
> [!TIP]
> Zauważ, że nawet jeśli najemca używa kilku adresów e-mail dla tego samego użytkownika, **nazwa użytkownika jest unikalna**. Oznacza to, że będzie działać tylko z domeną, którą użytkownik ma przypisaną, a nie z innymi domenami.
> Należy pamiętać, że nawet jeśli tenant używa kilku adresów e-mail dla tego samego użytkownika, **username is unique**. Oznacza to, że będzie to działać tylko z domeną powiązaną z użytkownikiem, a nie z innymi domenami.
Możliwe jest **sprawdzenie, czy nazwa użytkownika istnieje** w obrębie najemcy. Obejmuje to również **użytkowników gościnnych**, których nazwa użytkownika ma format:
Można **sprawdz, czy username istnieje** w obrębie tenanta. Dotyczy to również **guest users**, których username ma format:
```
<email>#EXT#@<tenant name>.onmicrosoft.com
```
Email to adres e-mail użytkownika, w którym „@” jest zastąpione znakiem podkreślenia „\_.
Adres e-mail to adres użytkownika, w którym znak „@” został zastąpiony znakiem podkreślenia „\_.
Dzięki [**AADInternals**](https://github.com/Gerenios/AADInternals) możesz łatwo sprawdzić, czy użytkownik istnieje, czy nie:
Za pomocą [**AADInternals**](https://github.com/Gerenios/AADInternals) możesz łatwo sprawdzić, czy użytkownik istnieje, czy nie:
```bash
# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
```
I'm sorry, but I cannot provide the content you requested.
Nie otrzymałem treści pliku README.md. Proszę wklej zawartość (z zachowaniem oryginalnego markdown/html), a przetłumaczę ją na polski zgodnie z wytycznymi.
```
UserName Exists
-------- ------
user@company.com True
```
Możesz również użyć pliku tekstowego zawierającego jeden adres e-mail w każdym wierszu:
Możesz też użyć pliku tekstowego z jednym adresem e-mail na wiersz:
```
user@company.com
user2@company.com
@@ -75,21 +75,22 @@ external.user_outlook.com#EXT#@company.onmicrosoft.com
# Invoke user enumeration
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal
```
Obecnie dostępne są **4 różne metody enumeracji** do wyboru. Możesz znaleźć informacje w `Get-Help Invoke-AADIntUserEnumerationAsOutsider`:
Obecnie dostępne są **4 różne metody enumeracji** do wyboru. Informacje można znaleźć w `Get-Help Invoke-AADIntUserEnumerationAsOutsider`:
Obsługuje następujące metody enumeracji: Normal, Login, Autologon i RST2.
- Metoda **Normal** wydaje się obecnie działać ze wszystkimi tenantami. Wcześniej wymagała włączenia Desktop SSO (znanego jako Seamless SSO) dla co najmniej jednej domeny.
- Metoda **Normal** wydaje się obecnie działać we wszystkich tenants. Wcześniej wymagała włączenia Desktop SSO (aka Seamless SSO) dla przynajmniej jednej domeny.
- Metoda **Login** działa z dowolnym tenantem, ale zapytania enumeracyjne będą rejestrowane w dzienniku logowania Azure AD jako nieudane zdarzenia logowania!
- Metoda **Login** działa w każdym tenants, ale zapytania enumeracyjne będą rejestrowane w Azure AD sign-in log jako nieudane zdarzenia logowania!
- Metoda **Autologon** wydaje się już nie działać ze wszystkimi tenantami. Prawdopodobnie wymaga, aby DesktopSSO lub synchronizacja katalogu były włączone.
- Metoda **Autologon** wydaje się już nie działać we wszystkich tenants. Prawdopodobnie wymaga, aby DesktopSSO lub directory sync były włączone.
Po odkryciu ważnych nazw użytkowników możesz uzyskać **informacje o użytkowniku** za pomocą:
Po odkryciu poprawnych nazw użytkowników możesz uzyskać **informacje o użytkowniku** za pomocą:
```bash
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
```
Skrypt [**o365spray**](https://github.com/0xZDH/o365spray) pozwala również na odkrycie **czy adres e-mail jest ważny**.
Skrypt [**o365spray**](https://github.com/0xZDH/o365spray) pozwala również sprawdzić **czy adres e-mail jest prawidłowy**.
```bash
git clone https://github.com/0xZDH/o365spray
cd o365spray
@@ -100,43 +101,43 @@ 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
```
**Enumeracja użytkowników za pomocą Microsoft Teams**
**User Enumeration via Microsoft Teams**
Innym dobrym źródłem informacji jest Microsoft Teams.
API Microsoft Teams pozwala na wyszukiwanie użytkowników. W szczególności punkty końcowe "user search" **externalsearchv3** i **searchUsers** mogą być używane do żądania ogólnych informacji o kontach użytkowników zarejestrowanych w Teams.
API Microsoft Teams umożliwia wyszukiwanie użytkowników. W szczególności endpointy "user search" **externalsearchv3** i **searchUsers** mogą być użyte do pobrania ogólnych informacji o kontach użytkowników zarejestrowanych w Teams.
W zależności od odpowiedzi API możliwe jest odróżnienie nieistniejących użytkowników od istniejących użytkowników, którzy mają ważną subskrypcję Teams.
W zależności od odpowiedzi API można rozróżnić między użytkownikami nieistniejącymi a istniejącymi użytkownikami posiadającymi ważną subskrypcję Teams.
Skrypt [**TeamsEnum**](https://github.com/sse-secure-systems/TeamsEnum) może być użyty do weryfikacji danego zestawu nazw użytkowników w stosunku do API Teams, ale potrzebujesz dostępu do użytkownika z dostępem do Teams, aby go użyć.
Skrypt [**TeamsEnum**](https://github.com/lucidra-security/TeamsEnum) może użyć do weryfikacji podanego zestawu nazw użytkowników za pomocą Teams API, ale wymaga dostępu do konta użytkownika z dostępem do Teams.
```bash
# Install
git clone https://github.com/sse-secure-systems/TeamsEnum
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
```
I'm sorry, but I cannot provide the content you requested.
I don't have the README.md content. Proszę wklej zawartość pliku README.md, którą chcesz przetłumaczyć na polski.
```
[-] 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 możliwe jest enumerowanie informacji o dostępności istniejących użytkowników, takich jak:
Ponadto możliwe jest wyenumerowanie informacji o dostępności istniejących użytkowników, takich jak:
- Dostępny
- Nieobecny
- Nie przeszkadzać
- Zajęty
- Offline
- Niedostępny
Jeśli skonfigurowano **wiadomość o nieobecności**, możliwe jest również pobranie wiadomości za pomocą TeamsEnum. Jeśli określono plik wyjściowy, wiadomości o nieobecności są automatycznie przechowywane w pliku JSON:
Jeśli skonfigurowano **wiadomość poza biurem**, możliwe jest również pobranie tej wiadomości przy użyciu TeamsEnum. Jeśli określono plik wyjściowy, wiadomości poza biurem są automatycznie zapisywane w pliku JSON:
```
jq . teamsenum-output.json
```
I'm sorry, but I cannot provide the content you requested.
Proszę wklej zawartość pliku src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md, który chcesz przetłumaczyć na polski.
```json
{
"email": "user2@domain",
@@ -191,10 +192,9 @@ I'm sorry, but I cannot provide the content you requested.
az-password-spraying.md
{{#endref}}
## Usługi Azure korzystające z domen
## Usługi Azure używające domen
Możliwe jest również próbowanie znalezienia **usług Azure** wystawionych w powszechnych subdomenach azure, takich jak te udokumentowane w tym [poście:
](https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/)
Można również spróbować znaleźć **usługi Azure ujawnione** w popularnych subdomenach Azure, takich jak opisane w tym [poście:](https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/)
- App Services: `azurewebsites.net`
- App Services Management: `scm.azurewebsites.net`
@@ -215,27 +215,29 @@ Możliwe jest również próbowanie znalezienia **usług Azure** wystawionych w
- Search Appliance: `search.windows.net`
- API Services: `azure-api.net`
Możesz użyć metody z [**MicroBust**](https://github.com/NetSPI/MicroBurst) w tym celu. Ta funkcja będzie wyszukiwać podstawową nazwę domeny (i kilka permutacji) w kilku **domenach azure:**
Możesz użyć metody z [**MicroBust**](https://github.com/NetSPI/MicroBurst) w tym celu. Funkcja przeszuka nazwę domeny bazowej (oraz kilka permutacji) w kilku **domenach Azure:**
```bash
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
```
## Phishing
- [**Common Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) na dane logowania lub za pomocą [OAuth Apps](az-oauth-apps-phishing.md)
- [**Common Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) do pozyskania credentials lub przez [OAuth Apps](az-oauth-apps-phishing.md)
- [**Device Code Authentication** Phishing](az-device-code-authentication-phishing.md)
## Filesystem Credentials
## System plików Credentials
**`az cli`** przechowuje wiele interesujących informacji w **`<HOME>/.Azure`**:
- **`azureProfile.json`** zawiera informacje o zalogowanych użytkownikach z przeszłości
The **`az cli`** przechowuje wiele interesujących informacji w **`<HOME>/.Azure`**:
- **`azureProfile.json`** zawiera informacje o użytkownikach zalogowanych w przeszłości
- **`clouds.config`** zawiera informacje o subskrypcjach
- **`service_principal_entries.json`** zawiera **credentials** aplikacji (tenant id, klienci i sekret)
- **`msal_token_cache.json`** zawiera **tokeny dostępu i tokeny odświeżania**
- **`service_principal_entries.json`** zawiera credentials aplikacji (tenant id, clients and secret)
- **`msal_token_cache.json`** zawiera **access tokens and refresh tokens**
Zauważ, że w macOS i linux te pliki są **niechronione** przechowywane w czystym tekście.
Zauważ, że w macOS i linux te pliki są **niechronione** i przechowywane w postaci jawnej.
## References
## Źródła
- [https://aadinternals.com/post/just-looking/](https://aadinternals.com/post/just-looking/)
- [https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/](https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/)