滲透測試中的密碼掃描與破解技巧
0×00 前言
一次測試的過程總會涉及到”密碼”與”加解密”。在踩點的過程中,對弱口令的嘗試是必不可少的過程,從xx抓雞到內網哈希批量傳遞,從個人PC到網絡設備/工控設施,只要依舊采用單因素模式的密碼認證,密碼掃描就不會被遺忘。以下筆者簡單分享總結安全測試中密碼掃描與破解的技巧,如有疏漏錯誤,還望不吝賜教。
0×01 整理一份優秀的字典
想破解密碼,要求我們已經”擁有”別人的密碼。字典在口令掃描嘗試過程中的重要性不言而喻.要整理一份優秀的字典,不妨參考各大網站泄漏數據庫,將密碼(明文)字段收集后,依出現頻率先后生成字典。
一個demo腳本:
- #!/bin/bash/python
- import sys
- from collections import Counter
- file = open(sys.argv[1], 'r')
- readlist = []
- count_times = []
- for line in file.readlines():
- line = line.strip('\r\n ')
- readlist.append(line)
- sortlist = Counter(readlist).most_common()
- for line in sortlist:
- print line[0]
0×02 一手稱心如意的工具集
欲善其事,須利其器。在密碼枚舉工具中嗎,筆者比較推薦的工具List如下:
Hydra :在線各種服務賬戶密碼猜解
Medusa : 類似Hydra
Patator : Python多協議破解工具
John the ripper : 離線破解哈希
Hashcat : GPU離線哈希破解
Burp Suite : 在線密碼枚舉
Rcracki : 離線彩虹表哈希破解
Ophcrack : 離線LMHash/NTHash破解
Hashid/HashTag : 哈希算法分析
Fcrackzip/Truecrack等特定文件密碼破解工具
Metasploit : 各種輔助測試腳本
Cupp.py : 社工字典生成
…
當然,根據特定需要(如加入各種偽裝繞過檢測),可能也需要我們自行編寫相應腳本實現枚舉賬戶的過程.
0×03 繞過檢測
Web層有WAF,Service有IDS/IPS,很容易打草驚蛇.在測試前,先通過掃描等方式判斷是否有相應的防護,并采取相應手段.Web層可能有驗證碼,可能有每秒IP連接數限制,可能通過Cookie/Header等信息判斷行為是Human or Robot.在通過一系列測試后,(如何測試還是要自己探索的),采用最合理的針對方式繞過或盡量避免被檢測而導致的阻擋枚舉賬戶密碼的腳步.
0×04 Web賬戶枚舉
Web賬戶枚舉是平日遇到較多的情況
EXP無果,某處又沒有做嚴謹的驗證碼等防護,為枚舉賬戶密碼制造了可能性.
發現前人留下的backdoor,苦于沒有密碼.
撞庫掃號.
常見的繞過驗證的可能:
頁面無需刷新驗證碼無限次使用
密碼輸入錯誤數次彈出驗證碼,但更換賬號不會出現驗證碼
修改Cookie或UA偽裝逃避驗證碼
可批量輪詢使用代理枚舉繞過
在Web枚舉中,使用BurpSuite基本可以解決所有常見問題.工具相關文檔資料也比較豐富.
開啟代理,打開Intercept,登陸網頁,輸入用戶密碼,數據包攔截下來,選擇Send to Intruder,進入攻擊模塊.
其中
其中四種模式:
Sniper: 只有一個payload,會將payload分別放在每個Fuzz點測試,默認選項,這也是新手發現Payload只能選擇1的原因.
Battering Ram: 只有一個payload,會將payload同時放在多個Fuzz點測試.
Pitchfork: 多個payload,會將多個payload同一行同時放到相應Fuzz點測試.(適用掃號)
Cluster Bomb: 多個payload,payload在其Fuzz點循環測試,直到嘗試所有可能.(適用多賬戶枚舉密碼)
參考鏈接: http://www.digininja.org/blog/burp_intruder_types.php
選擇好相應模式后,設置payload為runtime file,掛載字典文件.取消Payload Encoding.
如果發現網頁有將用戶的本地將密碼計算MD5后提交,則需要在Payload Processing中添加計算MD5的過程
設置設置好后也可添加正則匹配結果等等.之后可以Start attack了.
這個過程中,如果擔心IP地址暴露,可以選擇寫一個這樣一個腳本:
腳本本地監聽某端口,并為每次枚舉隨機抽取代理IP,Burp中設置Proxy為本地腳本所監聽端口即可.
0×05 HTTP基礎認證
家用路由/Jboss等往往采用HTTP基礎認證,認證過程中,用戶名密碼加密.若無正確的用戶名密碼則會返回
HTTP/1.1 401 Authorization Required
抓包可以看到,以默認用戶名admin,默認密碼admin登陸路由,HTTP Header多的部分像是這樣
Authorization: Basic YWRtaW46YWRtaW4=
Base64解密即為admin:admin.針對基礎認證密碼破解,依舊可以使用,但需要對用戶名密碼先做處理,一個demo腳本如下:
- #!/usr/bin/python
- import os.path,sys,base64
- userfile = raw_input("input usr file:")
- passfile = raw_input("input pwd file:")
- outputfile = raw_input("input out file:")
- outputfile = open(outputfile, "w")
- userInfile = open(userfile)
- passInfile = open(passfile)
- userLines = userInfile.readlines()
- passLines = passInfile.readlines()
- for userLine in userLines:
- for passLine in passLines:
- combinedLine = userLine.strip() + ':' + passLine.strip()
- print combinedLine
- outputfile.write(base64.b64encode(combinedLine) + '\n')
- userInfile.close()
- passInfile.close()
- outputfile.close()
生成字典后以Burp爆破即可
當然,Hydra給了更簡易的解決方式
hydra -L user.txt -P pass.txt -F http://demourl:2048/auth
其中-L和-P大寫均為掛載字典,-F表示全局一旦發現合法用戶密碼即停止破解,亦可加入-t參數指定線程數.
0×06 服務密碼破解
密碼枚舉離不開服務,對常見服務如FTP/SSH/TELNET/POP3/1433等的破解枚舉,資料已經很齊備,以下僅簡要記錄命令
FTP
hydra -L user.txt -P pass.txt -F ftp://127.0.0.1:21
SSH
hydra -L user.txt -P pass.txt -F ssh://127.0.0.1:22
patator ssh_login host=127.0.0.1 user= root password=FILE0 0=pass.txt -x ignore:mesg='Authentication failed.'
SMB
hydra -L user.txt -P pass.txt -F smb://127.0.0.1
MSSQL
hydra -L user.txt -P pass.txt -F mssql://127.0.0.1:1433
0×07 社工字典生成
密碼碰撞出來的情況,大多為兩種可能:以admin為代表的弱口令和以*19??0101為代表的社工密碼.在弱口令嘗試失敗的情況下,如果對目標信息有較充分的
掌握,則可嘗試社工字典生成. 以cupp.py工具為例,創建新字典使用:
python cupp.py -i
在填寫相關信息后生成字典,然后使用上述工具繼續枚舉吧 ;-)
0×08 哈希破解
win環境下wce等工具直接抓取內存密碼,抓取hash后離線破解往往也是難以避免的,尤其是在微軟最近幾個漏洞補丁之后:( 普通哈希可以使用Ophcrack破解,官網給出了對應的彩虹表下載,當然,也可以直接查詢. http://www.objectif-securite.ch/en/ophcrack.php
如情非得已,需要破解其他不常見密碼哈希(借助已有web破解服務無法解決),暫時便只有三個相對高效的方法:
分布式 (如今已經有越來越多的工具開始嘗試分布式破解,也可說是,云計算?)
GPU (或DSP/FPGA搞的專業密碼破解硬件)
彩虹表 (沒硬盤的就別想了)
而如果我們在密碼的一定規則后,亦可按照規則破解密碼. 如創建一個密碼為hahaharoot的賬戶,用John暴力模式密碼,普通計算機一天時間是很難跑出來的,但假設發現管理員其他密碼如web/sql等均為hahaha開頭,則可考慮定義密碼規則,如
hashcat -m1800 -a3 hashdumpedfile --pw-min=7 --pw-max=11 "hahaha?l?l?l?l"
幾秒鐘的時間,得到了密碼明文
其中-m指定哈希算法,-a3指定暴力破解方式.亦可通過腳本生成指定前綴的密碼字典使用工具掛載字典加以破解
john -w:gen_wordlist.txt hash
0×09 文件密碼
最后補充一點對文件密碼的破解,對于zip文件,由于加密方式沒有rar強勢,故被解密的可能性很大,一個kali下的破解工具命令如下:
fcrackzip -b -v -c a -l 1-4 -u 1.zip
其中,-b指定暴力破解,-v顯示詳細信息,-c a指定密碼為純字母,-l 1-4指定密碼長度位1-4位,-u指使用可能的密碼進行解壓縮測試(加上,否則會出現很多干擾密碼)
關于其他文件密碼的破解,各位看官如有高效的工具,還望拿出來分享之. ;)