SMB relay
SMB relay
0x00 SMB服务
先来了解一下什么是 SMB 服务,SMB(Server Message Block)是一个协议名称,用它可以共享计算机之间的文件、打印机、串口等,通过 SMB 也可以远程访问服务器端的文件、打印机等共享资源。
SMB协议可以为局域网用户提供相关的功能和机制,来保证传输的可靠性。局域网中90%的数据包以及95%的字节是通过SMB协议进行传输,这是为了解决网络的稳定性和数据流在共享带宽时的公平性、拥塞控制及效率等问题。
————来源百度百科
总之 SMB 服务可以为局域网用户提供相关功能和机制,来保证传输可靠性。
一路走来 SMB 有三代,从 SMBv1 到 SMBv2 再到现在的 SMBv3 ,实际上越来越安全了。 (CVE-2020-0796针对的是SMB3.1.1)
0x01 NTLM hash
然后简单介绍一下 NTLM hash,我们知道 Windows 下的密码被加密保存在 SAM (Security Accout Manager)文件中,域控在 NTDS.dit,不可进行修改或是移动;NTLM hash 就是里面保存用户密码的 hash
生成方法分为三步:
1.将明文口令转为十六进制
2.转换成 Unicode 格式
3.进行 MD4 加密
得到了最后的32为十六进制数字串
0x001 LM hash 和 NTLM hash
可以看作 NTLM hash 是 LM hash 的升级,但是他们是两种不同的加密方式,LM hash 的安全性较差,易被破解,现在很少在使用了,故关于 LM hash 在此不多赘述。
0x002 NTLMv1 hash 和 NTLMv2 hash
NTLM hash 分为 NTLMv1 NTLMv2 NTLM session v2 三种,从 Windows Vista 和 Server 2008 开始,系统是默认禁用 NTLMv1 的,而是用的是 NTLMv2,NTLMv1 相对 NTLMv2 更脆弱,因为服务端的挑战码是 8 位的,而 NTLMv2 协议的挑战码是 16 位的,稍后会讲到。
0x003 NTLM hash 和 Net-NTLM hash
Net-NTLM hash 即指的是网络环境下 NTLM 认证的 hash,故也分为 Net-NTLMv1 hash, Net-NTLMv2 hash
0x004 Net-NTLM(v2) 认证流程
1.客户端向服务器发送登录请求,密码在客户端被 hash 一次
2.客户端向服务器发送 username
3.服务器返回一个 16 字节的挑战码(Challenge),并将已存储的用户密码 hash 加密这个 Challenge,生成 Challenge1
4.客户端将第一步 hash 的密码与 Challenge 再进行 hash 一次,生成 response 即 Challenge2
5.客户端将 response 发送给服务器
6.服务器比较 Challenge1 和 response,相同则认证成功
0x02 SMB中继攻击(SMB relay attack)原理
了解了 Net-NTLM 认证流程,再来分析 SMB 中继攻击原理就明了多了,攻击者充当了一个第三人,截获流量,重放流量
0x03 漏洞环境
kali 192.168.37.134 攻击机 win7 192.168.37.128 受害机器 win2008 192.168.37.131 第三方机器
1. smbrelay.py
大概流程就是:首先我们使用impacket工具包中的smbrelay.py,-h 指定受害机器,然后再第三方机器上net use 我们的kali机器ip ,net use的账户密码 得是可以登录win7的密码,就可以执行我们的木马
其中win10好像不得行
可以看到win2008上线了
可以看到能执行我们的CS马,然后脚本会删除这个木马。
2 MultiRelayx.py拿下shell
因为下班了这儿就重新记录下IP
win2008 192.168.127.149 win2012(DC) 192.168.127.148 kali 192.168.127.128
先用responder工具包里面的RunFinger.py脚本进行扫描(nmap皆可)来查看域内机器SMB签名的开放情况
如果MultiRelay脚本运行出错的话,就安装一下下面这个库
apt-get install python-crypto
现在 SMB 已经由 MultiRelay.py 脚本来进行中继,我们需要修改一下 Responder.conf 脚 本,不让其对 hash 进行抓取
在域控上随意net use 一下都可以
成功拿到shell.