NTLM-relay攻击的原理与实现

前言

由浅入深的讲解ntlm-relay攻击的相关原理以及最终的实现。

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进行比较,如果相同则认证成功。
在这里插入图片描述

3.其他术语

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到客户端。而在服务端看来,一直以来只有攻击者在跟他交互,所以自然而然就认为攻击者就是客户端,这样子攻击者就达到了伪造成真正客户端的目的。

扫描二维码关注公众号,回复: 11888049 查看本文章

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

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

NTLM-relay攻击

1.如何获取到NET-NTLM hash

1.1通过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。

1.1.1 Inveigh

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

1.1.2responder

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

2.破解NET-NTLM hash(v2)

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

3.其它方式的NTLM-relay攻击

当破解不出密码的时候,我们就需要用到其他的NTLM-relay攻击了,是真正的将凭据relay到其他的主机上,如果这个凭据权限足够,那么就可以控制对方主机,所以凭据的权限很重要,但是这属于一种被动攻击,能获得什么权限全看运气,因为ms06068已经被修复,所以不能将凭据relay到凭据真正持有者的主机,只能relay到其他主机。
这个攻击的前提是:

  1. 目标主机没有开启smb签名。这里提供一种关闭smb签名的方式,这里说一下,一般情况下域控默认开启smb签名,其余域内机器不开启
    修改注册表的两个键值为0:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters"requiresecuritysignature"=dword:00000000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanmanworkstation\Parameters"requiresecuritysignature"=dword:00000000

  1. 使用Runfinger脚本探测出主机
    修改完成后使用responder其中的一个名为Runfinger的脚本探测是否设置成功,只有这里显示成功的才能进行攻击,如果探测不出来则无法进行攻击,即使有一个主机你知道它确实满足条件,但Runfinger脚本就是探测不出来,那么这个主机也是无法被攻击的
    在这里插入图片描述
    攻击无法攻击的机器会显示如下错误:
    在这里插入图片描述

当我们确定域内有可攻击的主机后,就可以开展以下攻击。

3.1利用impacket的smbrelayx

第一步:打开responder并修改配置文件responder.conf,将smb与http两项改为Off,注意大小写,这里面responder的作用就是,创建一个可以被访问的虚拟路径并且模拟与其他主机进行NTLM认证交互,而smbrelayx脚本进行ntlm-relay。
在这里插入图片描述
第二步输入命令```./smbrelayx.py -h 受害者ip -c ‘要执行的命令’,这时候只要域内主机触发了LLMNR协议即可,触发方式与上免例子的触发方式一致,即通过smb协议或者http协议访问一个不存在的主机。
在这里插入图片描述

3.2利用impacket的ntlmrelays

第一步跟3.1中第一步相同,操作responder,第二步输入以下命令,。
./ntlmrelayx.py -t 受害者ip -c whoami -smb2support
在这里插入图片描述
此时只要当前域内有主机通过smb协议或者http协议访问了不存在的主机,我们就会利用其用户凭据去登陆这台192.168.124.139,并执行命令whoami。

3.3利用responder里面的MultiRelay.py获取shell

这种攻击的前提条件跟前面几种一模一样。第一步打开responder,改配置文件。第二步执行MultRelay脚本。执行成功后,如果获取到足够权限的用户评价,就可以控制被攻击机并获得其shell。
命令:./MultiRelay.py -t 受害者ip -u ALL
在这里插入图片描述
这时候我们使用域内一个域管的主机触发smb协议去访问一个不存在的主机,然后看攻击机就会发现反弹回了shell,这个shell是受害者的shell,而不是那台域管主机的shell,最后一行执行了whoami。
在这里插入图片描述

附录:其他正常用户触发攻击的方式

只要其他正常的域内用户通过以下两种方式访问了一个错误的主机,那么我们作为攻击者就可以窃取到其凭据进行ntlm-relay攻击。

通过http协议触发

在这里插入图片描述
在这里插入图片描述

通过smb协议触发

在这里插入图片描述
或者在cmd中执行net use \\wasdf也可以触发smb协议。

参考文章

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

跟着玄武大佬学NTLM relay攻防

NTLM Relay

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_41874930/article/details/108825010