Ayush-Pathania/C2-Framework-Learning-Project-

GitHub: Ayush-Pathania/C2-Framework-Learning-Project-

一个用于防御性安全研究的最小化 C2 框架概念验证项目,通过 Python 和 C 实现双向通信以帮助理解命令与控制机制。

Stars: 0 | Forks: 0

# C2 框架 — 概念验证 **状态:** = **语言:** Python 3, C | **平台:** Windows (agent), 跨平台 (teamserver) ## 目录 | 章节 | 描述 | |------------------------------|--------------------------------------| | [概述](#overview) | 本项目是什么以及它是如何工作的| | [架构](#architecture) | Teamserver 和 Agent 设计 | | [协议](#protocol) | 二进制消息格式和命令代码 | | [项目结构](#project-structure) | 文件和目录 | | [构建](#building) | 前置条件和构建步骤 | | [运行](#running) | 如何启动 teamserver 和 agent| | [测试](#testing) | 测试套件和结果 | | [文档](#documentation) | 规范、路线图和状态的链接| | [目的](#purpose) | 教育目标 | | [许可证](#license) | 使用条款 | ## 概述 一个包含两个组件的极简双向 C2 (Command and Control) 框架: | 组件 | 语言 | 平台 | 角色 | |---------------|------------|---------------------|---------------------------------------| | **Teamserver**| Python 3 | 跨平台 | TCP 监听器, 会话管理器, CLI | | **Agent** | C | Windows (Winsock2) | 连接到 teamserver,执行命令 | 通信使用自定义的基于长度前缀的二进制协议,通过原始 TCP socket 进行。该项目针对防御性安全研究——了解 C2 系统的运作方式以改进检测。 ## 架构 ### Teamserver - 监听可配置的 TCP 端口(默认为 `127.0.0.1:8888`) - 接受传入的 agent 连接,并为每个 agent 创建一个会话 - 存储会话元数据:主机名、进程 ID、socket 句柄 - 提供一个交互式 CLI,操作员可以在其中选择一个会话并发送命令 - 将所有事件和错误记录到 `teamserver.log` - 实现了一个监控线程,该线程使用 `MSG_PEEK` 来检测 agent 断开连接,而无需消耗 socket 缓冲区中的数据 ### Agent - 使用 MinGW/TCC 和 Winsock2 构建 - 接受服务器 IP 和端口作为命令行参数 - 建立到 teamserver 的 TCP 连接 - 发送包含系统主机名和进程 ID 的握手消息 - 进入接收循环,等待来自服务器的命令包 - 执行接收到的命令并将确认 (ACK) 发送回服务器 - 将所有活动和错误记录到 `agent.log` ### 通信流程 ``` Agent Teamserver | | | --- TCP Connect ------------> | | | Accept connection | | Create session | | | --- Handshake (Cmd 0x00) --> | | (hostname, PID) | Parse & store session | | | Operator types command in CLI | <-- Send Command (0x01) ---- | | | | Execute command locally | | | | --- Send ACK (Cmd 0x02) ---> | | (status: success) | Receive & display to operator | | | --- Disconnect ------------> | | | Monitor detects removal ``` ## 协议 所有消息均使用长度前缀的二进制格式: ``` +------------+----------+------------------+ | 4 bytes | 1 byte | N bytes | | length | cmd_type | payload | | (big-endian)| (code) | (variable-length)| +------------+----------+------------------+ ``` ### 命令类型 | 代码 | 名称 | 方向 | 载荷 | |--------|-----------|-----------------|--------------------------------------| | `0x00` | 握手 | Agent -> Server | 主机名 (字符串), PID (uint32) | | `0x01` | 命令 | Server -> Agent | 命令字符串 (可变长度) | | `0x02` | ACK | Agent -> Server | 状态字节 (`0x00` = 成功) | ### 消息封装 (C) ``` // Pack: [4-byte BE length] [1-byte cmd] [payload] unsigned char* pack_message( unsigned char cmd, unsigned char *data, int data_len, int *packet_len ); ``` ## 项目结构 ``` project_github/ ├── build.bat │ Windows build script (compiles agent.c -> agent.exe) ├── Makefile │ Makefile for Unix-like environments ├── teamserver.py │ Main teamserver -- TCP listener, session manager, CLI ├── agent.c │ Agent source code (Windows, Winsock2, C11) │ ├── core/ │ ├── mock_server.py │ │ Mock server for testing protocol logic │ └── simple_server.py │ Simplified server for quick testing │ ├── test/ │ ├── test_c2.py │ │ End-to-end C2 protocol tests │ ├── test_protocol.py │ │ Binary protocol pack/unpack tests │ ├── test_winsock.c │ │ Winsock2 minimal test program │ ├── winsock2_minimal.h │ │ Minimal Winsock2 header for Windows builds │ ├── test_bugs_1_3.py │ │ Tests for session cleanup and race condition fixes │ ├── test_bug7_ack_timeout.py │ │ Tests for monitor ACK timeout behavior │ └── test_bugs_4_5_6.c │ C-level test for protocol bugs 4-6 │ ├── documentation/ │ ├── README.md │ │ This file │ ├── C2_Project_Specification.md │ │ Full technical specification │ ├── ROADMAP.md │ │ 5-phase development roadmap │ └── PROJECT_STATUS.md │ Current implementation and test status │ ├── diagnostics/ │ ├── repro_stale_session.py │ │ Reproduces stale session bug │ └── run_error_tests.py │ Runs error scenario tests │ └── lib/ └── tcc/ ├── include/ │ Platform headers (Winsock2, Windows SDK) ├── lib/ │ Import libraries (kernel32, ws2_32, user32, etc.) ├── struct.c │ TCC source (builds tcc.exe) └── tcc.exe TCC compiler binary for Windows ``` ## 构建 ### 前置条件 - **Windows**(用于构建 agent) - `lib/tcc/` 中内置的 TCC 编译器(无需安装外部 MinGW) - **Python 3.x**(用于 teamserver 和测试) ### 构建 Agent ``` build.bat ``` 或者使用内置的 TCC 编译器手动构建: ``` lib\tcc\tcc.exe -o agent.exe agent.c -lws2_32 ``` ### 构建 Teamserver Teamserver 直接使用 Python 3 运行——无需编译。 ``` python teamserver.py ``` ## 运行 1. 启动 teamserver: python teamserver.py 2. 在 Windows 机器上运行 agent: agent.exe 127.0.0.1 8888 3. teamserver CLI 会显示已连接的 agent。选择一个会话并输入要发送的命令。 ## 测试 在项目根目录下运行完整的测试套件: ``` python -m pytest test/ -v ``` ### 测试结果 | 测试文件 | 测试数 | 状态 | |------------------------------|-------|--------------------| | `test_bug1_stale_sessions.py` | 2 | 通过 | | `test_bug2_cleanup.py` | 3 | 通过 | | `test_bug3_race.py` | 1 | 通过 | | `test_c2.py` | 1 | 失败 (需要 `agent.exe`) | | `test_bug7_ack_timeout.py` | 3 | 通过 | | `test_bugs_4_5_6.py` | 3 | 通过 | | `test_protocol.py` | 2 | 通过 | | **总计** | **12**| **10 通过, 2 失败** | 2 个失败的测试需要已编译的 `agent.exe` 二进制文件(通过 `build.bat` 构建)。其余 10 个测试验证了协议逻辑、会话管理、监控行为和错误修复,而无需编译的 agent 二进制文件。 ## 文档 | 文件 | 描述 | |------------------------------|--------------------------------------------------| | `PROJECT_STATUS.md` | 当前实现状态、测试结果 | | `C2_Project_Specification.md`| 完整协议规范、组件设计 | | `ROADMAP.md` | 5 阶段开发路线图 (PoC 到企业级) | 有关最新的实现和测试状态,请参阅 [PROJECT_STATUS.md](PROJECT_STATUS.md)。 ## 目的 本项目是作为一项教育研究练习创建的,旨在了解: - C2 框架如何建立和管理双向通信 - 用于命令和控制通道的自定义二进制协议设计 - 会话管理和已连接 agent 的跟踪 - 检测工程——了解 C2 系统会产生哪些网络和行为签名 本项目仅供防御性安全研究和学习使用。它不是为未经授权访问计算机系统而设计或意图用于此目的的。 ## 许可证 仅供教育使用。请勿用于未经授权的活动。
标签:C2框架, Gophish, Python, 二进制协议, 安全学习资源, 无后门, 概念验证, 网络安全, 隐私保护