CVE-2020-1472 NetLogon特权提升漏洞

摘要:
漏洞名称:Netlogon权限提升漏洞编号:CVE-2020-1472漏洞描述:Netlogo协议验证的加密模块存在缺陷。当Netlogon远程协议用于建立连接到域控制器的易受攻击的Netlogon安全通道时,存在权限提升漏洞,这会导致攻击者在没有凭据的情况下通过身份验证。简而言之,Netlogon协议认证使用挑战响应机制,其加密算法为AES-CFB8,IV默认为零,从而导致漏洞。GitHub地址:https://github.com/SecureAuthCorp/impacket在影响路径下安装setup.py:python3setup.pyinstall漏洞验证:https://github.com/SecuraBV/CVE-2020-1472DC该名称是其NetBIOS计算机名。如果名称不正确,脚本可能会失败,并显示STATUS_INVALID_COMPUTER_name错误。

漏洞名称:Netlogon特权提升漏洞
漏洞编号:CVE-2020-1472
漏洞描述:Netlogon协议认证的加密模块存在缺陷,当使用Netlogon远程协议建立与域控制器连接的易受攻击的Netlogon安全通道时,存在特权提升漏洞,导致攻击者可以在没有凭证的情况下通过认证。通过调用Netlogon中RPC函数NetrServerPasswordSet2来重置域控的密码,以域控的身份进行Dcsync(域渗透常用技术,可利用Dcsync导出域内所有用户hash,在域内维持权限等),获取域管权限。

Netlogon组件是Windows上一项重要的功能组件,用于用户和机器在域内网络上的认证,以及复制数据库以进行域控备份,还用于维护域成员与域之间、域与域控之间、域DC与跨域DC之间的关系。
Netlogon远程协议是一个可用的在Windows域控制器上的RPC(remote procedure call protocol,远程过程调用协议,允许像调用本地服务一样调用远程服务)接口,用于对域中的用户和其他服务进行身份验证,最常见的是方便用户使用NTLM(NTLAN Manager,问询/应答身份验证协议,telnet的一种验证身份方式)登录服务器协议,让计算机更新其域内的密码。其他机器与域控的Netlogon通讯使用RPC协议MS-NRPC(指定了Netlogon远程协议,基于域的网络上的用户和计算机进行身份验证)。
Netlogon协议不会使用与其他RPC服务相同的身份验证方案,而是使用自定义的加密协议,让客户端(加入域的计算机)和服务器(域管理员)互相证明它们都知道共享的机密(客户端计算机的哈希值密码)。

CVE-2020-1472 NetLogon特权提升漏洞第1张
1)客户端调用NetrServerReqChallenge,向服务端发送一个client challenge;
2)服务端向客户端返回一个Server Challenge;
3)双方利用client的hash、clientchallenge、server challenge计算一个session_key;
4)客户端利用session_key和client challenge计算一个client credential,并发送给服务端进行校验;
5)服务端也利用session_key和client challenge计算一个client credential,如果其值和客户端发送过来的一致,就让客户端通过认证。
这里的client challenge使用ComputeNetlogonCredential函数计算,有两种算法,分别是DES_ECB和AES_CFB,双方可以通过协商flag来选择使用哪种加密方式。
攻击者可控的因素是client challenge,攻击者将其设置为0,serverchallenge在每一轮认证过程中都会变化,secret则对应用户密码的hash,加密过程采用的是AES-CFB8(一种高级加密标准),运算过程详见https://www.anquanke.com/post/id/217475
这里存在问题的就是AES-CFB8,在AES-CFB8算法中,IV是’x00’*16,明文密码是clientchallenge,key是session_key,计算后的密文是client credential。如果IV为零,只要我们能控制明文内容为XYXYXYXY这种格式(X和Y可以一样,即每个字节的值都是一样的),那么一定存在一个key,使得clientcredential为00000000000000。我们就可以向服务端发送一个client challenge为00000000000000(满足XYXYXYXY格式即可),然后循环向服务端发送client credential为00000000000000,直到出现一个session_key,使得服务端生成的client challenge也为00000000000000。
简单来说,Netlogon协议身份认证采用挑战-响应机制,其加密算法是AES-CFB8,并且IV默认全零,导致漏洞产生。而且没有对认证次数进行限制,签名功能客户端默认可选,使得漏洞被成功利用。

工具:
检验是否存在该漏洞:CVE-2020-1472-master.zip
https://github.com/SecuraBV/CVE-2020-1472
导出域内的hash,横向移动等:impacket-master.zip
https://www.freebuf.com/sectool/175208.html
https://github.com/SecureAuthCorp/impacket
将域控密码置空,并后面进行还原:zerologon-master.zip 
https://github.com/risksense/zerologon

靶机:
192.168.1.145
testdc

定位域控:扫描389端口
389端口的服务:LDAP(LightweightDirectory Access Protocol,轻型目录访问协议)和ILS(NetMeeting Internet Locator Server,Internet定位服务器),LDAP是基于X.500标准的轻量级目录访问协议,通过IP协议提供访问控制和维护分布式信息的目录信息。由美国密西根大学发明,目前已有多家公司采用,如Netscape将其包含在最新的Communicator套装产品中,也被微软加入Active Directory中。
扫描.png

testdc.png
如果该机器同时开放135(主要用于使用RPC(remote procedure call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务)、445(共享文件夹或共享打印机)、53(DNS,域名服务器)端口,很大可能就是域控:

Impacket:一个Python类库,用于对SMB1-3或IPv4/IPv6上的TCP、UDP、ICMP、ARP、NTLM、LDAP等协议进行低级编程访问。GitHub地址:https://github.com/SecureAuthCorp/impacket
安装impacket路径下的setup.py即可:
python3 setup.py install

漏洞验证:https://github.com/SecuraBV/CVE-2020-1472
CVE-2020-1472 NetLogon特权提升漏洞第4张
DC名称为其NetBIOS计算机名称,如果此名称不正确,脚本可能会失败并显示 STATUS_INVALID_COMPUTER_NAME错误。
检测.png
漏洞复现:https://github.com/risksense/zerologon

1)查看域控所在机器账户(testdc$)的hash
注:利用CVE-2020-1472重置的是域控所在机器用户的密码。机器用户跟域用户一样,都是域内的成员,机器用户在域内的用户名是机器用户+$,如testdc$。
读取hash.png
无法获取域内用户凭据信息。
2)使用zerologon工具将域控所在机器账户的hash置换成空密码的hash
设置空密码.png
置空后,再次获取域内凭证信息:
域内hash.png
通过在线加解密网站 https://www.cmd5.com 查询:
CVE-2020-1472 NetLogon特权提升漏洞第9张
发现testdc$的hash已经被改成空密码。
使用administrator的hash横向连接:
横向连接.png
3)还原域控机器账户的hash
在上面的攻击过程中,我们将机器的密码置为空,会导致域控脱域,原因是机器用户在AD中的密码(存储在ntds.dic)与本地注册表里面的不一致。还原域控机器账户的hash,只要将AD中的密码与注册表里面的密码保持一致即可。
获取计算机账户原始hash:

reg save HKLMSYSTEM system.save
reg save HKLMSAM sam.save
reg save HKLMSECURITY security.save

get system.save
get sam.save
get security.save

del /f system.save
del /f sam.save
del /f security.save

恢复1.png
使用reg save命令将注册表里的信息拿回本地,再通过secretdump提取出里面的hash:

python3 secretsdump.py -sam sam.save -system system.save -security security.save LOCAL

恢复2.png
使用zerologon工具将原始计算机账户哈希还原:
恢复4.png
查看testdc$账户的hash,已成功还原:
CVE-2020-1472 NetLogon特权提升漏洞第14张
注:password即客户机密码

漏洞修复
下载并安装漏洞官方补丁:https://portal.msrc.microsoft.com/zh-CN/security-guidance/advisory/CVE-2020-1472
及时进行Microsoft Windows版本更新并且保持Windows自动更新开启。

免责声明:文章转载自《CVE-2020-1472 NetLogon特权提升漏洞》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇认证授权:一键登录的背后过程bootStrap 实现双表头下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ms17_010(永恒之蓝)漏洞复现详细教程

如题,这是个漏洞复现的详细教程,本教程针对的系统是Windows7操作系统,其他系统请自行测试。 备注:教程会很详细,讲解会很明白,一文可以解决你的常见困难。 测试环境 kalilinux 192.168.1.109 (主机) windows7 192.168.1.104 (虚拟机) 开始 首先使用 nmap 命令扫描局域网内的所有主机(因为ms17_...

Guava包学习--Hash

我们HashMap会有一个rehash的过程,为什么呢?因为java内建的散列码被限制为32位,而且没有分离散列算法和所作用的数据,所以替代算法比较难做。我们使用HashMap的时候它自身有一个rehash的过程,所以我们无需操心。但是如果我们自己离开hashmap的内容,去使用Object.hashCode()就不有可能会比较坑爹了,碰撞处理我们自己去做...

位姿检索PoseRecognition:LSH算法.p稳定哈希

位姿检索使用了LSH方法,而不使用PNP方法,是有一定的来由的。主要的工作会转移到特征提取和检索的算法上面来,有得必有失。因此,放弃了解析的方法之后,又放弃了优化的方法,最后陷入了检索的汪洋大海。 0:转自wiki:http://en.wikipedia.org/wiki/Locality_sensitive_hashing 以下参考资料仅供参考:LS...

使用Python操作Redis详解

之前的五天,过了个愉快的周末,然后将公司AbaseDump的调度部分代码看懂并且在此之上完成了OnlyDump的功能代码,代码不可以公开,今天完工,明天测试,晚上来总结一下这几天学到的一点应用。 使用Python操作Redis详解 ---------------------------------------------------------------...

国内外有名的安全扫描工具,你知道几个?

  1. Nikto   以下是引用片段: 这是一个开源的Web 服务器扫描程序,它可以对Web 服务器的多种项目(包括3500个潜在的危险   文件/CGI,以及超过900 个服务器版本,还有250 多个服务器上的版本特定问题)进行全面的测   试。其扫描项目和插件经常更新并且可以自动更新(如果需要的话)。   Nikto 可以在尽可能短的周期内测试你的...

用友GRP-u8 注入-RCE漏洞复现

​ ​用友GRP-u8 注入-RCE漏洞复现 (HW第一时间复现了,当时觉得不合适,现在才发出来) 一、漏洞简介 用友GRP-u8存在XXE漏洞,该漏洞源于应用程序解析XML输入时没有进制外部实体的加载,导致可加载恶意外部文件。 二、漏洞复现 SQL注入POC POST /Proxy HTTP/1.1Host:localhost:8080Upgrade-...