CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

这是[信安成长计划]的第 7 篇文章
关注微信公众号[信安成长计划]
CobaltStrike逆向学习系列(7):Controller 任务发布流程分析
0x00 目录

0x01 Controller->TeamServer

0x02 TeamServer->Beacon

0x03 流程图

所有的任务在 Controller 处理以后,都会直接发送到 TeamServer,接着等待 Beacon 回连的时候将任务取走,文章以 shell whoami 为例

0x01 Controller->TeamServer

当在 Console 中输入命令回车后,会进入 BeaconConsole 进行处理

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

专门来处理 shell 命令,命令解析 popString 所返回的就是要执行的命令 whoami

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

接着会在 TaskBeacon 中处理执行逻辑,因为只有一个 Beacon 就直接跟入了

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

然后就是构造任务了,将信息处理后用于 Beacon 去解析执行

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

之后会先打印执行日志,然后才是真正的传递了

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

日志记录也是一样通过 TeamQueue 传给 TeamServer

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

TeamServer 在 ManageUser 中接到日志

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

在处理以后直接添加广播将信息发送出去

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

然后通过 BroadcastWriter 写回给 Controller

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

接着 Controller 将任务发送给 TeamServer

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

TeamServer 在接到以后同样走对应的处理逻辑

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

从两个参数中取出 BeaconId 和任务,然后进入 BeaconData 处理逻辑

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

这里的有用代码也就是 else 中的 add 了,上面的判断是 CS 的一个暗桩,运行三十分钟后再执行命令就会直接发布退出任务

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

在将任务添加到 List 以后,也会将 BeaconId 记录下来

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

到这里任务的发布就完成了

0x02 TeamServer->Beacon

在 Beacon 回心跳包的时候,会来请求任务

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

直接从任务队列中取出数据

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

然后循环添加,并将添加过的移除,如果任务大于指定大小的话就会跳出循环

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

最后将任务队列返回

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

之后再相应的将其他的内容取出

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

最后构造并返回,这里会进行打印日志的操作,输出发送了的命令的长度

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

在返回之后会对数据进行加密

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

首先会根据 BeaconId 取出对应的 AESKey 和 HmacSHA256Key

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

之后写入系统时间/1000,任务长度,任务数据,并对其进行补齐,添加 A,补够 16 的整数倍

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

然后进行 AES 加密

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

接着对数据进行 Hmac

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

之后将 AES 加密后的任务写入,并将 Hmac 的前 16 位拼接到后面

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

之后便返回给 Beacon 了

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

0x03 流程图

CobaltStrike逆向学习系列(7):Controller 任务发布流程分析

上一篇:新年拍照好伙伴,vivo S12 Pro前后都精彩


下一篇:flutter 基础 —— CustomPaint 路径动画