Cobalt Strike----(9)
创始人
2025-05-31 21:20:36
0

SSH 客户端

        Cobalt Strike 使用内置的 SSH 客户端控制 UNIX 目标。该 SSH 客户端接收任务并通过一个父 Beacon路由其输出。           使用 ssh [target] [user] [password] 命令从一个 Beacon 中启动 SSH 会话。你也可以使用 ssh-key [target] [user] [/path/to/key.pem] 命令以使用密钥进行身份验证。 这些命令运行 Cobalt Strike 的 SSH 客户端。客户端会向父 Beacon 报告任何连接和身份验证问题。如果连接成功,你将在 Cobalt Strike 的显示中看到一个新会话。这是一个 SSH 会话。右键单击此会话, 然后按 Interact 来打开 SSH 控制台。 输入 help 以查看 SSH 会话支持的命令列表。输入 help 后 跟一个命令名称,以获取有关该命令的详细信息。

运行命令

        shell 命令将运行你提供的命令和参数。运行的命令在 Cobalt Strike 将命令置于后台之前可以锁定 SSH 会话长达 20 秒。Cobalt Strike 将在可用时报告这些长时间运行的命令的输出。 使用 sudo [password] [command + arguments] 尝试通过 sudo 运行命令。这个别名要求目标的sudo 接受 –S 标志。 cd 命令将更改 SSH 会话的当前工作目录。 pwd 命令报告当前的工作目录。

上传和下载文件

        upload 命令会将文件上传到当前工作目录。 download 命令将下载文件。通过 download 命令下载的文件可以通过 View → Downloads 查看。你也可以输入 downloads 来查看正在进行的文件下载。cancel 命令将取消正在进行的下载任务。

对等 C2

       SSH 会话可以控制 TCP Beacon。使用 connect 命令启动对一个等待连接的 TCP Beacon 的控制。使用 unlink 断开一个 TCP Beacon 会话的连接。 通过 [session] → Listeners → Pivot Listener… 来设置一个与此 SSH 会话绑定的 pivot 监听 器。这将允许这个失陷的 UNIX 目标可以接收反向 TCP Beacon 会话。此选项的前提是需要 SSH 守护程序的 GatewayPorts 选项的值被设定为 yes 或 ClientSpecified 。

SOCKS Pivoting 和反向端口转发

     使用 socks 命令在团队服务器上创建一个通过 SSH 会话转发流量的 SOCKS 服务器。 rportfwd 命令 还将创建一个反向端口转发,用于路由通过 SSH 会话和你的 Beacon 链的流量。      rportfwd 有一个警告: rportfwd 命令要求 SSH 守护程序绑定到所有接口(0.0.0.0)。SSH 守护程 序很可能会覆盖此设置,并强制端口绑定到 localhost。你需要将 SSH 守护程序的 GatewayPorts 选项更改为 yes 或 ClientSpecified

C2 拓展文件

      许多 Beacon 指标由一个 C2 拓展文件控制。一个 C2 拓展文件由设置和数据转换组成。数据转换是一 个简单的程序,它指定如何转换数据并将其存储在事务中。转换和存储数据的同一程序,向后解释,还 从事务中提取和恢复数据。 要使用自定义配置文件,你必须在启动 Cobalt Strike 团队服务器时在以下位置指定你的配置文件.每个 Cobalt Strike 实例只能加载一个配置文件。
./teamserver [external IP] [password] [/path/to/my.profile]

检查错误

      Cobalt Strike 的 Linux 软件包包含一个 c2lint 程序。 该程序将检查一个通信配置文件的语法,进行 一些额外的检查,甚至使用随机数据对你的配置文件进行单元测试。强烈建议你在将配置文件加载进 Cobalt Strike 之前先使用此工具检查你的配置文件。
./c2lint [/path/to/my.profile]

配置文件语言

创建配置文件的最佳方法是修改现有配置文件。在 Github 上有一些可用的配置文件示例: https://github.com/rsmudge/Malleable-C2-Profifiles 打开配置文件时,你会看到以下内容:
# this is a comment
set global_option "value";
protocol-transaction {set local_option "value";client {# customize client indicators}
server {# customize server indicators
}
}
注释以 # 开头,一直到行尾。 set 语句是给一个选项赋值的方法。配置文件使用 {花括号} 将语句和信息组合在一起。语句始终以分号结尾。 为了帮助理解,请看这里的配置文件片段:
http-get {set uri "/foobar";client {metadata {base64;prepend "user=";header "Cookie";
}
}
        此部分配置文件定义了 HTTP GET 事务的指标。第一个语句, set uri ,设定客户端和服务器在此事务期间将引用的 URI。这套语句发生在客户端和服务器代码块之外,因为它适用于它们两者。client (客户端)代码块为执行 HTTP GET 请求的客户端定义指标。在这里客户端指 Cobalt Strike 的 Beacon payload。 当 Cobalt Strike 的 Beacon 回连到团队服务器时,它会发送关于自身的元数据给 Cobalt Strike。在此 配置文件中,我们必须定义如何编码此元数据和如何使用我们的 HTTP GET 请求发送元数据。 metadata 关键字后跟一组语句,用于指定如何转换和将元数据嵌入我们的 HTTP GET 请求中。在metadata 关键字之后的一组语句称为一个数据转换。      数据转换中的第一条语句指出,我们将对元数据 base64 编码 [1]。第二条语句 prepend 接受我们编码的元数据,并将字符串 user= 附加到它前面 [2]。现在,我们转换后的元数据为 “user=“.base64(metadata) 。第三句话说我们会将转换后的元数据存储到名为 Cookie [3] 的客户端 HTTP 头中。这一部分配置文件就是这个意思。 Beacon 及其服务器都使用配置文件。上面我们已经从 Beacon 客户端的角度解析了配置文件。Beacon 服务器也会获取相同的信息并向后解释。假设我们的 Cobalt Strike 的 web 服务器收到了获取 URI /foobar 的 GET 请求。现在,它想从事务中提取元数据。 header 语句告诉服务器从哪里来恢复我们转换后的元数据 [1]。 HTTP服务器会为我们解析来自 HTTP 客户端的请求头。接下来,我们需要处理 prepend (前置)语 句。为了恢复被转换的数据,我们将前置解释为删除前 X 个字符 [2],其中 X 是我们添加的原始字符串 的长度。现在,只剩下最后一个语句 base64 需要解释。之前我们使用了 base64 编码函数来转换元数 据。所以现在,我们使用 base64 解码函数来恢复元数据 [3]。 一旦配置文件解释器完成了所有这些逆语句的操作,我们就会获取原始的元数据。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...