破解工具:hydra、Medusa、patator、BrutesPray等
一、使用nmap掃描指定服務器ssh端口
[root@localhost ~]# wget https://nmap.org/dist/nmap-7.70.tar.bz2
[root@localhost ~]# tar -xvf nmap-7.70.tar.bz2
[root@localhost ~]# cd nmap-7.70
[root@localhost ~]# ./configure
[root@localhost ~]# make
[root@localhost ~]# make install
安裝完成。
使用方法:
[root@localhost ~]# nmap 192.168.1.67
Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-04 14:18 CST
Warning: File ./nmap-services exists, but Nmap is using /usr/local/bin/../share/nmap/nmap-services for security and consistency reasons. set NMAPDIR=. to give priority to files in your local directory (may affect the other data files too).
Nmap scan report for 192.168.1.67
Host is up (0.050s latency).
Not shown: 980 closed ports
PORT STATE SERVICE
22/tcp open ssh
二、使用和安裝medusa
[root@localhost ~]# yum -y install medusa
Medusa參數
Medusa [-hhost|-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
[root@localhost ~]# ./medusa -M ssh -H host.txt -U users.txt -p password
(1)對單一服務器進行密碼字典暴力破解
如圖5所示,破解成功後會顯示success字樣,具體命令如下:
[root@localhost ~]# medusa -M ssh -h 192.168.1.67 -n 22 -u root -Pnewpass.txt
防止暴力破解
1、密碼足夠複雜:
2、修改默認端口號
3、不使用root用戶名登錄
方法1:
1、密碼足夠複雜:
密碼的長度要大於8位最好大於14位。密碼的複雜度是密碼要儘可能有數字、大小寫字母和特殊符號混合組成。
方法2:修改默認端口號 sshd 默認端口號: 22
[root@localhost ~]# vim /etc/ssh/sshd_config
改Port 22
爲:Port 81或者5位數
[root@localhost ~]# systemctl restart sshd
注:我們改成81,這裏81給人的感覺像是web端口
掃描:
[root@localhost ~]# nmap 192.168.1.67
Starting Nmap 5.21 ( http://nmap.org ) at 2015-05-22 21:13 CST
Nmap scan report for xuegod63.cn (192.168.1.67)
Host is up (0.000019s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
81/tcp open hosts2-ns
111/tcp open rpcbind
#看到端口是81,
測試ssh遠程登錄:
[root@localhost ~]# ssh [email protected]
ssh: connect to host 192.168.1.67 port 22: Connection refused
注: 發現默認的方法已經連接不上
正確的方法:
[root@localhost ~]# ssh [email protected] -p 81
注:改端口號的目的是爲了,避免批量掃描
方法3:不使用root用戶名登錄,這樣猜不到你的用戶名。也就無從暴力破解
不使用用戶名爲root的帳號登錄系統,但是要獲得root超級管理員權限。 怎麼辦?注:判斷一個用戶是不是超級管理員,看的是用戶的ID是否爲0。
例:創建一個普通帳號,然後變成超級管理權限
[root@localhost ~]# useradd hjj #創建hjj用戶
[root@localhost ~]# echo 123456 | passwd --stdin hjj #hjj 密碼是123456
Changing password for user hjj .
passwd: all authentication tokens updated successfully.
[root@localhost ~]# vim /etc/passwd
改:root:x:0:0:root:/root:/bin/bash
爲:root:x:0:0:root:/sbin/nologin #不讓root登錄系統
改:hjj:x:1000:1000::/home/hjj :/bin/bash
爲:hjj:x:0:0::/home/hjj :/bin/bash #改ID500爲0,hjj就成root身份
測試:
[root@localhost ~]# ssh [email protected] -p 81 #root登錄不成功
[email protected]'s password: 123456
Last login: Sun May 10 09:43:55 2015 from xuegod63.cn
This account is currently not available.
Connection to 192.168.1.63 closed.
[root@localhost ~]# ssh hjj @192.168.1.67 -p 81 #hjj用戶可以登錄
[email protected]'s password: 123456
[root@localhost ~]# whoami #查看當前登錄系統的用戶名
root
[root@localhost ~]# id hjj
uid=0(root) gid=0(root) groups=0(root)
設置條件:ssh遠程登錄5分鐘內3次密碼驗證失敗,禁止用戶IP訪問主機1小時,1小時該限制自動解除,此IP可以重新登錄。
1、下載fail2ban
官方地址:http://www.fail2ban.org
[root@localhost ~]# tar -zxvf fail2ban-0.8.14.tar.gz
[root@localhost fail2ban-0.8.14]# cd fail2ban-0.8.14
[root@localhost fail2ban-0.8.14]# vim README.md #查看以下內容
需要安裝python開發環境,並且版本要大於2.4
[root@localhost fail2ban-0.8.14]# python -V
Python 2.7.2.
安裝:
[root@localhost ~]# cd fail2ban-0.8.14
[root@localhost fail2ban-0.8.14]#python setup.py install
[root@localhost fail2ban-0.8.14]# cp files/redhat-initd /etc/init.d/fail2ban
應用實例
設置條件:ssh遠程登錄5分鐘內3次密碼驗證失敗,禁止用戶IP訪問主機1小時,1小時該限制自動解除,此IP可以重新登錄。
[root@localhost ~]# vim /etc/fail2ban/jail.conf #改以下紅色標記內容
96行 enabled = true
97行 filter = sshd
98行 action = iptables[name=SSH, port=ssh, protocol=tcp]
99行 sendmail-whois[name=SSH, [email protected], sender=fail2ba
100行 logpath = /var/log/secure
101行
findtime = 300
maxretry = 3
bantime = 3600
註釋:
enabled = true #是否激活此項(true/false)修改成 true
logpath = /var/log/secure #檢測的系統的登陸日誌文件。這裏要寫sshd服務日誌文件。
#完成:5分鐘內3次密碼驗證失敗,禁止用戶IP訪問主機1小時。 配置如下
findtime = 300 #在5分鐘內內出現規定次數就開始工作,默認時間單位:秒
maxretry = 3 #3次密碼驗證失敗
bantime = 3600 #禁止用戶IP訪問主機1小時
啓動服務:
[root@localhost fail2ban-0.8.14]#service fail2ban start
哪臺機器在暴力破解你的服務器?
查看fail2ban服務運行狀態:
[root@localhost fail2ban]# fail2ban-client status #配置好之後我們檢測下fail2ban是否工作。
Status
|- Number of jail: 1
`- Jail list: ssh-iptables
[root@localhost fail2ban]# fail2ban-client status ssh-iptables
#具體看某一項的狀態也可以看,如果顯示被ban的ip和數目就表示成功了,如果都是0,說明沒有成功。
Status for the jail: ssh-iptables
|- filter
| |- File list: /var/log/secure
| |- Currently failed: 0
| `- Total failed: 3
`- action
|- Currently banned: 1
| `- IP list: 192.168.1.63
`- Total banned: 1