0xAquila/c2-framework
GitHub: 0xAquila/c2-framework
一个面向红队教育的命令与控制框架,在可读的代码库中实现了工业级加密通信、诱饵伪装与完整操作员仪表板。
Stars: 0 | Forks: 0
# C2//OPS 框架
一个为作品集展示和红队教育而构建的命令与控制框架。在一个清晰且易于理解的代码库中,实现了真实的对手基础设施技术——信标通信、C2 配置文件、加密通信、ECDH 前向保密以及操作员工具。




## 仪表板

## 
## 安全架构
这不是一个基础的“通过 HTTP 发送命令”演示。每一层都经过了加固:
| 层 | 实现 |
|---|---|
| **传输层** | TLS 1.3 — 自签名证书,CN: `nexacloud.io` |
| **有效载荷** | AES-256-CBC — 每条消息随机生成 IV,base64 编码传输 |
| **密钥交换** | ECDH (SECP256R1) — 通过 HKDF-SHA256 派生的按会话密钥。截获某个 Agent 的流量不会危及任何其他会话。 |
| **身份验证 — Agent** | ECDH 后发放的按 Agent 会话令牌。注销一个令牌仅会使该 Agent 失效。 |
| **身份验证 — 操作员** | X-Operator-Key 网关请求头 + 基于会话的登录。`/login` 在没有该请求头的情况下会返回 404 —— 与任何缺失的页面无异。 |
| **错误页面** | 所有错误(404/403/405/500)均渲染为 Nginx 风格的模板。每个响应的 `Server` 头都被伪装为 `nginx/1.24.0`。 |
| **证书锁定** | SHA-256 指纹嵌入在生成的 Agent 中。MITM 代理出示不同的证书 —— Agent 会静默退出。 |
| **静态数据库** | 敏感的 SQLite 字段(主机名、IP、用户名、命令、结果)在列级别使用 AES-256-CBC 进行加密。 |
| **Agent 标识** | 随机 UUID 持久化到隐藏文件中 —— 而非使用 MAC 地址。 |
| **机密信息** | 无硬编码的备用值。如果缺少任何机密信息,服务器将拒绝启动。 |
| **速率限制** | 信标端点有速率限制。触发限制将返回 404 —— 与令牌错误的情形一致,无法被指纹识别。 |
## C2 Profile — 伪装诱饵
服务器会主动进行伪装。每种类型的访问者都会得到不同的响应:
| 访问者 | 拥有 | 看到的内容 |
|---|---|---|
| Agent | `X-Beacon-Token` 请求头 | 信标端点(加密) |
| 操作员 | `X-Operator-Key` 请求头 + 凭证 | 重定向到 `/login` → 仪表板 |
| 分析师 / 扫描器 | 无 | NexaCloud 诱饵站点 |
| 任何不带请求头访问 `/login` 的人 | 无 | `404 Not Found`(nginx 错误页面) |

## 功能特性
**操作员仪表板**
- 实时网络地图 —— Agent 显示为节点,识别操作系统,点击查看详细面板
- 标记有 MITRE ATT&CK 的命令结果
- 截图画廊 —— 通过信标通道传输的截图
- 事件日志 —— 每次注册、任务和结果的完整审计跟踪
- Agent 备注 —— 操作员对每个受感染主机的注释
- 载荷生成器 —— 预配置的 Python Agent
- 投放器生成器 —— PowerShell, Python, Bash, VBScript, VBA 宏投递载体
**Agent 能力**
```
shell
arbitrary shell command
sysinfo hostname, IP, OS, username, arch
screenshot full screen capture → gallery
clipboard read clipboard (Windows/Linux)
netstat active connections
arp ARP table (network discovery)
privs privilege level + admin check
ps running processes
env environment variables
download file exfiltration (base64)
upload file write to victim
sleep change beacon interval live
keylogger start/dump/stop
persist add/remove HKCU Run key (Windows, survives reboot)
kill terminate agent
```
## 快速开始
### 前置条件
- Python 3.10+
- pip
- [Burp Suite 社区版](https://portswigger.net/burp/communitydownload)(用于操作员访问)
### 1. 安装依赖
```
pip install -r requirements.txt
```
### 2. 生成机密信息
```
cd server
python setup_secrets.py
```
这将创建 `server/.env` 文件,其中包含所有机密信息的加密随机值。操作员密码只会打印一次 —— 请妥善保存。
### 3. 生成 TLS 证书
```
python gen_cert.py
```
创建 `cert.pem`、`key.pem` 和 `cert_fingerprint.txt`(用于 Agent 证书锁定)。
### 4. 启动服务器
```
python app.py
```
服务器在 `https://0.0.0.0:5000` 上启动。
### 5. 配置 Burp Suite 以进行操作员访问
`/login` 是一个隐藏的端点 —— 对于任何没有携带正确 `X-Operator-Key` 请求头的请求,它都会返回 `404 Not Found`。登录界面对扫描器、分析师和没有网关请求头的浏览器是不可见的。即使知道 URL,没有密钥也无济于事。
在每个请求中自动注入请求头的最简单方法是:
1. 打开 Burp Suite → **Proxy** → **Options** → **Match and Replace** → **Add**
2. Type: `Request header`
3. Match: *(留空)*
4. Replace: `X-Operator-Key: <你的 .env 中的 OPERATOR_KEY>`
5. 将浏览器设置为使用 Burp 的代理(`127.0.0.1:8080`)

6. 访问 `https://127.0.0.1:5000` —— 服务器检测到请求头并重定向到 `/login`
7. 接受自签名证书警告,然后使用 `.env` 中的 `OPERATOR_USER` / `OPERATOR_PASS` 登录

### 6. 部署 Agent
**选项 A — 手动(开发/测试)**
编辑 `agent/config.py`:
```
C2_SERVER = "https://:5000"
API_KEY = ""
ENCRYPTION_KEY = ""
CERT_FINGERPRINT = ""
```
然后运行:
```
python agent/agent.py
```
**选项 B — 生成器(推荐)**
1. 在仪表板中,转到 **Generator** 选项卡
2. 输入服务器地址,调整信标间隔
3. 点击 **Generate Agent** → 下载文件
4. 生成的 Agent 已预先填充所有配置,包括证书指纹
## 系统架构

## 效果图
| 截图 | 事件日志 |
|---|---|
|  |  |

## 加密机制

**无加密(HTTP)** —— Wireshark 可以读取所有内容:

**使用 TLS + AES** —— 零可读内容:

## 项目结构
```
c2-framework/
├── server/
│ ├── app.py Flask factory — config, blueprints, TLS
│ ├── crypto.py AES-256-CBC + ECDH + HKDF
│ ├── database.py SQLAlchemy models with EncryptedText columns
│ ├── extensions.py Flask-Limiter instance
│ ├── gen_cert.py TLS cert generator + fingerprint output
│ ├── setup_secrets.py One-time secret generation → .env
│ ├── mitre.py MITRE ATT&CK command → technique mapping
│ ├── routes/
│ │ ├── agent.py Beacon endpoints (ECDH, rate-limited)
│ │ ├── operator.py Operator API
│ │ ├── auth.py Gateway + session auth
│ │ ├── gallery.py Screenshot gallery
│ │ ├── generator.py Agent + dropper generator
│ │ ├── eventlog.py Event log
│ │ └── map.py Network map
│ └── templates/ Jinja2 HTML templates
├── agent/
│ ├── agent.py Hardened agent — ECDH, cert pinning, all commands
│ └── config.py Per-deployment configuration
├── diagrams/ Architecture and flow diagrams
├── screenshots/ Dashboard and feature screenshots
├── requirements.txt
├── HOW_IT_WORKS.md Technical deep-dive
├── BUILD_PROCESS.md Build narrative and design decisions
└── README.md
```
## 文档
- **[HOW_IT_WORKS.md](HOW_IT_WORKS.md)** —— 各组件的详细技术说明,附带架构图和 Wireshark 抓包分析
- **[BUILD_PROCESS.md](BUILD_PROCESS.md)** —— 真实的构建记录,涵盖架构决策、挑战以及安全加固过程
## 技术栈
`Python 3.10+` · `Flask` · `SQLAlchemy` · `SQLite` · `cryptography` · `Flask-Limiter` · `Pillow` · `TLS 1.3` · `AES-256-CBC` · `ECDH SECP256R1` · `HKDF-SHA256`标签:AES-256加密, DNS 反向解析, ECDH前向保密, Flask, HTTP(S)信标, HTTP工具, Malleable C2, Python, TLS 1.3, XML 请求, 后端开发, 命令与控制框架, 安全开发, 安全演示项目, 无后门, 流量加密, 私有化部署, 端口转发与代理, 红队基础设施, 红队教育, 网络安全, 证书锁定, 防御规避, 隐私保护