【技术分享】基于COM对象MMC20.Application的横向运动

admin 2023-12-07 16:40:19 AnQuanKeInfo 来源:ZONE.CI 全球网 0 阅读模式

 http://p3.qhimg.com/t0179aecc307ba046d7.png

翻译:shan66

预估稿费:100RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


对于渗透测试人员来说,在Windows系统中进行横向移动的招数是非常有限的,可利用的技术屈指可数,例如psexec、WMI、at、计划任务和WinRM(如果已启用)等。由于横向移动技术少的可怜,所以更成熟的防御者对它们早就烂熟于心,并且很容易做好相应的防御措施。由于这个原因,我开始寻找一种替代方式来跳转到远程系统。

最近,我一直在研究COM(组件对象模型)的工作机制。在探索横向运动的新方法过程中,DCOM(分布式组件对象模型)引起了我的高度关注,因为它能够通过网络与对象进行交互。 关于DCOM,Microsoft提供了相当全面的文档,具体请访问这里,COM的相关文档请访问这里。通过PowerShell命令“Get-CimInstance Win32_DCOMApplication”,我们可以列出DCOM应用程序的完整列表。

在浏览这些DCOM应用程序时,我无意中发现了MMC应用程序类(MMC20.Application),这个COM对象允许使用脚本来处理MMC管理单元组件。在考察这个COM对象的不同方法和属性时,我注意到在Document.ActiveView下有一个名为“ExecuteShellCommand”的方法。                              

http://p1.qhimg.com/t01a3e6bb1370f984e7.png

你可以在这里阅读该方法的详细介绍。这样的话,我们就可以建立一个可以通过网络进行访问,并且可以执行命令的DCOM应用程序。剩下的事情,就是利用该DCOM应用程序和ExecuteShellCommand方法在远程主机上的执行代码了。

幸运的是,作为管理员,您可以通过PowerShell与DCOM进行远程交互,为此,可以使用“[activator] :: CreateInstance([type] :: GetTypeFromProgID”。此外,我们只需要提供一个DCOM ProgID和一个IP地址,然后,它就从远程返回一个COM对象的实例。

http://p1.qhimg.com/t011aef821165bb4074.png

然后,我们就可以调用“ExecuteShellCommand”方法在远程主机上启动进程:

http://p2.qhimg.com/t01d0fc460565530c3b.png

就像你看到的那样,当用户“Jason”登录的时候,calc.exe正在以Matt的身份运行,:

http://p4.qhimg.com/t010e8fa6274dd8ae76.png

通过该DCOM应用及相应的方法,我们可以在不借助psexec、WMI或其它已广为人知的技术的情况下转移到远程主机。

为了进一步证明这一点,我们可以使用这种技术在远程主机上执行代理,如Cobalt Strike的Beacon。 由于这是一种横向移动技术,要求在远程主机上具有管理权限:

http://p2.qhimg.com/t011a4dddcd97f69187.png

如您所见,用户“Matt”在“192.168.99.132”机器上面拥有本地管理员权限。 然后,我们可以使用MMC20.Application的ExecuteShellCommand方法在远程主机上执行代码。对于本例来说,指定了一个简单的PowerShell代码。 一定要注意“ExecuteShellCommand”的相关要求,因为程序及其参数必须是分开的: 

http://p4.qhimg.com/t01e764a98fc23b5ae2.png

通过代理执行此操作后,我们就获取了对远程目标机器的访问权限:

http://p5.qhimg.com/t0178bc5d5d0dafe2b4.png

为了检测/缓解这一攻击,防御者可以禁用DCOM,阻止工作站之间的RPC流量,并查找“mmc.exe”生成的子进程。需要注意的是,Windows防火墙在默认情况下好像会阻止这种技术。因此,作为额外的缓解措施,我们可以启用Windows防火墙。

weinxin
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
评论:0   参与:  0