
CVE-2018-15473 - Opensshenum is an user enumerator exploiting an OpenSsh bug
Opensshenum 是一个 OpenSSH 用户枚举工具,允许针对 OpenSSH 服务器验证任意用户名列表,从而获知远程机器上实际存在的用户。该程序利用了一个漏洞(2018年7月修复),该漏洞至少从 OpenSSH 2.3.0(2000年11月发布)起就已被证实有效。
我基于 Tssh(一个我从零开始根据 RFC 用 C++11 编写的 SSH 2 客户端)编写了这个利用程序。
更多信息请阅读:
http://seclists.org/oss-sec/2018/q3/124
该问题被分配了 CVE-2018-15473。
此代码仅用于信息提供和教育目的。未经所有者授权入侵系统或服务是违法的。滥用本仓库中的信息和软件可能导致对犯罪者提起刑事诉讼。任何与本 Git 仓库内容相关的行为或活动均由您自行负责。作者不承担任何因个人滥用本网站信息或软件违反法律而导致的刑事诉讼责任。
该程序旨在 *nix 环境中使用,并在多种 Linux 发行版和 OS X 上测试通过:
使用的编译器为以下之一:
SSH 服务器为以下之一:
唯一的外部依赖是 OpenSSL 库,用于加密功能。我可能在后续版本中引入 OpenSSL 的替代方案。本程序要求 OpenSSL 版本不低于:
(这意味着在 OS X 上必须升级)。
编译程序需要以下工具/库:
通过管道传递用户列表进行处理,示例:
cat user.txt | ./opensshenum -i dummy_cert target_addr
xxx:NOK
gabriel:OK
其中 user.txt 是包含用户名列表的文件,每行一个用户名;dummy_cert 是使用 OpenSSH 的 ssh-keygen 命令生成的密钥(默认密钥目录为 ~/.ssh)。
也可以直接生成列表:
printf "xxx\ngabriel" | ./src/opensshenum -i dummy_rsa localhost
xxx:NOK
gabriel:OK
详情请参阅本版本附带的手册页。
新增 SSH 端口扫描功能:现在 opensshenum 可以扫描与地址相关的所有端口,以发现监听在非 22 端口上的 SSH 实例,并仅对已验证的端口执行利用。该功能可独立使用,仅获取与 SSH 相关的端口列表,而不执行任何攻击。
示例:
opensshenum -s -n -t2 -m22221 -M22225 -r'.*OpenSSH' -idummy_rsa my_imaginary_website.com
将扫描端口(-s)范围 22221 至 22225(包含两端),仅执行扫描(-n),超时时间 2 秒(-t),期望问候字符串包含 OpenSSH(-r),使用名为 idummy_rsa 的公钥(建议为此类操作专门生成密钥),目标为 my_imaginary_website.com。更多信息请参阅手册页。
包含一个使用 GNU Parallel 的 alpha 版脚本(parallenum.sh),作为概念验证,通过将待扫描端口范围划分为子范围(每个子范围由特定进程负责),可减少扫描时间。这显然会产生大量噪音。可通过 -t 参数降低噪音。
新增指纹识别功能,可用于自动识别操作系统类型(例如,当省略“问候”字符串时)以及基于用户名/用户组合数据库的服务。数据库由收集在目录中的 *.lst 文件创建。每个 *.lst 文件的名称为 <os_name_or_service>.lst,例如:
ubuntu_17_10.lst aix.lst proprietary_ftp.lst
数据库(csv 文件)格式为:
user_1;os_or_service_1; ... ;os_or_service_n ... user_m;os_or_service_1; ... ;os_or_service_n
可使用 ./utils 目录中的 createdb 工具从 *.lst 文件创建数据库,需指定 *.lst 文件目录,例如:
cd utils make ./createdb ../lists/
要启用指纹识别功能,请使用 -F 选项并指定数据库文件,例如:
cat test/scan.sample | opensshenum -p22 -idummy_rsa -Futils/opensshenum.db localhost