Cobalt Strike是一款非常成熟的渗透测试框架。Cobalt Strike在3.0版本之前是基于Metasploit框架工作的,可以使用Metasploit的漏洞库。从3.0版本开始,Cobalt Strike不再使用Metasploit的漏洞库,成为一个独立的渗透测试平台。Cobalt Strike是用Java语言编写的。可以进行团队协作,以搭建了Cobalt Strike的TeamServer服务的服务器为中转站,使目标系统权限反弹到该TeamServer服务器上。同时,Cobalt Strike提供了良好的UI界面。
1)下载
因为启动Cobalt Strike需要JDK的支持,所以需要安装Java环境。打开Oracle官方网站(https://www.oracle.com/java/technologies/downloads/#jdk21-windows),如下图所示:下载安装包。
2)查看Java环境
打开命令模式,输入如下命令查看所安装的Java环境版本信息,如下图所示:
java -version
在安装Cobalt Strike时,必须搭建团队服务器(也就是TeamServer服务器)。打开cobaltstrike文件夹,如下图所示:
输入“ls -l"命令,查看TeamServer和Cobalt Strike是否有执行权限。当前TeamServer权限为rw, 没有x(执行)权限,如下图所示:
接着, 输入如下命令, 为TeamServer和Cobalt Strike赋予执行权限,如下图所示:
chmod +x teamserver cobaltstrike
再次输入"ls -l"命令,查看当前TeamServer和Cobalt Strike的权限。TeamServer和CobaltStrike已经获得了执行权限,如下图所示:
cobaltstrike文件夹中有多个文件和文件夹,其功能如下:
最后,运行团队服务器。在这里,需要设置当前主机的IP地址和团队服务器的密码。输入如下命令,如下图所示:
./teamserver 192.168.1.29 test123456
如果要将Cobalt Strike的TeamServer部署在公网上,需要使用强口令,以防止TeamServer被破解。接下来,我们就可以启动Cobalt Strike客户端来连接团队服务器了。
启动cobaltstrike.jar
填写团队服务器的IP地址、端口号、用户名、密码,如下图所示。这里,登录用户名可以任意输入,但要保证当前该用户名没有被用来登录CobaltStrike服务器。
单击”Connect“按钮,会出现指纹校验对话框,如下图所示。指纹校验的主要作用是防篡改,且每次创建Cobalt Strike团队服务器时生成的指纹都不一样。
在客户端想服务端成功获取相关信息后,即可打开Cobalt Strike主界面,如下图所示。CobaltStrike主界面主要分为菜单栏、快捷功能区、目标列表区、控制台命令输出区、控制台命令输入区。
可以通过菜单栏的第一个选项”Cobalt Strike"进入"Listener"面板,也可以通过快捷功能区进入“Listeners”面板,如下图所示:
单击“Add"按钮,新建一个监听器,如图所示。输入名称、监听器类型、团队服务器IP地址、监听端口,然后单击”Save“按钮保存设置,如图所示。第一个监听器(Listener)创建成功,如图所示。
单击”Attacks"菜单,选择"Web Driver-by" → "Scripted Web Delivery"选项,或者通过快捷功能区,打开”Scripted Web Delivery"窗口,如图所示。
最后,将Cobalt Strike生成的Payload完整第复制下来,如下图所示。
保持默认配置,选择已经创建的监听器,设置类型为PowerShell,然后单击“Launch”按钮,如图所示。最后,将Cobalt Strike生成的Payload完整复制下来,如图所示。
执行Payload,Cobalt Strike会收到一个Beacon,如图所示:
如果一切顺利,就可以在Cobalt Strike的日志界面看到一条日志,如下图所示。
在Cobalt Strike的主界面中可以看到一台机器上线(包含内网IP地址、外网IP地址、用户名、机器名、是否拥有特权、Beacon进程的PID、心跳时间等信息),如图所示:
单击右键,在弹出的快捷菜单中选中需要操作的Beacon,然后单击“Interact"选项,进入主机交互模式,如图所示。
现在就可以输入一些命令来执行相关操作了。如图所示,输入"shell whoami"命令,查看当前用户,在心跳时间后就会执行该命令。在执行命令时,需要在命令前添加”shell“。Beacon的每次回连时间默认为60秒。
回连后,执行命令的任务将被下发,并成功回显命令的执行结果,如图所示。
Cobalt Strike模块的功能选项,如图所示。
View模块的功能选项,如下图所示。
下面介绍Attacks模块下的Packages和Web Drive-by模块。
依次点击”Attacks“ → ”Packages“选项,可以看到一系列功能模块,如下图所示。
依次单击”Attacks“ → ”Web Drive-by“选项,可以看到一系列基于网络驱动的功能模块,如图所示。
Reporting模块可以配合Cobalt Strike的操作记录、结果等,直接生成相关报告,如图所示。
在后渗透测试中,Cobalt Strike作为图形化工具,具有得天独厚的优势。
Listeners模块的所有Payload,如下表所示。
? Listeners模块的所有Payload
Payload | 说 明 |
---|---|
windows/beacon_dns/revser_dns_txt | |
windows/beacon_dns/reverse_http | |
windows/beacon_http/reverse_http | |
windows/beacon_https/reverse_https | |
windows/beacon_smb/bind_pipe | 只用于x64本地主机 |
windows/foreign/reverse_http | |
windows/foreign/reverse_https | |
windows/foreign/reverse_tcp |
依次单击”Cobalt Strike“ → ”Listeners“选项,创建一个监听器。如图所示,像Metasploit一样,Cobalt Strike有多种监听程序。在Cobalt Strike中,每种类型的监听器只能创建一个。
Cobalt Strike的内置监听器Beacon(针对DNS、HTTP、SMB),外置监听器为Foreign。有外置监听器,就意味着可以和Metasploit或Empire联动。可以将一个在Metasploit或Empire中的目标主机的权限通过外置监听反弹给Cobalt Strike。
Cobalt Strike的Beacon支持异步通信或交互式通信。异步通信过程是:Beacon从TeamServer服务器获取指令,然后断开连接,进入休眠状态,Beacon继续执行获取的指令,直到下一次心跳才与服务器进行连接。
在监听器窗口中单击”Add“按钮,就会出现新建监听器页面。如图所示,在"Payload"下拉列表中选择”Beacon HTTP"选项,表示这个监听器是Beacon通过HTTP协议的GET请求来获取并下载任务、通过HTTP协议的POST请求将任务的执行结果返回的。然后,设置监听端口,单击“Save”按钮保存设置。
创建一个名为"msf"的外置监听器,如图所示。
启动Metasploit,依次输入如下命令,使用exploit/multi/handler模块进行监听,如图所示。使用exploit/multi/handler模块设置的Payload的参数、监听器类型、IP地址和端口,要和在Cobalt Strike中设置的外置监听器的响应内容一致。
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.29
set lport 2333
run
在Cobalt Strike 主界面上选中已经创建的外置监听器,然后单击右键,在弹出的快捷菜单中单击”Spawn"选项。在打开的窗口中选中“msf"外置监听器,单击”Choose"按钮。在Beacon发生下 一次心跳时,就会与Metasploit服务器进行连接,如图所示。
切换到Metasploit控制台,发现已经启动了Meterpreter session 1。
接下来, 执行“getuid”命令,查看权限,如图所示。因为当前Cobalt Strike的权限时System,所以分配给Metasploit的权限也是System。由此可知,当前Cobalt Strike有什么权限,分配给Metasploit的就是什么权限。
除了使用图形化界面进行spawn操作,还可以直接在控股台的命令输入区输入“spawn msf"命令,将权限分配给名为”msf"的监听器,如图所示。
如下两种监听器的使用方法与上述类似。
在Delivery模块中,我们主要了解一下Scripted Web Delivery模块。
依次单击“Attacks" → ”Web Drive-by" → "Scripted Web Delivery"选项,打开“Scripted Web Delivery”窗口,如图所示。
Script Web Delivery 主要通过四种类型来加载TeamServer中的脚本,每种类型的工作方式大致相同。Script Web Delivery先在TeamServer上部署Web服务,再生成Payload和唯一的URI。
选择PowerShell类型并单击“Launch"按钮,如图所示,Cobalt Strike会将生成的Payload自动转换为命令。复制这个命令并在目标主机上执行它,在没有安装杀毒软件的情况下,Windows主机会直接下载刚才部署在TeamServer中的Payload,然后将其加载到内存中,以获取目标主机的一个Beacon。
其他类型的Script web Delivery是通过目标主机的不同模块实现的。在渗透测试中,可以根据目标主机的情况选择相应类型的Script Web Delivery。
依次单击”Attacks" → “Web Driver-by" → ”Manage“选项,可以看到Manage模块中开启的Web服务,如图所示。
Manage模块主要用于管理团队服务器的Web服务。可以看到,其中不仅有Beacon监听器,还有Script Web Delivery模块的Web服务。如果忘记了由Script Web Delivery自动生成的命令,可以在这里找回。选中一个服务,单击,”Copy URL”按钮,那段被我们忘记的命令就会出现在剪贴板中了。如果想让某个服务停止运行,可以选中该服务并单击“Kill”按钮。
依次单击“Attacks” → “Packages" → "Payload Generator"选项,打开”Payload Generator“窗口,如图所示。
可以生成多种Cobalt Strike的Shellcode。选择一个监听器,设置输出语言的格式,就可以生成相应语言的Shellcode(可以生成C、C#、COM Scriptlet、Java、Perl、Power Shell、Power Shell Command、Python、RAW、Ruby、Veil、VBA等语言的Shellcode)。编写相应语言的用于执行Shellcode的代码,将Shellcode嵌入,然后在目标主机上执行这段Shellcode,就可以回弹一个Beacon。各种语言用于执行Shellcode的代码,可以在GitHub中找到。
依次单击”Attacks" → ”Package“ → "Windows Executable"选项,打开”Windows Executable“窗口,如图所示。
在这里,可以生成标准的Windows可执行文件(EXE)、基于服务的Windows可执行文件、Windows DLL文件。
依次单击”Attacks" → “Packages" → ”Windows Executable(S)"选项,打开“Windows Executable”窗口,生成一个Windows可执行文件,如图所示。
依次单击”Attacks" → “Packages" → ”Windows Executable(S)"选项,打开“Windows Executable”窗口,生成一个Windows可执行文件,如图所示。