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

SkillDescription
401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
agent-security|
ai-data-security|