LLMNR & NBT-NS Primer

链路本地多播名称解析(LLMNR)和 NetBIOS 名称服务(NBT-NS)是 Microsoft Windows 组件,它们作为主机识别的替代方法,可以在 DNS 失败时使用。

如果一台机器尝试解析主机但 DNS 解析失败,通常,这台机器会通过 LLMNR 向本地网络上的所有其他机器询问正确的主机地址。LLMNR 基于域名系统(DNS)格式,并允许同一本地链路上的主机为其他主机执行名称解析。

它原生使用 UDP 端口 5355 。如果 LLMNR 失败,则会使用 NBT-NS。NBT-NS 通过其 NetBIOS 名称识别本地网络上的系统。NBT-NS 使用 UDP 端口 137

攻击原理

当使用 LLMNR/NBT-NS 进行名称解析时,网络上的任何主机都可以回复。这就是我们使用 Responder 来毒化这些请求的地方。有了网络访问权限,我们可以通过响应 LLMNR 和 NBT-NS 流量,冒充一个权威的名称解析源(在这种情况下,一个应该属于网络段的 主机)在广播域中。

这种毒化工作是为了让受害者与我们系统通信,假装我们的恶意系统知道请求主机的位置。如果请求的主机需要名称解析或身份验证操作,我们可以捕获 NetNTLM 哈希值,并对其进行离线暴力破解攻击,试图检索明文密码。捕获的认证请求也可以被转发到访问另一个主机,或用于同一主机上的其他协议(如 LDAP)。LLMNR/NBNS 欺骗与 SMB 签名缺失常常会导致域内主机获得管理员访问权限。

攻击工具

Tool 工具 Description 描述
Responder 回复 Responder is a purpose-built tool to poison LLMNR, NBT-NS, and MDNS, with many different functions.
Responder 是一个专门用于中毒 LLMNR、NBT-NS 和 MDNS 的工具,具有多种不同的功能。
Inveigh 在内维格 Inveigh is a cross-platform MITM platform that can be used for spoofing and poisoning attacks.
Inveigh 是一个跨平台的中间人平台,可用于欺骗和毒化攻击。
Metasploit Metasploit has several built-in scanners and spoofing modules made to deal with poisoning attacks.
Metasploit 有几个内置的扫描器和欺骗模块,用于处理毒化攻击。

Responder

Responder 是一个相对简单直接的工具,但非常强大,具有多种不同的功能。在之前的 Initial Enumeration 部分,我们在分析(被动)模式下使用了 Responder。这意味着它监听任何解析请求,但没有回答它们或发送中毒数据包。我们就像墙上的苍蝇一样,只是监听。

  • -A 标志将我们置于分析模式,使我们能够在不污染任何响应的情况下查看环境中的 NBT-NS、BROWSER 和 LLMNR 请求。我们必须始终提供接口或 IP。
  • -wf 启动 WPAD 伪代理服务器,而 -f 将尝试识别远程主机的操作系统和版本。

  • -v 标志增加详细程度,但这将导致大量额外数据打印到控制台。

  • -F-P ,可用于强制 NTLM 或基本身份验证并强制代理身份验证,但可能会导致登录提示,因此应谨慎使用。
  • -w 标志将利用内置的 WPAD 代理服务器。这可以非常有效,特别是在大型组织中,因为它将捕获所有启动了 Internet Explorer 的用户的 HTTP 请求,如果浏览器启用了自动检测设置。

通过上述配置,Responder 将监听并回应它在网络上看到的任何请求。如果你成功并捕获到一个哈希值,Responder 将在屏幕上打印它,并根据每个主机将其写入位于 /usr/share/responder/logs 目录的日志文件中。哈希值以 (MODULE_NAME)-(HASH_TYPE)-(CLIENT_IP).txt 格式保存,除非启用 -v 模式,否则将打印一个哈希值到控制台并存储在其关联的日志文件中。例如,一个日志文件可能看起来像 SMB-NTLMv2-SSP-172.16.5.25 。哈希值也存储在一个 SQLite 数据库中,该数据库可以在 Responder.conf 配置文件中配置,通常位于 /usr/share/responder ,除非我们从 GitHub 直接克隆了 Responder 仓库。

使用默认设置启动 Responder

启动

1
sudo responder -I ens224

通常我们应该启动 Responder,并在 tmux 窗口中让它运行一段时间,同时我们执行其他枚举任务以最大限度地获取哈希值。

准备好后,我们可以将这些哈希值通过哈希模式 5600 传递给 Hashcat,用于我们通常通过 Responder 获得的 NTLMv2 哈希值。有时我们可能会获得 NTLMv1 哈希值和其他类型的哈希值,可以参考 Hashcat 示例哈希页面来识别它们并找到正确的哈希模式。如果我们获得一个奇怪或未知的哈希值,这个网站是一个很好的参考资源来帮助识别它。

使用 Hashcat 破解 NTLMv2 哈希

1
hashcat -m 5600 forend_ntlmv2 /usr/share/wordlists/rockyou.txt 

使用 Inveigh

powershell版本

1
Import-Module .\Inveigh.ps1

使用 LLMNR 和 NBNS 欺骗开始 Inveigh,并将输出到控制台和写入文件。我们将保留其余的默认设置,这些可以在此处查看。

1
Invoke-Inveigh Y -NBNS Y -ConsoleOutput Y -FileOutput Y

C#版本

Inveigh 的 PowerShell 版本是原始版本,并且不再更新。工具作者维护着 C#版本,该版本结合了原始的 PoC C#代码以及从 PowerShell 版本移植的大部分代码。

让我们使用默认设置运行 C# 版本,并开始捕获哈希值。

1
.\Inveigh.exe

正如我们所见,该工具启动后会显示哪些选项默认启用,哪些未启用。带有 [+] 的选项是默认且默认启用的,而带有 [ ] 的选项则是禁用的。运行中的控制台输出也显示了哪些选项被禁用,因此不会发送响应(例如上面的 mDNS)。我们还可以看到消息 Press ESC to enter/exit interactive console ,在运行工具时非常有用。控制台让我们可以访问捕获的凭证/哈希值,允许我们停止 Inveigh,等等。