这是[信安成长计划]的第 10 篇文章

关注微信公众号[信安成长计划]

0x00 目录

0x01 基本校验与解析

0x02 初始化

0x03 启动 Listeners

在之前的分析中,都是针对 CobaltStrike 整体通信流程的,也就忽略了中间的一些细节,其中一些细节对理解整个 CobaltStrike 也是非常重要的

0x01 基本校验与解析

先取了默认端口

接着对 Java 环境及一些参数进行了验证,并校验了 license

这里重点看一下对于参数的检测,可以看到有校验两个参数是否存在,当你在跑 Controller 的时候,最好也一样将其参数加上,不然有可能会出现一些莫名其妙的问题

对于 IP 等内容的判断就不重点关注了,看一下他在解析 C2Profile 时候的对比,如果有指定的话,会走下面那个流程,直接将地址传入 LoadProfile

而在默认情况下,则调用了 LoadDefaultProfile,但它实际还是调用了 LoadProfile,然后直接加载了 resources 中的默认文件

之后就到了最关键的初始化环境的地方

0x02 初始化

先在 C2Profile 中增加了两项内容,license 认证中的水印与当前的路径,具体作用暂时也不清楚

接着初始化 Resources 对象,并传入了 this.calls,它是一个 HashMap,对于后续所有的调用都至关重要

在初始化 Resources 的时候,对两个内容进行了初始化,它们内部都创建了新线程,根据名字也可以明显的看出,ServerBus 是 TeamServer 所有运行内容的通道,所有的调用都是从这里走的,Archiver 属于日志类型的操作了,在调试的时候,时不时出现的 archiver 类型的数据包也就是从这里出来的

在 ServerBus 中,除了将 calls 传入之外,就直接 new 线程了

整个的逻辑也很明确,与 TeamQueue 等文件的处理方式是类似的,在接收到信息以后,从 calls 中获取到对应的类型,然后调用对应的 call 来完成后续的流程处理

再来看一下 Archiver 的相关处理,除了后面会 broadcast 信息之外,刚开始的 PersistentData 还是比较重要的

在中间直接创建了新线程

处理逻辑跟前面也差不多,判断是否有数据,如果有处理

大致也就猜出来是将数据存储到文件中

回到主流程中,接着将 C2Profile、IP、密码等信息也存储到 this.resources 中

然后往 this.calls 中存入了几个测试数据

对于这种 Test 的操作,在 CS 中也有很多,还有一个专门用来负责处理断言操作的类

然后往 this.calls 中存入了数据

这些实际上才是最关键的内容,根据上面 ServerHook 可以看到,在执行的时候,会根据这个类型来决定调用哪个类中的 call,也就决定了最终的处理流程

接下来的一众操作都是这个样子,为后续处理做了相当充足的工作

而且中间也能够看到很多东西了,发布任务时候的 beacons.task,启动监听的 listeners.go 都是在这里设置的,所以也就是说在 Controller 与 TeamServer 通信时,所传输的 beacons.task 等,最终都是在 ServerHook 中根据之前存储好的类型来最终决定处理流程的

经过这一波操作,this.calls 已经增加到了 64 个,接着又进行了一堆操作,增加了对数据的处理

所遍历的就是下面这些内容

然后通过如下的方式来进行了批量的添加,this.calls 最终达到了 106 个

接下来就是之前分析的与 Controller 进行通信的部分了

0x03 启动 Listeners

为了验证前面所提到的流程,这里用启动监听来作为说明

跟入后可以发现,它在 ServerBus 中增加了一项

所以就直接在 ServerBus 的处理线程中截取到

取出类型是 Listeners,就直接调用到了 Listeners 中的 call 方法,但是很明显它什么也没干,又用刚才的逻辑调用到了 beacons.start

一样通过刚才的逻辑进入相应的处理

在其中它根据 Listener 初始化了相对应的监听

这里用的是 HTTP

接着初始化了 RSA 公私钥

如果文件存在的话,就不会再生成了,所以还是自己做一份为妙

然后也将这些信息存储到了 BeaconC2 当中

接着就根据刚才初始化到信息启动相应的监听

然后将监听类与 Payload 存储到一个 HashMap 当中

就完成了监听的启动

接着又用同样的逻辑调用了 listeners.set_status,然后将信息存储到 Listeners 的 Map 当中

然后又调用了broadcast,通过 BroadcastWriter 将信息回传到 Controller

这样也就完成了所有的操作

CobaltStrike逆向学习系列(10):TeamServer 启动流程分析的更多相关文章

  1. CobaltStrike逆向学习系列(6):Beacon sleep_mask 分析

    这是[信安成长计划]的第 6 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 C2Profile 分析 0x02 set userwx "true" 0x03 s ...

  2. CobaltStrike逆向学习系列(1):CS 登陆通信流程分析

    这是[信安成长计划]的第 1 篇文章 关注微信公众号[信安成长计划][SecSource] 0x00 目录 0x01 密码校验 0x02 aggressor.authenticate 0x03 agg ...

  3. CobaltStrike逆向学习系列(5):Bypass BeaconEye

    这是[信安成长计划]的第 5 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 BeaconEye 检测原理 0x02 Bypass 1 0x03 Bypass 2 0x04 效果图 ...

  4. CobaltStrike逆向学习系列(12):RDI 任务发布流程分析

    这是[信安成长计划]的第 12 篇文章 0x00 目录 0x01 任务构建 0x02 结果处理 0x03 功能 DLL 分析 之前的分析都是针对整个 CS 的框架来进行的,但是功能也是整个 C2 中相 ...

  5. CobaltStrike逆向学习系列(8):Beacon 结果回传流程分析

    这是[信安成长计划]的第 8 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Beacon 接收与处理 0x02 结果回传 Beacon 在接受完命令并执行后,会将数据加密回传给 T ...

  6. CobaltStrike逆向学习系列(2):Stageless Beacon 生成流程分析

    这是[信安成长计划]的第 2 篇文章 关注微信公众号 [信安成长计划] 0x00 目录 0x01 Patch Beacon 0x02 Patch Loader 0x03 文件对比 0x04 流程图 C ...

  7. CobaltStrike逆向学习系列(13):RDI 任务执行流程分析

    这是[信安成长计划]的第 13 篇文章 0x00 目录 0x01 任务号 0x02 功能执行 0x03 结果接收 在上一篇文章中已经讲明了 RDI 类型的任务在发布时候的流程,接下来就是执行了,文中不 ...

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

    这是[信安成长计划]的第 7 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Controller->TeamServer 0x02 TeamServer->Beacon ...

  9. CobaltStrike逆向学习系列(11):自实现 Beacon 检测工具

    这是[信安成长计划]的第 11 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 检测原理 0x02 检测方案 0x03 存在的问题 0x04 解决方案 0x05 示例代码 0x06 ...

随机推荐

  1. springboot应用中使用CommandLineRunner

    在springboot应用中,存在这样的使用场景,在springboot ioc容器创建好之后根据业务需求先执行一些操作,springboot提供了两个接口可以实现该功能: CommandLineRu ...

  2. 《剑指offer》面试题31. 栈的压入、弹出序列

    问题描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2 ...

  3. 【vps】Centos 7安装python3.8.5

    [vps]Centos 7安装python3.8.5 前言 由于服务器的搬迁,从香港搬到了大陆,原来的香港服务器即将到期,所以趁着大陆服务器在备案的时候,将新服务器的配置先配置一下.这篇文章就是分享C ...

  4. STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  5. 《手把手教你》系列技巧篇(六十)-java+ selenium自动化测试 - 截图三剑客 -中篇(详细教程)

    1.简介 前面我们介绍了Selenium中TakeScreenshot类来截图,得到的图片是浏览器窗口内的截图.有时候,只截浏览器窗口内的图是不够的,而且TakeScreenshot截图只针对浏览器的 ...

  6. vue学习8-for循环

    <!DOCTYPE html> <html lang='en'> <head>  <meta charset='UTF-8'>  <meta ht ...

  7. 「DP 浅析」斜率优化

    #0.0 屑在前面 将结合经典例题 「HNOI2008」玩具装箱 以及 「NOI2007」货币兑换 进行讲解. #1.0 简述 #1.1 适用情况 斜率优化一般适用于状态转移方程如下的 DP \[f_ ...

  8. condition_variable中的和wait_once和notify_one及notify_all实例代码

    // ConsoleApplication6.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include<thread> #in ...

  9. 返回值String表示视图

    第一种:处理器方法返回String--表示逻辑视图名称(需配置视图解析器) 视图解析器: MyController类中: index.jsp中: 第二种:处理器方法方慧String,表示完整视图路径, ...

  10. Qt中编译器

    很多时候,Qt构建项目编译的过程中会报错,大部分报错是因为qt的设置出现问题,很多时候环境配置时要选择合适的编译器,debugger调试器等,这里对一些名词解释,内容对新手很友好,大佬就不用看啦. M ...