SuperAPI AI Directory

vnc-pentesting

Security & auditing

View repository

Updated 10-16 04:43

About this skill

VNC Penetration Testing Methodology (5800/5900/5901)

In-Depth Reference


Overall Decision Tree

发现 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: Service Discovery

1.1 Nmap Enumeration

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

1.2 Relationship Between Ports and Display Numbers

Port Purpose Description
5800 HTTP (display :0) Java Web Client
5801 HTTP (display :1) Java Web Client
5900 VNC (display :0) Standard VNC Port
5901 VNC (display :1) Second Display

Phase 2: Authentication Testing

2.1 Unauthenticated Access Detection

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

2.2 Connecting to VNC

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

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

2.3 Password Brute-Forcing

# 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 Authentication Testing Decision Tree

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

Phase 3: Password File Decryption

VNC passwords use 3DES fixed key encryption, which was reversed years ago. As long as the encrypted password file is obtained, it can be decrypted.

3.1 Password File Locations

Platform Path
Linux (generic) ~/.vnc/passwd
TightVNC (Windows) HKCU\Software\TightVNC\Server (Password value)
RealVNC (Windows) HKLM\SOFTWARE\RealVNC\vncserver (Password value)
UltraVNC (Windows) C:\Program Files\UltraVNC\ultravnc.ini

3.2 Decryption Methods

# 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 Password File Acquisition Paths

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

Phase 4: Known Vulnerabilities

4.1 Vulnerability Detection Decision Tree

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: Post-Exploitation

5.1 Exploiting an Already Connected VNC

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

Shodan Search

port:5900 RFB