对于 Linux 操作系统来说,一般通过 VNC、Teamviewer 和 SSH 等工具来进行远程管理,SSH 是 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。
SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH 客户端适用于多种平台,几乎所有 UNIX 平台—包括 HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台都可运行 SSH。Kali Linux 渗透测试平台默认配置 SSH 服务。SSH 进行服务器远程管理,仅仅需要知道服务器的IP地址、端口、管理账号和密码,即可进行服务器的管理,网络安全遵循木桶原理,只要通过 SSH 撕开一个口子,对渗透人员来时这将是一个新的世界。
本文对目前流行的 SSH 密码暴力破解工具进行实战研究、分析和总结,对渗透攻击测试和安全防御具有一定的参考价值。
一、SSH密码暴力破解应用场景和思路
1. 应用场景
(1)通过 Structs 等远程命令执行获取了 root 权限。
(2)通过 webshell 提权获取了 root 权限
(3)通过本地文件包含漏洞,可以读取 linux 本地所有文件。
(4)获取了网络入口权限,可以对内网计算机进行访问。
(5)外网开启了 SSH 端口(默认或者修改了端口),可以进行SSH访问。
在前面的这些场景中,可以获取 shadow 文件,对其进行暴力破解,以获取这些账号的密码,但在另外的一些场景中,无任何漏洞可用,这个时候就需要对 SSH 账号进行暴力破解。
2. 思路
(1)对 root 账号进行暴力破解
(2)使用中国姓名 top1000 作为用户名进行暴力破解
(3)使用 top 10000 password 字典进行密码破解
(4)利用掌握信息进行社工信息整理并生成字典暴力破解
(5)信息的综合利用以及循环利用
二、使用 hydra 暴力破解 SSH 密码
hydra 是世界顶级密码暴力密码破解工具,支持几乎所有协议的在线密码破解,功能强大,其密码能否被破解关键取决于破解字典是否足够强大。在网络安全渗透过程中是一款必备的测试工具,配合社工库进行社会工程学攻击,有时会获得意想不到的效果。
1. 简介
hydra 是著名黑客组织thc的一款开源的暴力密码破解工具,可以在线破解多种密码,目前已经被Backtrack和kali等渗透平台收录,除了命令行下的hydra外,还提供了hydragtk版本(有图形界面的hydra),官网网站:http://www.thc.org/thc-hydra ,目前最新版本为7.6下载地址:http://www.thc.org/releases/hydra-7.6.tar.gz ,它可支持AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP, uHTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-PROXY, HTTPS-FORM-GET,HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener, Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin, Rsh, SAP/R3, SIP, SMB, SMTP, SMTP Enum, SNMP, SOCKS5, SSH (v1 and v2), Subversion, Teamspeak (TS2), Telnet, VMware-Auth, VNC and XMPP 等类型密码。
2. 安装
(1)Debian 和 Ubuntu 安装
如果是 Debian 和 Ubuntu 发行版,源里自带 hydra,直接用 apt-get 在线安装:
1 |
|
Redhat/Fedora 发行版的下载源码包编译安装,先安装相关依赖包:
1 |
|
(2)centos 安装
1 2 3 4 5 |
|
3. 使用 hydra
BT5 和 kali 都默认安装了 hydra,在 kali 中单击“kali Linux”-“Password Attacks”-“Online Attacks”-“hydra”即可打开 hydra。在 centos 终端中输入命令 /usr/local/bin/hydra 即可打开该暴力破解工具,除此之外还可以通过 hydra-wizard.sh 命令进行向导式设置进行密码破解,如图1所示。
图1:使用 hydra-wizard.sh 进行密码破解
如果不安装 libssh,运行 hydra 破解账号时会出现错误,如图 2 所示,显示错误提示信息:[ERROR] Compiled without LIBSSH v0.4.x support, module is not available! 在 centos 下依次运行以下命令即可解决:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
图2:出现 libssh 模块缺少错误
4. hydra 参数详细说明
1 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
5. 破解 SSH 账号
破解 SSH 账号有两种方式,一种是指定账号破解,一种是指定用户列表破解。详细命令如下:
(1)hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip ssh
例如输入命令“hydra -l root -P pwd2.dic -t 1 -vV -e ns 192.168.44.139 ssh”对IP地址为“192.168.44.139”的 root 账号密码进行破解,如图3所示,破解成功后显示其详细信息。
“hydra -l root -P pwd2.dic -t 1 -vV -e ns -o save.log 192.168.44.139 ssh ”将扫描结果保存在 save.log 文件中,打开该文件可以看到成功破解的结果,如图4所示。
图3:破解 SSH 账号
图4:查看破解日志
三、使用 Medusa 暴力破解 SSH 密码
1. Medusa 简介
Medusa(美杜莎)是一个速度快,支持大规模并行,模块化,爆破登录。可以同时对多个主机,用户或密码执行强力测试。Medusa 和 hydra 一样,同样属于在线密码破解工具。不同的是,medusa 的稳定性相较于 hydra 要好很多,但其支持模块要比 hydra 少一些。 Medusa 是支持AFP, CVS, FTP, HTTP, IMAP, MS-SQL, MySQL, NCP (NetWare),NNTP, PcAnywhere, POP3, PostgreSQL, rexec, RDP、rlogin, rsh, SMBNT, SMTP
(AUTH/VRFY), SNMP, SSHv2, SVN, Telnet, VmAuthd, VNC、Generic Wrapper以及Web表单的密码爆破工具,官方网站:http://foofus.net/goons/jmk/medusa/medusa.html 。目前最新版本2.2,美中不足的是软件从2015年后未进行更新,kali默认自带该软件,软件下载地址:
https://github.com/jmk-foofus/medusa
https://github.com/jmk-foofus/medusa/archive/2.2.tar.gz
2. 安装 medusa
(1)git 克隆安装
1 |
|
(2)手动编译和安装 medusa
1 2 3 |
|
安装完成后,会将 medusa 的一些 modules 文件复制到 /usr/local/lib/medusa/modules 文件夹。
3. Medusa 参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
4. 破解单一服务器 SSH 密码
(1)通过文件来指定 host 和 user,host.txt 为目标主机名称或者 IP 地址,user.txt 指定需要暴力破解的用户名,密码指定为 password
1 |
|
(2)对单一服务器进行密码字典暴力破解
如图5所示,破解成功后会显示 success 字样,具体命令如下:
1 |
|
图5:破解 SSH 口令成功
如果使用Cltrl+Z结束了破解过程,则还可以根据屏幕提示,在后面继续恢复破解,在上例中恢复破解,只需要在命令末尾增加“-Z h1u1.”即可。也即其命令为:
1 |
|
5. 破解某个 IP 地址主机破解成功后立刻停止,并测试空密码以及与用户名一样的密码
1 |
|
执行效果如图 6 所示,通过命令查看字典文件 newpass.txt,可以看到root密码位于第8行,而在破解结果中显示第一行就破解成功了,说明先执行了“-e ns”参数命令,对空密码和使用用户名作为密码来进行破解。
图6:使用空密码和用户名作为密码进行破解
技巧:加-O ssh.log 可以将成功破解的记录记录到 ssh.log 文件中。
四、使用 patator 暴力破解 SSH 密码
1. 下载并安装 patator
1 2 3 |
|
2. 使用参数
执行 ./patator.py 即可获取详细的帮助信息
1 2 |
|
可用模块:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
3. 实战破解
(1)查看详细帮助信息
执行“./patator.py ssh_login –help“命令后即可获取其参数的详细使用信息,如图7所示,在 ssh 暴力破解模块 ssh_login 中需要设置 host,port,user,password 等参数。
图7:查看帮助信息
(2)执行单一用户密码破解
对主机 192.168.157.131,用户 root,密码文件为 /root/newpass.txt 进行破解,如图8 所示,破解成功后会显示 SSH 登录标识“SSH-2.0-OpenSSH_7.5p1 Debian-10“,破解不成功会显示” Authentication failed. “提示信息,其破解时间为2秒,速度很快!
1 |
|
图8:破解单一用户密码
(3)破解多个用户。用户文件为/root/user.txt,密码文件为/root/newpass.txt,破解效果如图 9 所示。
1 |
|
图9:使用 patator 破解多用户的密码
五、使用 BrutesPray 暴力破解 SSH 密码
BruteSpray 是一款基于 nmap 扫描输出的 gnmap/XML 文件,自动调用 Medusa 对服务进行爆破(Medusa美杜莎是一款端×××破工具,在前面的文章中对其进行了介绍),声称速度比hydra快,其官方项目地址:https://github.com/x90skysn3k/brutespray 。BruteSpray 调用 medusa,其说明中声称支持 ssh、ftp、telnet、vnc、mssql、mysql、postgresql、rsh、imap、nntp、pcanywhere、pop3、rexec、rlogin、smbnt、smtp、svn 和 vmauthd 协议账号暴力破解。
1. 安装及下载
(1)普通下载地址
https://codeload.github.com/x90skysn3k/brutespray/zip/master
(2)kali下安装
BruteSpray 默认没有集成到 kali Linux 中,需要手动安装,有的需要先在kali中执行更新,apt-get update 后才能执行安装命令:
1 |
|
kali Linux 默认安装其用户和密码字典文件位置:/usr/share/brutespray/wordlist。
(3)手动安装
1 2 3 |
|
注意如果在其它环境安装需要安装 medusa,否则会执行报错。
2. BrutesPray 使用参数
用法:brutespray.py [-h] -f FILE [-o OUTPUT] [-s SERVICE] [-t THREADS] [-T HOSTS] [-U USERLIST] [-P PASSLIST] [-u USERNAME] [-p PASSWORD] [-c] [-i]
用法:python brutespray.py <选项>
选项参数:
1 |
|
菜单选项:
1 2 3 4 5 6 7 8 9 10 11 |
|
3. 使用 nmap 进行端口扫描
(1)扫描整个内网C段
1 |
|
(2)扫描开放22端口的主机
1 |
|
(3)扫描存活主机
1 |
|
(4)扫描应用程序以及版本号
1 |
|
4. 暴力破解 SSH 密码
(1)交互模式破解
1 |
|
执行后,程序会自动识别 nmap 扫描结果中的服务,根据提示选择需要破解的服务,线程数、同时暴力破解的主机数,指定用户和密码文件,如图10 所示。Brutespray 破解成功后在屏幕上会显示“SUCCESS”信息。
图10:交互模式破解密码
(2)通过指定字典文件爆破 SSH
1 |
|
注意:brutespray 新版本的 wordlist 地址为/usr/share/brutespray/wordlist,其下包含了多个协议的用户名和密码,可以到该目录完善这些用户文件和密码文件。22.xml 为 nmap 扫描 22 端口生成的文件。
(3)暴力破解指定的服务
1 |
|
(4)指定用户名和密码进行暴力破解
当在内网已经获取了一个密码后,可以用来验证 nmap 扫描中的开放 22 端口的服务器,如图11所示,对 192.168.17.144 和 192.168.17.147 进行 root 密码暴力破解,192.168.17.144 密码成功破解。
1 2 |
|
图11:对已知口令进行密码破解
(5)破解成功后继续暴力破解
1 |
|
前面的命令是默认破解成功一个帐号后,就不再继续暴力破解了,此命令是对所有账号进行暴力破解,其时间稍长。
(6)使用 Nmap 扫描生成的 nmap.xml 进行暴力破解
1 |
|
5. 查看破解结果
Brutespray 这一点做的非常好,默认会在程序目录 /brutespray-output/ 目录下生成 ssh-success.txt 文件,使用 cat ssh-success.txt 命令即可查看破解成功的结果,如图12所示。
图12:查看破解成功的记录文件
也可以通过命令搜索ssh-success 文件的具体位置:find / -name ssh-success.txt
6. 登录破解服务器
使用 ssh user@host 命令登录 host 服务器。例如登录 192.168.17.144:
1 |
|
输入密码即可正常登录服务器 192.168.17.144。
六、Msf 下利用 ssh_login 模块进行暴力破解
1. msf 下有关 SSH 相关模块
在 kali 中执行“msfconsole”-“search ssh”后会获取相关所有ssh模块,如图13所示。
图13:msf 下所有 SSH 漏洞以及相关利用模块
2. SSH 相关功能模块分析
(1)SSH 用户枚举
此模块使用基于时间的攻击枚举用户 OpenSSH 服务器。在一些 OpenSSH 的一些版本
配置,OpenSSH 会返回一个“没有权限”无效用户的错误比有效用户快。使用命令如下:
1 2 3 4 |
|
使用 info 命令可以查看该模块的所有信息,执行效果如图14 所示,实测该功能有一些限制,仅仅对 OpenSSH 某些版本效果比较好。
图14:openssh 用户枚举
(2)SSH 版本扫描
查看远程主机的 SSH 服务器版本信息,命令如下:
1 2 3 |
|
执行效果如图15 所示,分别对 centos 服务器地址 192.168.157.147 和 kali linux 地址 192.168.157.144 进行扫描,可以看出一个是 SSH-2.0-OpenSSH_5.8p1 Debian-1ubuntu3,另外一个是 SSH-2.0-OpenSSH_7.5p1 Debian-10,看到第一个版本,第一时间就可以想到如果拿到权限可以安装 ssh 后门。
图15:扫描 ssh 版本信息
(3)SSH 暴力破解
ssh 暴力破解模块“auxiliary/scanner/ssh/ssh_login”可以对单机进行单用户,单密码进行扫描破解,也可以使用密码字典和用户字典进行破解,按照提示进行设置即可。下面使用用户名字典以及密码字典进行暴力破解:
1 2 3 4 5 |
|
如图16 所示,对 IP 地址 192.168.17.147 进行暴力破解,成功获取 root 账号密码,网上有人写文章说可以直接获取 shell,实际测试并否如此,通过 sessions -l 可以看到 msf 确实建立会话,但切换(sessions -i 1)到会话一直没有反应。
图16:使用 msf 暴力破解 ssh 密码
七、ssh 后门
1. 软连接后门
1 |
|
经典后门使用 ssh root@x.x.x.x -p 33223 直接对 sshd 建立软连接,之后用任意密码登录即可。
但这隐蔽性很弱,一般的 rookit hunter 这类的防护脚本可扫描到。
2. SSH Server wrapper 后门
(1)复制 sshd 到 bin 目录
1 2 |
|
(2)编辑 sshd
1 2 3 4 |
|
(4)修改权限
1 |
|
(5)使用 socat
1 |
|
如果没有安装 socat 需要进行安装并编译
1 2 3 4 5 6 |
|
(6)使用 ssh root@ target_ip 即可免密码登录
3. ssh 公钥免密
将本地计算机生成公私钥,将公钥文件复制到需要连接的服务器上的 ~/.ssh/authorized_keys 文件,并设置相应的权限,即可免密码登录服务器。
1 2 |
|
八、ssh 暴力破解命令总结及分析
1. 所有工具的比较
通过对 hydra、medusa、patator、brutepray 以及 msf 下的 ssh 暴力破解测试,总结如下:
(1)每款软件都能成功对 ssh 账号以及密码进行破解。
(2)patator 和 brutepray 是通过 python 语言编写,但 brutepray 需要 medusa 配合支持。
(3)hydra 和 medusa 是基于 C 语言编写的,需要进行编译。
(4)brutepray 基于 nmap 扫描结果来进行暴力破解,在对内网扫描后进行暴力破解效果好。
(5)patator 基于 python,速度快,兼容性好,可以在 windows 或者 linux 下稍作配置即可使用。
(6)如果具备 kali 条件或者 PentestBox 下,使用 msf 进行 ssh 暴力破解也不错。
(7)brutepray 会自动生成破解成功日志文件 /brutespray-output/ssh-success.txt;hydra 加参数“-o save.log”记录破解成功到日志文件save.log,medusa加“-O ssh.log”参数可以将成功破解的记录记录到ssh.log文件中;patator可以加参数“-x ignore:mesg='Authentication failed.'”来忽略破解失败的尝试,而仅仅显示成功的破解。
2. 命令总结
(1)hydra 破解 ssh 密码
1 2 |
|
(2)medusa 破解 ssh 密码
1 2 |
|
(3)patator 破解 ssh 密码
1 2 |
|
如果不是本地安装,则使用 patator 执行即可。
(4)brutespray 暴力破解 ssh 密码
1 2 |
|
(5)msf 暴力破解 ssh 密码
1 2 3 4 5 |
|
九、SSH暴力破解安全防范
1. 修改/etc/ssh/sshd_config默认端口为其它端口。例如设置端口为2232,则port=2232
2. 在/etc/hosts.allow中设置允许的IP访问,例如sshd:192.168.17.144:allow
(1)安装cd DenyHosts
1 2 3 |
|
默认是安装到/usr/share/denyhosts目录的。
(2)配置cd DenyHosts
1 2 3 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
(3)设置启动脚本
1 2 3 4 5 |
|
如果要使DenyHosts每次重起后自动启动还需做如下设置:
1 2 3 4 |
|
可以看看/etc/hosts.deny内是否有禁止的IP,有的话说明已经成功了。
本文转自 simeon2005 51CTO博客,原文链接:http://blog.51cto.com/simeon/2066269