# Azure Pentesting {{#include ../../banners/hacktricks-training.md}} ## Basic Information Azure और Entra ID के मूल बातें निम्नलिखित पृष्ठ पर जानें: {{#ref}} az-basic-information/ {{#endref}} ## Azure Pentester/Red Team Methodology AZURE वातावरण का ऑडिट करने के लिए यह बहुत महत्वपूर्ण है: कौन से **सेवाएँ उपयोग की जा रही हैं**, क्या **प्रदर्शित किया जा रहा है**, किसके पास **पहुँच** है, और आंतरिक Azure सेवाएँ और **बाहरी सेवाएँ** कैसे जुड़ी हुई हैं। Red Team के दृष्टिकोण से, **Azure वातावरण को समझौता करने का पहला कदम** कुछ **foothold** प्राप्त करना है। ### External enum & Initial Access पहला कदम निश्चित रूप से उस टेनेट के बारे में जानकारी इकट्ठा करना है जिसे आप हमला कर रहे हैं और एक foothold प्राप्त करने की कोशिश करना है। डोमेन नाम के आधार पर यह जानना संभव है कि **क्या कंपनी Azure का उपयोग कर रही है**, **टेनेट ID** प्राप्त करें, उसी टेनेट में अन्य **मान्य डोमेन** प्राप्त करें (यदि अधिक हैं) और **संबंधित जानकारी** प्राप्त करें जैसे कि SSO सक्षम है या नहीं, मेल कॉन्फ़िगरेशन, मान्य उपयोगकर्ता ईमेल... **बाहरी एन्यूमरेशन** करने के लिए निम्नलिखित पृष्ठ देखें: {{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}} इस जानकारी के साथ, foothold प्राप्त करने के लिए सबसे सामान्य तरीके हैं: - **OSINT**: Github या किसी अन्य ओपन-सोर्स प्लेटफॉर्म पर **leaks** की जांच करें जो **credentials** या दिलचस्प जानकारी रख सकते हैं। - **Password** पुन: उपयोग, leaks या [password spraying](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) - एक कर्मचारी के लिए credentials खरीदें - [**Common Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (credentials या Oauth App) - [Device Code Authentication Phishing](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md) - 3rd parties **breached** - Azure-Hosted Applications में कमजोरियाँ - [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) के साथ मेटाडेटा एंडपॉइंट तक पहुँच - **Subdomain takeovers** जैसे [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/) - **अन्य Azure सेवाओं की गलत कॉन्फ़िगरेशन** - यदि कुछ डेवलपर लैपटॉप समझौता किया गया है ([WinPEAS और LinPEAS](https://github.com/peass-ng/PEASS-ng) इस जानकारी को खोज सकते हैं): - **`/.Azure`** के अंदर - **`azureProfile.json`** पिछले लॉग इन उपयोगकर्ताओं के बारे में जानकारी रखता है - **`clouds.config contains`** सब्सक्रिप्शन के बारे में जानकारी रखता है - **`service_principal_entries.json`** में एप्लिकेशन के credentials (टेनेट आईडी, क्लाइंट और सीक्रेट) होते हैं। केवल Linux और macOS में - **`msal_token_cache.json`** में एक्सेस टोकन और रिफ्रेश टोकन होते हैं। केवल Linux और macOS में - **`service_principal_entries.bin`** और msal_token_cache.bin Windows में उपयोग होते हैं और DPAPI के साथ एन्क्रिप्टेड होते हैं - **`msal_http_cache.bin`** HTTP अनुरोध का कैश है - इसे लोड करें: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)` - **`AzureRmContext.json`** में Az PowerShell का उपयोग करके पिछले लॉगिन के बारे में जानकारी होती है (लेकिन कोई credentials नहीं) - **`C:\Users\\AppData\Local\Microsoft\IdentityCache\*`** के अंदर कई `.bin` फ़ाइलें हैं जिनमें **access tokens**, ID tokens और उपयोगकर्ता के DPAPI के साथ एन्क्रिप्ट की गई खाता जानकारी होती है। - **`C:\Users\\AppData\Local\Microsoft\TokenBroken\Cache\`** के अंदर `.tbres` फ़ाइलों में अधिक **access tokens** मिल सकते हैं, जो DPAPI के साथ एन्क्रिप्टेड बेस64 होते हैं। - Linux और macOS में आप Az PowerShell (यदि उपयोग किया गया हो) से **access tokens, refresh tokens और id tokens** प्राप्त कर सकते हैं `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"` चलाकर - Windows में यह केवल id tokens उत्पन्न करता है। - यह देखना संभव है कि क्या Az PowerShell का उपयोग Linux और macOS में किया गया था, यह जांचकर कि `$HOME/.local/share/.IdentityService/` मौजूद है (हालांकि इसमें मौजूद फ़ाइलें खाली और बेकार हैं) निम्नलिखित पृष्ठ पर **अन्य Azure सेवाओं की गलत कॉन्फ़िगरेशन** खोजें जो एक foothold की ओर ले जा सकती हैं: {{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}} > [!NOTE] > याद रखें कि आमतौर पर **एन्यूमरेशन का सबसे शोर वाला** भाग **लॉगिन** होता है, न कि एन्यूमरेशन स्वयं। ### Azure & Entra ID tooling निम्नलिखित उपकरण Entra ID टेनेट और Azure वातावरण को धीरे-धीरे (पता लगाने से बचने के लिए) या स्वचालित रूप से (समय बचाने के लिए) एन्यूमरेट करने के लिए बहुत उपयोगी होंगे: {{#ref}} az-enumeration-tools.md {{#endref}} ### Bypass Access Policies
उन मामलों में जहाँ आपके पास कुछ मान्य credentials हैं लेकिन आप लॉगिन नहीं कर सकते, ये कुछ सामान्य सुरक्षा उपाय हैं जो लागू हो सकते हैं: - **IP whitelisting** -- आपको एक मान्य IP से समझौता करना होगा - **Geo restrictions** -- पता करें कि उपयोगकर्ता कहाँ रहता है या कंपनी के कार्यालय कहाँ हैं और उसी शहर (या कम से कम देश) से एक IP प्राप्त करें - **Browser** -- शायद केवल कुछ OS (Windows, Linux, Mac, Android, iOS) से एक ब्राउज़र की अनुमति है। पता करें कि पीड़ित/कंपनी कौन सा OS उपयोग कर रही है। - आप **Service Principal credentials** को भी समझौता करने की कोशिश कर सकते हैं क्योंकि वे आमतौर पर कम सीमित होते हैं और इसका लॉगिन कम समीक्षा किया जाता है इसे बायपास करने के बाद, आप अपनी प्रारंभिक सेटअप पर वापस जाने में सक्षम हो सकते हैं और आपके पास अभी भी पहुँच होगी। जांचें: {{#ref}} az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md {{#endref}} ### Whoami > [!CAUTION] > जानें **कैसे स्थापित करें** az cli, AzureAD और Az PowerShell [**Az - Entra ID**](az-services/az-azuread.md) अनुभाग में। आपको जानने की आवश्यकता है कि आप **कौन हैं** (आप किस वातावरण में हैं): {{#tabs }} {{#tab name="az cli" }} ```bash az account list az account tenant list # Current tenant info az account subscription list # Current subscription info az ad signed-in-user show # Current signed-in user az ad signed-in-user list-owned-objects # Get owned objects by current user az account management-group list #Not allowed by default ``` {{#endtab }} {{#tab name="Az" }} ```bash # Get the information about the current context (Account, Tenant, Subscription etc.) Get-AzContext # List all available contexts Get-AzContext -ListAvailable # Enumerate subscriptions accessible by the current user Get-AzSubscription #Get Resource group Get-AzResourceGroup ``` {{#endtab }} {{#tab name="Mg" }} ```bash #Get the current session Get-MgContext ``` {{#endtab }} {{#tab name="AzureAD" }} ```bash #Get the current session state Get-AzureADCurrentSessionInfo #Get details of the current tenant Get-AzureADTenantDetail ``` {{#endtab }} {{#endtabs }} ### Entra ID Enumeration & Privesc डिफ़ॉल्ट रूप से, किसी भी उपयोगकर्ता को **उपयोगकर्ताओं, समूहों, भूमिकाओं, सेवा प्रमुखों** जैसी चीजों को सूचीबद्ध करने के लिए **पर्याप्त अनुमतियाँ होनी चाहिए**... (चेक [default AzureAD permissions](az-basic-information/index.html#default-user-permissions)).\ यहाँ एक गाइड है: {{#ref}} az-services/az-azuread.md {{#endref}} **Entra ID** में विशेषाधिकार बढ़ाने के लिए उपकरण खोजने के लिए **Post-Exploitation tools** की जाँच करें जैसे **AzureHound:** {{#ref}} az-enumeration-tools.md#automated-post-exploitation-tools {{#endref}} ### Azure Enumeration एक बार जब आप जान लेते हैं कि आप कौन हैं, तो आप **Azure सेवाओं को सूचीबद्ध करना शुरू कर सकते हैं** जिन तक आपकी पहुँच है। आपको संसाधनों पर **आपके पास जो अनुमतियाँ हैं** उन्हें जानने की कोशिश करनी चाहिए। इसके लिए: 1. **उस संसाधन को खोजें जिसके लिए आपके पास कुछ पहुँच है**: > [!TIP] > इसके लिए किसी विशेष अनुमति की आवश्यकता नहीं है। Az PowerShell कमांड **`Get-AzResource`** आपको **जानकारी देता है कि आपके वर्तमान उपयोगकर्ता के पास किन संसाधनों पर दृश्यता है**। इसके अलावा, आप **वेब कंसोल** में वही जानकारी प्राप्त कर सकते हैं [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) पर जाकर या "सभी संसाधन" के लिए खोजकर या निष्पादित करके: ```bash az rest --method GET --url "https://management.azure.com/subscriptions//resources?api-version=2021-04-01" ``` 2. **आपके पास जिन संसाधनों पर अधिकार हैं, उन्हें खोजें**: > [!TIP] > इसके लिए किसी विशेष अनुमति की आवश्यकता नहीं है। API **`https://management.azure.com/{resource_id}/providers/Microsoft.Authorization/permissions?api-version=2022-04-01`** से बात करके, आप निर्दिष्ट संसाधन पर आपके पास जो अधिकार हैं, उन्हें प्राप्त कर सकते हैं **`resource_id`** में। इसलिए, **उन सभी संसाधनों की जांच करते हुए जिन तक आपकी पहुंच है**, आप उनके ऊपर आपके पास जो अधिकार हैं, उन्हें प्राप्त कर सकते हैं। > [!WARNING] > आप इस गणना को स्वचालित कर सकते हैं, उपकरण **[Find_My_Az_Management_Permissions](https://github.com/carlospolop/Find_My_Az_Management_Permissions)** का उपयोग करके।
अधिकारों को **`Microsoft.Authorization/roleAssignments/read`** के साथ सूचीबद्ध करें > [!TIP] > ध्यान दें कि इस क्रिया को निष्पादित करने के लिए आपको अनुमति **`Microsoft.Authorization/roleAssignments/read`** की आवश्यकता है। - पर्याप्त अनुमतियों के साथ, भूमिका **`Get-AzRoleAssignment`** का उपयोग **सदस्यता में सभी भूमिकाओं को सूचीबद्ध करने** या एक विशिष्ट संसाधन पर अधिकार को इंगित करने के लिए किया जा सकता है जैसे: ```bash Get-AzRoleAssignment -Scope /subscriptions//resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4 ``` यह जानकारी प्राप्त करना भी संभव है: ```bash az rest --method GET --uri "https://management.azure.com//providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value" ``` जैसे कि: ```bash az rest --method GET --uri "https://management.azure.com//subscriptions//resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value" ``` - एक और विकल्प है **azure में आपके साथ जुड़े रोल प्राप्त करना**। इसके लिए भी अनुमति **`Microsoft.Authorization/roleAssignments/read`** की आवश्यकता है: ```bash az role assignment list --assignee "" --all --output table ``` या निम्नलिखित चलाने पर (यदि परिणाम खाली हैं, तो इसका कारण यह हो सकता है कि आपके पास उन्हें प्राप्त करने की अनुमति नहीं है): ```bash az rest --method GET --uri 'https://management.azure.com/subscriptions//providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '' ``` - **आपके साथ जुड़े भूमिकाओं की सूक्ष्म अनुमतियों को खोजें**: फिर, सूक्ष्म अनुमति प्राप्त करने के लिए आप **`(Get-AzRoleDefinition -Id "").Actions`** चला सकते हैं। या सीधे API को कॉल करें: ```bash az rest --method GET --uri "https://management.azure.com//subscriptions//providers/Microsoft.Authorization/roleDefinitions/?api-version=2022-04-01" | jq ".properties" ```
निम्नलिखित अनुभाग में आप **सबसे सामान्य Azure सेवाओं के बारे में जानकारी और उन्हें कैसे सूचीबद्ध करें** पा सकते हैं: {{#ref}} az-services/ {{#endref}} ### विशेषाधिकार वृद्धि, पोस्ट-एक्सप्लॉइटेशन और स्थिरता एक बार जब आप जान लेते हैं कि Azure वातावरण कैसे संरचित है और कौन सी सेवाएँ उपयोग की जा रही हैं, तो आप **विशेषाधिकार बढ़ाने, पार्श्व में स्थानांतरित करने, अन्य पोस्ट-एक्सप्लॉइटेशन हमले करने और स्थिरता बनाए रखने** के तरीकों की तलाश शुरू कर सकते हैं। निम्नलिखित अनुभाग में आप सबसे सामान्य Azure सेवाओं में विशेषाधिकार बढ़ाने के बारे में जानकारी पा सकते हैं: {{#ref}} az-privilege-escalation/ {{#endref}} निम्नलिखित में आप सबसे सामान्य Azure सेवाओं में पोस्ट-एक्सप्लॉइटेशन हमले करने के बारे में जानकारी पा सकते हैं: {{#ref}} az-post-exploitation/ {{#endref}} निम्नलिखित में आप सबसे सामान्य Azure सेवाओं में स्थिरता बनाए रखने के बारे में जानकारी पा सकते हैं: {{#ref}} az-persistence/ {{#endref}} {{#include ../../banners/hacktricks-training.md}}