浅谈暴力破解
0x01 原理
? 暴力破解(brute force),又名暴力攻擊、暴力猜解,從數學和邏輯學的角度,它屬于窮舉法在現實場景的運用。當密碼未知或獲得密碼哈希時,攻擊者會使用暴力破解來試圖登錄帳戶,即通過利用大量猜測和窮舉的方式來嘗試獲取用戶口令的攻擊方式。在ATT&CK中暴力破解有如下四種子技術。
Password Guessing(密碼猜測)
事先不了解系統和環境,攻擊者會猜測密碼以嘗試登錄帳戶。在不了解帳戶密碼的情況下,攻擊者可能會在操作過程中通過使用常用密碼字典來猜測登錄密碼,而無須事先了解系統或環境密碼。
Password Cracking(密碼破解)
當獲得憑證材料(例如密碼哈希)時,攻擊者可能會解密密碼來嘗試恢復可用的憑據,例如純文本密碼。
Password Spraying(密碼噴灑)
使用多個密碼來暴力破解一個賬號可能會導致該賬號被鎖定,攻擊者可能會針對許多不同帳戶使用單個或少量的常用密碼列表,以嘗試獲取有效帳戶憑據。
密碼噴灑常常針對如下服務:
-
SSH (22/TCP)
-
Telnet (23/TCP)
-
FTP (21/TCP)
-
NetBIOS/SMB /Samba (139/TCP & 445/TCP)
-
LDAP (389/TCP)
-
Kerberos (88/TCP)
-
RDP/終端服務 (3389/TCP)
-
HTTP/HTTP管理服務 (80/TCP & 443/TCP)
-
MSSQL (1433/TCP)
-
Oracle (1521/TCP)
-
MySQL (3306/TCP)
-
VNC (5900/TCP)
Credential Stuffing(撞庫)
攻擊者可以使用受害者歷史上泄露的數據獲得憑據,通過憑據重疊來訪問目標帳戶。
0x02 實驗
1.密碼猜測
Login.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Login</title> </head> <body><h1>隨便登錄</h1><form action="checkLogin.php" method="post">Username: <input type="text" name="username"/>Password: <input type="password" name="password"/><input type="submit" value="Submit"></form> </body> </html>checkLogin.php
<?php $username=$_POST['username']; $password=$_POST['password']; if($username=="root" && $password=='root'){echo "Success!"; }else{echo "Fail!"; } ?>以上代碼為一個簡單的表單提交到后臺,判斷賬號,密碼都為root則登陸成功。
接下來burpsuite抓包使用Intruder模塊進行爆破,通過對比數據包的長度可以很好的判斷是否爆破成功,因為爆破成功和失敗的長度是不一樣的。
在數據包中選定欲爆破的參數
設置爆破的字典
根據響應的數據包的長度可以判斷出正確的賬號、密碼。
PS:進階技巧
(1)默認憑證
在對某一服務進行暴力破解之前,我們首先應該嘗試該服務的默認口令,這樣也許可以節約大量的時間和工作量。通過搜索引擎等方式可以獲取到不同服務的默認口令,以下是一些默認口令的合集。
- http://www.vulnerabilityassessment.co.uk/passwordsC.htm‘
- https://192-168-1-1ip.mobi/default-router-passwords-list/
- https://datarecovery.com/rd/default-passwords/
- https://bizuns.com/default-passwords-list
- https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/default-passwords.csv
- https://www.cirt.net/passwords
- https://www.passwordsdatabase.com/
通過對這些默認口令的分析不難發現,很多都是以admin、root、administrator、password等字樣出現,而如果不更改掉默認口令,攻擊者往往就能以此輕松突破。
(2)好用的字典
爆破的字典選什么是一個技巧,并非越全越好,這里整理了一些好用的字典倉庫(感謝眾大佬的分享),僅供參考。
- https://github.com/Dormidera/WordList-Compendium
- https://github.com/danielmiessler/SecLists
- https://github.com/3had0w/Fuzzing-Dicts
(3)自定義字典
如果前期已經通過社工等方式搜集到目標有關信息,也許根據目標生成的專屬字典能增加破解效率。
使用到的工具:pydictor—— 一個強大實用的黑客暴力破解字典建立工具
詳細使用方法可以參考其用法示例
2.密碼破解
在通過一定方式獲得密碼哈希后,進一步要做的就是將其破解了。
何為hash?Hash 一般翻譯為“散列”,也可直接音譯為“哈?!钡?。這個加密函數對一個任意長度的字符串數據進行一次加密函數運算,然后返回一個固定長度的字符串。Hash 主要用于信息安全領域中加密算法,滲透測試中獲取目標系統的明文或 Hash 往往是整個滲透測試過程中重要的一環。
Window Hash
在 Windows 系統中本機用戶的密碼 Hash 是放在本地的 SAM(Security Account Manager) 文件里面,域內用戶的密碼 Hash是存在域控的 NTDS.DIT 文件里面。
分類
LM
LAN Manager(LM)哈希是 Windows 系統所用的第一種密碼哈希算法,是一種較古老的 Hash,在 LAN Manager協議中使用,非常容易通過暴力破解獲取明文憑據。它只有唯一一個版本且一直用到了 NT LAN Manager(NTLM)哈希的出現,在 Windows Vista/Windows 7/Windows Server 2008 以及后面的系統中,LM哈希算法是默認關閉的,LM 算法是在 DES 基礎上實現的,不區分字母大小寫。
NTLM
NT LAN Manager(NTLM)哈希是Windows系統認可的另一種算法,用于替代古老的 LM-Hash,一般指 Windows 系統下 Security Account Manager(SAM)中保存的用戶密碼 Hash,在 Windows Vista/Windows 7/Windows Server 2008 以及后面的系統中,NTLM 哈希算法是默認啟用的。
獲取
Hash的獲取可以使用mimikatz工具
項目地址:https://github.com/gentilkiwi/mimikatz
下圖為使用mimikatz獲取win10用戶的密碼Hash
Hashcat 破解
在拿到 LM 或者 NTLM 的密文時,如果沒有明文的時候,最直接的方法當然是直接將其解密啦,這里使用Hashcat來進行密碼解密。
如上圖我們通過msf獲取到目標主機的hash
LM:44efce164ab921caaad3b435b51404ee
NTLM:32ed87bdb5fdc5e9cba88547376818d4
SHA1:6ed5833cf35286ebf8662b7b5949f0d742bbec3f
實際明文為:123456
Hashcat破解過程如下:
hashcat -a 0 -m 1000 --force 32ed87bdb5fdc5e9cba88547376818d4 password.txt-a 0 字典破解
hashcat –-help 可以看到 LM 和 NTLM 對應的 hash 編號分別為3000和1000
在線Hash破解
https://www.cmd5.com/
https://www.objectif-securite.ch/ophcrack
Linux Hash
建立一個test用戶進行測試,密碼test
useradd -m test passwd testLinux 密碼信息保存在兩個文件中,分別為: /etc/passwd 和 /etc/shadow
/etc/passwd
普通用戶權限能夠查看
保存用戶信息,每一行代表一個用戶,每一行通過冒號:分為七個部分
/etc/shadow
只有 root 用戶權限能夠查看
保存加密后的密碼和用戶的相關密碼信息,每一行代表一個用戶,每一行通過冒號:分為九個部分
注意:
- 密碼字符串為*,表示系統用戶不能被登入
- 密碼字符串為!,表示用戶名被禁用,可以在機器上轉到該用戶,但無法遠程登錄
- 密碼字符串為空,則表示沒有密碼
密文由三部分組成:$id$salt$encrypted,id表示加密算法,salt 表示密碼學中的 Salt, 系統隨機生成 encrypted 表示密碼的 hash
- DES和明文開頭無標記
- id為1時,采用md5進行加密;
- id為5時,采用SHA256進行加密;
- id為6時,采用SHA512進行加密。
破解Hash
方式一:John the Ripper
這里使用kali自帶的John工具進行破解
使用字典破解
john --wordlist=/usr/share/john/password.lst /etc/shadow或直接暴力破解
john /etc/shadow結果如下:
方式二:Hashcat
hashcat -m 1800 -o found1.txt /etc/shadow /usr/share/john/password.lst參數說明:
-m 1800:hash-type,1800對應SHA512
-o found1.txt:破解結果輸出到found1.txt中
/etc/shadow:含要破解密文的文件
/usr/share/john/password.lst:字典文件
結果如圖:
3.密碼噴灑
Mysql爆破
使用工具–Kali-Hydra
hydra 192.168.100.250 -l wyw -P password.txt mysql -V #hydra IP地址 -l 單個賬戶名 -P 字典路徑 服務名 -V使用工具–Kali-Metasploit
①:use auxiliary/scanner/mysql/mysql_login ②:show options③:set RHOSTS IP地址④:set USERNAME 單個賬戶⑤:set PASS_FILE 字典路徑地址⑥:set RPORT 端口號⑦:run遇到的坑:
3306端口需對外開放
mysql用戶允許遠程連接數據庫
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;若出現如下錯誤,需修改mysql字符集
修改my.ini
character-set-server=utf8類似的,FTP、SSH、Tomcat等也可以利用此工具爆破。
- FTP
msf
use auxiliary/scanner/ftp/ftp_loginHydra
hydra 192.168.146.141 -l admin -P /top1500.txt ftp -V- SSH
msf
use auxiliary/scanner/ssh/ssh_loginHydra
hydra 192.168.146.141 -l root -P /top1500.txt ssh -V- Tomcat
msf
use auxiliary/scanner/http/tomcat_mgr_login0x03 其他場景
前面描述了針對登錄用戶和密碼的暴力破解,暴力破解是否還可以用在其他場景呢?答案是肯定的,因為涉及人機交互的內容本質還是一個題目驗證場景,在以下這些場景中,也有可能遭遇到暴力破解攻擊。
圖形驗證碼–同樣的使用窮舉方法,假設Web應用的登錄驗證碼的范圍是一個可衡量的值,攻擊者可以使用工具將所有的驗證碼問題請求及結果保存為合集,并在后續的破解過程中調用這個結果合集;
短信/郵箱驗證碼–針對四到六位純數字的短信或郵箱驗證碼,也可以用暴力破解的方法進行猜解攻擊嘗試;
關鍵參數–針對應用中的關鍵參數的,亦可以用窮舉法進行遍歷,當存在權限控制不當時,這種遍歷方法還能批量獲取敏感信息。如枚舉訂單號后并提交訂單查詢,在權限控制不當的Web應用中,這會導致批量的用戶訂單信息泄露。
0x04 防御方法
針對暴力破解攻擊,應用的安全設計要多方考量,從每一個可能的受攻擊面出發,結合逆向的邏輯思路,建立合理的防御機制。常見的防御措施如下。
1)用戶名或密碼輸入錯誤時統一返回“登錄錯誤,請重試”提示信息
2)在用戶登錄時增加驗證碼,防止通過程序自動枚舉賬戶
3)驗證碼應具有足夠的隨機性和干擾性,考慮邏輯和交互式驗證碼
4)確保所有類型的驗證碼能夠用后即失效,防范可被重用
5)在用戶登錄中增加對同一IP地址嘗試次數的限制
6)系統自身安全性增強:強制要求用戶注冊時滿足口令復雜度要求
7)定期對比數據庫存儲的密碼密文值與top500弱密碼的密文值
參考資料
[1] 暴力破解
[2] Windows 用戶密碼的加密方法與破解
[3] web滲透—暴力破解
[4] 【技術工場】淺談暴力破解攻擊
[5] 暴力破解方法匯總——遠程服務爆破篇
[6] Linux 下的密碼 Hash破解方法
總結
- 上一篇: 《数学分析新讲》_张筑生,12.5节:隐
- 下一篇: android最好的数独游戏,安卓好数独