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碰撞的問題了?

TAG:哈希函数 | 互联网 | 网络安全 |