mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-30 23:50:25 -07:00
Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes
This commit is contained in:
@@ -4,80 +4,86 @@
|
|||||||
|
|
||||||
## Basic Information
|
## Basic Information
|
||||||
|
|
||||||
|
Azure और Entra ID के मूल बातें निम्नलिखित पृष्ठ पर जानें:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
az-basic-information/
|
az-basic-information/
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## Azure Pentester/Red Team Methodology
|
## Azure Pentester/Red Team Methodology
|
||||||
|
|
||||||
AZURE वातावरण का ऑडिट करने के लिए यह बहुत महत्वपूर्ण है: कौन-सी **सेवाएँ उपयोग की जा रही हैं**, क्या **एक्सपोज़** किया जा रहा है, किसके पास **एक्सेस** है, और आंतरिक Azure सेवाएँ और **बाहरी सेवाएँ** कैसे जुड़ी हुई हैं।
|
AZURE वातावरण का ऑडिट करने के लिए यह बहुत महत्वपूर्ण है: कौन से **सेवाएँ उपयोग की जा रही हैं**, क्या **प्रदर्शित किया जा रहा है**, किसके पास **पहुँच** है, और आंतरिक Azure सेवाएँ और **बाहरी सेवाएँ** कैसे जुड़ी हुई हैं।
|
||||||
|
|
||||||
Red Team के दृष्टिकोण से, **Azure वातावरण को समझौता करने का पहला कदम** Azure AD के लिए कुछ **क्रेडेंशियल्स** प्राप्त करना है। यहाँ कुछ विचार दिए गए हैं कि आप ऐसा कैसे कर सकते हैं:
|
Red Team के दृष्टिकोण से, **Azure वातावरण को समझौता करने का पहला कदम** कुछ **foothold** प्राप्त करना है।
|
||||||
|
|
||||||
- **Leaks** in github (या समान) - OSINT
|
### External enum & Initial Access
|
||||||
- **Social** Engineering
|
|
||||||
- **Password** reuse (password leaks)
|
|
||||||
- Azure-Hosted Applications में Vulnerabilities
|
|
||||||
- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) जो मेटाडेटा एंडपॉइंट तक पहुँच प्रदान करता है
|
|
||||||
- **Local File Read**
|
|
||||||
- `/home/USERNAME/.azure`
|
|
||||||
- `C:\Users\USERNAME\.azure`
|
|
||||||
- फ़ाइल **`accessTokens.json`** `az cli` में 2.30 से पहले - Jan2022 - **एक्सेस टोकन को स्पष्ट पाठ में संग्रहीत किया गया**
|
|
||||||
- फ़ाइल **`azureProfile.json`** में लॉग इन किए गए उपयोगकर्ता के बारे में **जानकारी** होती है।
|
|
||||||
- **`az logout`** टोकन को हटा देता है।
|
|
||||||
- पुराने संस्करणों में **`Az PowerShell`** ने **एक्सेस टोकन** को **स्पष्ट** पाठ में **`TokenCache.dat`** में संग्रहीत किया। यह **ServicePrincipalSecret** को भी **स्पष्ट** पाठ में **`AzureRmContext.json`** में संग्रहीत करता है। Cmdlet **`Save-AzContext`** का उपयोग **टोकन** को **संग्रहीत** करने के लिए किया जा सकता है।\
|
|
||||||
उन्हें हटाने के लिए `Disconnect-AzAccount` का उपयोग करें।
|
|
||||||
- 3rd parties **breached**
|
|
||||||
- **Internal** Employee
|
|
||||||
- [**Common Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (क्रेडेंशियल्स या Oauth App)
|
|
||||||
- [Device Code Authentication Phishing](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md)
|
|
||||||
- [Azure **Password Spraying**](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
|
|
||||||
|
|
||||||
यहाँ तक कि अगर आपने Azure टेनेट के अंदर किसी उपयोगकर्ता को **समझौता नहीं किया** है, तो आप इससे **कुछ जानकारी** एकत्र कर सकते हैं:
|
पहला कदम निश्चित रूप से उस टेनेन्ट के बारे में जानकारी इकट्ठा करना है जिसे आप हमला कर रहे हैं और foothold प्राप्त करने की कोशिश करना है।
|
||||||
|
|
||||||
|
डोमेन नाम के आधार पर यह जानना संभव है **क्या कंपनी Azure का उपयोग कर रही है**, **टेनेन्ट ID** प्राप्त करें, उसी टेनेन्ट में अन्य **मान्य डोमेन** प्राप्त करें (यदि अधिक हैं) और **संबंधित जानकारी** प्राप्त करें जैसे कि SSO सक्षम है या नहीं, मेल कॉन्फ़िगरेशन, मान्य उपयोगकर्ता ईमेल...
|
||||||
|
|
||||||
|
**बाहरी enumeration** करने के लिए निम्नलिखित पृष्ठ देखें:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
az-unauthenticated-enum-and-initial-entry/
|
az-unauthenticated-enum-and-initial-entry/
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
> [!NOTE]
|
इस जानकारी के साथ foothold प्राप्त करने के लिए सबसे सामान्य तरीके हैं:
|
||||||
> एक बार जब आप क्रेडेंशियल्स प्राप्त कर लेते हैं, तो आपको यह जानने की आवश्यकता है कि **ये क्रेडेंशियल्स किसके हैं**, और **इनके पास क्या एक्सेस है**, इसलिए आपको कुछ बुनियादी एन्यूमरेशन करने की आवश्यकता है:
|
- **OSINT**: Github या किसी अन्य ओपन-सोर्स प्लेटफॉर्म पर **leaks** की जांच करें जो **credentials** या दिलचस्प जानकारी रख सकता है।
|
||||||
|
- **Password** पुन: उपयोग, leaks या [password spraying](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
|
||||||
## Basic Enumeration
|
- एक कर्मचारी के लिए 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/)
|
||||||
|
- यदि कुछ डेवलपर लैपटॉप समझौता कर लिया गया है ([WinPEAS और LinPEAS](https://github.com/peass-ng/PEASS-ng) इस जानकारी को खोज सकते हैं):
|
||||||
|
- अंदर **`<HOME>/.Azure`**
|
||||||
|
- **`azureProfile.json`** पिछले लॉग इन उपयोगकर्ताओं के बारे में जानकारी रखता है
|
||||||
|
- **`clouds.config contains`** सब्सक्रिप्शन के बारे में जानकारी रखता है
|
||||||
|
- **`service_principal_entries.json`** एप्लिकेशन के credentials (टेनेन्ट आईडी, क्लाइंट और सीक्रेट) रखता है। केवल Linux और macOS में
|
||||||
|
- **`msal_token_cache.json`** में access tokens और refresh tokens होते हैं। केवल 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\<username>\AppData\Local\Microsoft\IdentityCache\*`** कई `.bin` फ़ाइलें हैं जिनमें **access tokens**, ID tokens और उपयोगकर्ता के DPAPI के साथ एन्क्रिप्ट की गई खाता जानकारी होती है।
|
||||||
|
- **`C:\Users\<username>\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/` मौजूद है (हालांकि इसमें शामिल फ़ाइलें खाली और बेकार हैं)
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> याद रखें कि एन्यूमरेशन का **सबसे शोर वाला** भाग **लॉगिन** है, न कि एन्यूमरेशन स्वयं।
|
> याद रखें कि आमतौर पर **enumeration का सबसे शोर वाला** भाग **login** होता है, न कि स्वयं enumeration।
|
||||||
|
|
||||||
### SSRF
|
### Azure & Entra ID tooling
|
||||||
|
|
||||||
यदि आपने Azure के अंदर एक मशीन में SSRF पाया है, तो ट्रिक्स के लिए इस पृष्ठ की जांच करें:
|
निम्नलिखित उपकरण Entra ID टेनेन्ट और Azure वातावरण को धीरे-धीरे (पता लगाने से बचने के लिए) या स्वचालित रूप से (समय बचाने के लिए) enumerating करने के लिए बहुत उपयोगी होंगे:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html
|
az-enumeration-tools.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
### Bypass Login Conditions
|
### Bypass Login Conditions
|
||||||
|
|
||||||
<figure><img src="../../images/image (268).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../images/image (268).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
उन मामलों में जहाँ आपके पास कुछ मान्य क्रेडेंशियल्स हैं लेकिन आप लॉगिन नहीं कर सकते, ये कुछ सामान्य सुरक्षा उपाय हो सकते हैं:
|
उन मामलों में जहाँ आपके पास कुछ मान्य credentials हैं लेकिन आप लॉगिन नहीं कर सकते, ये कुछ सामान्य सुरक्षा उपाय हैं जो लागू हो सकते हैं:
|
||||||
|
|
||||||
- **IP whitelisting** -- आपको एक मान्य IP को समझौता करना होगा
|
- **IP whitelisting** -- आपको एक मान्य IP से समझौता करना होगा
|
||||||
- **Geo restrictions** -- पता करें कि उपयोगकर्ता कहाँ रहता है या कंपनी के कार्यालय कहाँ हैं और उसी शहर (या कम से कम देश) से एक IP प्राप्त करें
|
- **Geo restrictions** -- पता करें कि उपयोगकर्ता कहाँ रहता है या कंपनी के कार्यालय कहाँ हैं और उसी शहर (या कम से कम देश) से एक IP प्राप्त करें
|
||||||
- **Browser** -- शायद केवल कुछ OS (Windows, Linux, Mac, Android, iOS) से एक ब्राउज़र की अनुमति है। पता करें कि पीड़ित/कंपनी कौन सा OS उपयोग करती है।
|
- **Browser** -- शायद केवल कुछ OS (Windows, Linux, Mac, Android, iOS) से एक ब्राउज़र की अनुमति है। पता करें कि पीड़ित/कंपनी कौन सा OS उपयोग कर रही है।
|
||||||
- आप **Service Principal क्रेडेंशियल्स** को भी समझौता करने की कोशिश कर सकते हैं क्योंकि ये आमतौर पर कम सीमित होते हैं और इसका लॉगिन कम समीक्षा किया जाता है
|
- आप **Service Principal credentials** को भी समझौता करने की कोशिश कर सकते हैं क्योंकि ये आमतौर पर कम सीमित होते हैं और इसका लॉगिन कम समीक्षा किया जाता है
|
||||||
|
|
||||||
इसे बायपास करने के बाद, आप अपनी प्रारंभिक सेटअप पर वापस जाने में सक्षम हो सकते हैं और आपके पास अभी भी एक्सेस होगा।
|
इसे बायपास करने के बाद, आप अपनी प्रारंभिक सेटअप पर वापस जाने में सक्षम हो सकते हैं और आपके पास अभी भी पहुँच होगी।
|
||||||
|
|
||||||
### Subdomain Takeover
|
|
||||||
|
|
||||||
- [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)
|
|
||||||
|
|
||||||
### Whoami
|
### Whoami
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> जानें **कैसे स्थापित करें** az cli, AzureAD और Az PowerShell को [**Az - Entra ID**](az-services/az-azuread.md) अनुभाग में।
|
> जानें **कैसे स्थापित करें** az cli, AzureAD और Az PowerShell [**Az - Entra ID**](az-services/az-azuread.md) अनुभाग में।
|
||||||
|
|
||||||
आपको जानने की आवश्यकता है कि **आप कौन हैं** (आप किस वातावरण में हैं):
|
आपको जानने की पहली चीज़ यह है कि **आप कौन हैं** (आप किस वातावरण में हैं):
|
||||||
|
|
||||||
{{#tabs }}
|
{{#tabs }}
|
||||||
{{#tab name="az cli" }}
|
{{#tab name="az cli" }}
|
||||||
@@ -91,16 +97,7 @@ az account management-group list #Not allowed by default
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="AzureAD" }}
|
{{#tab name="Az" }}
|
||||||
```bash
|
|
||||||
#Get the current session state
|
|
||||||
Get-AzureADCurrentSessionInfo
|
|
||||||
#Get details of the current tenant
|
|
||||||
Get-AzureADTenantDetail
|
|
||||||
```
|
|
||||||
{{#endtab }}
|
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
|
||||||
```bash
|
```bash
|
||||||
# Get the information about the current context (Account, Tenant, Subscription etc.)
|
# Get the information about the current context (Account, Tenant, Subscription etc.)
|
||||||
Get-AzContext
|
Get-AzContext
|
||||||
@@ -110,43 +107,79 @@ Get-AzContext -ListAvailable
|
|||||||
Get-AzSubscription
|
Get-AzSubscription
|
||||||
#Get Resource group
|
#Get Resource group
|
||||||
Get-AzResourceGroup
|
Get-AzResourceGroup
|
||||||
# Enumerate all resources visible to the current user
|
```
|
||||||
Get-AzResource
|
{{#endtab }}
|
||||||
# Enumerate all Azure RBAC role assignments
|
|
||||||
Get-AzRoleAssignment # For all users
|
{{#tab name="Mg" }}
|
||||||
Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user
|
```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 }}
|
{{#endtab }}
|
||||||
{{#endtabs }}
|
{{#endtabs }}
|
||||||
|
|
||||||
> [!CAUTION]
|
|
||||||
> Azure को सूचीबद्ध करने के लिए सबसे महत्वपूर्ण कमांड में से एक है **`Get-AzResource`** Az PowerShell से, क्योंकि यह आपको **जानने देता है कि आपके वर्तमान उपयोगकर्ता के पास कौन से संसाधनों की दृश्यता है**।
|
|
||||||
>
|
|
||||||
> आप वही जानकारी **वेब कंसोल** में [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) पर जाकर या "सभी संसाधन" खोजकर प्राप्त कर सकते हैं।
|
|
||||||
|
|
||||||
### Entra ID Enumeration
|
### Entra ID Enumeration & Privilege Escalation
|
||||||
|
|
||||||
डिफ़ॉल्ट रूप से, किसी भी उपयोगकर्ता को **चीजों को सूचीबद्ध करने के लिए पर्याप्त अनुमतियाँ होनी चाहिए** जैसे, उपयोगकर्ता, समूह, भूमिकाएँ, सेवा प्रमुख... (देखें [डिफ़ॉल्ट AzureAD अनुमतियाँ](az-basic-information/index.html#default-user-permissions)).\
|
डिफ़ॉल्ट रूप से, किसी भी उपयोगकर्ता के पास **उपयोगकर्ताओं, समूहों, भूमिकाओं, सेवा प्रमुखों** जैसी चीजों को सूचीबद्ध करने के लिए **पर्याप्त अनुमतियाँ होनी चाहिए**... (चेक [default AzureAD permissions](az-basic-information/index.html#default-user-permissions)).\
|
||||||
आप यहाँ एक गाइड पा सकते हैं:
|
यहाँ एक गाइड है:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
az-services/az-azuread.md
|
az-services/az-azuread.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
> [!NOTE]
|
**Post-Exploitation tools** की जाँच करें ताकि Entra ID में अनुमतियों को बढ़ाने के लिए उपकरण मिल सकें जैसे **AzureHound:**
|
||||||
> अब जब आपके पास **आपकी क्रेडेंशियल्स के बारे में कुछ जानकारी है** (और यदि आप एक रेड टीम हैं, तो उम्मीद है कि आप **पकड़े नहीं गए हैं**)। यह पता लगाने का समय है कि वातावरण में कौन से सेवाएँ उपयोग की जा रही हैं।\
|
|
||||||
> निम्नलिखित अनुभाग में आप **कुछ सामान्य सेवाओं को सूचीबद्ध करने के कुछ तरीके** देख सकते हैं।
|
|
||||||
|
|
||||||
## App Service SCM
|
{{#ref}}
|
||||||
|
az-enumeration-tools.md#automated-post-exploitation-tools
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
App Service 'container' में लॉग इन करने के लिए Kudu कंसोल।
|
|
||||||
|
|
||||||
## Webshell
|
### Enumerate Azure Services
|
||||||
|
|
||||||
portal.azure.com का उपयोग करें और शेल का चयन करें, या bash या powershell के लिए shell.azure.com का उपयोग करें। इस शेल का 'डिस्क' एक स्टोरेज-खाता में एक इमेज फ़ाइल के रूप में संग्रहीत होता है।
|
एक बार जब आप जान लेते हैं कि आप कौन हैं, तो आप **Azure सेवाओं को सूचीबद्ध करना शुरू कर सकते हैं जिन तक आपकी पहुँच है**।
|
||||||
|
|
||||||
## Azure DevOps
|
Az PoswerShell कमांड **`Get-AzResource`** आपको **जानने देता है कि आपके वर्तमान उपयोगकर्ता के पास कौन से संसाधनों की दृश्यता है**।
|
||||||
|
|
||||||
Azure DevOps Azure से अलग है। इसमें रिपॉजिटरी, पाइपलाइन्स (yaml या रिलीज़), बोर्ड, विकी, और अधिक हैं। वेरिएबल ग्रुप्स का उपयोग वेरिएबल मान और रहस्यों को संग्रहीत करने के लिए किया जाता है।
|
इसके अलावा, आप **वेब कंसोल** में वही जानकारी प्राप्त कर सकते हैं [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) पर जाकर या "All resources" के लिए खोजकर या निष्पादित करके: `az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"`
|
||||||
|
|
||||||
|
इसके अलावा, पर्याप्त अनुमतियों के साथ, भूमिका **`Get-AzRoleAssignment`** का उपयोग **सदस्यता में सभी भूमिकाओं को सूचीबद्ध करने** या एक विशिष्ट संसाधन पर अनुमति को इंगित करने के लिए किया जा सकता है जैसे: **`Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4`**
|
||||||
|
|
||||||
|
अगली अनुभाग में आप सबसे सामान्य Azure सेवाओं के बारे में जानकारी पा सकते हैं और उन्हें कैसे सूचीबद्ध करें:
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
az-services/
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
### Privilege Escalation, Post-Exploitation & Persistence in Azure Services
|
||||||
|
|
||||||
|
एक बार जब आप जान लेते हैं कि Azure वातावरण कैसे संरचित है और कौन सी सेवाएँ उपयोग की जा रही हैं, तो आप **अनुमतियों को बढ़ाने, पार्श्व रूप से स्थानांतरित करने, अन्य पोस्ट-एक्सप्लॉइटेशन हमलों को करने और स्थिरता बनाए रखने** के तरीकों की तलाश शुरू कर सकते हैं।
|
||||||
|
|
||||||
|
अगली अनुभाग में आप सबसे सामान्य Azure सेवाओं में अनुमतियों को बढ़ाने के बारे में जानकारी पा सकते हैं:
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
az-privilege-escalation/
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
अगली में आप सबसे सामान्य Azure सेवाओं में पोस्ट-एक्सप्लॉइटेशन हमलों को करने के बारे में जानकारी पा सकते हैं:
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
az-post-exploitation/
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
अगली में आप सबसे सामान्य Azure सेवाओं में स्थिरता बनाए रखने के बारे में जानकारी पा सकते हैं:
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
az-persistence/
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
+29
-16
@@ -25,14 +25,14 @@ Entra ID माइक्रोसॉफ्ट का क्लाउड-आध
|
|||||||
- Microsoft 365 IAM के लिए Azure AD का उपयोग करता है और इसमें कई "पहली-पार्टी" OAuth एप्लिकेशन शामिल हैं।
|
- Microsoft 365 IAM के लिए Azure AD का उपयोग करता है और इसमें कई "पहली-पार्टी" OAuth एप्लिकेशन शामिल हैं।
|
||||||
- ये एप्लिकेशन गहराई से एकीकृत होते हैं और अक्सर आपस में निर्भर सेवा संबंध होते हैं।
|
- ये एप्लिकेशन गहराई से एकीकृत होते हैं और अक्सर आपस में निर्भर सेवा संबंध होते हैं।
|
||||||
- उपयोगकर्ता अनुभव को सरल बनाने और कार्यक्षमता बनाए रखने के लिए, माइक्रोसॉफ्ट इन पहली-पार्टी एप्लिकेशनों को "अर्थित सहमति" या "पूर्व-सहमति" प्रदान करता है।
|
- उपयोगकर्ता अनुभव को सरल बनाने और कार्यक्षमता बनाए रखने के लिए, माइक्रोसॉफ्ट इन पहली-पार्टी एप्लिकेशनों को "अर्थित सहमति" या "पूर्व-सहमति" प्रदान करता है।
|
||||||
- **Implied Consent:** कुछ एप्लिकेशनों को बिना स्पष्ट उपयोगकर्ता या प्रशासक अनुमोदन के विशिष्ट स्कोप तक पहुँच **स्वतः प्रदान की जाती है**।
|
- **Implied Consent:** कुछ एप्लिकेशनों को बिना स्पष्ट उपयोगकर्ता या प्रशासक अनुमोदन के विशिष्ट स्कोप तक पहुँच **स्वचालित रूप से प्रदान की जाती है**।
|
||||||
- ये पूर्व-सहमति वाले स्कोप आमतौर पर उपयोगकर्ताओं और प्रशासकों दोनों से छिपे होते हैं, जिससे वे मानक प्रबंधन इंटरफेस में कम दिखाई देते हैं।
|
- ये पूर्व-सहमति वाले स्कोप आमतौर पर उपयोगकर्ताओं और प्रशासकों दोनों से छिपे होते हैं, जिससे वे मानक प्रबंधन इंटरफेस में कम दिखाई देते हैं।
|
||||||
|
|
||||||
**Client Application Types:**
|
**Client Application Types:**
|
||||||
|
|
||||||
1. **Confidential Clients:**
|
1. **Confidential Clients:**
|
||||||
- अपने स्वयं के क्रेडेंशियल्स (जैसे, पासवर्ड या प्रमाणपत्र) रखते हैं।
|
- अपने स्वयं के क्रेडेंशियल्स (जैसे, पासवर्ड या प्रमाणपत्र) रखते हैं।
|
||||||
- प्राधिकरण सर्वर के लिए **सुरक्षित रूप से प्रमाणीकरण** कर सकते हैं।
|
- **प्राधिकरण सर्वर** के लिए स्वयं को सुरक्षित रूप से प्रमाणीकरण कर सकते हैं।
|
||||||
2. **Public Clients:**
|
2. **Public Clients:**
|
||||||
- अद्वितीय क्रेडेंशियल्स नहीं होते हैं।
|
- अद्वितीय क्रेडेंशियल्स नहीं होते हैं।
|
||||||
- प्राधिकरण सर्वर के लिए सुरक्षित रूप से प्रमाणीकरण नहीं कर सकते हैं।
|
- प्राधिकरण सर्वर के लिए सुरक्षित रूप से प्रमाणीकरण नहीं कर सकते हैं।
|
||||||
@@ -43,9 +43,9 @@ Entra ID माइक्रोसॉफ्ट का क्लाउड-आध
|
|||||||
OIDC में **तीन प्रकार के टोकन** होते हैं:
|
OIDC में **तीन प्रकार के टोकन** होते हैं:
|
||||||
|
|
||||||
- [**Access Tokens**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** क्लाइंट इस टोकन को संसाधन सर्वर को **संसाधनों तक पहुँचने** के लिए प्रस्तुत करता है। इसे केवल उपयोगकर्ता, क्लाइंट और संसाधन के विशिष्ट संयोजन के लिए उपयोग किया जा सकता है और **समाप्ति तक रद्द नहीं किया जा सकता** - जो कि डिफ़ॉल्ट रूप से 1 घंटा है।
|
- [**Access Tokens**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** क्लाइंट इस टोकन को संसाधन सर्वर को **संसाधनों तक पहुँचने** के लिए प्रस्तुत करता है। इसे केवल उपयोगकर्ता, क्लाइंट और संसाधन के विशिष्ट संयोजन के लिए उपयोग किया जा सकता है और **समाप्ति तक रद्द नहीं किया जा सकता** - जो कि डिफ़ॉल्ट रूप से 1 घंटा है।
|
||||||
- **ID Tokens**: क्लाइंट को यह **टोकन प्राधिकरण सर्वर से** प्राप्त होता है। इसमें उपयोगकर्ता के बारे में बुनियादी जानकारी होती है। यह **उपयोगकर्ता और क्लाइंट के विशिष्ट संयोजन से बंधा होता है**।
|
- **ID Tokens**: क्लाइंट को यह **टोकन प्राधिकरण सर्वर से प्राप्त होता है**। इसमें उपयोगकर्ता के बारे में बुनियादी जानकारी होती है। यह **उपयोगकर्ता और क्लाइंट के विशिष्ट संयोजन से बंधा होता है**।
|
||||||
- **Refresh Tokens**: क्लाइंट को एक्सेस टोकन के साथ प्रदान किया जाता है। इसका उपयोग **नए एक्सेस और ID टोकन प्राप्त करने** के लिए किया जाता है। यह उपयोगकर्ता और क्लाइंट के विशिष्ट संयोजन से बंधा होता है और इसे रद्द किया जा सकता है। निष्क्रिय रिफ्रेश टोकनों के लिए डिफ़ॉल्ट समाप्ति **90 दिन** है और सक्रिय टोकनों के लिए **कोई समाप्ति नहीं** है (एक रिफ्रेश टोकन से नए रिफ्रेश टोकन प्राप्त करना संभव है)।
|
- **Refresh Tokens**: क्लाइंट को एक्सेस टोकन के साथ प्रदान किया जाता है। इसका उपयोग **नए एक्सेस और ID टोकन प्राप्त करने** के लिए किया जाता है। यह उपयोगकर्ता और क्लाइंट के विशिष्ट संयोजन से बंधा होता है और इसे रद्द किया जा सकता है। डिफ़ॉल्ट समाप्ति **90 दिन** है निष्क्रिय रिफ्रेश टोकन के लिए और **सक्रिय टोकन के लिए कोई समाप्ति नहीं** (एक रिफ्रेश टोकन से नए रिफ्रेश टोकन प्राप्त करना संभव है)।
|
||||||
- एक रिफ्रेश टोकन को एक **`aud`**, कुछ **scopes**, और एक **tenant** से जोड़ा जाना चाहिए और इसे केवल उस aud, scopes (और अधिक नहीं) और tenant के लिए एक्सेस टोकन उत्पन्न करने में सक्षम होना चाहिए। हालाँकि, यह **FOCI एप्लिकेशन टोकनों** के साथ ऐसा नहीं है।
|
- एक रिफ्रेश टोकन को एक **`aud`** , कुछ **scopes**, और एक **tenant** से जोड़ा जाना चाहिए और इसे केवल उस aud, scopes (और अधिक नहीं) और tenant के लिए एक्सेस टोकन उत्पन्न करने में सक्षम होना चाहिए। हालाँकि, यह **FOCI एप्लिकेशन टोकन** के साथ ऐसा नहीं है।
|
||||||
- एक रिफ्रेश टोकन एन्क्रिप्टेड होता है और केवल माइक्रोसॉफ्ट इसे डिक्रिप्ट कर सकता है।
|
- एक रिफ्रेश टोकन एन्क्रिप्टेड होता है और केवल माइक्रोसॉफ्ट इसे डिक्रिप्ट कर सकता है।
|
||||||
- नया रिफ्रेश टोकन प्राप्त करने से पिछले रिफ्रेश टोकन को रद्द नहीं किया जाता है।
|
- नया रिफ्रेश टोकन प्राप्त करने से पिछले रिफ्रेश टोकन को रद्द नहीं किया जाता है।
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@ OIDC में **तीन प्रकार के टोकन** होते
|
|||||||
- **aad-graph (Azure Active Directory Graph API)**: पुराने Azure AD Graph API (deprecated) तक पहुँचने के लिए उपयोग किया जाता है, जो एप्लिकेशनों को Azure Active Directory (Azure AD) में निर्देशिका डेटा पढ़ने और लिखने की अनुमति देता है।
|
- **aad-graph (Azure Active Directory Graph API)**: पुराने Azure AD Graph API (deprecated) तक पहुँचने के लिए उपयोग किया जाता है, जो एप्लिकेशनों को Azure Active Directory (Azure AD) में निर्देशिका डेटा पढ़ने और लिखने की अनुमति देता है।
|
||||||
- `https://graph.windows.net/`
|
- `https://graph.windows.net/`
|
||||||
|
|
||||||
* **arm (Azure Resource Manager)**: Azure Resource Manager API के माध्यम से Azure संसाधनों का प्रबंधन करने के लिए उपयोग किया जाता है। इसमें वर्चुअल मशीनों, स्टोरेज खातों, और अधिक जैसे संसाधनों को बनाने, अपडेट करने और हटाने जैसी क्रियाएँ शामिल हैं।
|
* **arm (Azure Resource Manager)**: Azure Resource Manager API के माध्यम से Azure संसाधनों का प्रबंधन करने के लिए उपयोग किया जाता है। इसमें वर्चुअल मशीन, स्टोरेज खाते, और अधिक जैसे संसाधनों को बनाने, अपडेट करने और हटाने जैसी क्रियाएँ शामिल हैं।
|
||||||
- `https://management.core.windows.net/ or https://management.azure.com/`
|
- `https://management.core.windows.net/ or https://management.azure.com/`
|
||||||
|
|
||||||
- **batch (Azure Batch Services)**: Azure Batch तक पहुँचने के लिए उपयोग किया जाता है, एक सेवा जो क्लाउड में बड़े पैमाने पर समानांतर और उच्च-प्रदर्शन कंप्यूटिंग एप्लिकेशनों को कुशलतापूर्वक सक्षम करती है।
|
- **batch (Azure Batch Services)**: Azure Batch तक पहुँचने के लिए उपयोग किया जाता है, एक सेवा जो क्लाउड में बड़े पैमाने पर समानांतर और उच्च-प्रदर्शन कंप्यूटिंग एप्लिकेशनों को कुशलतापूर्वक सक्षम करती है।
|
||||||
@@ -80,7 +80,7 @@ OIDC में **तीन प्रकार के टोकन** होते
|
|||||||
- **media (Azure Media Services)**: Azure Media Services तक पहुँचने के लिए उपयोग किया जाता है, जो वीडियो और ऑडियो सामग्री के लिए क्लाउड-आधारित मीडिया प्रसंस्करण और वितरण सेवाएँ प्रदान करता है।
|
- **media (Azure Media Services)**: Azure Media Services तक पहुँचने के लिए उपयोग किया जाता है, जो वीडियो और ऑडियो सामग्री के लिए क्लाउड-आधारित मीडिया प्रसंस्करण और वितरण सेवाएँ प्रदान करता है।
|
||||||
- `https://rest.media.azure.net`
|
- `https://rest.media.azure.net`
|
||||||
|
|
||||||
* **ms-graph (Microsoft Graph API)**: Microsoft Graph API तक पहुँचने के लिए उपयोग किया जाता है, जो Microsoft 365 सेवाओं के डेटा के लिए एकीकृत एंडपॉइंट है। यह आपको Azure AD, Office 365, Enterprise Mobility, और Security सेवाओं जैसी सेवाओं से डेटा और अंतर्दृष्टि तक पहुँचने की अनुमति देता है।
|
* **ms-graph (Microsoft Graph API)**: Microsoft Graph API, Microsoft 365 सेवाओं के डेटा के लिए एकीकृत एंडपॉइंट तक पहुँचने के लिए उपयोग किया जाता है। यह Azure AD, Office 365, Enterprise Mobility, और Security सेवाओं जैसी सेवाओं से डेटा और अंतर्दृष्टि तक पहुँचने की अनुमति देता है।
|
||||||
- `https://graph.microsoft.com`
|
- `https://graph.microsoft.com`
|
||||||
|
|
||||||
- **oss-rdbms (Azure Open Source Relational Databases)**: MySQL, PostgreSQL, और MariaDB जैसे ओपन-सोर्स रिलेशनल डेटाबेस इंजनों के लिए Azure Database सेवाओं तक पहुँचने के लिए उपयोग किया जाता है।
|
- **oss-rdbms (Azure Open Source Relational Databases)**: MySQL, PostgreSQL, और MariaDB जैसे ओपन-सोर्स रिलेशनल डेटाबेस इंजनों के लिए Azure Database सेवाओं तक पहुँचने के लिए उपयोग किया जाता है।
|
||||||
@@ -90,9 +90,9 @@ OIDC में **तीन प्रकार के टोकन** होते
|
|||||||
|
|
||||||
### Access Tokens Scopes "scp"
|
### Access Tokens Scopes "scp"
|
||||||
|
|
||||||
एक एक्सेस टोकन का स्कोप एक्सेस टोकन JWT के अंदर scp कुंजी के अंदर स्टोर किया जाता है। ये स्कोप परिभाषित करते हैं कि एक्सेस टोकन को क्या पहुँच प्राप्त है।
|
एक एक्सेस टोकन का स्कोप एक्सेस टोकन JWT के अंदर scp कुंजी के अंदर स्टोर किया जाता है। ये स्कोप परिभाषित करते हैं कि एक्सेस टोकन को किस चीज़ तक पहुँच प्राप्त है।
|
||||||
|
|
||||||
यदि एक JWT को किसी विशिष्ट API से संपर्क करने की अनुमति है लेकिन **अनुरोधित क्रिया** को करने के लिए **स्कोप नहीं है**, तो यह उस JWT के साथ क्रिया करने में **असफल रहेगा**।
|
यदि एक JWT को किसी विशिष्ट API से संपर्क करने की अनुमति है लेकिन **अनुरोधित क्रिया को करने के लिए स्कोप नहीं है**, तो यह उस JWT के साथ **क्रिया करने में असमर्थ होगा**।
|
||||||
|
|
||||||
### Get refresh & access token example
|
### Get refresh & access token example
|
||||||
```python
|
```python
|
||||||
@@ -144,19 +144,31 @@ scopes=["https://graph.microsoft.com/.default"],
|
|||||||
)
|
)
|
||||||
pprint(new_azure_cli_bearer_tokens_for_graph_api)
|
pprint(new_azure_cli_bearer_tokens_for_graph_api)
|
||||||
```
|
```
|
||||||
## FOCI Tokens Privilege Escalation
|
### अन्य एक्सेस टोकन फ़ील्ड
|
||||||
|
|
||||||
पहले उल्लेख किया गया था कि रिफ्रेश टोकन को **स्कोप** से जोड़ा जाना चाहिए जिसके साथ इसे उत्पन्न किया गया था, **ऐप्लिकेशन** और **टेनेंट** से जिसे यह उत्पन्न किया गया था। यदि इनमें से कोई भी सीमा टूटती है, तो विशेषाधिकार बढ़ाना संभव है क्योंकि अन्य संसाधनों और टेनेंट के लिए एक्सेस टोकन उत्पन्न करना संभव होगा जिन तक उपयोगकर्ता की पहुंच है और जिनके लिए अधिक स्कोप हैं जितना कि मूल रूप से इरादा किया गया था।
|
- **appid**: टोकन उत्पन्न करने के लिए उपयोग किया जाने वाला एप्लिकेशन आईडी
|
||||||
|
- **appidacr**: एप्लिकेशन ऑथेंटिकेशन कॉन्टेक्स्ट क्लास रेफरेंस यह दर्शाता है कि क्लाइंट को कैसे प्रमाणित किया गया, सार्वजनिक क्लाइंट के लिए मान 0 है, और यदि क्लाइंट सीक्रेट का उपयोग किया गया है तो मान 1 है
|
||||||
|
- **acr**: ऑथेंटिकेशन कॉन्टेक्स्ट क्लास रेफरेंस क्लेम "0" है जब अंतिम उपयोगकर्ता प्रमाणीकरण ISO/IEC 29115 की आवश्यकताओं को पूरा नहीं करता है।
|
||||||
|
- **amr**: ऑथेंटिकेशन विधि यह दर्शाती है कि टोकन को कैसे प्रमाणित किया गया। "pwd" का मान दर्शाता है कि एक पासवर्ड का उपयोग किया गया था।
|
||||||
|
- **groups**: उन समूहों को दर्शाता है जहाँ प्रिंसिपल एक सदस्य है।
|
||||||
|
- **iss**: मुद्दे उस सुरक्षा टोकन सेवा (STS) की पहचान करता है जिसने टोकन उत्पन्न किया। उदाहरण: https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (uuid टेनेट आईडी है)
|
||||||
|
- **oid**: प्रिंसिपल का ऑब्जेक्ट आईडी
|
||||||
|
- **tid**: टेनेट आईडी
|
||||||
|
- **iat, nbf, exp**: जारी किया गया (जब इसे जारी किया गया), नॉट बिफोर (इस समय से पहले उपयोग नहीं किया जा सकता, आमतौर पर iat के समान मान), समाप्ति समय।
|
||||||
|
|
||||||
इसके अलावा, **यह सभी रिफ्रेश टोकनों के साथ संभव है** [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra खाते, Microsoft व्यक्तिगत खाते, और फेसबुक और गूगल जैसे सामाजिक खाते) क्योंकि [**दस्तावेज़**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) में उल्लेख किया गया है: "रिफ्रेश टोकन उपयोगकर्ता और क्लाइंट के संयोजन से बंधे होते हैं, लेकिन **किसी संसाधन या टेनेंट से बंधे नहीं होते**। एक क्लाइंट रिफ्रेश टोकन का उपयोग करके एक्सेस टोकन प्राप्त कर सकता है **किसी भी संसाधन और टेनेंट के संयोजन में** जहां इसे ऐसा करने की अनुमति है। रिफ्रेश टोकन एन्क्रिप्टेड होते हैं और केवल Microsoft identity platform इन्हें पढ़ सकता है।"
|
## FOCI टोकन विशेषाधिकार वृद्धि
|
||||||
|
|
||||||
इसके अलावा, ध्यान दें कि FOCI एप्लिकेशन सार्वजनिक एप्लिकेशन हैं, इसलिए **सर्वर पर प्रमाणीकरण के लिए कोई रहस्य आवश्यक नहीं है**।
|
पहले उल्लेख किया गया था कि रिफ्रेश टोकन को उन **स्कोप्स** से जोड़ा जाना चाहिए जिनके साथ इसे उत्पन्न किया गया, **एप्लिकेशन** और **टेनेट** से जिसे इसे उत्पन्न किया गया। यदि इनमें से कोई भी सीमा टूटती है, तो विशेषाधिकार बढ़ाना संभव है क्योंकि अन्य संसाधनों और टेनेट्स के लिए एक्सेस टोकन उत्पन्न करना संभव होगा जिन तक उपयोगकर्ता की पहुंच है और जिनके लिए अधिक स्कोप हैं जितना कि इसे मूल रूप से इरादा किया गया था।
|
||||||
|
|
||||||
फिर ज्ञात FOCI क्लाइंट्स [**मूल शोध**](https://github.com/secureworks/family-of-client-ids-research/tree/main) में रिपोर्ट किए गए हैं जिन्हें [**यहां पाया जा सकता है**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv)।
|
इसके अलावा, **यह सभी रिफ्रेश टोकन के साथ संभव है** [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra खाते, Microsoft व्यक्तिगत खाते, और Facebook और Google जैसे सामाजिक खाते) क्योंकि [**दस्तावेज़**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) में उल्लेख किया गया है: "रिफ्रेश टोकन उपयोगकर्ता और क्लाइंट के संयोजन से बंधे होते हैं, लेकिन **किसी संसाधन या टेनेट से बंधे नहीं होते**। एक क्लाइंट रिफ्रेश टोकन का उपयोग करके एक्सेस टोकन प्राप्त कर सकता है **किसी भी संसाधन और टेनेट के संयोजन में** जहाँ उसे ऐसा करने की अनुमति है। रिफ्रेश टोकन एन्क्रिप्टेड होते हैं और केवल Microsoft identity platform उन्हें पढ़ सकता है।"
|
||||||
|
|
||||||
### Get different scope
|
इसके अलावा, ध्यान दें कि FOCI एप्लिकेशन सार्वजनिक एप्लिकेशन हैं, इसलिए **सर्वर पर प्रमाणित करने के लिए कोई सीक्रेट की आवश्यकता नहीं है**।
|
||||||
|
|
||||||
पिछले उदाहरण कोड के साथ आगे बढ़ते हुए, इस कोड में एक अलग स्कोप के लिए एक नया टोकन मांगा गया है:
|
फिर ज्ञात FOCI क्लाइंट्स [**मूल शोध**](https://github.com/secureworks/family-of-client-ids-research/tree/main) में रिपोर्ट किए गए हैं [**यहाँ पाया जा सकता है**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv)।
|
||||||
|
|
||||||
|
### विभिन्न स्कोप प्राप्त करें
|
||||||
|
|
||||||
|
पिछले उदाहरण कोड के साथ आगे बढ़ते हुए, इस कोड में एक अलग स्कोप के लिए एक नया टोकन अनुरोध किया गया है:
|
||||||
```python
|
```python
|
||||||
# Code from https://github.com/secureworks/family-of-client-ids-research
|
# Code from https://github.com/secureworks/family-of-client-ids-research
|
||||||
azure_cli_bearer_tokens_for_outlook_api = (
|
azure_cli_bearer_tokens_for_outlook_api = (
|
||||||
@@ -192,5 +204,6 @@ pprint(microsoft_office_bearer_tokens_for_graph_api)
|
|||||||
## संदर्भ
|
## संदर्भ
|
||||||
|
|
||||||
- [https://github.com/secureworks/family-of-client-ids-research](https://github.com/secureworks/family-of-client-ids-research)
|
- [https://github.com/secureworks/family-of-client-ids-research](https://github.com/secureworks/family-of-client-ids-research)
|
||||||
|
- [https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md](https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md)
|
||||||
|
|
||||||
{{#include ../../../banners/hacktricks-training.md}}
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ pwsh
|
|||||||
brew update
|
brew update
|
||||||
brew upgrade powershell
|
brew upgrade powershell
|
||||||
```
|
```
|
||||||
## मुख्य एनुमेरशन टूल
|
## मुख्य एनुमेरेशन टूल्स
|
||||||
|
|
||||||
### az cli
|
### az cli
|
||||||
|
|
||||||
@@ -79,6 +79,21 @@ export REQUESTS_CA_BUNDLE=/Users/user/Downloads/cacert.pem
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
|
{{#tab name="CMD" }}
|
||||||
|
```bash
|
||||||
|
set ADAL_PYTHON_SSL_NO_VERIFY=1
|
||||||
|
set AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1
|
||||||
|
set HTTPS_PROXY="http://127.0.0.1:8080"
|
||||||
|
set HTTP_PROXY="http://127.0.0.1:8080"
|
||||||
|
|
||||||
|
# If this is not enough
|
||||||
|
# Download the certificate from Burp and convert it into .pem format
|
||||||
|
# And export the following env variable
|
||||||
|
openssl x509 -in cacert.der -inform DER -out cacert.pem -outform PEM
|
||||||
|
set REQUESTS_CA_BUNDLE=C:\Users\user\Downloads\cacert.pem
|
||||||
|
```
|
||||||
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="PS" }}
|
{{#tab name="PS" }}
|
||||||
```bash
|
```bash
|
||||||
$env:ADAL_PYTHON_SSL_NO_VERIFY=1
|
$env:ADAL_PYTHON_SSL_NO_VERIFY=1
|
||||||
@@ -99,15 +114,15 @@ Azure PowerShell AZ मॉड्यूल में कमांड इस प
|
|||||||
|
|
||||||
#### Debug | MitM Az PowerShell
|
#### Debug | MitM Az PowerShell
|
||||||
|
|
||||||
**`-Debug`** पैरामीटर का उपयोग करके यह देखना संभव है कि उपकरण सभी अनुरोधों को भेज रहा है:
|
पैरामीटर **`-Debug`** का उपयोग करके यह देखना संभव है कि उपकरण सभी अनुरोधों को भेज रहा है:
|
||||||
```bash
|
```bash
|
||||||
Get-AzResourceGroup -Debug
|
Get-AzResourceGroup -Debug
|
||||||
```
|
```
|
||||||
एक **MitM** करने के लिए और **सभी अनुरोधों** की जांच करने के लिए जो यह मैन्युअल रूप से भेज रहा है, आप पर्यावरण चर `HTTPS_PROXY` और `HTTP_PROXY` को [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy) के अनुसार सेट कर सकते हैं।
|
**MitM** करने और **सभी अनुरोधों** की मैन्युअल जांच करने के लिए, आप पर्यावरण चर `HTTPS_PROXY` और `HTTP_PROXY` को [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy) के अनुसार सेट कर सकते हैं।
|
||||||
|
|
||||||
### Microsoft Graph PowerShell
|
### Microsoft Graph PowerShell
|
||||||
|
|
||||||
Microsoft Graph PowerShell एक क्रॉस-प्लेटफ़ॉर्म SDK है जो सभी Microsoft Graph APIs, जैसे SharePoint, Exchange, और Outlook, तक पहुँचने की अनुमति देता है, एकल एंडपॉइंट का उपयोग करके। यह PowerShell 7+, MSAL के माध्यम से आधुनिक प्रमाणीकरण, बाहरी पहचान, और उन्नत क्वेरी का समर्थन करता है। न्यूनतम विशेषाधिकार पहुँच पर ध्यान केंद्रित करते हुए, यह सुरक्षित संचालन सुनिश्चित करता है और नवीनतम Microsoft Graph API सुविधाओं के साथ संरेखित करने के लिए नियमित अपडेट प्राप्त करता है।
|
Microsoft Graph PowerShell एक क्रॉस-प्लेटफ़ॉर्म SDK है जो सभी Microsoft Graph APIs, जैसे SharePoint, Exchange, और Outlook, तक पहुँचने की अनुमति देता है, एकल एंडपॉइंट का उपयोग करके। यह PowerShell 7+, MSAL के माध्यम से आधुनिक प्रमाणीकरण, बाहरी पहचान, और उन्नत प्रश्नों का समर्थन करता है। न्यूनतम विशेषाधिकार पहुँच पर ध्यान केंद्रित करते हुए, यह सुरक्षित संचालन सुनिश्चित करता है और नवीनतम Microsoft Graph API सुविधाओं के साथ संरेखित करने के लिए नियमित अपडेट प्राप्त करता है।
|
||||||
|
|
||||||
[**installation instructions**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation) के लिए इस लिंक का पालन करें।
|
[**installation instructions**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation) के लिए इस लिंक का पालन करें।
|
||||||
|
|
||||||
@@ -115,13 +130,13 @@ Microsoft Graph PowerShell में कमांड इस प्रकार
|
|||||||
|
|
||||||
#### Debug Microsoft Graph PowerShell
|
#### Debug Microsoft Graph PowerShell
|
||||||
|
|
||||||
पैरामीटर **`-Debug`** का उपयोग करके यह देखना संभव है कि उपकरण सभी अनुरोधों को कैसे भेज रहा है:
|
पैरामीटर **`-Debug`** का उपयोग करके, यह देखना संभव है कि उपकरण सभी अनुरोधों को कैसे भेज रहा है:
|
||||||
```bash
|
```bash
|
||||||
Get-MgUser -Debug
|
Get-MgUser -Debug
|
||||||
```
|
```
|
||||||
### ~~**AzureAD Powershell**~~
|
### ~~**AzureAD Powershell**~~
|
||||||
|
|
||||||
Azure Active Directory (AD) मॉड्यूल, जो अब **deprecated** है, Azure AD संसाधनों को प्रबंधित करने के लिए Azure PowerShell का हिस्सा है। यह Entra ID में उपयोगकर्ताओं, समूहों और अनुप्रयोग पंजीकरणों को प्रबंधित करने जैसे कार्यों के लिए cmdlets प्रदान करता है।
|
Azure Active Directory (AD) मॉड्यूल, जो अब **deprecated** है, Azure PowerShell का हिस्सा है जो Azure AD संसाधनों का प्रबंधन करता है। यह Entra ID में उपयोगकर्ताओं, समूहों और अनुप्रयोग पंजीकरणों का प्रबंधन करने के लिए cmdlets प्रदान करता है।
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> इसे Microsoft Graph PowerShell द्वारा प्रतिस्थापित किया गया है
|
> इसे Microsoft Graph PowerShell द्वारा प्रतिस्थापित किया गया है
|
||||||
@@ -165,7 +180,7 @@ powerpipe server
|
|||||||
|
|
||||||
Prowler एक ओपन सोर्स सुरक्षा उपकरण है जो AWS, Azure, Google Cloud और Kubernetes सुरक्षा सर्वोत्तम प्रथाओं का आकलन, ऑडिट, घटना प्रतिक्रिया, निरंतर निगरानी, हार्डनिंग और फॉरेंसिक्स तैयारी करने के लिए उपयोग किया जाता है।
|
Prowler एक ओपन सोर्स सुरक्षा उपकरण है जो AWS, Azure, Google Cloud और Kubernetes सुरक्षा सर्वोत्तम प्रथाओं का आकलन, ऑडिट, घटना प्रतिक्रिया, निरंतर निगरानी, हार्डनिंग और फॉरेंसिक्स तैयारी करने के लिए उपयोग किया जाता है।
|
||||||
|
|
||||||
यह मूल रूप से हमें Azure वातावरण के खिलाफ सैकड़ों जांचें करने की अनुमति देगा ताकि सुरक्षा गलत कॉन्फ़िगरेशन को खोजा जा सके और परिणामों को json (और अन्य पाठ प्रारूप) में इकट्ठा किया जा सके या उन्हें वेब में जांचा जा सके।
|
यह मूल रूप से हमें Azure वातावरण के खिलाफ सैकड़ों जांचें चलाने की अनुमति देगा ताकि सुरक्षा गलत कॉन्फ़िगरेशन को खोजा जा सके और परिणामों को json (और अन्य पाठ प्रारूप) में इकट्ठा किया जा सके या उन्हें वेब में चेक किया जा सके।
|
||||||
```bash
|
```bash
|
||||||
# Create a application with Reader role and set the tenant ID, client ID and secret in prowler so it access the app
|
# Create a application with Reader role and set the tenant ID, client ID and secret in prowler so it access the app
|
||||||
|
|
||||||
@@ -189,7 +204,7 @@ docker run --rm -e "AZURE_CLIENT_ID=<client-id>" -e "AZURE_TENANT_ID=<tenant-id>
|
|||||||
|
|
||||||
यह Azure सब्सक्रिप्शन और Microsoft Entra ID सुरक्षा कॉन्फ़िगरेशन समीक्षाएँ स्वचालित रूप से करने की अनुमति देता है।
|
यह Azure सब्सक्रिप्शन और Microsoft Entra ID सुरक्षा कॉन्फ़िगरेशन समीक्षाएँ स्वचालित रूप से करने की अनुमति देता है।
|
||||||
|
|
||||||
HTML रिपोर्ट `./monkey-reports` निर्देशिका के अंदर github रिपॉजिटरी फ़ोल्डर के अंदर संग्रहीत होती हैं।
|
HTML रिपोर्ट `./monkey-reports` निर्देशिका के अंदर गिटहब रिपॉजिटरी फ़ोल्डर के अंदर संग्रहीत होती हैं।
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/silverhack/monkey365
|
git clone https://github.com/silverhack/monkey365
|
||||||
Get-ChildItem -Recurse monkey365 | Unblock-File
|
Get-ChildItem -Recurse monkey365 | Unblock-File
|
||||||
@@ -226,7 +241,7 @@ python scout.py azure --cli
|
|||||||
```
|
```
|
||||||
### [Azure-MG-Sub-Governance-Reporting](https://github.com/JulianHayward/Azure-MG-Sub-Governance-Reporting)
|
### [Azure-MG-Sub-Governance-Reporting](https://github.com/JulianHayward/Azure-MG-Sub-Governance-Reporting)
|
||||||
|
|
||||||
यह एक powershell स्क्रिप्ट है जो आपको **एक प्रबंधन समूह और Entra ID** टेनेट के अंदर सभी संसाधनों और अनुमतियों को दृश्य बनाने और सुरक्षा गलत कॉन्फ़िगरेशन खोजने में मदद करती है।
|
यह एक powershell स्क्रिप्ट है जो आपको **एक प्रबंधन समूह और Entra ID** टेनेट के अंदर सभी संसाधनों और अनुमतियों को **दृश्य** बनाने में मदद करती है और सुरक्षा गलत कॉन्फ़िगरेशन खोजने में मदद करती है।
|
||||||
|
|
||||||
यह Az PowerShell मॉड्यूल का उपयोग करके काम करती है, इसलिए इस उपकरण द्वारा समर्थित कोई भी प्रमाणीकरण इस उपकरण द्वारा समर्थित है।
|
यह Az PowerShell मॉड्यूल का उपयोग करके काम करती है, इसलिए इस उपकरण द्वारा समर्थित कोई भी प्रमाणीकरण इस उपकरण द्वारा समर्थित है।
|
||||||
```bash
|
```bash
|
||||||
@@ -262,7 +277,7 @@ azurehound -u "<user-email>" -p "<password>" --tenant "<tenant-id>" list -o ./ou
|
|||||||
|
|
||||||
### [**MicroBurst**](https://github.com/NetSPI/MicroBurst)
|
### [**MicroBurst**](https://github.com/NetSPI/MicroBurst)
|
||||||
|
|
||||||
MicroBurst में फ़ंक्शन और स्क्रिप्ट शामिल हैं जो Azure सेवाओं की खोज, कमजोर कॉन्फ़िगरेशन ऑडिटिंग, और क्रेडेंशियल डंपिंग जैसी पोस्ट एक्सप्लॉइटेशन क्रियाओं का समर्थन करते हैं। इसका उपयोग पेनट्रेशन टेस्ट के दौरान किया जाना है जहाँ Azure का उपयोग हो रहा है।
|
MicroBurst में फ़ंक्शन और स्क्रिप्ट शामिल हैं जो Azure सेवाओं की खोज, कमजोर कॉन्फ़िगरेशन ऑडिटिंग, और क्रेडेंशियल डंपिंग जैसी पोस्ट एक्सप्लॉइटेशन क्रियाओं का समर्थन करते हैं। इसका उपयोग पेनिट्रेशन टेस्ट के दौरान किया जाना है जहाँ Azure का उपयोग हो रहा है।
|
||||||
```bash
|
```bash
|
||||||
Import-Module .\MicroBurst.psm1
|
Import-Module .\MicroBurst.psm1
|
||||||
Import-Module .\Get-AzureDomainInfo.ps1
|
Import-Module .\Get-AzureDomainInfo.ps1
|
||||||
@@ -303,7 +318,7 @@ Invoke-AzureRunCommand -Command <command> -VMName <vmname>
|
|||||||
```
|
```
|
||||||
### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner)
|
### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner)
|
||||||
|
|
||||||
GraphRunner एक पोस्ट-एक्सप्लॉइटेशन टूलसेट है जो Microsoft Graph API के साथ इंटरैक्ट करने के लिए है। यह Microsoft Entra ID (Azure AD) खाते से डेटा की पहचान, स्थिरता और लूटने के लिए विभिन्न उपकरण प्रदान करता है।
|
GraphRunner एक पोस्ट-एक्सप्लोइटेशन टूलसेट है जो Microsoft Graph API के साथ इंटरैक्ट करने के लिए है। यह Microsoft Entra ID (Azure AD) खाते से डेटा की पहचान, स्थिरता और लूटने के लिए विभिन्न उपकरण प्रदान करता है।
|
||||||
```bash
|
```bash
|
||||||
#A good place to start is to authenticate with the Get-GraphTokens module. This module will launch a device-code login, allowing you to authenticate the session from a browser session. Access and refresh tokens will be written to the global $tokens variable. To use them with other GraphRunner modules use the Tokens flag (Example. Invoke-DumpApps -Tokens $tokens)
|
#A good place to start is to authenticate with the Get-GraphTokens module. This module will launch a device-code login, allowing you to authenticate the session from a browser session. Access and refresh tokens will be written to the global $tokens variable. To use them with other GraphRunner modules use the Tokens flag (Example. Invoke-DumpApps -Tokens $tokens)
|
||||||
Import-Module .\GraphRunner.ps1
|
Import-Module .\GraphRunner.ps1
|
||||||
@@ -347,7 +362,7 @@ Invoke-GraphRunner -Tokens $tokens
|
|||||||
```
|
```
|
||||||
### [Stormspotter](https://github.com/Azure/Stormspotter)
|
### [Stormspotter](https://github.com/Azure/Stormspotter)
|
||||||
|
|
||||||
Stormspotter एक Azure सब्सक्रिप्शन में संसाधनों का “हमला ग्राफ” बनाता है। यह रेड टीमों और pentesters को हमले की सतह और एक टेनेट के भीतर पिवट अवसरों को दृश्य बनाने में सक्षम बनाता है, और आपके रक्षकों को तेजी से घटना प्रतिक्रिया कार्य को प्राथमिकता देने और समायोजित करने में मदद करता है।
|
Stormspotter एक Azure सब्सक्रिप्शन में संसाधनों का “हमला ग्राफ” बनाता है। यह रेड टीमों और pentesters को हमले की सतह और एक टेनेट के भीतर पिवट अवसरों को दृश्य बनाने में सक्षम बनाता है, और आपके रक्षकों को तेजी से घटना प्रतिक्रिया कार्य को प्राथमिकता देने और अभिविन्यास करने में सुपरचार्ज करता है।
|
||||||
|
|
||||||
**दुर्भाग्यवश, यह अनदेखा लगता है**।
|
**दुर्भाग्यवश, यह अनदेखा लगता है**।
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -66,12 +66,23 @@ $token = (az account get-access-token --resource https://graph.microsoft.com --q
|
|||||||
$secureToken = ConvertTo-SecureString $token -AsPlainText -Force
|
$secureToken = ConvertTo-SecureString $token -AsPlainText -Force
|
||||||
Connect-MgGraph -AccessToken $secureToken
|
Connect-MgGraph -AccessToken $secureToken
|
||||||
|
|
||||||
|
# Get token from session
|
||||||
|
Parameters = @{
|
||||||
|
Method = "GET"
|
||||||
|
Uri = "/v1.0/me"
|
||||||
|
OutputType = "HttpResponseMessage"
|
||||||
|
}
|
||||||
|
$Response = Invoke-MgGraphRequest @Parameters
|
||||||
|
$Headers = $Response.RequestMessage.Headers
|
||||||
|
$Headers.Authorization.Parameter
|
||||||
|
|
||||||
|
|
||||||
# Find commands
|
# Find commands
|
||||||
Find-MgGraphCommand -command *Mg*
|
Find-MgGraphCommand -command *Mg*
|
||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
{{#tab name="Az" }}
|
||||||
```bash
|
```bash
|
||||||
Connect-AzAccount #Open browser
|
Connect-AzAccount #Open browser
|
||||||
# Using credentials
|
# Using credentials
|
||||||
@@ -80,15 +91,11 @@ $creds = New-Object System.Management.Automation.PSCredential("test@corp.onmicro
|
|||||||
Connect-AzAccount -Credential $creds
|
Connect-AzAccount -Credential $creds
|
||||||
|
|
||||||
# Get Access Token
|
# Get Access Token
|
||||||
(Get-AzAccessToken).Token
|
|
||||||
# Request access token to other endpoints: AadGraph, AnalysisServices, Arm, Attestation, Batch, DataLake, KeyVault, MSGraph, OperationalInsights, ResourceManager, Storage, Synapse
|
# Request access token to other endpoints: AadGraph, AnalysisServices, Arm, Attestation, Batch, DataLake, KeyVault, MSGraph, OperationalInsights, ResourceManager, Storage, Synapse
|
||||||
(Get-AzAccessToken -ResourceTypeName MSGraph).Token
|
(ConvertFrom-SecureString (Get-AzAccessToken -ResourceTypeName Arm -AsSecureString).Token -AsPlainText)
|
||||||
(Get-AzAccessToken -Resource "https://graph.microsoft.com").Token
|
|
||||||
|
|
||||||
# Connect with access token
|
# Connect with access token
|
||||||
Connect-AzAccount -AccountId test@corp.onmicrosoft.com -AccessToken $token
|
Connect-AzAccount -AccountId test@corp.onmicrosoft.com [-AccessToken $ManagementToken] [-GraphAccessToken $AADGraphToken] [-MicrosoftGraphAccessToken $MicrosoftGraphToken] [-KeyVaultAccessToken $KeyVaultToken]
|
||||||
Connect-AzAccount -AccessToken $token -GraphAccessToken $graphaccesstoken -AccountId <ACCOUNT-ID>
|
|
||||||
## The -AccessToken is from management.azure.com
|
|
||||||
|
|
||||||
# Connect with Service principal/enterprise app secret
|
# Connect with Service principal/enterprise app secret
|
||||||
$password = ConvertTo-SecureString 'KWEFNOIRFIPMWL.--DWPNVFI._EDWWEF_ADF~SODNFBWRBIF' -AsPlainText -Force
|
$password = ConvertTo-SecureString 'KWEFNOIRFIPMWL.--DWPNVFI._EDWWEF_ADF~SODNFBWRBIF' -AsPlainText -Force
|
||||||
@@ -149,7 +156,7 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
{{#endtabs }}
|
{{#endtabs }}
|
||||||
|
|
||||||
जब आप किसी प्रोग्राम के माध्यम से **CLI** के जरिए Azure में **लॉगिन** करते हैं, तो आप **Microsoft** के एक **tenant** से संबंधित **Azure Application** का उपयोग कर रहे हैं। ये Applications, जैसे कि आप अपने खाते में बना सकते हैं, **एक क्लाइंट आईडी** रखते हैं। आप **उनमें से सभी को नहीं देख पाएंगे** जो आप कंसोल में **अनुमत एप्लिकेशन सूचियों** में देख सकते हैं, **लेकिन ये डिफ़ॉल्ट रूप से अनुमत हैं**।
|
जब आप किसी प्रोग्राम के माध्यम से **CLI** के जरिए Azure में **लॉगिन** करते हैं, तो आप **Microsoft** के एक **tenant** से संबंधित **Azure Application** का उपयोग कर रहे हैं। ये Applications, जैसे कि आप अपने खाते में बना सकते हैं, **एक क्लाइंट आईडी** रखते हैं। आप **उनमें से सभी को नहीं देख पाएंगे** जो आप कंसोल में **अनुमत एप्लिकेशन सूचियों** में देख सकते हैं, **लेकिन वे डिफ़ॉल्ट रूप से अनुमत हैं**।
|
||||||
|
|
||||||
उदाहरण के लिए, एक **powershell script** जो **प्रमाणित** करती है, एक ऐप का उपयोग करती है जिसकी क्लाइंट आईडी **`1950a258-227b-4e31-a9cf-717495945fc2`** है। भले ही ऐप कंसोल में दिखाई न दे, एक सिस्टम एडमिन उस एप्लिकेशन को **ब्लॉक कर सकता है** ताकि उपयोगकर्ता उस ऐप के माध्यम से कनेक्ट करने वाले उपकरणों का उपयोग न कर सकें।
|
उदाहरण के लिए, एक **powershell script** जो **प्रमाणित** करती है, एक ऐप का उपयोग करती है जिसकी क्लाइंट आईडी **`1950a258-227b-4e31-a9cf-717495945fc2`** है। भले ही ऐप कंसोल में दिखाई न दे, एक सिस्टम एडमिन उस एप्लिकेशन को **ब्लॉक कर सकता है** ताकि उपयोगकर्ता उस ऐप के माध्यम से कनेक्ट करने वाले उपकरणों का उपयोग न कर सकें।
|
||||||
|
|
||||||
@@ -279,7 +286,7 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
{{#tab name="Az" }}
|
||||||
```bash
|
```bash
|
||||||
# Enumerate users
|
# Enumerate users
|
||||||
Get-AzADUser
|
Get-AzADUser
|
||||||
@@ -302,7 +309,7 @@ $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText
|
|||||||
```
|
```
|
||||||
### MFA & Conditional Access Policies
|
### MFA & Conditional Access Policies
|
||||||
|
|
||||||
हर उपयोगकर्ता के लिए MFA जोड़ना अत्यधिक अनुशंसित है, हालाँकि, कुछ कंपनियाँ इसे सेट नहीं करेंगी या इसे Conditional Access के साथ सेट कर सकती हैं: उपयोगकर्ता को **MFA की आवश्यकता होगी यदि** वह किसी विशेष स्थान, ब्राउज़र या **कुछ शर्त** से लॉग इन करता है। यदि ये नीतियाँ सही तरीके से कॉन्फ़िगर नहीं की गई हैं, तो ये **bypasses** के प्रति संवेदनशील हो सकती हैं। जाँच करें:
|
हर उपयोगकर्ता के लिए MFA जोड़ना अत्यधिक अनुशंसित है, हालाँकि, कुछ कंपनियाँ इसे सेट नहीं करेंगी या इसे Conditional Access के साथ सेट कर सकती हैं: उपयोगकर्ता को **MFA की आवश्यकता होगी यदि** वह किसी विशेष स्थान, ब्राउज़र या **कुछ शर्त** से लॉग इन करता है। यदि इन नीतियों को सही तरीके से कॉन्फ़िगर नहीं किया गया तो ये **bypasses** के प्रति संवेदनशील हो सकती हैं। जाँच करें:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
||||||
@@ -346,6 +353,22 @@ az role assignment list --include-groups --include-classic-administrators true -
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
|
{{#tab name="Az" }}
|
||||||
|
```bash
|
||||||
|
# Get all groups
|
||||||
|
Get-AzADGroup
|
||||||
|
# Get details of a group
|
||||||
|
Get-AzADGroup -ObjectId <id>
|
||||||
|
# Search group by string
|
||||||
|
Get-AzADGroup -SearchString "admin" | fl * #Search at the beginnig of DisplayName
|
||||||
|
Get-AzADGroup |?{$_.Displayname -match "admin"}
|
||||||
|
# Get members of group
|
||||||
|
Get-AzADGroupMember -GroupDisplayName <resource_group_name>
|
||||||
|
# Get roles of group
|
||||||
|
Get-AzRoleAssignment -ResourceGroupName <resource_group_name>
|
||||||
|
```
|
||||||
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Azure AD" }}
|
{{#tab name="Azure AD" }}
|
||||||
```bash
|
```bash
|
||||||
# Enumerate Groups
|
# Enumerate Groups
|
||||||
@@ -373,22 +396,6 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
|
|||||||
Get-AzureADGroup -ObjectId <id> | Get-AzureADGroupAppRoleAssignment | fl *
|
Get-AzureADGroup -ObjectId <id> | Get-AzureADGroupAppRoleAssignment | fl *
|
||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
|
||||||
```bash
|
|
||||||
# Get all groups
|
|
||||||
Get-AzADGroup
|
|
||||||
# Get details of a group
|
|
||||||
Get-AzADGroup -ObjectId <id>
|
|
||||||
# Search group by string
|
|
||||||
Get-AzADGroup -SearchString "admin" | fl * #Search at the beginnig of DisplayName
|
|
||||||
Get-AzADGroup |?{$_.Displayname -match "admin"}
|
|
||||||
# Get members of group
|
|
||||||
Get-AzADGroupMember -GroupDisplayName <resource_group_name>
|
|
||||||
# Get roles of group
|
|
||||||
Get-AzRoleAssignment -ResourceGroupName <resource_group_name>
|
|
||||||
```
|
|
||||||
{{#endtab }}
|
|
||||||
{{#endtabs }}
|
{{#endtabs }}
|
||||||
|
|
||||||
#### समूह में उपयोगकर्ता जोड़ें
|
#### समूह में उपयोगकर्ता जोड़ें
|
||||||
@@ -433,28 +440,7 @@ az ad sp list --query '[?length(keyCredentials) > `0` || length(passwordCredenti
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Azure AD" }}
|
{{#tab name="Az" }}
|
||||||
```bash
|
|
||||||
# Get Service Principals
|
|
||||||
Get-AzureADServicePrincipal -All $true
|
|
||||||
# Get details about a SP
|
|
||||||
Get-AzureADServicePrincipal -ObjectId <id> | fl *
|
|
||||||
# Get SP by string name or Id
|
|
||||||
Get-AzureADServicePrincipal -All $true | ?{$_.DisplayName -match "app"} | fl
|
|
||||||
Get-AzureADServicePrincipal -All $true | ?{$_.AppId -match "103947652-1234-5834-103846517389"}
|
|
||||||
# Get owner of SP
|
|
||||||
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalOwner |fl *
|
|
||||||
# Get objects owned by a SP
|
|
||||||
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalOwnedObject
|
|
||||||
# Get objects created by a SP
|
|
||||||
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalCreatedObject
|
|
||||||
# Get groups where the SP is a member
|
|
||||||
Get-AzureADServicePrincipal | Get-AzureADServicePrincipalMembership
|
|
||||||
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalMembership |fl *
|
|
||||||
```
|
|
||||||
{{#endtab }}
|
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
|
||||||
```bash
|
```bash
|
||||||
# Get SPs
|
# Get SPs
|
||||||
Get-AzADServicePrincipal
|
Get-AzADServicePrincipal
|
||||||
@@ -481,6 +467,27 @@ Headers = @{
|
|||||||
(Invoke-RestMethod @RequestParams).value
|
(Invoke-RestMethod @RequestParams).value
|
||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
|
{{#tab name="Azure AD" }}
|
||||||
|
```bash
|
||||||
|
# Get Service Principals
|
||||||
|
Get-AzureADServicePrincipal -All $true
|
||||||
|
# Get details about a SP
|
||||||
|
Get-AzureADServicePrincipal -ObjectId <id> | fl *
|
||||||
|
# Get SP by string name or Id
|
||||||
|
Get-AzureADServicePrincipal -All $true | ?{$_.DisplayName -match "app"} | fl
|
||||||
|
Get-AzureADServicePrincipal -All $true | ?{$_.AppId -match "103947652-1234-5834-103846517389"}
|
||||||
|
# Get owner of SP
|
||||||
|
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalOwner |fl *
|
||||||
|
# Get objects owned by a SP
|
||||||
|
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalOwnedObject
|
||||||
|
# Get objects created by a SP
|
||||||
|
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalCreatedObject
|
||||||
|
# Get groups where the SP is a member
|
||||||
|
Get-AzureADServicePrincipal | Get-AzureADServicePrincipalMembership
|
||||||
|
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalMembership |fl *
|
||||||
|
```
|
||||||
|
{{#endtab }}
|
||||||
{{#endtabs }}
|
{{#endtabs }}
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
@@ -625,6 +632,19 @@ az ad app list --query '[?length(keyCredentials) > `0` || length(passwordCredent
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
|
{{#tab name="Az" }}
|
||||||
|
```bash
|
||||||
|
# Get Apps
|
||||||
|
Get-AzADApplication
|
||||||
|
# Get details of one App
|
||||||
|
Get-AzADApplication -ObjectId <id>
|
||||||
|
# Get App searching by string
|
||||||
|
Get-AzADApplication | ?{$_.DisplayName -match "app"}
|
||||||
|
# Get Apps with password
|
||||||
|
Get-AzADAppCredential
|
||||||
|
```
|
||||||
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Azure AD" }}
|
{{#tab name="Azure AD" }}
|
||||||
```bash
|
```bash
|
||||||
# List all registered applications
|
# List all registered applications
|
||||||
@@ -637,23 +657,10 @@ Get-AzureADApplication -All $true | %{if(Get-AzureADApplicationPasswordCredentia
|
|||||||
Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
|
Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
|
||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
|
||||||
```bash
|
|
||||||
# Get Apps
|
|
||||||
Get-AzADApplication
|
|
||||||
# Get details of one App
|
|
||||||
Get-AzADApplication -ObjectId <id>
|
|
||||||
# Get App searching by string
|
|
||||||
Get-AzADApplication | ?{$_.DisplayName -match "app"}
|
|
||||||
# Get Apps with password
|
|
||||||
Get-AzADAppCredential
|
|
||||||
```
|
|
||||||
{{#endtab }}
|
|
||||||
{{#endtabs }}
|
{{#endtabs }}
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> एक ऐप जिसमें अनुमति **`AppRoleAssignment.ReadWrite`** है, **Global Admin** के रूप में **escalate** कर सकता है।\
|
> एक ऐप जिसमें अनुमति **`AppRoleAssignment.ReadWrite`** है, **Global Admin** के रूप में **उच्चीकृत** हो सकता है।\
|
||||||
> अधिक जानकारी के लिए [**यहाँ देखें**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48).
|
> अधिक जानकारी के लिए [**यहाँ देखें**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48).
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
@@ -661,9 +668,9 @@ Get-AzADAppCredential
|
|||||||
> इसलिए, यदि आप इस **पासवर्ड** को ढूंढ लेते हैं, तो आप **service principal** के रूप में **tenant** के **अंदर** पहुँच सकते हैं।\
|
> इसलिए, यदि आप इस **पासवर्ड** को ढूंढ लेते हैं, तो आप **service principal** के रूप में **tenant** के **अंदर** पहुँच सकते हैं।\
|
||||||
> ध्यान दें कि यह पासवर्ड केवल उत्पन्न होने पर ही दिखाई देता है (आप इसे बदल सकते हैं लेकिन फिर से प्राप्त नहीं कर सकते)।\
|
> ध्यान दें कि यह पासवर्ड केवल उत्पन्न होने पर ही दिखाई देता है (आप इसे बदल सकते हैं लेकिन फिर से प्राप्त नहीं कर सकते)।\
|
||||||
> **एप्लिकेशन** का **स्वामी** इसे **पासवर्ड** जोड़ सकता है (ताकि वह इसकी नकल कर सके)।\
|
> **एप्लिकेशन** का **स्वामी** इसे **पासवर्ड** जोड़ सकता है (ताकि वह इसकी नकल कर सके)।\
|
||||||
> इन सेवा प्रमुखों के रूप में लॉगिन **जोखिमपूर्ण** के रूप में **चिह्नित** नहीं होते हैं और इनमें **MFA** नहीं होगा।
|
> इन service principals के रूप में लॉगिन **जोखिमपूर्ण** के रूप में **चिह्नित** नहीं होते हैं और इनमें **MFA** नहीं होगा।
|
||||||
|
|
||||||
यह संभव है कि Microsoft के सामान्य उपयोग किए जाने वाले ऐप IDs की सूची [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications) पर मिले।
|
Microsoft के सामान्य उपयोग किए जाने वाले App IDs की सूची [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications) पर पाई जा सकती है।
|
||||||
|
|
||||||
### Managed Identities
|
### Managed Identities
|
||||||
|
|
||||||
@@ -716,7 +723,7 @@ az role assignment list --all --query "[?principalName=='carlos@carloshacktricks
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
{{#tab name="Az" }}
|
||||||
```bash
|
```bash
|
||||||
# Get role assignments on the subscription
|
# Get role assignments on the subscription
|
||||||
Get-AzRoleDefinition
|
Get-AzRoleDefinition
|
||||||
@@ -851,7 +858,7 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
|
|||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> यदि एक डिवाइस (VM) **AzureAD से जुड़ा** है, तो AzureAD के उपयोगकर्ता **लॉगिन करने में सक्षम** होंगे।\
|
> यदि एक डिवाइस (VM) **AzureAD से जुड़ा** है, तो AzureAD के उपयोगकर्ता **लॉगिन करने में सक्षम** होंगे।\
|
||||||
> इसके अलावा, यदि लॉगिन किया हुआ उपयोगकर्ता डिवाइस का **स्वामी** है, तो वह **स्थानीय व्यवस्थापक** होगा।
|
> इसके अलावा, यदि लॉगिन करने वाला उपयोगकर्ता डिवाइस का **स्वामी** है, तो वह **स्थानीय व्यवस्थापक** होगा।
|
||||||
|
|
||||||
### प्रशासनिक इकाइयाँ
|
### प्रशासनिक इकाइयाँ
|
||||||
|
|
||||||
@@ -908,10 +915,10 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
|
|||||||
|
|
||||||
Azure में विशेषाधिकार पहचान प्रबंधन (PIM) **अधिकतम विशेषाधिकार** को उपयोगकर्ताओं को अनावश्यक रूप से सौंपने से **रोकने** में मदद करता है।
|
Azure में विशेषाधिकार पहचान प्रबंधन (PIM) **अधिकतम विशेषाधिकार** को उपयोगकर्ताओं को अनावश्यक रूप से सौंपने से **रोकने** में मदद करता है।
|
||||||
|
|
||||||
PIM द्वारा प्रदान की जाने वाली मुख्य विशेषताओं में से एक यह है कि यह लगातार सक्रिय प्रिंसिपलों को भूमिकाएँ सौंपने की अनुमति नहीं देता, बल्कि उन्हें **एक निश्चित समय (जैसे 6 महीने)** के लिए **योग्य** बनाता है। फिर, जब भी उपयोगकर्ता उस भूमिका को सक्रिय करना चाहता है, तो उसे यह बताना होगा कि उसे विशेषाधिकार की आवश्यकता कितने समय के लिए है (जैसे 3 घंटे)। फिर एक **व्यवस्थापक को** अनुरोध को मंजूरी देने की आवश्यकता होती है।\
|
PIM द्वारा प्रदान की जाने वाली मुख्य विशेषताओं में से एक यह है कि यह लगातार सक्रिय प्रिंसिपलों को भूमिकाएँ सौंपने की अनुमति नहीं देता, बल्कि उन्हें **एक निश्चित समय (जैसे 6 महीने)** के लिए **योग्य** बनाता है। फिर, जब भी उपयोगकर्ता उस भूमिका को सक्रिय करना चाहता है, तो उसे उस समय को इंगित करते हुए इसके लिए अनुरोध करना होगा जिसकी उसे आवश्यकता है (जैसे 3 घंटे)। फिर एक **व्यवस्थापक को** अनुरोध को मंजूरी देने की आवश्यकता होती है।\
|
||||||
ध्यान दें कि उपयोगकर्ता **समय बढ़ाने** के लिए भी अनुरोध कर सकेगा।
|
ध्यान दें कि उपयोगकर्ता **समय बढ़ाने** के लिए भी अनुरोध कर सकेगा।
|
||||||
|
|
||||||
इसके अलावा, **PIM ईमेल भेजता है** जब किसी को विशेषाधिकार वाली भूमिका सौंपा जाता है।
|
इसके अलावा, **PIM ईमेल भेजता है** जब किसी को विशेषाधिकार वाली भूमिका सौंपा जा रहा हो।
|
||||||
|
|
||||||
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
@@ -919,10 +926,10 @@ PIM द्वारा प्रदान की जाने वाली म
|
|||||||
|
|
||||||
- सक्रियण की अधिकतम अवधि (घंटे)
|
- सक्रियण की अधिकतम अवधि (घंटे)
|
||||||
- सक्रियण पर MFA की आवश्यकता
|
- सक्रियण पर MFA की आवश्यकता
|
||||||
- शर्तीय पहुँच प्रमाणीकरण संदर्भ की आवश्यकता
|
- सक्रियण संदर्भ के लिए शर्तीय पहुँच प्रमाणीकरण की आवश्यकता
|
||||||
- सक्रियण पर औचित्य की आवश्यकता
|
- सक्रियण पर औचित्य की आवश्यकता
|
||||||
- सक्रियण पर टिकट जानकारी की आवश्यकता
|
- सक्रियण पर टिकट जानकारी की आवश्यकता
|
||||||
- सक्रिय करने के लिए अनुमोदन की आवश्यकता
|
- सक्रियण के लिए अनुमोदन की आवश्यकता
|
||||||
- योग्य असाइनमेंट की समाप्ति के लिए अधिकतम समय
|
- योग्य असाइनमेंट की समाप्ति के लिए अधिकतम समय
|
||||||
- जब उस भूमिका के साथ कुछ क्रियाएँ होती हैं, तो सूचनाएँ भेजने के लिए और भी बहुत सी कॉन्फ़िगरेशन
|
- जब उस भूमिका के साथ कुछ क्रियाएँ होती हैं, तो सूचनाएँ भेजने के लिए और भी बहुत सी कॉन्फ़िगरेशन
|
||||||
|
|
||||||
@@ -936,7 +943,7 @@ PIM द्वारा प्रदान की जाने वाली म
|
|||||||
|
|
||||||
### Entra पहचान सुरक्षा <a href="#title-text" id="title-text"></a>
|
### Entra पहचान सुरक्षा <a href="#title-text" id="title-text"></a>
|
||||||
|
|
||||||
Entra पहचान सुरक्षा एक सुरक्षा सेवा है जो **यह पहचानने** की अनुमति देती है कि जब कोई उपयोगकर्ता या साइन-इन बहुत जोखिम भरा होता है, तो उसे स्वीकार नहीं किया जा सकता, जिससे उपयोगकर्ता या साइन-इन प्रयास को **ब्लॉक** किया जा सकता है।
|
Entra पहचान सुरक्षा एक सुरक्षा सेवा है जो **यह पहचानने** की अनुमति देती है कि जब कोई उपयोगकर्ता या साइन-इन बहुत जोखिम भरा होता है तो उसे स्वीकार नहीं किया जा सकता, जिससे उपयोगकर्ता या साइन-इन प्रयास को **ब्लॉक** किया जा सकता है।
|
||||||
|
|
||||||
यह व्यवस्थापक को इसे इस तरह कॉन्फ़िगर करने की अनुमति देता है कि जब जोखिम "कम और ऊपर", "मध्यम और ऊपर" या "उच्च" हो, तो प्रयासों को **ब्लॉक** किया जाए। हालाँकि, डिफ़ॉल्ट रूप से यह पूरी तरह से **निष्क्रिय** है:
|
यह व्यवस्थापक को इसे इस तरह कॉन्फ़िगर करने की अनुमति देता है कि जब जोखिम "कम और ऊपर", "मध्यम और ऊपर" या "उच्च" हो, तो प्रयासों को **ब्लॉक** किया जाए। हालाँकि, डिफ़ॉल्ट रूप से यह पूरी तरह से **निष्क्रिय** है:
|
||||||
|
|
||||||
@@ -947,7 +954,7 @@ Entra पहचान सुरक्षा एक सुरक्षा से
|
|||||||
|
|
||||||
### Entra पासवर्ड सुरक्षा
|
### Entra पासवर्ड सुरक्षा
|
||||||
|
|
||||||
Entra पासवर्ड सुरक्षा ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) एक सुरक्षा विशेषता है जो **कमजोर पासवर्ड के दुरुपयोग को रोकने में मदद करती है** जब कई असफल लॉगिन प्रयास होते हैं, तो खातों को लॉक करके।\
|
Entra पासवर्ड सुरक्षा ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) एक सुरक्षा विशेषता है जो **कमजोर पासवर्ड के दुरुपयोग को रोकने में मदद करती है जब कई असफल लॉगिन प्रयास होते हैं**।\
|
||||||
यह आपको एक कस्टम पासवर्ड सूची **बैन** करने की अनुमति भी देती है जिसे आपको प्रदान करना होगा।
|
यह आपको एक कस्टम पासवर्ड सूची **बैन** करने की अनुमति भी देती है जिसे आपको प्रदान करना होगा।
|
||||||
|
|
||||||
यह **क्लाउड स्तर** और ऑन-प्रिमाइसेस सक्रिय निर्देशिका दोनों पर **लागू** किया जा सकता है।
|
यह **क्लाउड स्तर** और ऑन-प्रिमाइसेस सक्रिय निर्देशिका दोनों पर **लागू** किया जा सकता है।
|
||||||
|
|||||||
+93
-69
@@ -6,22 +6,23 @@
|
|||||||
|
|
||||||
### Tenant Enumeration
|
### Tenant Enumeration
|
||||||
|
|
||||||
कुछ **सार्वजनिक Azure APIs** हैं जिनसे केवल **टेनेंट के डोमेन** को जानकर एक हमलावर अधिक जानकारी प्राप्त कर सकता है।\
|
कुछ **सार्वजनिक Azure APIs** हैं जिनसे केवल **टेनेंट के डोमेन** को जानकर एक हमलावर इसके बारे में अधिक जानकारी प्राप्त कर सकता है।\
|
||||||
आप सीधे API को क्वेरी कर सकते हैं या PowerShell लाइब्रेरी [**AADInternals**](https://github.com/Gerenios/AADInternals)** का उपयोग कर सकते हैं:**
|
आप सीधे API को क्वेरी कर सकते हैं या PowerShell लाइब्रेरी [**AADInternals**](https://github.com/Gerenios/AADInternals) का उपयोग कर सकते हैं (`Install-Module AADInternals`):
|
||||||
|
|
||||||
| API | Information | AADInternals function |
|
- **टेनेंट ID सहित लॉगिन जानकारी**
|
||||||
| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
|
- `Get-AADIntTenantID -Domain <domain>` (मुख्य API `login.microsoftonline.com/<domain>/.well-known/openid-configuration`)
|
||||||
| login.microsoftonline.com/\<domain>/.well-known/openid-configuration | **लॉगिन जानकारी**, जिसमें टेनेंट ID शामिल है | `Get-AADIntTenantID -Domain <domain>` |
|
- **टेनेंट में सभी मान्य डोमेन**
|
||||||
| autodiscover-s.outlook.com/autodiscover/autodiscover.svc | **टेनेंट के सभी डोमेन** | `Get-AADIntTenantDomains -Domain <domain>` |
|
- `Get-AADIntTenantDomains -Domain <domain>` (मुख्य API `autodiscover-s.outlook.com/autodiscover/autodiscover.svc`)
|
||||||
| login.microsoftonline.com/GetUserRealm.srf?login=\<UserName> | <p><strong>टेनेंट की लॉगिन जानकारी</strong>, जिसमें टेनेंट नाम और डोमेन <strong>प्रमाणीकरण प्रकार</strong> शामिल है।<br>यदि <code>NameSpaceType</code> <strong><code>Managed</code></strong> है, तो इसका मतलब है कि <strong>AzureAD</strong> का उपयोग किया जा रहा है।</p> | `Get-AADIntLoginInformation -UserName <UserName>` |
|
- **उपयोगकर्ता की लॉगिन जानकारी**। यदि `NameSpaceType` `Managed` है, तो इसका मतलब है कि EntraID का उपयोग किया गया है
|
||||||
| login.microsoftonline.com/common/GetCredentialType | लॉगिन जानकारी, जिसमें **डेस्कटॉप SSO जानकारी** शामिल है | `Get-AADIntLoginInformation -UserName <UserName>` |
|
- `Get-AADIntLoginInformation -UserName <UserName>` (मुख्य API `login.microsoftonline.com/GetUserRealm.srf?login=<UserName>`)
|
||||||
|
|
||||||
आप **केवल एक कमांड के साथ** Azure टेनेंट की सभी जानकारी क्वेरी कर सकते हैं [**AADInternals**](https://github.com/Gerenios/AADInternals) **लाइब्रेरी**:
|
आप **केवल एक कमांड से** [**AADInternals**](https://github.com/Gerenios/AADInternals) के साथ Azure टेनेंट की सभी जानकारी क्वेरी कर सकते हैं:
|
||||||
```bash
|
```bash
|
||||||
|
# Doesn't work in macos because 'Resolve-DnsName' doesn't exist
|
||||||
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
|
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
|
||||||
```
|
|
||||||
Azure टेनेट जानकारी का उदाहरण:
|
## Output Example of the Azure tenant info:
|
||||||
```
|
|
||||||
Tenant brand: Company Ltd
|
Tenant brand: Company Ltd
|
||||||
Tenant name: company
|
Tenant name: company
|
||||||
Tenant id: 1937e3ab-38de-a735-a830-3075ea7e5b39
|
Tenant id: 1937e3ab-38de-a735-a830-3075ea7e5b39
|
||||||
@@ -34,12 +35,15 @@ company.mail.onmicrosoft.com True True True Managed
|
|||||||
company.onmicrosoft.com True True True Managed
|
company.onmicrosoft.com True True True Managed
|
||||||
int.company.com False False False Managed
|
int.company.com False False False Managed
|
||||||
```
|
```
|
||||||
यह संभव है कि टेनेट के नाम, आईडी और "ब्रांड" नाम के बारे में विवरण देखा जा सके। इसके अतिरिक्त, डेस्कटॉप सिंगल साइन-ऑन (SSO) की स्थिति, जिसे [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso) के रूप में भी जाना जाता है, प्रदर्शित की जाती है। जब सक्षम किया जाता है, तो यह सुविधा लक्षित संगठन के भीतर एक विशिष्ट उपयोगकर्ता की उपस्थिति (enumeration) का निर्धारण करने में मदद करती है।
|
यह संभव है कि टेनेट के नाम, आईडी और "ब्रांड" नाम के बारे में विवरण देखा जा सके। इसके अतिरिक्त, डेस्कटॉप सिंगल साइन-ऑन (SSO) की स्थिति, जिसे [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso) के रूप में भी जाना जाता है, प्रदर्शित की जाती है। जब यह सक्षम होता है, तो यह लक्ष्य संगठन के भीतर एक विशिष्ट उपयोगकर्ता की उपस्थिति (enumeration) का निर्धारण करने में सहायता करता है।
|
||||||
|
|
||||||
इसके अलावा, आउटपुट लक्षित टेनेट से संबंधित सभी सत्यापित डोमेन के नाम प्रस्तुत करता है, साथ ही उनके संबंधित पहचान प्रकार भी। संघीय डोमेन के मामले में, उपयोग में लाए जा रहे पहचान प्रदाता का पूर्ण योग्य डोमेन नाम (FQDN), जो आमतौर पर एक ADFS सर्वर होता है, भी प्रकट किया जाता है। "MX" कॉलम यह निर्दिष्ट करता है कि क्या ईमेल एक्सचेंज ऑनलाइन की ओर रूट किए जाते हैं, जबकि "SPF" कॉलम एक्सचेंज ऑनलाइन को एक ईमेल प्रेषक के रूप में सूचीबद्ध करता है। यह ध्यान रखना महत्वपूर्ण है कि वर्तमान अन्वेषण कार्य SPF रिकॉर्ड के भीतर "include" बयानों को पार्स नहीं करता है, जो झूठे नकारात्मक परिणाम दे सकता है।
|
इसके अलावा, आउटपुट में लक्ष्य टेनेट से संबंधित सभी सत्यापित डोमेन के नाम प्रस्तुत किए जाते हैं, साथ ही उनके संबंधित पहचान प्रकार भी। संघीय डोमेन के मामले में, उपयोग में लाए जा रहे पहचान प्रदाता का पूर्ण योग्य डोमेन नाम (FQDN), जो आमतौर पर एक ADFS सर्वर होता है, भी प्रकट किया जाता है। "MX" कॉलम यह निर्दिष्ट करता है कि क्या ईमेल एक्सचेंज ऑनलाइन की ओर रूट किए जाते हैं, जबकि "SPF" कॉलम एक्सचेंज ऑनलाइन को एक ईमेल प्रेषक के रूप में सूचीबद्ध करता है। यह ध्यान रखना महत्वपूर्ण है कि वर्तमान अन्वेषण कार्य SPF रिकॉर्ड में "include" बयानों को पार्स नहीं करता है, जो झूठे नकारात्मक परिणाम दे सकता है।
|
||||||
|
|
||||||
### उपयोगकर्ता Enumeration
|
### उपयोगकर्ता Enumeration
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> ध्यान दें कि भले ही एक टेनेट एक ही उपयोगकर्ता के लिए कई ईमेल का उपयोग कर रहा हो, **उपयोगकर्ता नाम अद्वितीय है**। इसका मतलब है कि यह केवल उस डोमेन के साथ काम करेगा जिसे उपयोगकर्ता ने संबद्ध किया है और अन्य डोमेन के साथ नहीं।
|
||||||
|
|
||||||
यह संभव है कि **जांच करें कि क्या एक उपयोगकर्ता नाम** एक टेनेट के भीतर मौजूद है। इसमें **अतिथि उपयोगकर्ता** भी शामिल हैं, जिनका उपयोगकर्ता नाम इस प्रारूप में है:
|
यह संभव है कि **जांच करें कि क्या एक उपयोगकर्ता नाम** एक टेनेट के भीतर मौजूद है। इसमें **अतिथि उपयोगकर्ता** भी शामिल हैं, जिनका उपयोगकर्ता नाम इस प्रारूप में है:
|
||||||
```
|
```
|
||||||
<email>#EXT#@<tenant name>.onmicrosoft.com
|
<email>#EXT#@<tenant name>.onmicrosoft.com
|
||||||
@@ -71,35 +75,48 @@ external.user_outlook.com#EXT#@company.onmicrosoft.com
|
|||||||
# Invoke user enumeration
|
# Invoke user enumeration
|
||||||
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal
|
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal
|
||||||
```
|
```
|
||||||
There are **तीन विभिन्न अनुक्रमण विधियाँ** चुनने के लिए:
|
वर्तमान में **4 विभिन्न enumeration विधियाँ** चुनने के लिए उपलब्ध हैं। आप जानकारी पा सकते हैं `Get-Help Invoke-AADIntUserEnumerationAsOutsider`:
|
||||||
|
|
||||||
| विधि | विवरण |
|
यह निम्नलिखित enumeration विधियों का समर्थन करता है: Normal, Login, Autologon, और RST2।
|
||||||
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| सामान्य | यह ऊपर उल्लेखित GetCredentialType API को संदर्भित करता है। डिफ़ॉल्ट विधि। |
|
|
||||||
| लॉगिन | <p>यह विधि उपयोगकर्ता के रूप में लॉग इन करने की कोशिश करती है।<br><strong>नोट:</strong> प्रश्नों को साइन-इन लॉग में लॉग किया जाएगा।</p> |
|
|
||||||
| ऑटो-लॉगिन | <p>यह विधि ऑटो-लॉगिन एंडपॉइंट के माध्यम से उपयोगकर्ता के रूप में लॉग इन करने की कोशिश करती है।<br><strong>प्रश्नों को साइन-इन लॉग में लॉग नहीं किया जाता</strong>! इस प्रकार, यह पासवर्ड स्प्रे और ब्रूट-फोर्स हमलों के लिए भी अच्छी तरह से काम करता है।</p> |
|
|
||||||
|
|
||||||
सही उपयोगकर्ता नामों का पता लगाने के बाद आप **एक उपयोगकर्ता के बारे में जानकारी प्राप्त कर सकते हैं**:
|
- **Normal** विधि वर्तमान में सभी tenants के साथ काम करती प्रतीत होती है। पहले इसके लिए कम से कम एक डोमेन के लिए Desktop SSO (जिसे Seamless SSO भी कहा जाता है) सक्षम होना आवश्यक था।
|
||||||
|
|
||||||
|
- **Login** विधि किसी भी tenant के साथ काम करती है, लेकिन enumeration प्रश्नों को Azure AD साइन-इन लॉग में असफल लॉगिन घटनाओं के रूप में लॉग किया जाएगा!
|
||||||
|
|
||||||
|
- **Autologon** विधि अब सभी tenants के साथ काम करती प्रतीत नहीं होती। शायद इसके लिए DesktopSSO या directory sync सक्षम होना आवश्यक है।
|
||||||
|
|
||||||
|
सही उपयोगकर्ता नामों का पता लगाने के बाद आप **एक उपयोगकर्ता के बारे में जानकारी** प्राप्त कर सकते हैं:
|
||||||
```bash
|
```bash
|
||||||
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
|
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
|
||||||
```
|
```
|
||||||
स्क्रिप्ट [**o365creeper**](https://github.com/LMGsec/o365creeper) आपको **यह पता लगाने** की भी अनुमति देती है कि **क्या एक ईमेल मान्य है**।
|
स्क्रिप्ट [**o365spray**](https://github.com/0xZDH/o365spray) आपको **यह पता लगाने** की भी अनुमति देती है कि **क्या एक ईमेल मान्य है**।
|
||||||
```bash
|
```bash
|
||||||
# Put in emails.txt emails such as:
|
git clone https://github.com/0xZDH/o365spray
|
||||||
# - root@corp.onmicrosoft.com
|
cd o365spray
|
||||||
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt
|
python3 -m pip install -r requirements.txt
|
||||||
|
|
||||||
|
# Check 1 email
|
||||||
|
python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -u carlos
|
||||||
|
# Check a list of emails
|
||||||
|
python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -U /tmp/users.txt
|
||||||
```
|
```
|
||||||
**Microsoft Teams के माध्यम से उपयोगकर्ता अनुक्रमण**
|
**Microsoft Teams के माध्यम से उपयोगकर्ता गणना**
|
||||||
|
|
||||||
जानकारी का एक और अच्छा स्रोत Microsoft Teams है।
|
जानकारी का एक और अच्छा स्रोत Microsoft Teams है।
|
||||||
|
|
||||||
Microsoft Teams का API उपयोगकर्ताओं की खोज करने की अनुमति देता है। विशेष रूप से "उपयोगकर्ता खोज" एंडपॉइंट **externalsearchv3** और **searchUsers** का उपयोग Teams-नामांकित उपयोगकर्ता खातों के बारे में सामान्य जानकारी प्राप्त करने के लिए किया जा सकता है।
|
Microsoft Teams का API उपयोगकर्ताओं की खोज करने की अनुमति देता है। विशेष रूप से "उपयोगकर्ता खोज" एंडपॉइंट **externalsearchv3** और **searchUsers** का उपयोग Teams में पंजीकृत उपयोगकर्ता खातों के बारे में सामान्य जानकारी प्राप्त करने के लिए किया जा सकता है।
|
||||||
|
|
||||||
API प्रतिक्रिया के आधार पर, यह गैर-मौजूद उपयोगकर्ताओं और उन मौजूदा उपयोगकर्ताओं के बीच अंतर करना संभव है जिनके पास एक मान्य Teams सदस्यता है।
|
API प्रतिक्रिया के आधार पर, यह गैर-मौजूद उपयोगकर्ताओं और उन मौजूदा उपयोगकर्ताओं के बीच अंतर करना संभव है जिनके पास एक मान्य Teams सदस्यता है।
|
||||||
|
|
||||||
स्क्रिप्ट [**TeamsEnum**](https://github.com/sse-secure-systems/TeamsEnum) का उपयोग Teams API के खिलाफ दिए गए उपयोगकर्ता नामों के सेट को मान्य करने के लिए किया जा सकता है।
|
स्क्रिप्ट [**TeamsEnum**](https://github.com/sse-secure-systems/TeamsEnum) का उपयोग Teams API के खिलाफ दिए गए उपयोगकर्ता नामों के सेट को मान्य करने के लिए किया जा सकता है, लेकिन इसके लिए आपको इसका उपयोग करने के लिए Teams पहुंच वाले उपयोगकर्ता तक पहुंच की आवश्यकता है।
|
||||||
```bash
|
```bash
|
||||||
python3 TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json
|
# Install
|
||||||
|
git clone https://github.com/sse-secure-systems/TeamsEnum
|
||||||
|
cd TeamsEnum
|
||||||
|
python3 -m pip install -r requirements.txt
|
||||||
|
|
||||||
|
# Login and ask for password
|
||||||
|
python3 ./TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json
|
||||||
```
|
```
|
||||||
I'm sorry, but I cannot provide the content you requested.
|
I'm sorry, but I cannot provide the content you requested.
|
||||||
```
|
```
|
||||||
@@ -110,7 +127,7 @@ I'm sorry, but I cannot provide the content you requested.
|
|||||||
इसके अलावा, मौजूदा उपयोगकर्ताओं के बारे में उपलब्धता की जानकारी को निम्नलिखित के रूप में सूचीबद्ध करना संभव है:
|
इसके अलावा, मौजूदा उपयोगकर्ताओं के बारे में उपलब्धता की जानकारी को निम्नलिखित के रूप में सूचीबद्ध करना संभव है:
|
||||||
|
|
||||||
- उपलब्ध
|
- उपलब्ध
|
||||||
- अनुपस्थित
|
- दूर
|
||||||
- परेशान न करें
|
- परेशान न करें
|
||||||
- व्यस्त
|
- व्यस्त
|
||||||
- ऑफ़लाइन
|
- ऑफ़लाइन
|
||||||
@@ -168,53 +185,60 @@ I'm sorry, but I cannot provide the content you requested.
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
## Azure Services
|
|
||||||
|
|
||||||
जान लें कि हम जिस **डोमेन का Azure टेनेट** उपयोग कर रहा है, उसे जानने के बाद **Azure सेवाओं को उजागर** करने की कोशिश करने का समय है।
|
|
||||||
|
|
||||||
आप इस लक्ष्य के लिए [**MicroBust**](https://github.com/NetSPI/MicroBurst) से एक विधि का उपयोग कर सकते हैं। यह फ़ंक्शन कई **azure सेवा डोमेन** में बेस डोमेन नाम (और कुछ रूपांतरण) की खोज करेगा:
|
|
||||||
```bash
|
|
||||||
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
|
|
||||||
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
|
|
||||||
```
|
|
||||||
## Open Storage
|
|
||||||
|
|
||||||
आप एक उपकरण जैसे [**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1) का उपयोग करके ओपन स्टोरेज का पता लगा सकते हैं, जो फ़ाइल **`Microburst/Misc/permitations.txt`** का उपयोग करके संयोजन (बहुत सरल) उत्पन्न करेगा ताकि **ओपन स्टोरेज खातों** को खोजने की कोशिश की जा सके।
|
|
||||||
```bash
|
|
||||||
Import-Module .\MicroBurst\MicroBurst.psm1
|
|
||||||
Invoke-EnumerateAzureBlobs -Base corp
|
|
||||||
[...]
|
|
||||||
https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
|
|
||||||
[...]
|
|
||||||
|
|
||||||
# Access https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
|
|
||||||
# Check: <Name>ssh_info.json</Name>
|
|
||||||
# Access then https://corpcommon.blob.core.windows.net/secrets/ssh_info.json
|
|
||||||
```
|
|
||||||
### SAS URLs
|
|
||||||
|
|
||||||
एक _**shared access signature**_ (SAS) URL एक URL है जो **किसी Storage account** के एक निश्चित भाग (पूर्ण कंटेनर, एक फ़ाइल...) तक पहुँच प्रदान करता है जिसमें संसाधनों पर कुछ विशिष्ट अनुमतियाँ (पढ़ने, लिखने...) होती हैं। यदि आप एक लीक हुआ URL पाते हैं, तो आप संवेदनशील जानकारी तक पहुँच प्राप्त कर सकते हैं, ये इस तरह दिखते हैं (यह एक कंटेनर तक पहुँचने के लिए है, यदि यह केवल एक फ़ाइल तक पहुँच प्रदान कर रहा होता, तो URL का पथ भी उस फ़ाइल को शामिल करेगा):
|
|
||||||
|
|
||||||
`https://<storage_account_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D`
|
|
||||||
|
|
||||||
डेटा तक पहुँचने के लिए [**Storage Explorer**](https://azure.microsoft.com/en-us/features/storage-explorer/) का उपयोग करें
|
|
||||||
|
|
||||||
## Compromise Credentials
|
|
||||||
|
|
||||||
### Phishing
|
|
||||||
|
|
||||||
- [**Common Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (क्रेडेंशियल्स या OAuth ऐप -[Illicit Consent Grant Attack](az-oauth-apps-phishing.md)-)
|
|
||||||
- [**Device Code Authentication** Phishing](az-device-code-authentication-phishing.md)
|
|
||||||
|
|
||||||
### Password Spraying / Brute-Force
|
### Password Spraying / Brute-Force
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
az-password-spraying.md
|
az-password-spraying.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## References
|
## Azure Services using domains
|
||||||
|
|
||||||
|
यह भी संभव है कि सामान्य azure उपडोमेन में **Azure सेवाओं को उजागर** करने की कोशिश की जाए, जैसे कि इस [पोस्ट में दस्तावेजित हैं:
|
||||||
|
](https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/)
|
||||||
|
|
||||||
|
- App Services: `azurewebsites.net`
|
||||||
|
- App Services – Management: `scm.azurewebsites.net`
|
||||||
|
- App Services: `p.azurewebsites.net`
|
||||||
|
- App Services: `cloudapp.net`
|
||||||
|
- Storage Accounts-Files: `file.core.windows.net`
|
||||||
|
- Storage Accounts-Blobs: `blob.core.windows.net`
|
||||||
|
- Storage Accounts-Queues: `queue.core.windows.net`
|
||||||
|
- Storage Accounts-Tables: `table.core.windows.net`
|
||||||
|
- Databases-Redis: `redis.cache.windows.net`
|
||||||
|
- Databases-Cosmos DB: `documents.azure.com`
|
||||||
|
- Databases-MSSQL: `database.windows.net`
|
||||||
|
- Key Vaults: `vault.azure.net`
|
||||||
|
- Microsoft Hosted Domain: `onmicrosoft.com`
|
||||||
|
- Email: `mail.protection.outlook.com`
|
||||||
|
- SharePoint: `sharepoint.com`
|
||||||
|
- CDN: `azureedge.net`
|
||||||
|
- Search Appliance: `search.windows.net`
|
||||||
|
- API Services: `azure-api.net`
|
||||||
|
|
||||||
|
आप इस लक्ष्य के लिए [**MicroBust**](https://github.com/NetSPI/MicroBurst) से एक विधि का उपयोग कर सकते हैं। यह फ़ंक्शन कई **azure डोमेन** में बेस डोमेन नाम (और कुछ रूपांतरण) को खोजेगा:
|
||||||
|
```bash
|
||||||
|
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
|
||||||
|
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
|
||||||
|
```
|
||||||
|
## फ़िशिंग
|
||||||
|
|
||||||
|
- [**सामान्य फ़िशिंग**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) क्रेडेंशियल्स के लिए या [OAuth Apps](az-oauth-apps-phishing.md) के माध्यम से
|
||||||
|
- [**डिवाइस कोड प्रमाणीकरण** फ़िशिंग](az-device-code-authentication-phishing.md)
|
||||||
|
|
||||||
|
## फ़ाइल प्रणाली क्रेडेंशियल्स
|
||||||
|
|
||||||
|
**`az cli`** बहुत सारी दिलचस्प जानकारी **`<HOME>/.Azure`** के अंदर संग्रहीत करता है:
|
||||||
|
- **`azureProfile.json`** पिछले समय के लॉग इन उपयोगकर्ताओं के बारे में जानकारी रखता है
|
||||||
|
- **`clouds.config`** सब्सक्रिप्शन के बारे में जानकारी रखता है
|
||||||
|
- **`service_principal_entries.json`** एप्लिकेशन **क्रेडेंशियल्स** (टेनेंट आईडी, क्लाइंट और सीक्रेट) रखता है
|
||||||
|
- **`msal_token_cache.json`** **एक्सेस टोकन और रिफ्रेश टोकन** रखता है
|
||||||
|
|
||||||
|
ध्यान दें कि macOS और लिनक्स में ये फ़ाइलें **असुरक्षित** स्पष्ट पाठ में संग्रहीत होती हैं।
|
||||||
|
|
||||||
|
## संदर्भ
|
||||||
|
|
||||||
- [https://aadinternals.com/post/just-looking/](https://aadinternals.com/post/just-looking/)
|
- [https://aadinternals.com/post/just-looking/](https://aadinternals.com/post/just-looking/)
|
||||||
- [https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/](https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/)
|
- [https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/](https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/)
|
||||||
|
- [https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/](https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/)
|
||||||
|
|
||||||
{{#include ../../../banners/hacktricks-training.md}}
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
Reference in New Issue
Block a user