当前位置: 代码迷 >> 综合 >> 初识NTLM-relay
  详细解决方案

初识NTLM-relay

热度:63   发布时间:2024-02-23 16:58:58.0

CATALOG

  • NTLM相关
    • 1.用处
    • 2.认证流程
    • 其他术语
      • NT-hash/NTLM-hash
      • LM-hash
      • Net-NTLM hash
      • SSPI
      • SSP
  • NTLM-relay原理
    • 不同版本的NTLM认证对应的response
  • NTLM-relay攻击
    • 如何获取到NET-NTLM hash
      • 通过responder或者inveigh工具
        • Inveigh
        • responder
    • 破解NET-NTLM hash(v2)
    • 其它方式的NTLM-relay攻击
      • 利用impacket的ntlmrelays
        • smb协议访问:
        • http协议访问
  • 参考文章

NTLM相关

1.用处

NTLM是一种windows的验证用户身份的一种机制,多存在于工作组环境下。可以与smb、http、ldap等协议嵌套使用,攻击者有可能利用这几种协议来进行NTLM-relay攻击。

2.认证流程

1.客户端发送一个明文的用户名给服务端,说明自己是谁。
2.如果当前用户存在,则服务端先会随机生成一段challenge,可以理解成一个随机字符串,然后用客户端所声明的用户的hash对当前这段challenge进行加密生成另一段密文,我叫它userhash-challenge。然后服务端会把challenge也就是最初生成的随机字符串发送给客户端。
3.客户端收到challenge,用自己密码的hash对其进行加密并将加密结果发送给服务器,这个发送给服务器的密文我们一般称为Net-NTLM hash或者是response。
4.服务器收到客户端发送过来的加密数据,将其与之前的userhash-challenge进行比较,如果相同则认证成功。
在这里插入图片描述

其他术语

NT-hash/NTLM-hash

通常是指Windows系统下Security Account Manager中保存的用户密码hash,也可以理解成mimikatz中就跑出来的哈希,也叫做ntlm-hash。
NT-hash可以直接用于pass the ticket攻击。
在这里插入图片描述

LM-hash

更早的时候windows用的是LAN Manager Challenge/Response 验证机制,简称LM。该方案比NTLM响应时间更早,安全性更低。而LM-hash就是当时配合LM机制所使用的一种hash,而现在基本已经弃用,NT-hash的出现就是为了代替LM-hash。
在这里插入图片描述

Net-NTLM hash

这个是指的是ntlm认证第三阶段的时候客户端发送给服务器的用自己的hash加密challenge后的那段密文也就是response。
在这里插入图片描述

SSPI

Security Service Provider Interface 或Security Support ProviderInterface。这是Windows定义的一套接口,此接口定义了与安全有关的功能函数,将整个安全认证模块化,就好比是各种各样的零件库,别人需要造什么样的车就拿什么样子的零件。这样可以使得其他协议可以去根据自己的需求进行个性化定制,进而实现一个适合于自身的安全认证方式。

SSP

结合SSPI生成一个针对于具体需求的安全认证机制,根据SSPI所生成的具体产物,就称为SSP。例如微软的NTLMSSP(NTLMSecurity Support Provider)为NTLM认证的实现提供了基本功能,是WindowsSSPI(SecuritySupport Provider Interface )的一种具体实现。除了NTLMSSP之外还有kerberos,Cred SSP,Digest SSP等。

NTLM-relay原理

在这里插入图片描述
基本流程如上图所示,在客户端的视角里,攻击者就是他要访问的服务端,它在与攻击者这台主机进行NTLM认证,而整个流程也只有攻击者这台主机与其进行交互。
在服务端的视角里,攻击者是客户端,是攻击者在向服务端证明自己的身份。通过中间人攻击的方法,攻击者可以伪造成客户端来完成身份验证。
在这里插入图片描述
攻击者所做的事情只是把所有客户端的请求relay到服务端,并把所有服务端的请求relay到客户端。而在服务端看来,一直以来只有攻击者在跟他交互,所以自然而然就认为攻击者就是客户端,这样子攻击者就达到了伪造成真正客户端的目的。

不同版本的NTLM认证对应的response

主要分为NTLMv1版本与NTMLv2版本,NTLMv1版本的response可以很容易爆破出用户的hash,相比较而言不安全。而NTLMv2版本使用了HMAC_MD5函数,所以通过response很难被爆破出真正的用户hash,只能通过暴力破解。

NTLM-relay攻击

如何获取到NET-NTLM hash

通过responder或者inveigh工具

这两个工具利用的是LLMNR和NetBIOS欺骗。首先我们需要知道Windows系统名称解析顺序为:

  1. 本地hosts文件(%windir%\System32\drivers\etc\hosts)

  2. DNS缓存/DNS服务器

  3. 链路本地多播名称解析(LLMNR)和NetBIOS名称服务(NBT-NS)
    当用户解析一个无法被解析的主机名的时候,就会走LLMNR协议或者NBT-NS协议。这时候我们就可以做手脚来让用户认为我们就是它想访问的目标,进而跟我们进行NTLM认证,这样子我们就能够获取到其NET-NTLM hash。

Inveigh

管理员权限打开攻击机器的powershell依次输入以下命令:
. .\Inveigh.ps1
Invoke-Inveigh -ConsoleOutput Y
如果有执行策略限制再加一条Set-ExecutionPolicy Bypass -Scope Process
在这里插入图片描述
在被攻击机器上的运行框输入一个任意的主机名并点击确定:
在这里插入图片描述
这时候返回攻击机,发现已经抓取到NET-NTLM hash
在这里插入图片描述
如果对方访问的是正确的主机,则显示的是:
在这里插入图片描述
它与域控进行NTLM协商,并没有经过我们的攻击机,也没有走LLMNR与NETBIOS协议。

responder

攻击机执行responder -I eth0 -f,I后面跟的是当前的网卡名字。被攻击机上执行的操作与Inveigh一样,得到结果如下,依旧抓到了目标用户的NET-NTML hash。
在这里插入图片描述

破解NET-NTLM hash(v2)

利用hashcat可以完成,用hashcat执行命令:hashcat -m 5600 密码字典路径 -force -show
我选择将上述命令放在.sh文件中直接执行。结果如下:
在这里插入图片描述
得到密码为123
破解ntlmv1的hash请参考Windows内网协议学习NTLM篇之Net-NTLM利用

其它方式的NTLM-relay攻击

利用impacket的ntlmrelays

./ntlmrelayx.py -t smb://192.168.124.139 -c whoami -smb2support
在这里插入图片描述
被害者只需要通过smb协议或者http协议访问我们的攻击机即可。

smb协议访问:

在这里插入图片描述

http协议访问

在这里插入图片描述

参考文章

Windows下的密码hash-NTLM-hash和Net-NTLM-hash介绍

跟着玄武大佬学NTLM relay攻防

NTLM Relay

内网渗透研究:LLMNR和NetBIOS欺骗攻击分析

内网渗透测试:NTLM Relay攻击分析

Windows内网协议学习NTLM篇之Net-NTLM利用