实战攻防:深入解析NTLMv1协议攻击技术

本文详细解析针对NTLMv1认证协议的两种实战攻击方法:认证降级破解和LDAP中继攻击,涵盖Responder配置、哈希破解、Silver Ticket制作以及资源基于约束委派(RBCD)技术实现。

实战攻击NTLMv1

发布日期:2022年10月16日
作者:n00py
分类:漏洞利用/渗透测试

本文旨在指导如何实际利用仍允许NTLMv1认证协议的系统。尽管NTLMv1已很少需要,但令人惊讶的是仍有大量组织在使用它(可能并不知情)。目前有些VPN产品仍指示用户将NTLM认证降级至最低安全级别,理由是NTLMv2与RADIUS或MS-CHAPv2不兼容,但其他VPN解决方案似乎能在使用NTLMv2的同时解决该问题。

本文将涵盖两种不同的攻击方法:

  1. 认证降级 → 破解
  2. LDAP中继 → 资源基于约束委派(RBCD)

当LmCompatibilityLevel注册表键设置为0、1或2时,这些攻击就可能实现。该配置可通过系统本身的注册表或组策略强制执行。

攻击1:认证降级

  • 配置Responder以设置静态挑战并降级认证
  • 从系统强制认证
  • 破解传入的哈希
  • 制作Silver Ticket和/或执行DCSync

以下是完整攻击的演示:

首先,配置Responder使用静态挑战。默认情况下,该挑战是随机的。为了能够使用彩虹表破解后续哈希,应将挑战设置为1122334455667788。

运行Responder时,需使用类似以下命令:

1
Responder.py -I [接口] --lm

--lm标志允许您几乎立即使用crack.sh的彩虹表破解哈希。如果无效,可尝试--disable-ess标志。如果无法移除SSP,则无法使用crack.sh的彩虹表破解,但仍可通过使用ntlmv1-multi重新格式化后使用Hashcat枚举,或使用依赖预计算NT哈希数据库的assless-chaps。

为进一步了解各种NTLM哈希类型的格式,推荐观看EvilMog的演讲——NTLMv1/NTLMv1-SSP剖析。

下一步是以任何合适的方式强制认证。大多数这些技术至少需要某种程度的认证,但若未应用安全更新,Petit Potam可在未认证情况下工作。每个工具都有自己的语法,通常需要一组有效的域凭据以及监听器和目标的IP。

一旦破解,您将恢复被强制认证的计算机账户的NT哈希。该哈希可用于制作Silver Ticket,进而获得对系统的管理访问权限。如果主机是域控制器,则可通过PtH直接用于DCSync,无需模拟任何其他账户。

若选择Silver Ticket路线,NetNTLMtoSilverTicket GitHub仓库中有详细记录。同时推荐这篇博客文章,深入探讨如何配置Silver Ticket。

1
ticketer.py -nthash [DC哈希] -domain-sid [域SID] -domain [] -spn cifs/[DC主机名] -user-id [用户ID] -groups [域组ID] [用户名]

当然,您需要域的SID以及用户和组ID。您可能希望制作模拟现有域管理员的票证。我通常从ldapdomaindump或BloodHound数据中获取这些值。您可以使用破解的NT哈希(LM:NT格式)进行Pass-the-Hash认证。

有时crack.sh不可用,因此破解哈希不是最佳选择或耗时过长。虽然该技术最著名,但存在同样有效且无需任何破解的技术。

攻击2:LDAP中继

我从同事那里了解到这种攻击,但未找到相关文档,直到发现Adam Crosser的优秀博客,深入探讨了NTLM降级攻击。另一篇博客文章也提到了这种攻击。众所周知,将SMB中继到LDAP是不可能的,因为SMB设置了一个标志,要求使用会话密钥对消息进行签名。没有此签名,认证将失败。这通常防止通过PrinterBug或Petit Potam强制认证被中继。由于NTLM包含整个NTLM协商的消息完整性代码(MIC),签名无法在传输中被剥离。

NTLMv1提供了例外,因为NTLMv1不支持计算MIC。使用Impacket的ntlmrelayx.py,可以指定--remove-mic标志。该标志最初用于利用CVE-2019-1040,即“Drop the MIC”。

几乎可以以与CVE-2019-1040完全相同的方式利用NTLMv1。

攻击链如下:

  • 设置ntlmrelayx.py以剥离MIC,同时执行RBCD攻击
  • 强制认证
  • 为模拟用户制作服务票证
  • DCSync

该攻击比上一次攻击有更多先决条件:至少需要两个域控制器进行中继,并且它们至少处于Windows Server 2012功能级别才能使RBCD攻击工作。

首先,设置ntlmrelayx.py中继到其中一个域控制器:

1
ntlmrelayx.py -t ldaps://[域控制器] --remove-mic -smb2support --delegate-access

然后触发针对第二个域控制器的强制认证。

认证随后被中继到LDAP,从而创建计算机账户并通过将新计算机账户的SID添加到域控制器的msDS-AllowedToActOnBehalfOfOtherIdentity属性来修改委派权限。

完成后,即可执行资源基于约束委派攻击。

然后可以创建模拟域管理员的服务器票证。

1
getST.py -spn cifs/[中继DC] -impersonate [域管理员] [创建的计算机]':[密码]'

一旦创建此票证,就可以执行两种攻击从域控制器恢复NT哈希:

  • 以管理员身份在系统上获取命令shell,并使用ntdsutil等工具恢复NTDS.dit数据库
  • 对域控制器执行DCSync攻击,通过网络提取NT哈希

此外,此RBCD可以替换为影子凭据攻击。

推文引用:未在博客中提及,但您也可以将RBCD替换为影子凭据。
优点:无需创建计算机对象
缺点:需要ADCS / Server 2016+
— n00py (@n00py1) 2022年9月30日

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计