Hashcat 是一款功能強大的開源密碼破解工具,以其高效能和多樣化的攻擊模式而聞名。它不僅是世界上最快的密碼破解工具之一,還內建了獨特的「in-kernel」規則引擎,可以更有效地應用密碼變換規則。
主要特色
- 免費與開源: 可免費使用,並採用 MIT 授權。
- 跨平台支援: 支援 Linux, Windows 和 macOS 等多種作業系統。
- 多種攻擊模式: 提供多種攻擊模式,如字典攻擊、組合攻擊、暴力破解等,以應對不同情況。
- 多種雜湊類型: 支援多達數百種不同的雜湊類型,涵蓋了常見的 MD5, SHA1, NTLM, Bcrypt, WordPress 等。
常用參數說明
攻擊模式 (Attack Modes, -a
)
這是在 Hashcat 中選擇密碼破解方式的重要參數:
-a 0
(Straight): 字典攻擊模式,或稱「直譯模式」。它會直接使用字典檔(如rockyou.txt
)中的每一個單詞來嘗試破解。-a 1
(Combination): 組合攻擊模式,將兩個字典檔中的單詞進行組合。-a 2
(Toggle Case): 變換大小寫攻擊模式,用於改變單詞的大小寫組合。-a 3
(Brute-Force): 暴力破解模式,透過窮舉所有可能的字元組合來破解密碼。
雜湊類型 (Hash Type, -m
)
此參數用來指定你想要破解的雜湊類型,每種雜湊都有其對應的編號:
0 = MD5
50 = HMAC-MD5
100 = SHA1
400 = WordPress
1000 = NTLM
1400 = SHA256
3200 = Bcrypt
支援的Mode可參考:https://hashcat.net/wiki/doku.php?id=example_hashes
實用攻擊範例
Straight Attack (字典攻擊)
字典攻擊是最基本的攻擊模式,它直接使用預先準備好的密碼字典檔進行匹配。
運作方式: Hashcat 會讀取一個包含常見密碼的字典檔,然後逐一嘗試。
範例:
hashcat -a 0 -m <hash type> <hash_encrypt_file> <password directory file>
<hash_encrypt_file>
:存放待破解雜湊值的檔案。<password directory file>
:密碼字典檔路徑,例如:- 在 Kali Linux 中:
/usr/share/wordlists/rockyou.txt
(此檔案通常為壓縮檔,需先解壓縮:gzip -d /usr/share/wordlists/rockyou.txt.gz
) - 線上資源: 許多網站提供免費的密碼字典檔,例如:
https://samsclass.info/123/proj10/500_passwords.txt
- 在 Kali Linux 中:
使用Rule-based Attack
- 說明:規則攻擊是字典攻擊的延伸,它會根據指定的規則對字典中的單詞進行變換,以生成更多的候選密碼,提升破解成功率。
- 運作方式: Hashcat 從字典檔中讀取單詞,然後應用規則(如大小寫轉換、添加數字或符號、反轉順序等)來生成新的密碼組合。
- 範例:
- 使用 rockyou-30000.rule 規則檔增加字典 wordlist.txt 的密碼量並對md5做密碼測試。
hashcat -m 0 -a 0 -r /usr/share/hashcat/rules/rockyou-30000.rule hashes.txt /path/to/wordlist.txt
refer
https://uwnthesis.wordpress.com/2013/08/07/kali-how-to-crack-passwords-using-hashcat/
Brute-Force Attack (暴力破解)
暴力破解是透過窮舉所有可能的字元組合來破解密碼,當不知道密碼長度或字元類型時,它會非常有用。
運作方式:
- Mask (遮罩): 透過遮罩來定義密碼的字元集和長度。
--increment
參數: 可選參數,用於讓 Hashcat 嘗試不同長度的密碼,從最短長度一直增加到最長長度。--pw-min <length>
/--increment-min <length>
: 設定密碼最小長度。--pw-max <length>
/--increment-max <length>
: 設定密碼最大長度。
內建字元集:
?l
:小寫字母 (a-z
)?u
:大寫字母 (A-Z
)?d
:數字 (0-9
)?s
:特殊符號?a
:所有可見的 ASCII 字元 (?l?u?d?s
)
範例:
- 破解一個六位數的純數字密碼:(這個命令會嘗試所有從
000000
到999999
的組合。)# echo e10adc3949ba59abbe56e057f20f883e > hash.txt # hashcat -m 0 -a 3 -i hash.txt ?d?d?d?d?d?d
- 破解一個由四個小寫字母和兩個數字組成的密碼:(這個命令會嘗試所有例如
abcd12
,abxy99
這樣的組合。)# hashcat -m 0 -a 3 hashes.txt ?l?l?l?l?d?d
- 破解一個長度為 1 到 5 位,包含所有可見字元的密碼:
# hashcat -m 0 -a 3 hashes.txt ?a?a?a?a?a --increment --increment-min=1 --increment-max=5
其他參數:
-n <thread_number>
: 設定執行緒數。
refer
https://hashcat.net/wiki/doku.php?id=frequently_asked_questions#why_should_i_use_a_mask_attack_i_just_want_to_brute_these_hashes
Hashcat 輸出解析表
設定長度 5 位全字元集 (?a?a?a?a?a) 的窮舉爆破,總共 7,737,809,375 組密碼,在單張 GPU(383.9 MH/s)上跑了約 20 秒全部嘗試完,但沒有找到正確密碼,因此狀態是 Exhausted,各項說明解釋如下。
欄位/項目 | 原始輸出 | 說明 |
---|---|---|
Status | Exhausted | 已經將設定的密碼空間全部嘗試完,沒有找到匹配的密碼。 |
Hash. Mode | 10 (md5($pass.$salt)) | 使用的 hash 模式是 -m 10,計算方式為 MD5(密碼 + salt)。 |
Hash. Target | e5249bbc558elfc5d71744ab9216e46:WhRgV4HXYjySt1aw | 前面是 hash 值,冒號後面是 salt 值。 |
Time. Started | Tue Aug 12 19:10:41 2025 (20 secs) | 攻擊開始時間與持續時間(20 秒)。 |
Time. Estimated | Tue Aug 12 19:11:01 2025 (0 secs) | 預估結束時間與剩餘時間(已完成)。 |
Kernel. Feature | Pure Kernel | 使用純演算法核心(不是優化 kernel)。 |
Guess. Mask | ?a?a?a?a?a [5] | 嘗試的 mask 為長度 5 的全字元集(?a = 大小寫、數字、符號,95 種字元)。 |
Guess. Queue | 5/6 (83.33%) | 此次任務中第 5 個 mask(共 6 個)正在執行,完成度 83.33%。 |
Speed.#1 | 383.9 MH/s (0.31ms) @ Accel:64 Loops:11 Thr:64 Vec:1 | 單張 GPU 每秒嘗試 3.839 億組密碼,批處理延遲 0.31 毫秒,其他為 GPU 工作設定值。 |
Recovered | 0/1 (0.00%) Digests | 目標共 1 筆 hash,已破解 0 筆。 |
Progress | 7737809375/7737809375 (100.00%) | 已完成所有可能組合(95^5 = 7,737,809,375),完成率 100%。 |
Rejected | 0/7737809375 (0.00%) | 沒有任何候選密碼被篩掉。 |
Restore. Point | 81450625/81450625 (100.00%) | 斷點儲存的進度也已完成。 |
Candidate. Engine | — | 顯示候選產生器資訊(未特別輸出細節)。 |
Salt | 0 Amplifier:88-95 Iteration:0-11 | Hashcat 內部對 salt 與計算批次的描述(與破解邏輯有關,不影響你設定 mask)。 |
Candidates.#1 | ](z}~ -> 3 | 範例顯示剛跑過與即將嘗試的候選密碼。 |
Hashcat Status 狀態對照表
狀態名稱 | 說明 |
---|---|
Cracked | 已找到目標密碼(至少一個 hash 被破解)。 |
Exhausted | 已經嘗試完設定的密碼空間,但沒有找到任何正確密碼。 |
Aborted | 使用者手動中斷(Ctrl+C 或系統訊號終止)。 |
Quit | 使用者輸入 q 或 QUIT 命令結束。 |
Running | 正在執行破解(持續嘗試中)。 |
Paused | 使用者輸入 p 暫停,或因其他原因暫停(例如 GPU 過熱)。 |
Resumed | 從暫停狀態繼續執行。 |
Checkpoint | 正在儲存進度檔(–restore 可用來續跑)。 |
Bypass | 略過某些已經標記的 hash(通常是已經破解的)。 |
Stopped | 任務完成或被終止(包含正常結束與錯誤結束)。 |
Error | 執行過程中發生錯誤(例如檔案讀取失敗、GPU 初始化錯誤等)。 |