CobaltStrike逆向学习系列(1):CS 登陆通信流程分析
字数 2440 2025-08-07 08:22:09
CobaltStrike逆向学习系列(1): CS 登陆通信流程分析
0x00 概述
本文详细分析CobaltStrike(CS)中Controller与TeamServer之间的登录通信流程。CS系统可分为三个主要组件:
- Controller: 操作者使用的客户端
- TeamServer: 命令控制服务器
- Beacon: 植入目标系统的代理程序
0x01 密码校验流程
TeamServer端准备
- TeamServer启动后创建
SecureServerSocket对象 - 循环调用
acceptAndAuthenticate方法等待Controller连接 - 验证成功后调用
clientAuthenticated方法,创建线程执行ManageUser处理Controller通信
Controller端连接
- 点击Connect按钮触发
dialogAction方法 - 创建
SecureSocket对象并调用authenticate方法 - TeamServer在
SecureServerSocket.this.authenticate方法中阻塞等待(var4.readInt())
认证数据包构造
Controller构造认证数据包:
- 写入标志位
48879(int) - 写入密码长度(byte)
- 写入密码
- 用
65填充剩余空间- 密码长度+填充长度≤256
- 总长度=256+5=261字节
验证过程
- TeamServer验证标志位
- 读取密码和填充字符
- 密码正确则写回标志位
51966 - Controller验证返回的标志位
0x02 aggressor.authenticate流程
TeamServer端
- 创建Socket和
ManageUser处理Controller请求 ManageUser循环等待Controller请求
Controller端
- 创建
TeamQueue处理与TeamServer通信 TeamQueue构造函数创建两个线程:TeamReader: 读取TeamServer数据TeamWriter: 向TeamServer发送数据
- 调用
call发送aggressor.authenticate请求,包含:- 用户名
- 密码
- 版本号
addRequest将构造的Request对象存入LinkedListTeamWriter线程从LinkedList取数据发送
请求处理
- TeamServer的
ManageUser接收请求 - 进入
process方法处理请求 - 验证版本和密码
- 验证成功返回
SUCCESS - 启动
BroadcastWriter线程
响应处理
- Controller的
TeamReader接收响应(Reply对象) - 通过
callback值调用对应类的result方法 - 验证返回值为
SUCCESS后发送aggressor.metadata
0x03 aggressor.metadata流程
- Controller发送
aggressor.metadata请求,附带时间戳 - TeamServer的
ManageUser处理请求:- 创建多个Map
- 返回信息给Controller
- Controller处理响应:
- 进入
AggressorClient的setup方法 - 初始化界面相关内容
- 发送
aggressor.ready表示完成
- 进入
- TeamServer准备数据同步
0x04 数据同步流程
TeamServer端
register方法:- 将用户与对应
manageUser存入Map - 调用
playback处理同步
- 将用户与对应
playback方法:- 计算
this.transcripts和this.replayme总大小 - 开始发送数据
- 计算
send方法:- 通过用户名获取对应
ManageUser - 打包数据为
Reply或Request发送
- 通过用户名获取对应
Controller端
TeamReader接收消息- 当
callback为0时:- 调用
DataManager的result方法 - 检查
sent与total是否相等 - 遍历调用对应
result方法
- 调用
- 处理
Data类型消息:- 非
ChangeLog类型存入Map
- 非
后续同步
- TeamServer遍历
this.transcripts和this.replayme - 发送流程:
- 先发送
playback.status - 发送Key-Value数据
- 递增
sent计数器
- 先发送
- 同步用户信息给Controller
- 调用
broadcast同步eventlog
0x05 常态化通信
- Controller定期发送
aggressor.ping - TeamServer的
BroadcastWriter回传Beacon信息
0x06 流程图
[此处应插入通信流程图,包含以下关键节点:
- 密码校验
- aggressor.authenticate
- aggressor.metadata
- 数据同步
- 常态化通信]
关键点总结
- 认证协议:使用固定标志位(48879/51966)和填充机制(65)
- 通信模型:
- Controller使用双线程模型(TeamReader/TeamWriter)
- TeamServer使用ManageUser处理请求
- 数据同步:通过playback机制同步历史数据
- 状态维护:使用sent/total计数器确保同步完整性
- 错误处理:严格的版本和密码校验机制
参考实现建议
- 实现CS协议分析工具时,可重点关注:
- 认证数据包构造
- aggressor.* 系列命令
- playback同步机制
- 协议逆向关键点:
- SecureSocket/SecureServerSocket类
- ManageUser.process方法
- TeamQueue的通信模型