Purple Rain:一種新型哈希破解方法
一、前言
在滲透測試時,你是否面臨著這樣的窘境:當你窮盡了所有的密碼破解攻擊技術卻仍然一無所成,即使翻遍各種筆記、分析密碼策略及當前的破解結果、一頁頁翻閱哈希破解手冊,仍然於事無補。這時候你需要創新實驗思路,最好的方法就是生成隨機密碼來嘗試攻擊。此時最大的問題來自於你自己,固有的偏見以及過去的成功經驗反而成了你思想上的束縛,打破常規才可能讓你坦然面對後續攻擊嘗試。在這種困境中,Purple Rain attack(紫雨攻擊)能夠幫助你打破僵局。Purple Rain還有一個好處,它可以在接近無限長的時間內運行,唯一限制是用戶所提供的字典大小。如果你沒有足夠的時間精心挑選破解技術,可以考慮使用這種完美的即用型攻擊方法,好好享受這種「一勞永逸」的哈希破解過程。
Purple Rain究竟能做什麼呢?它可以幫我們想出自己永遠想不到的密碼模式和規則集。將可用的模式和密碼組合使用是非常有效的一種方法,單憑這種方法,即便只有一個簡單的字典,我們也可以在24小時內輕鬆破解掉75%的LinkedIn數據。有幾個問題,比如是否所有的模式和密碼都是有效的?當然不是。我們會不會花了很長時間卻拿不到關鍵的哈希結果?答案是肯定的。但想像一下,在長時間的攻擊過程中,某一天夢想中的哈希結果突然在控制台上現身,這是多麼美妙的一個場景。此時,你肯定會回頭瀏覽這篇文章,由衷感嘆這種攻擊的巧妙性,感謝這些工具背後開發者的天才思想。
為什麼要叫這個名字?這裡我們玩了一個文字遊戲,攻擊過程中用到了PRINCEprocessor Hashcat工具,再與Prince的著名歌曲《Purple rain》相結合,最終定下了這個名字。在本文中,我們假設你正在嘗試破解類似NTLM之類的哈希,並且已經枚舉完7個字元以內的所有密碼(也就是說,本文中PRINCE只需要生成長度超過8個字元的候選密碼:--pw-min=8
)。最後,你手頭還需要一套破解平台,可以選擇使用Budget Cracking Rig或者Portable Cracking Rig。請關注我們的Twitter獲取最新消息。
二、參考資源
大家可以先參考這幾處鏈接:
Hashcat
PRINCEprocessor Hashcat Utility
List of Possible Dictionaries
Purple Rain的典型用法如下:
shuf dict.txt | pp64.bin --pw-min=8 | hashcat -a 0 -m #type -w 4 -O hashes.txt -g 300000n
三、隨機生成
關於PRINCE(PRobability INfinite Chained Elements)攻擊技術以及隨機規則生成方面內容,大家可以在網上找到兩篇非常好的文章,這也是Purple Rain的靈感來源。我強烈推薦你閱讀Matt Weir發表的有關PRINCE工作原理及具體功能的一篇文章。同時我也推薦你閱讀@evilmog寫的有關「raking」(random password candidate generation,隨機密碼候選詞生成)技術的相關文章,然後再搭建自己的環境,在hashcat中使用隨機生成的規則來破解哈希。簡而言之,PRINCE可以根據輸入的字典集,隨機組合生成輸入詞鏈(閱讀此處了解更多細節)。配合hashcat的-g
參數(隨機規則生成選項),你可以進一步增強PRINCE候選密碼的輸出結果。
四、字典選擇
你可以為Purple Rain提供兩種類型的字典:專用字典(Targeted wordlist)或者通用字典(General Purpose wordlist)。如果你手上沒有任何字典,你可以使用比較優秀的「通用型」字典,如rockyou.txt字典。對於PRINCE而言,我並不推薦使用非常大的字典(比如大小超過500MB的字典)。你可以直接使用最常用的1000萬個密碼集(只有3.8MB),也可以參考weakpass.com,根據實際需要選擇合適的詞典。最後,將字典輸入PRINCEprocessor之前,你可以先使用shuf
這條命令洗一下牌。通過這種隨機化過程,可以保證每次發起Purple Rain攻擊時,PRINCEprocessor會創建不同的詞鏈。你可以運行如下命令,多試幾次,比較輸出結果有何不同:
pp64.bin --pw-min=8 < dict.txt | head -20nshuf dict.txt | pp64.bin --pw-min=8 | head -20n
五、規則數
選擇規則時,我建議先從Hashcat自帶的dive.rule開始。這個規則可以將已知密碼的衍生密碼與PRINCEprocessor隨機生成的候選密碼組合在一起,並且由於dive.rule會按概率大小進行排序,因此你可能會早點拿到結果。複雜一點的話,我會選擇使用Hashcat的隨機規則生成功能,最少使用50,000條隨機規則,你可以根據情況擴充到1,000,000條規則。如果你不想使用太多的規則,我建議每次運行時使用300,000條規則(在命令行中加入-g 300000
參數)。需要注意的是,生成的隨機規則集越大,Hashcat啟動的時間也會越長,因為Hashcat每次運行時都需要動態生成這些規則。此外,PRINCEprocessor自己也帶有prince_generated和prince_optimized這兩個規則集,你也可以選擇試一下這兩個規則集。
六、命令解析
現在來看一下Purple Rain攻擊中用到的一些命令。
基本用法
shuf dict.txt | pp64.bin --pw-min=8 | hashcat -a 0 -m #type -w 4 -O hashes.txt -g 300000n
具體欄位含義如下:
shuf:將字典輸入PRINCEprocessor之前,先隨機處理一下。
dict.txt:專用型或通用型字典,根據實際情況選擇。
pp64.bin:Hashcat提供的PRINCEprocessor工具。
—pw-min=8:要求PRINCE生成長度至少為8個字元的密碼。
hashcat -a 0:以Straight模式啟動Hashcat,獲取stdin的輸入數據。
-m #type:指定哈希模式的編號,比如-m 1000
對應的是NTLM。
-w 4:指定Hashcat採用最高的工作負載來運行。
hashes.txt:包含待破解哈希的輸入文件。
-g 300000:指定Hashcat生成300,000條隨機規則。
兩點建議:
1、再次執行相同任務前,我建議將運行時間限制在1小時到24小時之間。
2、可以收集行之有效的那些隨機規則,參數為--debug-mode=1 --debug-file=success_purplerain.rules
。
高級用法
如果你想隨機使用dict/
目錄下的字典,你可以使用如下命令:
ls dict/ | sort -R | shuf dict/ `tail -1` | pp64.bin --pw-min=8 | hashcat -a 0 -m #type -w 4 -O hashes.txt -g 300000n
你可以將上面的tail -1
命令替換成自己所需的命令。
你也可以隨機組合使用多個字典,以增加輸入數據的多樣性,命令如下:
cat dict1.txt dict2.txt | shuf | pp64.bin --pw-min=8 | hashcat -a 0 -m #type -w 4 -O hashes.txt -g 300000n
高級選項
在PRINCEprocessor中,我們可以使用--elem-cnt-min
以及--elem-cnt-max
選項,增加輸入字典的單詞/元素的鏈接數。
在Hashcat隨機規則生成中,我們可以使用--generate-rules-func-min
以及--generate-rules-func-max
選項,增加或減少每個規則的函數數量。
七、典型應用
讓我們舉個簡單的例子,介紹如何配置Purple Rain攻擊及運行環境。
1、從rockyou字典中,隨機提取30,000個密碼:
shuf rockyou.txt | head -30000 > test_rockyou.txtn
2、使用md5演算法處理test_rockyou.txt,將生成的哈希值存入文件中(需要一定時間才能完成):
while read line; do echo -n $line | md5sum; done < test_rockyou.txt | awk -F " " {print$1} > hashes.txtn
3、創建一個小型字典,以便測試剛才生成的哈希值:
hashcat -a 3 -i ?a?a?a --stdout >> test_dict.txtn
4、我們也可以獲取google上前20,000個英文單詞(參考此處鏈接),加入前面那個字典中:
cat google-20k.txt >> test_dict.txtn
5、先使用dive.rule規則,花1個小時執行Purple Rain攻擊:
shuf test_dict.txt | pp64.bin | hashcat -a 0 -m 0 -w 4 -O hashes.txt -r dive.rulen
運行過程中,你可以觀察Hashcat中不斷出現的各種候選密碼。
6、接下來,使用隨機生成的200,000條規則,花8個小時執行Purple Rain攻擊:
shuf test_dict.txt | pp64.bin | hashcat -a 0 -m 0 -w 4 -O hashes.txt -g 200000n
通過8小時的運行時間,你可以了解到這種方法不需要過多人工參與,可以持續、自主完成攻擊過程。你會看到你根本無法想到的一些密碼組合。請記住一點:不確定的輸出結果是你最好的朋友。
在破解過程中,差之毫厘則失之千里,我們不能放棄絲毫的可能性。
八、總結
希望這種攻擊方法的確對你有所幫助,可以加到你的知識儲備筆記本中。對於剛接觸密碼破解的新手來說,這種攻擊方法也非常簡單方便,運行起來無需人工參與,可以取得較好的效果。有空的話你可以翻閱一下Hash Crack v2.0: Password Cracking Manual這個手冊,從中你可以找到許多類似的攻擊方法以及其他有用的參考資料。請記住一點:在破解過程中,隨機性可以拓寬你的視野,帶來新的可能性以及原先無法預測的結果。另外,記得關注即將發布的新型破解平台:Portable Cracking Rig(如下圖所示),只需1,000美元你就可以在滲透測試中用到它的強大功能。這個價格非常實惠,畢竟沒有多少人能搭建價值15,000美元、使用8個GPU的破解陣列。請關注我們的Twitter @netmux,了解後續更新及相關文章。
研究人員需要付出許多精力才能生產並發行這些工具,因此看到「捐助(DONATE)」按鈕時,你可以考慮貢獻自己的一份薄力。這些社區讓整個世界更加美好,也讓我們受益匪淺。
登錄安全客 - 有思想的安全新媒體www.anquanke.com/,或下載安全客APP來獲取更多最新資訊吧~
推薦閱讀:
※為什麼比特幣的block產生速度被設定為10分鐘?
※怎麼證明second preimage resistant不代表collision resistant?
※求解 烏雲白帽子大會 直播的第三道題是怎麼解的呢?
※有沒有兩個完全不一樣的文件,但是他們的md5值是一樣的?
※Git是否考慮到SHA1碰撞的問題了?