Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
external_c2_framework — 用于 Cobalt Strike 的 External C2 规范的 Python API | Kitploit
工具/GitHubGitHub/truneski/external_c2_framework
渗透测试框架漏洞利用框架后渗透利用命令与控制红队Payload 开发
GitHubtruneski/external_c2_framework

external_c2_framework

用于 Cobalt Strike 的 External C2 规范的 Python API

查看仓库
631957年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

external_c2 框架

用于与 Cobalt Strike 的 External C2 规范配合使用的 Python 框架,该规范见规范。

主要设计目标是成为 external c2 规范的一种高度模块化实现,提供足够的抽象,以便轻松为 Cobalt Strike 实现 C2 信道。理想情况下,用户只需创建一个 transport 模块、一个 encoder 模块,并填写一个配置文件,即可实现新的信道。

Dropbox 传输配置

在开始运行之前,你需要完成几项配置更改。你需要:

  1. 如果你还没有 Dropbox 账户,请先创建一个(https://www.dropbox.com/)
  2. 为你的 Dropbox 账户生成一个访问令牌(https://www.iperiusbackup.net/en/create-dropbox-app-get-authentication-token/)
  3. 在 builds/client/dbox/dbox_client.py 中,将 token 改为第 2 步中生成的令牌。
  4. 在 builds/server/utils/transports/transport_dbox.py 中进行与第 3 步相同的更改。
  5. 通过 cd builds/client/dbox && ./compile_dll.sh 编译你的 DLL。
  • 启动你的 Cobalt Strike Team Server,并使用 Cobalt Strike 客户端连接。
  • 从你的 CS 客户端加载 start_externalc2.cna 脚本。
  • 将此仓库复制到你的 team server,然后通过 cd builds/server/ && ./dbox_server.py 启动服务器。
  • 将第 6 步中的可执行文件分发给主机并执行。你应该会看到来自 team server 的回连。
  • 视频演示链接:https://www.youtube.com/watch?v=nTRHSh_uCcA

    架构

    本项目由三个主要部分组成:

    • Builder(尚未实现)
    • 客户端
    • 服务器

    构建器

    构建器根据指定的配置动态构建客户端和服务端部署。理想情况下,客户端可以作为单个编译文件(如 dll 或 exe)分发。

    客户端

    客户端本质上是在端点上运行的 payload,规范中称之为 third-party client。客户端的逻辑主要是静态的:

    1. 执行使用 transport 所需的一切准备工作
    2. 接收 stager
    3. 注入 stager 并打开 beacon 的句柄
    4. 从 beacon 获取元数据
    5. 通过 transport 将 beacon 的元数据转发到 C2 服务器
    6. 监听 transport 中的新任务
    7. 将新任务转发给 beacon
    8. 通过 transport 转发 beacon 的响应
    9. 重复步骤 6-8。

    transport 与编码机制所需的配置会被静态复制到客户端中。传输和编码机制的函数逻辑也会从各自模块静态复制到客户端中。

    进程注入逻辑由构建器确定。

    服务器

    服务器是在 client 与 c2 server 之间转发通信的应用程序,规范中称之为 third-party Client Controller。服务器逻辑主要是静态的,但支持详细输出和调试输出,以辅助开发:

    1. 解析配置
    2. 导入指定的编码模块
    3. 导入指定的 transport 模块
    4. 与 c2 服务器建立连接
    5. 从 c2 服务器请求 stager
    6. 使用 encoder 模块对 stager 进行编码
    7. 使用 transport 模块传输 stager
    8. 等待通过 transport 接收来自客户端的元数据响应
    9. 使用 encoder 模块解码元数据
    10. 将元数据转发到 c2 服务器。
    11. 从 c2 服务器接收新任务。
    12. 对新任务进行编码
    13. 通过 transport 将新任务转发给客户端
    14. 等待通过 transport 接收来自客户端的响应
    15. 使用 encoder 模块解码响应
    16. 将响应转发到 c2 服务器。
    17. 重复步骤 11-16

    服务器导入哪个 encoder 和 transport 模块,取决于 config.py 中存储的值。

    不会导入未使用的 transport 或 encoder 模块。

    客户端与模块共享功能

    下表描述了 encoding 和 transport 模块与客户端之间的共享函数。共享函数本质上就是完全相同的代码。

    非常重要的说明: 发送到客户端的 sendData 和 recvData 函数的数据应为原始数据,而发送到 transport 模块的 sendData 和 retrieveData 函数的数据应已经按需进行编码或解码。

    Transport 模块

    Transport 函数客户端函数描述
    prepTransportprepTransport执行使用 transport 机制所需的任何预配置
    sendDatasendData定义数据如何通过 transport 机制发送
    retrieveDatarecvData定义数据如何通过 transport 机制接收

    编码器模块

    编码器函数客户端函数描述
    encodeencode定义对原始数据进行修改以准备传输
    decodedecode定义对从 transport 收到的原始数据进行修改,以便转发到其目的地

    如何使用

    首先,确定你要使用的 transport 和编码模块。在以下示例中,我们将使用 transport_gmail 和 encoder_b64url。

    接下来,根据你的需要修改 server/config.py,确保 ENCODER_MODULE 和 TRANSPORT_MODULE 已正确配置,并指向你想要的模块:

    config.py 示例

    root@kitploit:~
    EXTERNAL_C2_ADDR = "127.0.0.1"
    EXTERNAL_C2_PORT = "2222"
    C2_PIPE_NAME = "foobar"
    C2_BLOCK_TIME = 100
    C2_ARCH = "x86"
    IDLE_TIME = 5
    ENCODER_MODULE = "encoder_b64url"
    TRANSPORT_MODULE = "transport_gmail"
    verbose = False
    debug = False
    

    接下来,为你选择的 transport 和 encoder 模块修改配置部分。

    确保 client/mechanism/$mechanism_client.py 的配置部分与你目前定义的任何配置一致。

    在运行服务器的机器上,执行:

    python server.py

    如需更详细的输出,可以运行:

    python server.py -v

    如需更详细的输出以及有助于调试的额外输出,可以运行:

    python server.py -d

    接下来,在目标端点上执行客户端。

    如果一切正常,Cobalt Strike 控制台中将会注册一个新的 beacon,你可以与之交互。

    常见问题

    为什么写这个?: 针对该规范的已发布实现并不多,而已发布的实现要么使用的不是我所熟悉的语言,要么不具备我所寻求的模块化和抽象性。

    为什么用 Python 2?: 我很懒,而且用它实现新的 transport 和编码信道很容易。

    你的代码很烂: 这不是一个问题。

    我可以提交新的 transport 和/或 encoder 模块吗?: 当然可以!提交一个 pull request,我会很乐意审查。

    路线图

    • 类似的抽象和模块化也将在客户端组件中实现,以支持针对 beacon payload 的不同进程注入方法以及路线图上的其他功能。

    • 目前缺少 builder 功能;该功能计划用于动态构建客户端和服务端部署,但它已在路线图上。

    下载工具