wh0amitz/TailVNC

GitHub: wh0amitz/TailVNC

TailVNC 是一个将 WireGuard 与 VNC 融合于单二进制的 Tailscale 持久化远程桌面工具,解决在隔离网络中隐蔽接入 Windows Session 0 的问题。

Stars: 231 | Forks: 24

# TailVNC 一个基于 Tailscale 的 WireGuard 加密网状网络构建的 Windows 远程桌面持久化工具。TailVNC 将一个完整的自包含 VNC 服务器与 Tailscale 节点嵌入到单个二进制文件中,实现在 Tailscale/Headscale 上的安全远程桌面访问,而不对外暴露任何端口。适用于合法的基础设施管理和红队持久化操作。 灵感来源于 [SockTail](https://github.com/Yeeb1/SockTail)。 ## 功能特性 - **Tailscale/Headscale 集成** - 利用 `tsnet` 将 WireGuard 对等点直接嵌入二进制文件;支持官方的 Tailscale 协调以及自托管的 Headscale 控制平面 - **Windows Session 0 隔离绕过** - 以 SYSTEM 身份运行时,自动通过 `CreateProcessAsUser` 在活动用户会话中生成代理进程,并通过 IPC 转发 VNC 流量,绕过 Vista+ 的会话隔离 - **动态桌面跟踪** - 通过 `OpenInputDesktop`/`SetThreadDesktop` 跟随用户在默认桌面、Winlogon(登录屏幕)、UAC 安全桌面和锁定屏幕之间的桌面切换 - **Ctrl+Alt+Del 注入** - 通过 `sas.dll!SendSAS` 从 Session 0 发送安全注意序列 - **双向剪贴板同步** - VNC 客户端与目标主机之间的 Latin-1 剪贴板同步 - **编译时配置嵌入** - 认证密钥、VNC 密码、监听端口和控制 URL 通过 LDFLAGS 在编译时注入;生成的二进制文件在运行时无需配置文件 - **认证密钥混淆** - Tailscale 认证密钥在编译时进行 XOR 混淆,防止二进制文件中明文凭证泄露 ## 架构 ``` ┌──────────────────────────────────────────────┐ │ TailVNC Service (Session 0) │ │ │ │ tsnet.Server ───► Tailscale/Headscale Net │ │ │ │ │ VNC Listener :5900 (Tailscale interface) │ │ │ │ │ ┌────▼───────────────────────────────────┐ │ │ │ Session Manager │ │ │ │ - Polls active console session (2s) │ │ │ │ - Spawns agent via CreateProcessAsUser│ │ │ │ - Auto-restarts on session change │ │ │ │ or agent crash │ │ │ └────┬───────────────────────────────────┘ │ │ │ TCP Proxy (bidirectional) │ └───────┼──────────────────────────────────────┘ ▼ ┌────────────────────────────────────────┐ │ VNC Agent (User Session, Desktop) │ │ 127.0.0.1:15900 │ │ - GDI+ screen capture (~30fps) │ │ - SendInput keyboard/mouse injection │ │ - Clipboard monitoring │ └────────────────────────────────────────┘ ``` ## 技术栈 | 组件 | 技术 | |-----------|------------| | 语言 | Go 1.25+ | | 网络传输 | [Tailscale tsnet](https://pkg.go.dev/tailscale.com/tsnet) — 嵌入的 WireGuard 对等点 | | VNC 协议 | RFB 3.008(自定义实现,原始编码) | | 屏幕捕获 | Windows GDI+(`CreateDIBSection`、`BitBlt`) | | 输入注入 | Windows `SendInput` API | | 会话管理 | `WTSQueryUserToken` + `CreateProcessAsUser` | | 桌面切换 | `OpenInputDesktop` + `SetThreadDesktop` | | SAS 注入 | `sas.dll!SendSAS` | | 认证 | VNC DES 挑战-响应(符合 RFB 规范) | | 密钥混淆 | XOR + 十六进制编码 | | 系统调用 | `golang.org/x/sys`(Windows 系统调用封装) | | 二进制压缩 | UPX(可选) | | 构建系统 | GNU Make + Go LDFLAGS 注入 | ## 构建 ### 先决条件 - **Go** >= 1.25.3 - **GNU Make** - **UPX**(可选,用于减小二进制文件体积) - **Tailscale 认证密钥** — 从 Tailscale 管理控制台生成;建议对操作使用可重用和临时密钥 ### 构建参数 | 参数 | 是否必需 | 默认值 | 描述 | |-----------|----------|---------|-------------| | `AUTH_KEY` | 是 | — | Tailscale 认证密钥;编译时自动进行 XOR 混淆并嵌入 | | `LISTEN_PORT` | 否 | `5900` | Tailscale 接口上的 VNC 监听端口 | | `AUTH_PASS` | 否 | 空(无认证) | VNC 连接密码(DES 挑战-响应) | | `CONTROL_URL` | 否 | 空(官方 Tailscale) | Headscale 控制平面 URL | | `CONFIG_DIR` | 否 | `C:\Windows\Temp\.cache` | 持久的 tsnet 状态目录(WireGuard 密钥、节点身份) | ### 编译 ``` # 最小构建 — 仅需身份验证密钥 make build-vnc AUTH_KEY=tskey-auth-kBEXAMPLEKEY # 完整构建,包含所有参数 # [CONTROL_URL] — 可选,仅在使用自托管 Headscale 控制平面时需要 # [CONFIG_DIR] — 可选,覆盖默认 tsnet 状态目录(C:\Windows\Temp\.cache) make build-vnc \ AUTH_KEY=tskey-auth-kBEXAMPLEKEY \ LISTEN_PORT=5900 \ AUTH_PASS=VNCPassword \ [CONTROL_URL=https://headscale.example.com] \ [CONFIG_DIR='C:\Windows\Temp\.cache'] ``` 构建产物输出至 `dist/`: ``` dist/TailVNC-windows-amd64.exe ``` 构建流程执行以下步骤: 1. 清理之前的构建产物 2. 下载并整理 Go 模块依赖 3. 运行 `obfuscator/` 进行 XOR 混淆认证密钥 4. 通过 LDFLAGS(`-X`)将所有配置注入二进制文件 5. 剥离符号表和 DWARF 调试信息(`-s -w`) 6. 如果可用,使用 UPX(`--best --lzma`)压缩二进制文件 ### 附加 Make 目标 ``` make clean # Remove build artifacts make deps # Download and tidy Go modules make help # Print usage and parameter reference ``` ## 使用 **TailVNC 必须以 SYSTEM 权限运行。** 当在 Session 0 中执行(作为 Windows 服务或在 SYSTEM 上下文中)时,该工具会自动检测活动控制台会话,在其中生成用于屏幕捕获和输入注入的代理进程,并通过该代理转发所有 VNC 流量。如果直接在交互式用户会话中启动,则以本地模式运行,不使用代理层。 执行后,目标主机将加入配置的 Tailscale 网络并作为一个新节点出现。使用任意标准 VNC 客户端连接: ``` :5900 ``` ![image-20260412003923140](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e7201d2a7c012206.png) ![image-20260412004037568](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/4f3d6d5fe5012207.png)
标签:Auth Key 混淆, CreateProcessAsUser, Ctrl+Alt+Del注入, DNS 解析, EVTX分析, Headscale, IPC代理, Session 0 隔离绕过, SOCK5代理, T1015, T1036, T1055, T1059, T1078, Tailscale, tsnet, VNC, Windows服务, WireGuard, XOR 混淆, 免安装后门, 内网穿透, 剪贴板同步, 动态桌面跟踪, 单文件二进制, 基础设施管理, 安全桌面切换, 日志审计, 构建时配置嵌入, 系统权限提升, 远程桌面