本文主要介绍 Cobalt Strike 4.3 的基本功能及使用方法,具体分析和实战中使用放在另一篇讲解:Cobalt Strike使用方法——实战篇。
Cobalt Strike (CS) 是一个为对手模拟和红队行动而设计的平台,相当于增强版的Armitage,早期以Metasploit为基础框架,3.0版本之后作为独立平台开发,主要用于目标攻击和模拟后渗透行动。
CS集成了端口转发、服务扫描、端口监听、木马生成、钓鱼攻击等功能,可以调用Mimikatz、Psexec等工具,与MSF进行联动,使用插件扩展功能,并且可以利用Malleable C2 profile自定义通信流量特征,是内网大杀器,十分适合作为团队协同攻击工具使用。
java -XX:+UseParallelGC -XX:+AggressiveHeap -XX:ParallelGCThreads=4 -jar cobaltstrike.jar $*
CS分为客户端 (Client) 与团队服务器 (C2),客户端与团队服务器是多对多的关系,一个团队服务器可以连接多个客户端 (用于信息共享和团队协作),每个客户端也可以连接多个团队服务器 (避免因一个服务器宕机而导致目标丢失),客户端可以管理多个分布式节点,便于团队分布式协作攻击。
团队服务器 通常运行在Linux环境,运行命令:
./teamserver <ip> <passwd> [profile] [YYYY-MM-DD]
# ip:服务端IP
# passwd:客户端与服务端的连接密码
# profile:用户配置文件
# YYYY-MM-DD:所有payload运行结束时间
一般结合nohup
命令使teamserver在后台运行,注意nohup
默认将运行信息输出到nohup.out
文件,若想不输出运行信息需要重定向标准输出/错误:(没有nohup则需要下载coreutils包)
apt-get install coreutils
nohup ./teamserver <ip> <passwd> [profile] [YYYY-MM-DD] >/dev/null 2>&1 &
客户端 可以跨平台,运行在Linux/Windows环境,启动后在对话框输入服务端的ip和连接密码,名字自定义,运行命令:
java -XX:+UseParallelGC -XX:+AggressiveHeap -XX:ParallelGCThreads=4 -jar cobaltstrike.jar
# -XX:+UseParallelGC 启用垃圾回收并发线程
# -XX:+AggressiveHeap 启用堆优化设置
# -XX:ParallelGCThreads=4 指定垃圾回收并发线程的数量
# 以上配置都是为了优化java垃圾回收性能
注意:CS团队服务端默认监听50050端口,暴露在公网不安全,运行时最好修改,直接编辑teamserver文件修改端口即可。
① 一次性上传并运行一个完整的Payload,这个Payload称为Stageless,即无阶段之意,使用这种方式上传的Payload体积会比较大,但因为不用从服务器下载,相对而言比较安全;
② 先上传一个体积小巧的Stager,Stager负责通过HTTP、DNS等协议从服务器将完整的Payload下载后运行,这个后续下载的Payload称为Stage,Stager下载Stage的过程称为Payload Staging。
① C2开启服务器监听端口;
② Client与C2通过TLS协议建立连接,之后保持实时加密通信,C2相当于Client和靶机Beacon之间的信息中转枢纽。
① C2开启监听端口,包括Stage下载端口 (如Stager需要) 和Beacon回连端口;
② Stager从Stager Host下载完整的Stage并运行,Stageless则省略下载的过程直接运行,获取Beacon;
③ Beacon进入睡眠状态,睡眠时间到后通过HTTP Get方式向C2发送Metadata;
④ C2响应Metadata,如果存在待执行的任务,C2会在响应数据中下发执行命令;
⑤ Beacon执行完毕后,通过HTTP Post方式向C2返回运行结果,之后再次回到睡眠状态。
CS设置了多重安全通信机制,正是这些安全特性使得CS在稳控方面有独到的优势,具体如下:
Client和C2之间通过SSL协议通信,使用cobaltstrike.store中的SSL证书和秘钥信息加密通信数据,为去除CS流量特征,躲避安全审查,最好使用自己生成的cobaltstrike.store,使用keytool工具查看和生成cobaltstrike.store文件,初始storepass为123456,可以在服务端启动脚本teamserver中查看,keytool查看以及生成SSL证书和秘钥的基本命令如下:
(每次生成的秘钥是随机的)
# 查看ssl证书信息
keytool -list -v -keystore cobaltstrike.store -storepass 123456
# -list:输出证书信息
# -v:详细模式
# -keystore :指定keystore文件
# -storepass :指定证书信息存储密码
# 生成新的ssl证书信息
keytool -genkeypair \
-keystore cobaltstrike.store \
-storepass password \
-keypass password \
-keyalg RSA \
-validity 180 \
-alias certificate \
-dname "CN=Microsoft IT TLS CA 2, OU=Microsoft IT, O=Microsoft Corporation, L=Redmond, ST=Washington, C=US"
# -genkeypair:生成密钥对(公钥和私钥)
# ‐keypass :指定用于加密私钥的密码
# -keyalg :指定生成密钥对的算法
# -validity :证书有效天数,默认90天
# ‐alias:指定证书别名
# -dname:指定证书所有者信息,这里取浏览器中的CA证书
# CN:通用名称,OU:组织单位名称,O:组织名称,L:城市或区域名称,ST:州或省份名称,C:单位的两字母国家代码
生成新的cobaltstrike.store文件后,要在teamserver启动脚本中修改相应信息。
首次设置Beacon Payload时,会生成一个C2专有的秘钥对 (公钥/私钥),公钥会嵌入Beacon的Payload Stage,用于加密Beacon发送到C2的Metadata,Beacon在和C2建立连接前会持续发送Metadata,其中包含了随机生成的会话秘钥,建立连接后,C2使用每个Beacon的会话秘钥来加密/解密之后的通信数据。即便HTTP和DNS Beacon,其通信数据也是经过加密的,具有和HTTPS Beacon一样的安全特性。
cobaltstrike.store中的密钥对和证书信息只用于Client到C2的验证和数据加密,并不应用于HTTPS Beacon,修改证书信息要通过配置Malleable C2 profile文件,具体方法在另一篇文章介绍:Cobalt Strike使用方法——实战篇
客户端界面如下所示,界面总体分为两部分,上半部分是会话或目标的图形化显示,下半部分是与用户交互的功能或会话的标签页:
Cobalt Strike
New Connection:创建新连接,加入服务端
Preferences:偏好设置,设置界面样式
Visualization:视图模式,包括Pivot Graph、Session Table、Target Table三种
VPN Interfaces:VPN接口管理
Listenrs:监听器管理
Script Manager:脚本管理
View
Applications:靶机的应用信息
Credentials:查看从靶机获取的账户密码
Downloads:查看从靶机下载的文件
Event Log:事件日志,可用于团队聊天
Keystrokes:键盘记录
Proxy Pivots:查看代理
Screenshots:查看屏幕截图
Script Console:脚本控制台,用于加载脚本
Targets:显示目标靶机
Web Log:Web日志
Attacks
Packages:生成各种木马文件,包括:
HTML Application:HTA木马文件
MS Office Macro:OFFICE宏病毒文件
Payload Generator:多种语言的Payload Stager
USB/CD AutoPlay:自动播放运行的木马文件
Windows Dropper:捆绑文件的木马
Windows Executable:EXE木马 (Stager)
Windows Executable(S):EXE木马 (Stageless)
Web Drive-by:Web服务配置与管理,包括:
Manage:管理Web服务
Clone Site:克隆网站
Host File:开启Web服务,供下载文件
Scripted Web Delivery:开启Web服务,供下载和执行Payload
Signed Applet Attack:开启Web服务为自签名Java Applet提供运行环境
Smart Applet Attack:自动检测Java版本并利用已知的EXP绕过安全检测
System Profiler:用于获取系统信息
Spear Phish:鱼叉式攻击
Reporting
Activity report:生成操作报告
Hosts report:生成主机报告
Indicators of Compromise:生成威胁报告
Sessions report:生成会话报告
Social engineering report:生成社会工程学报告
Tactics, Techniques, and Procedures:生成策略、技巧和程序报告
Reset Data:重置数据
Export Data:导出数据
即菜单栏中的部分功能,具体如下:
① Connect to team server:连接服务端
② Disonnect from team server:断开当前服务端连接
③ Configure Listeners:配置监听器
④ Show sessions in graph view:展示会话列表
⑤ Show sessions in table view:展示视图列表
⑥ Show targets in table view:展示目标列表
⑦ Credentials:查看从靶机获取的账户密码
⑧ Downloaded Files:查看从靶机下载的文件
⑨ Keystrokes:查看键盘记录
⑩ Screenshots:查看屏幕截图
⑪ Generate Windows Executable (Stageless):生成无状态的EXE木马
⑫ Setup java Signed Applet Attack:开启Web服务为自签名Java Applet提供运行环境
⑬ MS Office Macro Attack:生成OFFICE宏病毒文件
⑭ Setup Scripted Web-Delivery (Stageless):开启Web服务,供下载和执行Payload
⑮ Host a file:开启Web服务,供下载文件
⑯ Manage Web Server:管理Web服务
⑰ Help:帮助文档
⑱ About:关于Cobalt Strike
在Pivot Graph或Session Table视图右键点选session,或在Beacon交互命令窗中右键,可对目标进行进一步操作,如下所示:
help
、help
查看。注意HTTP和TCP Beacon默认心跳时间为60s,如果要缩短执行命令的响应时间,需要通过 sleep [jitter]
命令重新设置,secs为睡眠的时间,jitter为睡眠时间抖动的百分比 (0-99);如果存在父Beacon,则心跳时间与父Beacon相同。Beacon命令功能如下所示:Beacon Commands
===============
Command Description
------- -----------
argue 进程参数污染,利用虚假参数(通常很多)执行敏感操作绕过AV
blockdlls 限定子进程只能加载带有Microsoft签名的dll,使AV无法通过dll加载对恶意程序进行监控
browserpivot 注入靶机IE浏览器进程并开启HTTP代理,攻击者可以通过此代理继承靶机IE已获取的凭证
cancel 取消正在进行的下载
cd 改变目录
checkin 使用DNS Beacon时,使靶机强制回连C2
chromedump 从Chrome浏览器目录文件获取账户密码
clear 清除Beacon内的任务队列
connect 从当前Beacon连接到一个等待连接的TCP Beacon
covert 部署隐蔽VPN
cp 复制文件
dcsync 从域控制器中提取账户哈希
desktop 查看并与靶机桌面交互
dllinject 将反射型DLL注入进程
dllload 使用LoadLibrary()将DLL加载到进程
download 下载文件
downloads 列出下载下载的文件
drives 列出目标盘符
elevate 生成提权环境的会话
execute 在靶机执行命令(无输出)
execute-assembly 在靶机内存中执行本地.NET程序
exit 结束当前Beacon会话
getprivs 在当前凭证基础上提权
getsystem 获取SYSTEM权限
getuid 获取当前用户身份
hashdump 导出账户哈希
help 帮助文档,"help+命令"查看命令的使用方法
inject 在特定进程生成会话
inline-execute 在当前会话中运行BOF(使用Beacon Api开发的文件)
jobkill 结束CS长时间运行的后开发作业进程
jobs 列出CS所有长时间运行的后开发作业(post-exploitation),
这些作业由CS执行恶意功能时临时创建
jump 与远程主机新建连接生成新的会话
kerberos_ccache_use 从ccache文件中导入kerberos票据应用于当前会话
kerberos_ticket_purge 从当前会话中清除kerberos票据
kerberos_ticket_use 从ticket文件中导入kerberos票据应用于当前会话
keylogger 开启键盘记录,可以将其注入指定的进程
kill 结束进程
link 从当前Beacon连接到一个等待连接的SMB Beacon
logonpasswords 利用mimikatz获取账户密码和哈希
ls 显示当前目录文件
make_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命令,如net view、net user等
note 为当前Beacon做备注
portscan 扫描端口
powerpick 通过unmanaged powershell执行命令
powershell 通过powershell.exe执行命令
powershell-import 导入powershell脚本
ppid 为Beacon会话中执行的命令分配父进程
printscreen 使用PrintScr方法屏幕截图,可以将其注入至特定进程
ps 显示进程列表
psinject 在特定进程中执行powershell命令
pth 使用Mimikatz哈希传递
pwd 显示当前目录
reg 查询注册表键值
remote-exec 在靶机使用psexec、powershell、wmic执行命令
rev2self 恢复为原始令牌
rm 删除文件或目录
rportfwd 新建端口转发,端口转发的流量由CS服务端做中转
rportfwd_local 新建端口转发,端口转发的流量先途径CS客户端,
再借由CS客户端和服务端已经建立的隧道做流量中转
run 在靶机执行命令 (有输出)
runas 以其他用户身份执行命令
runasadmin 以admin权限执行命令
runu 选择特定的父进程执行命令
screenshot 屏幕截图,可以将其注入至特定进程
screenwatch 每次Beacon check-in进行屏幕截图,直至jobkill将其进程结束,可以将其注入至特定进程
setenv 设置环境变量
shell 通过cmd或shell执行命令
shinject 将shellcode注入进程
shspawn Spawn process and inject shellcode into it
sleep 设置Beacon的延迟时间(心跳时间)
socks 在靶机开启SOCKS4反向代理,监听端口在C2主机
socks stop 停止SOCKS4代理
spawn 派生新的会话
spawnas 派生具有其他用户权限的会话
spawnto Set executable to spawn processes into
spawnu 选择特定的父进程派生新的会话
spunnel Spawn and tunnel an agent via rportfwd
spunnel_local Spawn and tunnel an agent via Cobalt Strike client rportfwd
ssh 使用SSH连接远程主机
ssh-key 使用SSH连接远程主机
steal_token 从指定进程中窃取令牌
timestomp 将一个文件的时间戳应用到另一个文件
unlink 与父/子Beacon断开会话连接
upload 上传文件
Access
Dump Hashes:获取账户哈希
Elevate:提权,将提权后的会话弹回监听器
Golden Ticket:生成黄金票据并将其注入到当前会话
Make Token:转换当前登录凭证
One-liner:用一次性powershell命令派生会话,该命令会在Beacon会话靶机上临时运行一个服务器,供本地下载stage并运行,一次下载后服务随即关闭
Run Mimikatz:运行mimikatz sekurlsa::logonpasswords命令
Spawn As:派生具有其他用户权限的会话
Explore
Browser Pivot:注入靶机IE浏览器进程并开启HTTP代理,攻击者可以通过此代理继承靶机IE已获取的凭证
Desktop(VNC):通过VNC远程控制靶机桌面
File Browser:文件浏览
Net View:运行net view命令
Port Scan:端口扫描
Process List:详细的图形化进程列
Screenshot:屏幕截图
Pivoting
SOCKS Server:在靶机开启SOCKS4反向代理,监听端口在C2主机
Listener:设置pivot监听器,从而避免大量的靶机Beacon直接与C2通信
Deploy VPN:部署隐蔽VPN
Spawn
派生新的会话
Session
Note:为当前Beacon做备注
Color:为会话标记颜色
Remove:移除会话
Sleep:设置Beacon的延迟时间(心跳时间)
Exit:退出会话
在Target Table视图右键点选session,可对目标进行进一步操作,如下所示:
Jump
通过psexec、ssh、winrm等远程命令工具新建会话:如果Listener是SMB/TCP Beacon,则新建会话与当前会话为级联关系;如果Listener是HTTP/HTTPS/DNS Beacon,则新建会话与当前会话为并列关系。
显示所有靶机的session操作
Scan
端口扫描
Services
显示已扫描出的靶机开放的服务
Host
修改主机的操作系统、名字、备注、颜色等属性