今天的題目是
在今天的題目流程中,我拿到三個雜湊,每個雜湊的長度不同,代表可能是不同的演算法。整體流程是先辨識hash 類型 → 選工具/模式 → 用字典或暴力嘗試破解 → 驗證結果並提交,那我們來開始講解我解題的過程
連線到挑戰伺服器、拿到第一個hash
共通準備:把 hash 寫成檔案
可以看到它給了第一層關卡的hash。首先在所有步驟前,我會把每個hash寫成單行檔案hash.txt。
echo "482c811da5d5b4bc6d497ffa98491e38" > hash.txt
第一關:
他給的長度是32個hex字元,估計是最常見MD5。於是我用John的raw-md5格式搭配rockyou字典,得到了第一個答案!
第二關:
第二個它給的hash是b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3長度是40hex推估是SHA-1,接著和上個步驟一樣的解法
john --format=raw-sha1 --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
會得到
最後一關:
接著最後一個階段他給的是916e8c4f79b25028c9e467f1eb8eee6d6bbdff965f9928310ad30a8d88697745,根據64hex可以判斷是SHA-256。
再用
john --format=raw-sha256 --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
就可以得到最後的答案
全部輸入正確答案後可以得到flag。
結論:
判斷hash類型的第一步是用長度快速判斷(32→MD5、40→SHA-1、64→SHA-256),再選對工具與模式。一開始我嘗試過使用hashcat,但後來發現在沒有GPU只有CPU的環境跑大型字典+rules。出於他的allocatable memory較小,沒法承受hashcat預分配結構。John在某些CPU-only情況比hashcat更省記憶體,而且還能透過hex判斷要使用的解碼方式。不過有些hash會用base64編碼而不一定是hex,有些演算法含salt或多重hash仍可能造成誤判。所以在解題時要特別注意這些情況,不過這題我們就不過多討論這個部分若是往後遇到這類的題目我再詳細介紹。