| 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)
深入参考
整体决策树
发现 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 枚举
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 无认证访问检测
msf> use auxiliary/scanner/vnc/vnc_none_auth
msf> set RHOSTS <IP>
msf> run
2.2 连接 VNC
vncviewer <IP>::5901
vncviewer -passwd passwd.txt <IP>::5901
2.3 密码爆破
hydra -s 5900 -P passwords.txt -t 4 vnc://<IP>
medusa -h <IP> -u "" -P passwords.txt -M vnc -n 5900
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 解密方法
make
vncpwd <vnc password file>
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