maxDcb/C2TeamServer

GitHub: maxDcb/C2TeamServer

一款专为红队行动设计的模块化命令与控制框架,采用 C++ 服务端与 Python 客户端架构,支持跨平台植入和多协议通信。

Stars: 181 | Forks: 34

# **Exploration C2 框架 🚀**

Exploration C2 Logo

## **📋 概述** **Exploration** 是一个专为红队行动量身定制的模块化且可扩展的命令与控制 (C2) 框架。此代码仓库包含后端 **TeamServer**(使用 C++ 编写)和前端 **Client**(使用 Python 编写)。 最新发布的安装包包括: * C++ **TeamServer** * Python **Client** * 来自 [C2Implant](https://github.com/maxDcb/C2Implant) 的 Windows 模块和 beacon * 来自 [C2LinuxImplant](https://github.com/maxDcb/C2LinuxImplant) 的 Linux 模块和 beacon ## **👀 外观与体验**

## **🏗️ 架构** **TeamServer** 是一个独立的 C++ 应用程序,负责管理监听器和活动会话。 **Client** 使用 Python 编写,通过 gRPC 与 TeamServer 进行通信。 部署在目标机器上的 beacon 会向 TeamServer 发起回调,建立交互式会话。这些会话用于发送命令、接收输出以及控制 implant。 支持的通信通道包括:`TCP`、`SMB`、`HTTP` 和 `HTTPS`。 ### **🖥️ 架构图**

## 仓库布局 该代码仓库目前作为 monorepo 进行管理,其边界与未来拆分的目标保持一致: - `protocol/`:`.proto` 源文件的真实来源以及生成的 gRPC 构建规则 - `teamServer/`:服务器运行时和 gRPC 实现 - `C2Client/`:Python 客户端包和 UI - `core/`:被多个项目复用的源码共享 C++ 组件 - `packaging/`:发布包组装 - `integration/`:暂存区和未来的端到端测试 历史目录名称 `teamServer` 和 `C2Client` 依然保留,但根构建现在已将它们明确视为 `server` 和 `client` 区域。 ## **⚡ 快速开始** ### **🖥️ 运行 TeamServer** 发布存档中提供了 TeamServer 的预编译版本,其中包含用于 gRPC 和 HTTP 通信的默认 TLS 证书。 要下载最新版本,请使用以下命令,或访问[发布页面](https://github.com/maxDcb/C2TeamServer/releases): ``` wget -q $(wget -q -O - 'https://api.github.com/repos/maxDcb/C2TeamServer/releases/latest' | jq -r '.assets[] | select(.name=="Release.tar.gz").browser_download_url') -O ./C2TeamServer.tar.gz \ && mkdir C2TeamServer && tar xf C2TeamServer.tar.gz -C C2TeamServer --strip-components 1 ``` 要启动 TeamServer: ``` cd Release cd TeamServer ./TeamServer ``` ### **🐳 Docker 部署** 如果您倾向于容器化执行,代码仓库的 `Dockerfile` 现在可以直接运行打包好的 TeamServer 捆绑包: ``` docker build -t exploration-teamserver . docker run --rm -it \ --name exploration-teamserver \ -p 50051:50051 \ -p 80:80 \ -p 443:443 \ -p 8443:8443 \ exploration-teamserver ``` 该镜像在构建镜像期间会下载最新的 `Release.tar.gz`,并启动 `/opt/teamserver/Release/TeamServer/TeamServer`。 如果您想用本地的捆绑包覆盖已有的捆绑包,请将您自己的 `Release` 目录挂载到 `/opt/teamserver/Release` 上。 ### **💻 安装和运行 Client** 请从暂存的发布捆绑包或代码仓库源码安装 Python 客户端。 如果您使用的是暂存的发布捆绑包,请设置 TeamServer 证书的路径: ``` export C2_CERT_PATH=/path/to/Release/TeamServer/server.crt ``` 然后连接到 TeamServer: ``` c2client --ip 127.0.0.1 --port 50051 ``` ## **📝 构建现代 C2 — 博客系列** 探索关于开发现代命令与控制 (C2) 框架的深度实践指南。本系列涵盖了 **C2TeamServer** 项目的架构、设计决策和实现细节。 🔗 [在此阅读完整系列](https://maxdcb.github.io/BuildingAModernC2/) ### **📚 系列概述** * **第 0 部分 — 设置与基本使用**:学习如何设置并启动您的第一个 Linux beacon。 * **第 1 部分 — TeamServer 与架构**:探索构建系统、消息传递选择和监听器管理。 * **第 2 部分 — GUI 与操作员工作流**:深入了解图形用户界面的设计目标和功能。 * **第 3 部分 — Beacon 与监听器**:理解 implant 架构和通道实现。 * **第 4 部分 — 模块**:探索模块模板和实现策略。 添加的表情符号为标题和章节增添了一些乐趣和吸引力,在引导读者阅读文档的同时,也直观地突出了关键部分。 ## 🛠️ 构建 该代码仓库现在使用: - `Conan` 管理 C/C++ 依赖项 - `CMake` 进行配置 - `GNU Make` 或其他 CMake 生成器进行编译 - `pyproject.toml` 和 `requirements.txt` 管理 Python 依赖项 ### 🔧 从头构建 在 WSL/Linux 中验证过的命令: ``` git clone https://github.com/maxDcb/C2TeamServer.git cd C2TeamServer git submodule update --init --recursive python3 -m pip install --upgrade "conan==2.24.0" cmake -B build \ -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=$PWD/conan_provider.cmake \ -DCONAN_HOST_PROFILE=$PWD/conan/profiles/linux-gcc13 \ -DCONAN_BUILD_PROFILE=$PWD/conan/profiles/linux-gcc13 \ -DCONAN_LOCKFILE=$PWD/conan.lock cmake --build build -j"$(nproc)" ctest --test-dir build --output-on-failure ``` 注意: - 请使用 `conan_provider.cmake` 的绝对路径。以前的相对路径示例并不可靠。 - 该代码仓库现在在 `conan/profiles/linux-gcc13` 中提供了一个 Linux/GCC 13 的 Conan 配置文件,并提供了一个已签入的 `conan.lock`,用于冻结 CI 和文档化本地构建中所使用的已解析依赖图。 - 构建产物生成在构建树中,不会写回到代码仓库的根目录。 - 目前经过验证的构建从根构建运行了 `63` 个 CTest 测试,包括一个暂存运行时的集成测试。 - `libs/libDns/tests/fonctionalTest` 已构建但未在 CTest 中注册,因为它是一个手动 server/client 测试工具,需要显式的运行时参数。 ### 🧪 客户端测试 客户端依赖于由根 CMake 构建生成的 Python 协议包: ``` sudo apt-get install -y \ libegl1 \ libgl1 \ libxkbcommon-x11-0 \ libxcb-cursor0 \ libxcb-icccm4 \ libxcb-image0 \ libxcb-keysyms1 \ libxcb-render-util0 \ libxcb-xinerama0 cd C2Client python -m venv .venv . .venv/bin/activate pip install -e .[test] export C2_PROTOCOL_PYTHON_ROOT=$PWD/../build/generated/python_protocol pytest tests -vv -s ``` ### 📦 暂存发布捆绑包 要从构建输出中组装本地发布捆绑包: ``` cmake --build build --target validate_release_bundle ``` 捆绑包创建于: ``` build/release-staging/Release ``` 此暂存捆绑包包含: - `TeamServer` - `TeamServerModules` - 生成的 Python 客户端协议包 - Python 客户端源码和启动器 基础的 TeamServer 捆绑包在发布前会经过验证。验证过程会检查 TeamServer 二进制文件、运行时配置、证书、生成的客户端协议包以及完整的 `TeamServerModules` 布局。 ### Implant 发布布局 TeamServer 发布还嵌入了经过验证的发布资产,来自: - [C2Implant](https://github.com/maxDcb/C2Implant) - [C2LinuxImplant](https://github.com/maxDcb/C2LinuxImplant) 预期的暂存 TeamServer 发布布局如下: ``` Release/ TeamServer/ TeamServerModules/ Client/ WindowsBeacons/ WindowsModules/ LinuxBeacons/ LinuxModules/ ``` 导入的 Windows implant 存档必须公开: ``` Release/WindowsBeacons/ Release/WindowsModules/ ``` 导入的 Linux implant 存档必须公开: ``` Release/LinuxBeacons/ Release/LinuxModules/ ``` TeamServer CD 流水线有意不接受旧版的 `Release/Beacons` 和 `Release/Modules` 布局。如果某个 implant 代码仓库更改了其发布约定,请在同一更改中更新验证脚本和本节内容。 要在本地导入和验证 implant 资产: ``` python packaging/import_implant_releases.py \ --stage-root build/release-staging/Release \ --import-root build/release-imports python packaging/validate_release.py \ --release-root build/release-staging/Release \ --require-implants ``` 默认情况下,导入脚本使用每个 implant 代码仓库中最新的 GitHub release。为了避免这个变动目标,请传递显式的发布标签: ``` python packaging/import_implant_releases.py \ --stage-root build/release-staging/Release \ --import-root build/release-imports \ --windows-tag vX.Y.Z \ --linux-tag vX.Y.Z ``` 仅从经过验证的暂存目录创建最终存档: ``` tar -C build/release-staging -czf Release.tar.gz Release ``` ### 准备集成运行时 根构建为集成测试提供了一个专用的准备目标: ``` cmake --build build --target stage_integration_runtime ``` 这会在以下路径生成一个确定性的运行时: ``` build/integration-staging/runtime/Release ``` 该暂存运行时已被首个冒烟集成测试使用,涵盖了 TeamServer 启动、gRPC 身份验证以及稳定的空状态 RPC。它是下一轮围绕打包的 Python 客户端和更深层约定验证的端到端测试的基础。 ## CI/CD 约定 该代码仓库使用了两个 GitHub Actions 工作流: - `CI`(`.github/workflows/Tests.yml`)在 Pull Request 和分支推送时运行。 - `CD`(`.github/workflows/Release.yml`)在打标签和手动触发时运行。 CI 工作流: - 显式安装系统依赖项、Python、Conan 以及客户端测试依赖项,包括 `pytest-qt` 所需的 Qt 运行时库; - 使用基于已签入依赖文件生成键的 Conan 和 pip 缓存; - 配置一个启用了测试的 Release CMake 构建; - 构建 TeamServer 和模块; - 运行带有失败输出和超时设置的 CTest; - 运行带有详细输出和超时设置的 Python 客户端 pytest 测试套件; - 验证暂存的 TeamServer 发布捆绑包。 CD 工作流重复构建和测试关卡,将 implant 发布资产导入暂存区,验证完整的发布布局,从暂存区创建 `Release.tar.gz`,并且仅发布该经过验证的存档。 默认情况下,GitHub Actions 权限是只读的。仅在上传 GitHub release 资产的发布作业中授予 `contents: write` 权限。
标签:Bash脚本, Beacon, C2框架, C++ TeamServer, DAST, gRPC, HTTPS, IP 地址批量处理, Linux植入物, Python Client, Python工具, SMB, TCP, Windows植入物, 交互式会话, 内存取证对抗, 命令与控制, 安全学习资源, 安全工具开发, 安全攻防, 恶意软件分析, 网络信息收集, 网络安全, 请求拦截, 远程控制, 逆向工具, 错误配置检测, 隐私保护