DaviAlcanfor/leviathan
GitHub: DaviAlcanfor/leviathan
一个教育用途的 C2 框架,通过 Flask 服务器、C# implant 与 Donut shellcode 实现命令下发与执行的完整链路。
Stars: 0 | Forks: 0
# Leviathan
一个出于教育目的构建的命令与控制(C2)框架。使用 Python 编写的 Flask 服务器,使用 C# 编写的 agent,并通过 Donut 编译为位置无关的 shellcode,最后通过 C# 加载器进行投递。
```
[Operator]
|
| POST /pong (queue command)
v
[Flask Server] <-----> [MongoDB]
|
| GET /assets (shellcode)
v
[Loader.exe]
|
| VirtualAlloc + CreateThread
v
[Agent shellcode]
|
| POST /ping { info, output }
| <-----------{ cmd }
|
| CommandExecution
v
[Victim Host]
```
## 设置
```
make setup # create venv, install dependencies
make server # start C2 server (https://0.0.0.0:5000)
```
需要 Python 3.10+、.NET 8.0 SDK,以及本地运行的 MongoDB。
TLS 证书需放置在 `server/certs/cert.pem` 和 `server/certs/key.pem`。可以通过以下命令生成自签名证书:
```
openssl req -x509 -newkey rsa:2048 -nodes \
-keyout server/certs/key.pem -out server/certs/cert.pem -days 365 \
-subj "/CN=localhost"
```
## CLI
交互式操作员界面:
```
make cli
```
```
leviathan> agents # list connected agents
leviathan> cmd whoami # queue a command
leviathan> result # retrieve output
leviathan> exit
```
## 构建 pipeline
```
python build.py
```
编译 Agent (.NET) → 通过 Donut 生成 shellcode → 编译 Loader。输出:`server/agent.bin`。
## 架构
| 组件 | 语言 | 描述 |
|---|---|---|
| `server/` | Python / Flask | C2 服务器、操作员 CLI、MongoDB 持久化存储 |
| `implant/Agent/` | C# (.NET 8) | Agent:系统信息收集、命令执行、HTTP 轮询 |
| `implant/Loader/` | C# (.NET 9) | Loader:获取并在内存中执行 agent shellcode |
| `build.py` | Python | 编译 Agent → Donut → shellcode → 编译 Loader |
| `Makefile` | — | `setup`、`server`、`cli`、`clean` 目标 |
## 服务器 endpoint
| 方法 | 路由 | 描述 |
|---|---|---|
| `GET` | `/` | 健康检查 |
| `POST` | `/ping` | Agent 同步:发送信息及输出,接收下一条命令 |
| `POST` | `/pong` | 操作员为 agent 排队一条命令 |
| `GET` | `/assets` | 提供 agent shellcode |
Agent 身份在每次请求中通过 `X-Session-Id` header(受害者 UUID)传递。
## Agent 功能
- 系统信息收集:主机名、用户名、管理员状态、OS 版本、架构、内网 IP、公网 IP
- 通过 `cmd.exe` 执行命令,并保持工作目录状态
- 单一轮询循环:发送上一条命令的输出,接收下一条命令
- 支持带抖动的可配置轮询间隔
- 每次请求随机轮换 user-agent
## 配置
`.env` 变量:
| 变量 | 默认值 | 描述 |
|---|---|---|
| `SERVER_URL` | `https://127.0.0.1:5000` | C2 服务器的公网 URL |
| `MONGO_URI` | `mongodb://localhost:27017` | MongoDB 连接字符串 |
| `MONGO_DB_NAME` | `leviathan` | 数据库名称 |
Agent 端配置(`implant/Agent/Config.cs`):
| 字段 | 描述 |
|---|---|
| `ServerUrl` | C2 服务器 URL |
| `UserAgents` | 用于请求轮换的 user-agent 池 |
| `PollingInterval` | 两次 ping 之间的基础休眠时间(毫秒) |
| `JitterMax` | 添加到轮询间隔的最大随机抖动(毫秒) |
## 项目结构
```
Leviathan/
├── implant/
│ ├── Agent/
│ │ ├── Models/
│ │ │ ├── CheckinPayload.cs
│ │ │ └── ResultPayload.cs
│ │ ├── Modules/
│ │ │ ├── CommandExecution.cs
│ │ │ └── SystemInfo.cs
│ │ ├── Config.cs
│ │ └── Program.cs
│ ├── Loader/
│ │ ├── Config.cs
│ │ └── Program.cs
│ └── Leviathan.sln
├── server/
│ ├── certs/
│ ├── cli.py
│ ├── config.py
│ ├── db.py
│ ├── main.py
│ ├── requirements.txt
│ ├── routes.py
│ └── shellcode_generator.py
├── build.py
├── Makefile
├── .env
├── .gitignore
├── LICENSE
└── README.md
```
## 免责声明
本项目仅供教育目的及授权的安全研究使用。请勿在您不拥有或未获得明确书面测试许可的系统上部署。作者不对任何滥用行为负责。
标签:C2框架, DNS 反向解析, Flask, IP 地址批量处理, Python, Shellcode生成, 安全学习资源, 无后门, 无线安全, 网络信息收集, 逆向工具