當前位置:
首頁 > 最新 > Linux SSH密碼暴力破解技術及攻防實戰

Linux SSH密碼暴力破解技術及攻防實戰

*本文原創作者:simeon,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載

對於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在線安裝:

Redhat/Fedora發行版的下載源碼包編譯安裝,先安裝相關依賴包:

(2)centos安裝

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下依次運行以下命令即可解決:

圖2 出現libssh模塊缺少錯誤

4、hydra參數詳細說明

hydra [[[-l LOGIN|-L FILE] [-p PASS|-PFILE]] | [-C FILE]] [-e nsr] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-wTIME] [-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]-http--form http-proxy cisco cisco-enable vnc ldap2 ldap3 mssql mysqloracle-listener postgres nntp socks5 rexec rlogin pcnfs snmp rsh cvs svn icqsapr3 ssh2 smtp-auth[-ntlm] pcanywhere teamspeak sip vmauthd firebird ncp afp等等

OPT 一些服務模塊支持額外的輸入(-U用於模塊的幫助)

4.破解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密碼


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


(1)git克隆安裝

(2)手動編譯和安裝medusa

安裝完成後,會將medusa的一些modules 文件複製到/usr/local/lib/medusa/modules文件夾。

3.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] 繼續掃描上一次

4.破解單一伺服器SSH密碼

(1)通過文件來指定host和user,host.txt為目標主機名稱或者IP地址,user.txt指定需要暴力破解的用戶名,密碼指定為password

./medusa -M ssh -H host.txt -U users.txt -p password

(2)對單一伺服器進行密碼字典暴力破解

如圖5所示,破解成功後會顯示success字樣,具體命令如下:

圖5破解SSH口令成功

如果使用Cltrl+Z結束了破解過程,則還可以根據屏幕提示,在後面繼續恢復破解,在上例中恢復破解,只需要在命令末尾增加「-Z h1u1.」即可。也即其命令為:

5.破解某個IP地址主機破解成功後立刻停止,並測試空密碼以及與用戶名一樣的密碼

執行效果如圖6所示,通過命令查看字典文件newpass.txt,可以看到root密碼位於第8行,而在破解結果中顯示第一行就破解成功了,說明先執行了「-e ns」參數命令,對空密碼和使用用戶名作為密碼來進行破解。

圖6使用空密碼和用戶名作為密碼進行破解

技巧:加-O ssh.log 可以將成功破解的記錄記錄到ssh.log文件中。


四、使用patator暴力破解SSH密碼


執行./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 RCPTTO枚舉合法用戶

+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 : 暴力破解 MySQLqueries

+rdp_login : 暴力破解 RDP(NLA)

+pgsql_login : 暴力破解PostgreSQL

+vnc_login : 暴力破解 VNC

+dns_forward : 正向DNS 查詢

+dns_reverse : 反向 DNS 查詢

+snmp_login : 暴力破解 SNMPv1/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.pyssh_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.5p1Debian-10「,破解不成功會顯示」 Authentication failed. 「提示信息,其破解時間為2秒,速度很快!

圖8破解單一用戶密碼

(3)破解多個用戶。用戶文件為/root/user.txt,密碼文件為/root/newpass.txt,破解效果如圖9所示。

圖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 後才能執行安裝命令:

kali Linux默認安裝其用戶和密碼字典文件位置:/usr/share/brutespray/wordlist。

(3)手動安裝

注意如果在其它環境安裝需要安裝medusa,否則會執行報錯。


用法: brutespray.py [-h] -f FILE [-o OUTPUT] [-sSERVICE] [-t THREADS] [-T HOSTS] [-U USERLIST] [-P PASSLIST] [-u USERNAME] [-pPASSWORD] [-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 交互模式


(1)掃描整個內網C段

(2)掃描開放22埠的主機

(3)掃描存活主機

(4)掃描應用程序以及版本號


(1)交互模式破解

執行後,程序會自動識別nmap掃描結果中的服務,根據提示選擇需要破解的服務,線程數、同時暴力破解的主機數,指定用戶和密碼文件,如圖 10所示。Brutespray破解成功後在屏幕上會顯示「SUCCESS 」信息。

圖10交互模式破解密碼

(2)通過指定字典文件爆破SSH

注意:

brutespray新版本的wordlist地址為/usr/share/brutespray/wordlist,其下包含了多個協議的用戶名和密碼,可以到該目錄完善這些用戶文件和密碼文件。22.xml為nmap掃描22埠生成的文件。

(3)暴力破解指定的服務

(4)指定用戶名和密碼進行暴力破解

當在內網已經獲取了一個密碼後,可以用來驗證nmap掃描中的開放22埠的伺服器,如圖11所示,對192.168.17.144和192.168.17.147進行root密碼暴力破解,192.168.17.144密碼成功破解。

圖11 對已知口令進行密碼破解

(5)破解成功後繼續暴力破解

前面的命令是默認破解成功一個帳號後,就不再繼續暴力破解了,此命令是對所有賬號進行暴力破解,其時間稍長。

(6)使用Nmap掃描生成的nmap.xml進行暴力破解


Brutespray這一點做的非常好,默認會在程序目錄/brutespray-output/目錄下生成ssh-success.txt文件,使用cat ssh-success.txt命令即可查看破解成功的結果,如圖12所示。

圖12查看破解成功的記錄文件

也可以通過命令搜索ssh-success 文件的具體位置:find / -name ssh-success.txt


使用ssh user@host命令登錄host伺服器。例如登錄192.168.17.144:

輸入密碼即可正常登錄伺服器192.168.17.144。


六、Msf下利用ssh_login模塊進行暴力破解


在kali中執行「msfconsole」-「search ssh」後會獲取相關所有ssh模塊,如圖13所示。

圖13 msf下所有SSH漏洞以及相關利用模塊


(1)SSH用戶枚舉

此模塊使用基於時間的攻擊枚舉用戶OpenSSH伺服器。在一些OpenSSH的一些版本

配置,OpenSSH會返回一個「沒有許可權」無效用戶的錯誤比有效用戶快。使用命令如下:

使用info命令可以查看該模塊的所有信息,執行效果如圖14所示,實測該功能有一些限制,僅僅對OpenSSH某些版本效果比較好。

圖14 openssh用戶枚舉

(2)SSH版本掃描

查看遠程主機的SSH伺服器版本信息,命令如下:

執行效果如圖15所示,分別對centos伺服器地址192.168.157.147和kali linux 地址192.168.157.144進行掃描,可以看出一個是SSH-2.0-OpenSSH_5.8p1Debian-1ubuntu3,另外一個是SSH-2.0-OpenSSH_7.5p1 Debian-10,看到第一個版本,第一時間就可以想到如果拿到許可權可以安裝ssh後門。

圖15掃描ssh版本信息

(3)SSH暴力破解

ssh暴力破解模塊「auxiliary/scanner/ssh/ssh_login」可以對單機進行單用戶,單密碼進行掃描破解,也可以使用密碼字典和用戶字典進行破解,按照提示進行設置即可。下面使用用戶名字典以及密碼字典進行暴力破解:

如圖16所示,對IP地址192.168.17.147進行暴力破解,成功獲取root賬號密碼,網上有人寫文章說可以直接獲取shell,實際測試並否如此,通過sessions -l可以看到msf確實建立會話,但切換(sessions -i 1)到會話一直沒有反應。

圖16使用msf暴力破解ssh密碼


七、ssh後門


經典後門使用ssh root@x.x.x.x -p 33223直接對sshd建立軟連接,之後用任意密碼登錄即可。

但這隱蔽性很弱,一般的rookit hunter這類的防護腳本可掃描到。


(1)複製sshd到bin目錄

(2)編輯sshd

(4)修改許可權

(5)使用socat

如果沒有安裝socat需要進行安裝並編譯

(6)使用ssh root@ target_ip即可免密碼登錄


將本地計算機生成公私鑰,將公鑰文件複製到需要連接的伺服器上的~/.ssh/authorized_keys文件,並設置相應的許可權,即可免密碼登錄伺服器。


八、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密碼

(2)medusa破解ssh密碼

(3)patator破解ssh密碼

如果不是本地安裝,則使用patator執行即可。

(4)brutespray暴力破解ssh密碼

(5)msf暴力破解ssh密碼


1.修改/etc/ssh/sshd_config默認埠為其它埠。例如設置埠為2232,則port=2232

2.在/etc/hosts.allow中設置允許的IP訪問,例如sshd:192.168.17.144:allow

3.使用DenyHosts軟體來設置,其下載地址:

https://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz/download

(1)安裝cdDenyHosts

默認是安裝到/usr/share/denyhosts目錄的。

(2)配置cdDenyHosts

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)設置啟動腳本

完了之後執行daemon-contronstart就可以了。

如果要使DenyHosts每次重起後自動啟動還需做如下設置:

可以看看/etc/hosts.deny內是否有禁止的IP,有的話說明已經成功了。

以上內容來之本次專題研究內容之一,只有踏踏實實的做技術研究,才發現研究越多,知識面擴展越多。

*本文原創作者:simeon,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

TAG:FreeBuf |