Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes

This commit is contained in:
Translator
2025-01-25 14:38:31 +00:00
parent e4a41dfbb7
commit 6bbab4fb03
5 changed files with 332 additions and 240 deletions

View File

@@ -6,22 +6,23 @@
### Tenant Enumeration
कुछ **सार्वजनिक Azure APIs** हैं जिनसे केवल **टेनेंट के डोमेन** को जानकर एक हमलावर अधिक जानकारी प्राप्त कर सकता है।\
आप सीधे API को क्वेरी कर सकते हैं या PowerShell लाइब्रेरी [**AADInternals**](https://github.com/Gerenios/AADInternals)** का उपयोग कर सकते हैं:**
कुछ **सार्वजनिक Azure APIs** हैं जिनसे केवल **टेनेंट के डोमेन** को जानकर एक हमलावर इसके बारे में अधिक जानकारी प्राप्त कर सकता है।\
आप सीधे API को क्वेरी कर सकते हैं या PowerShell लाइब्रेरी [**AADInternals**](https://github.com/Gerenios/AADInternals) का उपयोग कर सकते हैं (`Install-Module AADInternals`):
| API | Information | AADInternals function |
| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
| login.microsoftonline.com/\<domain>/.well-known/openid-configuration | **लॉगिन जानकारी**, जिसमें टेनेंट ID शामिल है | `Get-AADIntTenantID -Domain <domain>` |
| autodiscover-s.outlook.com/autodiscover/autodiscover.svc | **टेनेंट के सभी डोमेन** | `Get-AADIntTenantDomains -Domain <domain>` |
| 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>` |
| login.microsoftonline.com/common/GetCredentialType | लॉगिन जानकारी, जिसमें **डेस्कटॉप SSO जानकारी** शामिल है | `Get-AADIntLoginInformation -UserName <UserName>` |
- **टेनेंट ID सहित लॉगिन जानकारी**
- `Get-AADIntTenantID -Domain <domain>` (मुख्य API `login.microsoftonline.com/<domain>/.well-known/openid-configuration`)
- **टेनेंट में सभी मान्य डोमेन**
- `Get-AADIntTenantDomains -Domain <domain>` (मुख्य API `autodiscover-s.outlook.com/autodiscover/autodiscover.svc`)
- **उपयोगकर्ता की लॉगिन जानकारी**। यदि `NameSpaceType` `Managed` है, तो इसका मतलब है कि EntraID का उपयोग किया गया है
- `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
# Doesn't work in macos because 'Resolve-DnsName' doesn't exist
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
```
Azure टेनेट जानकारी का उदाहरण:
```
## Output Example of the Azure tenant info:
Tenant brand: Company Ltd
Tenant name: company
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
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
> [!TIP]
> ध्यान दें कि भले ही एक टेनेट एक ही उपयोगकर्ता के लिए कई ईमेल का उपयोग कर रहा हो, **उपयोगकर्ता नाम अद्वितीय है**। इसका मतलब है कि यह केवल उस डोमेन के साथ काम करेगा जिसे उपयोगकर्ता ने संबद्ध किया है और अन्य डोमेन के साथ नहीं।
यह संभव है कि **जांच करें कि क्या एक उपयोगकर्ता नाम** एक टेनेट के भीतर मौजूद है। इसमें **अतिथि उपयोगकर्ता** भी शामिल हैं, जिनका उपयोगकर्ता नाम इस प्रारूप में है:
```
<email>#EXT#@<tenant name>.onmicrosoft.com
@@ -71,35 +75,48 @@ external.user_outlook.com#EXT#@company.onmicrosoft.com
# Invoke user enumeration
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal
```
There are **तीन विभिन्न अनुक्रमण विधियाँ** चुनने के लिए:
वर्तमान में **4 विभिन्न enumeration विधियाँ** चुनने के लिए उपलब्ध हैं। आप जानकारी पा सकते हैं `Get-Help Invoke-AADIntUserEnumerationAsOutsider`:
| विधि | विवरण |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| सामान्य | यह ऊपर उल्लेखित GetCredentialType API को संदर्भित करता है। डिफ़ॉल्ट विधि। |
| लॉगिन | <p>यह विधि उपयोगकर्ता के रूप में लॉग इन करने की कोशिश करती है।<br><strong>नोट:</strong> प्रश्नों को साइन-इन लॉग में लॉग किया जाएगा।</p> |
| ऑटो-लॉगिन | <p>यह विधि ऑटो-लॉगिन एंडपॉइंट के माध्यम से उपयोगकर्ता के रूप में लॉग इन करने की कोशिश करती है।<br><strong>प्रश्नों को साइन-इन लॉग में लॉग नहीं किया जाता</strong>! इस प्रकार, यह पासवर्ड स्प्रे और ब्रूट-फोर्स हमलों के लिए भी अच्छी तरह से काम करता है।</p> |
यह निम्नलिखित enumeration विधियों का समर्थन करता है: Normal, Login, Autologon, और RST2।
सही उपयोगकर्ता नामों का पता लगाने के बाद आप **एक उपयोगकर्ता के बारे में जानकारी प्राप्त कर सकते हैं**:
- **Normal** विधि वर्तमान में सभी tenants के साथ काम करती प्रतीत होती है। पहले इसके लिए कम से कम एक डोमेन के लिए Desktop SSO (जिसे Seamless SSO भी कहा जाता है) सक्षम होना आवश्यक था।
- **Login** विधि किसी भी tenant के साथ काम करती है, लेकिन enumeration प्रश्नों को Azure AD साइन-इन लॉग में असफल लॉगिन घटनाओं के रूप में लॉग किया जाएगा!
- **Autologon** विधि अब सभी tenants के साथ काम करती प्रतीत नहीं होती। शायद इसके लिए DesktopSSO या directory sync सक्षम होना आवश्यक है।
सही उपयोगकर्ता नामों का पता लगाने के बाद आप **एक उपयोगकर्ता के बारे में जानकारी** प्राप्त कर सकते हैं:
```bash
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
```
स्क्रिप्ट [**o365creeper**](https://github.com/LMGsec/o365creeper) आपको **यह पता लगाने** की भी अनुमति देती है कि **क्या एक ईमेल मान्य है**
स्क्रिप्ट [**o365spray**](https://github.com/0xZDH/o365spray) आपको **यह पता लगाने** की भी अनुमति देती है कि **क्या एक ईमेल मान्य है**
```bash
# Put in emails.txt emails such as:
# - root@corp.onmicrosoft.com
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt
git clone https://github.com/0xZDH/o365spray
cd o365spray
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 का API उपयोगकर्ताओं की खोज करने की अनुमति देता है। विशेष रूप से "उपयोगकर्ता खोज" एंडपॉइंट **externalsearchv3** और **searchUsers** का उपयोग Teams-नामांकित उपयोगकर्ता खातों के बारे में सामान्य जानकारी प्राप्त करने के लिए किया जा सकता है।
Microsoft Teams का API उपयोगकर्ताओं की खोज करने की अनुमति देता है। विशेष रूप से "उपयोगकर्ता खोज" एंडपॉइंट **externalsearchv3** और **searchUsers** का उपयोग 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
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.
```
@@ -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
{{#ref}}
az-password-spraying.md
{{#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://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}}