往期文章:
前言
书接前文!在上一篇文章 《内网渗透测试:发送NTLM请求与截获Net-NTLM Hash》中,我们讲了多种可以用来发起 NTLM 请求的方式。在本篇文章中,我们将主要讲解在发起 NTLM 请求并拿到 Net-NTLM Hash 之后的进一步利用。
我们在 《内网渗透测试:NTLM 与 NTLM 身份认证》中说过,Net-NTLM Hash 不能像 NTLM Hash 一样被攻击者用来进行哈希传递,但是攻击者可以使用各种方法截获客户端与 Server 认证过程中的 Net-NTLM Hash,然后对其进行明文爆破,或者直接用来进行 NTLM 中继攻击。
对 Net-NTLM Hash 进行破解
我们知道,Net-NTLM Hash 是网络环境下 NTLM 认证的散列值。NTLM v1 响应和 NTLM v2 响应对应的就是 Net-NTLM Hash 分为 Net-NTLM Hash v1 和 Net-NTLM Hash v2。这两种 Net-NTLM Hash 的加密强度明显后者强于前者,但是二者皆可使用暴力破解。
由于目前使用最多的是 NTLM v2 版本,所以我们这里主要讲的就是对 Net-NTLM Hash v2 的破解。Net-NTLM v2 现在也没有什么比较好用的破解方式,一般就是利用 Hashcat 离线爆破明文密码,但是能不能跑出来就得看字典里面有没有了。Hashcat下载地址:https://hashcat.net/files/hashcat-6.0.0.7z
假设我们已经通过上文所讲的几种方法获取了受害机的 Net-NTML Hash:
那么接下来我们便可以用 john、hashcat 等工具对 Net-NTML Hash 进行明文爆破。
首先将抓取到的 Net-NTLMHash 保存到 hash.txt 中,然后执行以下命令使用 Hashcat 对进行爆破:
hashcat.exe -m 5600 hash.txt wordlists.txt
// wordlists.txt 为字典
如上图所示,成功爆破并得到了明文密码。
也可以使用kali自带的 john 工具进行破解。John the Ripper是一个快速的密码破解程序,目前可用于Unix,Windows,DOS和OpenVMS的许多口味。其主要目的是检测弱Unix密码。
John可以使用外部字典,使用--wo
选项指定外部字典。这里,我们使用 john 的默认字典,对 responder 生成的 Hash 记录文件 SMB-NTLMv2-SSP-192.168.93.40.txt 进行爆破。
如上图所示,成功爆破并得到了明文密码。
NTLM Relay(NTLM 重放攻击)
一般来说,如果我们拿到的是 Net-NTLM Hash v1 的话,我们会优先选择对其进行破解,因为他的密码强度没有那么高。但不幸的是如今 Net-NTLM Hash v1 是那么的少见,以至于我们获取到的几乎都是 Net-NTLM Hash v2,其加密强度远高于 Net-NTLM Hash v1,这时候如果我们选择爆破的话是比较鸡肋的。除非你有一个强大的字典,否则只要明文密码的强度稍微高一点基本就跑不出来了。此时,我们不妨试一下 NTLM Relay 攻击。
在这个NTLM Relay中,我们就是要将截获的 Net-NTLM Hash 重放给其他机器来进行攻击,从而实现对其他机器的控制,所以严格意义上应该叫作 Net-NTLM Relay。
事实上,只要是支持 NTLM SSP 的协议,都可以 Relay 过去,比如常见的有:SMB、EWS 和 LDAP。本文主要讲的是 SMB。
Relay To SMB
首先,我们演示 SMB 协议的 Relay 攻击。能直接 Relay 到 Smb 服务器是最直接最有效的方法。可以直接控制该服务器(包括但不限于在远程服务器上执行命令、上传exe到远程主机上执行、dump 服务器的用户 Hash 等)。
这里主要有两种场景:
-
工作组环境
这个实用性比较差。在工作组环境里面,工作组中的机器之间相互没有信任关系,每台机器的账号密码Hash只是保存在自己的SAM文件中,这个时候Relay到别的机器,除非两台机器的账号密码一样(如果账号密码一样,我为啥不直接 PTH 呢),不然没有别的意义了,这个时候的攻击手段就是将 NTLM reflect 回机子本身。因此微软在MS08-068中对 smb reflect 到 smb 做了限制,防止了同一主机从 SMB 协议向 SMB 协议的 Net-NTLM-Hash Relay。这个补丁在 CVE-2019-1384(Ghost Potato) 被绕过。
自从 MS08-068 漏洞修复之后无法再将
Net-NTLM
哈希值传回到发起请求的机器上,除非进行跨协议转发,但是该哈希值仍然可以通过中继转发给另外一台机器。利用 Responder 结合其他中继工具可以进行自动化的拦截并且对哈希值进行中继转发。唯一的一个不足之处就是,在这之前需要在进行转发操作的机器上禁用 SMB 签名。但是除了个别的例外,所有的 Windows 操作系统都默认关闭了 SMB 签名。SMB签名是一种服务器与客户端协商以使用继承的会话密钥对所有传入的数据包进行数字签名的配置。这样的话,即使 NTLM 会话还是可能被 Relay,服务器也不会被利用,因为攻击者缺少会话密钥。在 Active Directory 网络中只有域名控制器默认开启 SMB 签名,其他的所有服务器或工作组默认不受保护。
-
域环境
域环境下域用户的账号密码Hash保存在域控的 Ntds.dit 里面。如果没有限制域用户登录到某台机子,那就可以将该域用户的 Net-NTLM-Hash 重放到别人的机子,或者是拿到域控的请求,将域控 Relay 到普通的机子,比如域管运维所在的机子。那为啥不 Relay 到其他域控制器呢?因为域环境中就域控默认开启 SMB 签名。
下面我们演示具体的攻击过程。实验环境如下:
攻击机kali:192.168.52.128
PC 1(Windows 7):192.168.52.143
DC 2(Windows Server 2008):192.168.52.138
利用 Responder 中的 MultiRelay.py
我们在进行重放攻击之前,先用 Responder 工具包里面的 RunFinger.py 脚本扫描域内机器的的开放情况:
./RunFinger.py -i 192.168.52.1/24
可以看到域内主机 192.168.52.141 和 192.168.52.143 的 SMB 签名被禁用(false)了,接下来开始利用 MultiRelay.py 攻击,获得目标主机的 Shell:
python MultiRelay.py -t 192.168.52.143 -u ALL
# python MultiRelay.py -t <被攻击ip> -u ALL
现在 SMB 已经由 MultiRelay.py 脚本来进行中继,我们需要修改一下 Responder 的配置文件 Responder.conf,不让其对 Hash 进行抓取。将 SMB 和 HTTP 的 On 改为 Off:
重启 Responder.py,准备毒化:
responder -I eth0
来源:freebuf.com 2021-05-20 14:46:20 by: MrAnonymous
请登录后发表评论
注册