历史漏洞的利用
CVE-2020-1472 ZeroLogon漏洞
因为脆弱的密码学设计,攻击者可以绕过认证并模仿任何域主机,包括域控制器,以实现提权。
Zerologon 的核心问题是 Netlogon 远程协议的加密实现中存在缺陷。该协议使用 AES-CFB8 加密方案的自定义实现,这需要一个初始化向量 (IV)。Microsoft 的实现使用 16 个零字节的固定 IV,使其容易受到攻击。
该漏洞允许攻击者模仿网络上的任何计算机,包括域控制器本身,并在目标域控制器上执行远程过程调用 (RPC)。攻击者可以通过向域控制器发送一系列具有全零客户端凭证的特制 Netlogon 消息来利用此漏洞,这导致域控制器接受攻击者作为具有特权的有效用户,从而使攻击者可以完全接管域。
这里我们使用来自 https://github.com/leitosama/SharpZeroLogon 的 exp。在之前的章节中,我们使用该工具的检测模式检测出了 dc01 受该漏洞影响。我们再来回顾一下:
在域内环境的话,我们只需要指定域控制器即可,发现该域控可被 zerologon 漏洞的攻击所接管。
增加 -reset 选项,来重置 dc01 主机的凭证:
这时,dc01 主机的哈希被重置为显示出的指定 NTLM。得到了 dc01 主机的新哈希后,我们可以使用 CobaltStrike 内置的 PTHpth 命令。但是该命令需要当前主机的提升特权,而且因为会补丁 lsass.exe,exe,一方面是特征较为显著,另一方面是会被 RunAsPPLPPL 所阻止 (我们会在下一章节详细讲解 PTH 以及 RunAsPPL)PPL) 。
我们可以使用 Impacket 中的 secretdump 脚本来实现:
proxychains secretsdump.py -dc-ip 172.16.1.11 -just-dc -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'dc01$'@prod.raven-med.local
CVE-2021-42278 NoPAC漏洞
该漏洞实际上利用了主机账号的伪造,攻击者可以从普通用户提升为域管理员。PAC 是 Kerberos 票据中的一种数据结构,它包含用户的授权数据,例如组归属信息。在 Kerberos 身份认证过程中,KDC 向用户颁发包含 PAC 的 TGT,当用户请求访问服务时,TGT 将提交给服务,该服务会验证 PAC。
而 NoPac 漏洞是由于服务对 PAC 的不正确验证而产生的,能够伪造或修改 PAC 的攻击者可以利用此漏洞提升他们在目标系统上的权限。要利用此漏洞,攻击者需要已经获得域内普通用户的权限。然后,攻击者修改用户的 PAC 以添加额外的特权信息,例如域管理员组的成员归属。当修改后的 PAC 提供给服务时,并没有得到正确验证,攻击者获得提升的特权,从而允许他们破坏其他系统并有可能控制域。
这里,我们使用来自 https://github.com/Ridter/noPac 的exp。
指定明文帐号密码,以及域名,用扫描模式检测一下漏洞的存在
接下来,我们需要利用这个漏洞创建一个新的计算机帐号,指定计算机名、密码、服务类型。该工具集成了 Rubeus 中 S4U 的功能,因此能生成一张 Dc05$ 的 TGT 并将其转换为 CIFS 的 TGS
nopac.exe -domain white-bird.local -user serveradm -pass "Summer2024!" /dc dc05.white-bird.local /mAccount nopac /mPassword Passw0rd /service cifs /ptt
于是,我们可以访问 dc05 的资源了。