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及以上
powershell2.0
我们也可以使用wmic查询
2.2 ShellWindows
得到CLSID
通过查看可以发现该组件没有明确启动权限对象
实例化对象
通过排查Document.Application.ShellExecute,该方法可以利用
2.3 MMC20.Application
在enigma0x3博客中研究了一个DCOM横向移动的技术具体可以查看链接。
获取MMC20.Application的GLSID
我们可以实例化它,然后通过Get-Member方法来列出可以使用的方法。
通过实例对象来查看ExecuteShellCommand具体参数说明
具体可以查看ExecuteShellCommand。可以知道第一个参数为要执行的名字的值,第二个为指定工作目录名称的值,第三个为指定Command使用的参数,第四个为窗口状态的值。
我们知道了具体参数含义,来打开一个calc
我们也可以远程来进行交互
•建立ipc连接
•远程创建调用方法
实现条件:
1.管理员权限的powershell2.客户端关闭防火墙3.服务端需要域管的administrator账户或者目标主机具有管理员权限的账户4.双方主机都需有MMC Application Class这个DCOM组件。
2.4 WScript.Shell.1
我们通过OleView来查看COM接口的Type Library
可以看到IWshShell3接口存在的方法。
通过ProgID转换为CLSID
得到CLSID
列出方法
利用代码
2.5 ProcessChain Class
列出方法
执行:
点赞,转发,在看
原创投稿作者:WHOAMI
领取专属 10元无门槛券
私享最新 技术干货