AD侦查中,如何防范LLMNR的恶意中毒攻击?
摘要:本文通过 Google 翻译 AD Recon – LLMNR Poisoning with Responder 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。 导航 0 前言 1 LLMNR 毒化简介 2
本文通过 Google 翻译 AD Recon – LLMNR Poisoning with Responder 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。
导航
0 前言
1 LLMNR 毒化简介
2 LLMNR 毒化(SMB)
2.1 Responder 如何毒害 SMB
2.2 Responder 启动设置
2.3 Responder 捕获哈希:错误的共享
3 LLMNR 毒化 (HTTP[S])
3.1 Responder 如何毒害 HTTP[S]
3.2 Responder 启动设置
3.3 Responder 捕获用户哈希:错误的 URL
3.4 直接抓取明文
4 LLMNR 毒化 (WPAD/DHCP)
5 破解 NetNTLMv2 哈希
6 场景示例
6.1 从 MSSQL 获取 NetNTLMv2 哈希
6.2 从 SSRF 漏洞获取 NetNTLMv2 哈希
0、前言
在这篇文章中,我们将介绍 LLMNR 毒化的概念。为了实施 LLMNR 投毒,我们将使用名为 Responder 的工具执行 MITM(中间人)攻击。使用此工具,我们将了解如何介入用户的 SMB、HTTP[S]、WPAD 和 DHCP 请求,从而捕获 NetNTLMv2 哈希值并使用 hashcat 去破解它。
此外,我们还将介绍 responder.py 的另外两个用例,它们更像 CTF,但仍然非常酷。
1、LLMNR 毒化简介
LLMNR 是基于 DNS 的 Windows 内置协议,用于解析局域网络上的主机名。该协议是 DNS 的备用协议,当 DNS 无法识别主机名时,系统会使用该协议尝试识别主机名。Windows 中有许多服务都依赖 DNS 来解析主机名,这也意味着会有许多服务可以在 DNS 和 LLMNR 请求之间进行切换。
注:LLMNR 类似于 mDNS,它们的工作原理基本相同,都是为了解决在局域网内无需 DNS 服务器也能解析主机名的需求(以多播的方式)。
只不过 LLMNR 是 Microsoft 自定义的协议在 Windows 系统中使用已久,而 mDNS 是 IETF 标准制定的协议在非 Windows 系统更常见。但 Windows 似乎也在逐渐弃用 LLMNR 而改用 mDNS 中。
Windows 下域名解析顺序:Hosts 文件 → DNS 缓存 → DNS 服务器 → LLMNR 多播 → NetBIOS 广播 → mDNS
LLMNR 的缺陷在于:它信任局域网中任何主机的响应,这导致它极易被滥用进行“名称欺骗”(Name Spoofing)和“中间人攻击”,从而间接触发身份验证并泄露 NTLM 凭据。【注:Windows 的“自动认证”机制更是加强了这种攻击的威力。】
注:Windows“自动认证”机制即,在非交互式的命令行或进程中进行共享资源的访问时,Windows 会自动使用当前用户缓存的 NTLM 哈希凭据向目标发起 NTLM 身份验证。
这种攻击有一个注意事项项就是,请求的域名/主机名必须得是 DNS 无法解析的名称,这意味着用户需要请求一个不存在的域名/主机名的资源。
Responder 是一种通过对 LLMNR、NBT-NS 和 mDNS 协议进行投毒来执行 MITM 攻击的工具,同时它还内置了许多常见的伪造服务器(如 SMB、LDAP、HTTP[S]、RDP、WinRM 等),来骗取前来请求的用户凭证。
注:Inveigh 是一个拥有和 Responder 类似功能的工具,可作为替代选项。
2、LLMNR 毒化(SMB)
2.1、Responder 如何毒害 SMB
受害者访问一个不存在的共享 \\printer\share 。【或在某些文件中嵌入的 UNC 路径】
DNS 无法解析该名称,于是系统广播 LLMNR 进行查询 printer。
攻击者监听到查询并伪造响应,假称自己就是 printer。
受害者尝试连接攻击者提供的伪造服务 SMB。
受害者系统会使用当前用户凭据自动发起 NTLM 身份验证。
攻击者捕获 netNTLMv2 哈希并尝试破解。
2.2、Responder 启动设置
首先,使用 ip a 命令查看当前攻击机的哪张网卡和目标网络可通。
然后,使用如下命令启动 Responder:
responder -I eth0 -v
注:新版 Responder (3.1.4.0) 已取消 -rf 选项,但作者使用的 Responder 3.0.7.0 的版本支持此选项。
