Cobalt Strike 基础

1.基本配置

1.1 组成部分

  • teamserver – teamserver – C2服务器
  • cs客户端 – cobaltstrike.jar – 控制端
  • beacon – 被控端

1.2 启动teamserver

其中teamserver必须运行在Linux Java环境下,ubuntu相关命令如下:

1
2
3
4
# 安装 jdk_11
sudo apt install openjdk-11-jdk
# 启动 teamserver
sudo ./teamserver <host> <password> [/path/to/c2.profile] [YYYY-MM-DD]

1.3 启动cs客户端

执行sh脚本启动

1
sudo ./start.sh

出现如下连接窗口:

连接窗口

输入teamserver启动时设置的相关参数即可连接,用户名可以随意设置,连接成功即可进入主界面。

2.功能介绍

2.1 基本界面

基本界面

2.2 Pivot图

示例图如下:

Pivot图

相关字段介绍:

  • 防火墙:Beacon Payload流量出口

  • 红色边框加闪电:Beacon运行在管理员权限

  • 绿色虚线:使用HTTP、HTTPS协议出网

  • 黄色虚线:使用DNS协议出网

  • 两个会话连接:表示呈现父子关系,子会话通过父会话传递和接受C2指令

  • 橙黄色箭头:两个会话使用Windows命令管道、SSH连接

  • 青色箭头:两个会话使用TCP Socket连接

  • 红色箭头:两个使用Windows命令管道、SSH连接的会话断开

  • 紫色箭头:两个使用TCP Socket连接的会话断开

2.3 监听器

监听器与Payload绑定,等待被控端回连。

2.3.1 HTTP & HTTPS Beacon

1
2
windows/beacon_http/reverse_http
windows/beacon_https/reverse_https

HTTP和HTTPS区别在于SSL证书配置,最基本的配置如下:

HTTP监听器

2.3.2 DNS Beacon

1
windows/beacon_dns/reverse_dns_txt

上线原理:将DNS解析服务器指定到C2服务器

域名配置中添加两条DNS解析记录,分别为A记录和NS记录,其中A记录指定C2服务器ip,NS子域名绑定A记录域名,示意图如下:

DNS记录

之后在cs的DNS Linstener中添加子域名,这样查询子域名便会上线C2。值得注意的是dns第一次上线不会立刻获取主机信息,需要执行命令或主动获取。

2.3.3 SMB Beacon

用于父子会话之间通信,SMB协议

1
windows/beacon_bind_pipe

SMB Beacon使用命名管道与一个父Beacon进行通信,在由这个父Beacon与C2服务端通信,相当于一个桥梁。因为Windows可以将命名管道通信封装在 SMB 协议中与远程主机进行通信,所以得名SMB Beacon。常用于派生会话或者横向移动。配置页面如下:

SMB Beacon

2.3.4 TCP Beacon

用于父子会话之间通信,TCP协议

1
windows/beacon_bind_tcp

与SMB Beacon类似,配置页面如下:

TCP Beacon

2.3.5 Foreign Listeners

用来将会话转到MSF服务器

1
2
3
windows/foreign/reverse_http
windows/foreign/reverse_https
在3.x中还有一种windows/foreign/reverse_tcp

配置页面如下:

Foreign Listeners

2.3.6 Pivot Listeners

需要在会话右键菜单中找到(Pivoting -> Listener),用于父子会话之间建立反向端口转发,与SMB、TCP监听器类似,不过当执行unlink命令时会直接退出无法像另外两个一样重连。

1
windows/beacon_reverse_tcp

页面配置如下:

Pivot Listeners

2.4 会话右键功能

  • Access:
    • Dump Hashs:获取用户hash
    • Elevate:反弹高权限会话
    • Golden Ticket:黄金票据用于在普通用户权限和krbtgt hash的情况下获取管理员权限
    • Make Token:制作令牌,访问Windows远程网络资源时有效
    • One-liner Run:目标机的本地开启一个web服务
    • Mimikatz:运行Mimikatz的logonpasswords命令
    • Spawn As:使用其他用户权限生成一个会话,需要用户名和密码以及一个监听器
  • Explore:
    • Browser Pivot:使用IE代理登录
    • Desktop (VNC) :远程桌面,需要插件支持
    • File Browser:文件管理
    • Net View:执行网络相关命令
    • Port Scan:主机发现,端口扫描
    • Process List:获取进程列表
    • Screenshot:屏幕截图
  • Pivoting:
    • SOCKS Server:开启socks4代理,不建议使用
    • Listener:监听一个目标主机端口并把流量转发到CS

2.5 会话命令

Beacon是异步有效负载,即命令不会立即执行,而是插入消息队列,在一定时机下依次执行,并将执行结果显示在Beacon控制台。

如果误输入可以使用clear清楚命令队列。默认情况下,Beacon每60秒检查一次命令队列,可以使用sleep命令修改间隔时间。常用命令如下:

2.5.1 信息收集

命令 参数 功能
drivers - 列出目标机上的盘符信息
logonpasswords - 执行mimikatz命令获取密码
hashdump - 转储用户密码哈希
dcsync [DOMAIN.FQDN] <[DOMAIN\user]> 提取域控中全部或特定用户的密码哈希
portscan [targets] [ports] [arplicmp Inone] [max connections] 端口扫描
reg query [x86/x64] [root/path] 查询注册表键
reg queryv [x86/x64] [root/path] [subkey] 查询注册表子键

2.5.2 远控功能

命令 参数 功能
clear - 清空命令队列
sleep [time] 设置命令调度时间,0表示开启交互模式
download [filepath] 下载目标机文件
upload [filepath] 上传文件到目标机
downloads - 列出正在下载的文件
cancel [filename] 取消全部正在下载的文件
argue [command] [fake arguments] | [command] 欺骗命令参数,假参数需要比真参数长
browserpivot [pid] [x86/x64] | [stop] 浏览器代理
checkin - 强制回连时发送主机信息
desktop [pid] [x86/x64] 将VNC服务注入到指定进程中运行
keylogger [pid] [x86/x64] 将键盘记录器注入到指定进程中运行
screenshot - 屏幕截图
ssh [target:port] [user] [pass] 使用ssh密码远程连接
ssh-key [target:port] [user] [/path/to/key.pem] 使用ssh密钥远程连接
setenv [arg] 设置环境变量
jobs 查看后渗透任务列表(有些功能会在其他进程中运行)
jobkill [jid] 结束一个Beacon后台任务
blockdlls [start] | [stop] 阻止子进程加载非微软签名DLL,需要目标为Win10以上
kill [pid] 结束指定进程
ppid [pid] 伪造指定进程作为父进程
pth [DOMAIN\user] [NTLM hash] hash传递攻击
exit - 结束Beacon进程

2.5.3 横向渗透

命令 参数 功能
connect [target] [port] 连接到一个TCP Beacon
elevate [exp] [listener] 提权并生成一个高权限会话
inject [pid] [x86/x64] [listener] 在指定进程中派生会话
jump [exp] [target] [listener] 横向渗透在目标上执行payload生成会话
link [pipe_name] 连接指定管道名字的SMB会话
unlink - 断开与子Beacon的连接
mode dns | dns6 | dns-txt 使用DNS A | DNS AAAA | DNS TXT作为数据通道(仅限DNS Beacon有效)
spawn [x86/x64] [listener] 默认使用rundll32.exe中派生会话
spawnto [x86/x64] [path] 设置spawn派生会话时使用的程序
spawnas [DOMAIN\user] [password] [listener] 以其他用户身份派生会话
spawnu [pid] [listener] 在指定进程中派生会话

2.5.4 代码执行

命令 参数 功能
dllload [pid] [dllpath] 使用LoadLibrary进行DLL注入,目标机上必须存在被注入的DLL
dllinject [pid] [dllpath] 反射式DLL注入,路径为本机
shinject [pid] [x86/x64] [shellcode_raw_path] shellcode注入
execute-assembly [.netpath] [arguments] 内存加载执行.NET程序
execute [program] [arguments] 执行程序无回显
run [program] [arguments] 执行程序有回显
runas [DOMAIN\user] [password] [command] [arguments] 以其他用户权限执行程序
runasadmin [exp] [command] [args] 提权后执行命令
runu [pid] [command] [arguments] 使用指定进程执行命令
shell [command] 使用cmd执行命令
inline-execute [/path/to/file.o] [args] 在Beacon会话中执行Beacon Object File (BOF)
mimikatz [<! | @>module::command] [args] 执行mimikatz命令,!强制提升到System权限运行,@强制当前令牌运行
powershell [cmd] 使用powershell.exe执行命令
psinject [pid] [arch] [commandLet] [arguments] 在指定进程中执行PowerShell命令
powershell-import [path] 导入powershell脚本
powerpick [commandlet] [arguments] 不使用powershell.exe程序来执行powershell命令
remote-exec [method] [target] [command] 在远程主机上执行命令

2.5.5 权限提升

命令 参数 功能
getprivs - 启用当前访问令牌所拥有的特权
getsystem - 尝试模拟一个SYSTEM账号的令牌获取System权限
getuid - 获取当前访问令牌
make_token [user] [pass] 创建令牌
rev2self - 恢复Beacon原始令牌
steal_token [pid] 从指定进程中窃取访问令牌

2.5.6 内网渗透

命令 参数 功能
rportfwd [bind port] [forward host] [forward port] 开启反向端口转发
流量经过路径Beacon —-> cs teamserver —–> target host
rportfwd stop [bind port] 停止指定端口转发
rportfwd_local [bind port] [forward host] [forward port] 开启反向端口转发
流量经过路径Beacon —-> cs client —–> target host
rportfwd_local stop [bind port] 停止指定端口转发
socks [stop] | [port] 在指定端口开启SOCK4代理,不建议使用

Cobalt Strike 基础
http://helloymf.github.io/2022/11/02/cobalt-strike-ji-chu-cao-zuo/
作者
JNZ
许可协议