小工具 · 2021年12月18日 0

Cobalt Strike学习

前言

趁着旧的服务器还没过期,来看看CS。(这篇写完就去复习)

CS

安装

这里使用了CS4.4原版jar+CSAgent加载器,服务器和客户端都需要安装Java环境

CSAgent:https://github.com/Twi1ight/CSAgent

连接团队服务器

Cobalt Strike分为客户端和服务器,执行下面这条命令启动CS团队服务器。其中teamserver必须以root权限运行,<host>需要是外部可以访问到的IP。后两个参数为可选的

./teamserver <host> <password> [/path/to/c2.profile] [YYYY-MM-DD]

服务器运行时会输出SSL证书的SHA256值,然后客户端连接服务器时会让我们确认这个SHA256值,防止中间人攻击。

image-20211202225852797

然后启动客户端,输入服务器主机名和密码之后进行连接

image-20211202225642965

首先会让我们确定SSL证书的SHA256哈希值,确认这个哈希值无误之后如果前面输入的密码正确就能连接上团队服务器。

image-20211202225658060

连接上服务器之后团队可以进行沟通、信息共享。

image-20211202230028571

一个客户端也能与多台服务器建立连接,在左上角可以新建连接,如果一台服务器停止运行还能切换到其他服务器。

Beacon

监听器主要是用于接收payload回传的各类数据,我们的payload在目标主机执行后会连接到监听器下载真正的shellcode并执行shellcode。

Beacon是Cobalt Strike的内置监听器,我们在目标主机执行payload后会弹回一个Beacon的shell给Cobalt Strike。在Cobalt Strike中Beacon有几种通信协议:DNS、HTTP/HTTPS、SMB、TCP。Foreign是外部监听器,它可以与msf结合反弹meterpreter的shell到msf上。

HTTP/HTTPS

这两种Beacon使用HTTP协议的GET和POST方式传输数据,默认情况下会使用GET请求下载数据,使用POST请求传回数据。

image-20211202230308897

填写好信息之后生成后门,然后在靶机上运行就能看到靶机上线

image-20211202230423549

DNS

配置DNS Beacon需要有一个域名,然后添加两条解析记录,首先为域名添加一条A记录,指向CS服务器IP,然后再为域名添加一条NS记录,指向A记录的域名。然后服务器配置防火墙将UDP的53端口放通。

image-20211202223623912

配置完可以使用nslookup进行测试

image-20211202224423180

CS中创建监听器时填写NS记录的域名:

image-20211202223356738

靶机上线后不会像其他Beacon一样在第一次连接时就发送目标相关信息,在没有任务的情况下CS服务器都是简单响应DNS请求而不做任何操作

image-20211202223247961

在执行任何一条命令之后靶机会将目标相关信息提交过来

image-20211202225129950

NS解析记录是指定该域名由某个DNS服务器进行解析,然后我们将其指向了CS服务器,在解析该域名时会被告知该域名由CS服务器解析,于是最终会和CS服务器进行交互。使用DNS Beacon时,CS服务器使用DNS txt记录与目标主机进行通信,这种方式有更高的隐蔽性,但速度相对HTTP Beacon会更慢。

SMB

SMB Beacon使用命名管道通过父级Beacon与CS服务器进行通信,使用SMB Beacon时流量封装在SMB协议中通过445端口进行传输。使用SMB Beacon可以使得不出网的主机通过父级Beacon上线。

这里首先需要新建一个SMB Beacon,并设定管道名

image-20211207163924762

然后新建一个Stegeless的后门,指定SMB Beacon并丢到内网不可出网的另一台主机中执行。

image-20211207164708041

然后父Beacon中使用link命令连接子Beacon。

连接成功之后能在子Beacon的external后面看到∞∞标志,这就是派生的SMB Beacon

image-20211207165148330

此时SMB Beacon通过父级的HTTPS Beacon与CS服务器进行通信,而SMB Beacon与HTTPS Beacon通过SMB协议进行通信:

image-20211207165726991

TCP

TCP Beacon与SMB Beacon类似,区别在于这里使用的是TCP协议与父级Beacon进行通信,使用这种方式上线时流量是不加密的。

在新建TCP Beacon时可以指定监听的端口:

image-20211207170008947

在不出网的目标主机上执行后,目标主机会监听8888端口,然后父Beacon中使用connect命令进行连接:

image-20211207170422437

Foreign

使用Cobalt Strike外部监听器可以派生meterpreter会话,这里有Foreign HTTP和Foreign HTTPS两种监听器,其中Foreign HTTPS的流量是加密的。

首先需要新建一个Foreign Beacon,并指定IP和端口,然后生成exe后门

image-20211207185909220

然后在msf中设置监听载荷

use exploit/multi/handler
set payload windows/meterpreter/reverse_https
set lhost 127.0.0.1
set lport 8888
run

在靶机上运行后门程序后msf就能收到meterpreter会话

Screenshot_2021-12-07_19_04_06

Attack

后门生成

在这里可以生成5种后门

  • HTA文档

    可以生成.hta,这里有三种类型的的.hta文件,不过我本地测试只有powershell方式的才能上线

  • Office宏

    可以生成一段VB代码,然后可以嵌入到Word文档中,当用户打开文档并启用宏时就可以上线,Word文档需要另存为docm的格式才能储存VB代码

  • Payload生成器

    可以生成各种语言版本的shellcode,可用于制作免杀的马

  • Windows可执行程序

    使用这种方式生成的木马运行后会去CS服务器上下载payload并执行,然后才能上线

  • Windows可执行程序(Stegeless)

    Stegeless的程序省去的下载payload的过程,直接执行payload,使用这种方式生成的木马会比Staged的木马大很多

WEB克隆

可以对目标网站进行克隆,同时可以在克隆的站点上启用键盘记录

image-20211208164017742

如果对方访问了克隆的站点,可以在WEB日志中看到访问记录以及键盘记录

image-20211208164947121

这里可以使用CS生成一份Office宏的后门,然后托管在CS服务器上

image-20211208165620853

配合文件托管可以实现访问时自动下载文件:

image-20211208170010759

这里自动下载的文档是使用CS生成的后门,如果有人比较好奇打开了这个文件并启用了宏,CS这里就会上线了:

image-20211208170733852

钓鱼邮件

可以先在邮箱中找一封广告邮件,然后导出为.eml文件作为模板,然后在CS中发送钓鱼邮件,同时还可以配合WEB克隆生成钓鱼网站进行钓鱼。

1638956509(1)

Beacon命令

首先需要修改心跳时间,CS中默认心跳为60秒,即Beacon每60秒与teamserver通信一次,执行命令时响应比较慢。

image-20211202230527408

在这里测试的时候可以将心跳值改为5秒,此时Beacon每5秒回连一次服务器,在回连时会接收命令并逐个执行。在回连之前发送的命令会进入到任务队列里,如果不小心输错可以使用clear命令清空Beacon任务队列

执行系统命令

首先在CS中可以使用shell命令来调用cmd.exe执行系统命令,执行shell dir可以列出目录,但执行shell ls会返回报错信息。

其次还可以使用powershell命令来调用powershell.exe执行系统命令,执行powershell ls可以列出目录且不会报错。

在调用powershell.exe执行命令时可能会被杀毒软件拦截,这里还有一个叫powerpick的命令可以不调用powershell.exe执行powershell命令,这个命令是使用了一种非托管Powershell技术。

psinject命令可以注入非托管Powershell到[pid]指定进程中,然后执行命令,大概和powerpick命令类似,不会调用powershell.exe

会话传递

使用spawn命令可以向其他服务器传递新的会话。在存在多台CS服务器时可以使用spawn命令派生新的会话到其他服务器。

这里还可以使用spawnu命令指定一个进程PID作为父进程PID,并以其身份创建一个新的Beacon会话。

在派生新的会话时使用Foreign Beacon可以向metasploit框架派生meterpreter会话。

文件下载

使用download命令可以从目标主机上面下载文件,下载时目标主机会在每次与服务器通信的时候传输文件的一部分。如果回连的时间设置得比较长,则下载的时间也会比较长,此时可以将心跳时间调低,例如设置为1秒进行加速。

image-20211209160053779

可以使用downloads命令查看下载列表,使用cancel命令取消文件下载。文件下载完成后是存在CS服务器上的,可以在View → Downloads找到文件并下载到本地。

image-20211209160221060

屏幕截图&键盘记录

screenshotscreenwatchprintscreen都是用于截屏的,screenshot截取一张,screenwatch持续截屏,printscreen使用PrintScr方式截屏,keylogger命令用于键盘记录。屏幕截图和键盘记录的结果都可以在Views这个菜单中找到。

如果想要停下screenwatchkeylogger任务可以使用jobs命令查看任务的JID,然后使用jobkill命令将任务结束掉。

代理转发

转发上线

可以使用已攻陷的机器作为代理,内网其他机器通过这台机器上线

这里先新建一个监听器,填好参数。接着Beacon会在已攻陷的主机A上监听4444端口

image-20211217211653393

然后生成一个Stegeless的后门并选择这个监听器,然后丢到内网另外一台不可出网的主机B上执行。内网的B主机即可通过A主机上线。

上线后以图形化展示主机,正好与SMB Beacon的箭头相反:

image-20211217211955667

实际上这个功能是执行了一条rportfwd命令:

image-20211217212630297

rportfwd命令还可用于端口转发:

rportfwd [绑定端口] [转发目的主机] [转发目的端口]
rportfwd stop [绑定端口]

socks代理

这里执行socks命令进行代理转发,可以进入目标主机内网:

socks [stop|port]

这里执行这条命令就可以使用CS服务器的8888端口进行socks代理:

image-20211217214051716

本地配置好proxychains之后使用proxychains执行命令:

image-20211217214459038

Referer

https://wbglil.gitbook.io/

http://blog.mo60.cn/?post=11

https://jishuin.proginn.com/p/763bfbd3bbd1