vnc-pentesting
$
npx mdskill add wgpsec/AboutSecurity/vnc-pentestingPenetrate 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
```