历史漏洞的利用
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 内置的 pth 命令。但是该命令需要当前主机的提升特权,而且因为会补丁 lsass.exe,一方面是特征较为显著,另一方面是会被 PPL 所阻止 (我们会在下一章节详细讲解 PTH 以及 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漏洞
该漏洞实际上利用了主机账号的伪造,攻击者可以从普通用户提升为域管理员。默认情况下,因为考虑到 BYOD 政策,普通域用户可以最多添加 10 台 计算机。计算机账户是一种特殊的账户,与普通用户账户不同的是,计算机账户以 $ 结尾,例如 Srv01$。
当添加了新的计算机,因为用户是所有者,自然拥有对添加的计算机的写权限,可以修改其 SPN、sAMAccountName 等属性 (与 CVE-2022-26923 有异曲同工之妙)。攻击者需要清除计算机的 SPN,然后修改 sAMAccountName 属性,修改为与域控的一致 ( SPN 会随着 sAMAccountName 的改变而改变,因此需要先清除 SPN)。然后,使用 Rubeus 为新添加的主机申请一张 TGT,但由于我们修改了主机的名称,所以 /user 选项应该与域控的一致 (但没有 $ 结尾)。接着,恢复新添加主机的 sAMAccountName 为初始名称。最后,使用之前请求的 TGT 通过 S4U2Self 来申请 TGS,因为 TGT 中的 sAMAccountName 查找不到,于是 KDC 添加了一个 $ 后进行查找,自然就找到了域控制器。
听起来需要多个步骤可以完成,但这里我们可以使用来自 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 的资源了。