hashcat 是一套開源 (MIT License) 的離線密碼破解軟體,還能利用顯示卡 GPU 加快破解速度。其官網宣稱是「世界上最快的密碼破解工具」,廣泛支援許多常用的雜湊值演算法,以及破解攻擊模式。
「深入 hashcat 系列」是針對想要深耕資安領域的你,所撰寫的一系列文章。每篇文章針對 hashcat 其中一個參數、參數值或功能,進行說明,並搭配實做指令範例,幫助你快速掌握 hashcat 。
*請留意文章中提到的工具軟體,請在授權環境下執行測試與使用,禁止在非授權環境下執行!
Photo by Michael Sum on Unsplash
文章目錄
hashcat Mask Mode
接下來,要介紹 hashcat 其中一個攻擊模式 (Attack Mode) ,Mask Mode。攻擊模式 (Attack Mode) 在 hastcat 參數是 -a <num>
,<num>
是數字的意思。Mask Mode 的數字號碼是 3。
觀察人類取密碼的習慣,用傳統的暴力破解方式太沒效率,故 hashcat 發明了 Mask mode。比方說,如果要破解的密碼是 Bobby2003,由於人類幾乎不會把大寫字母放在第二個或第三個字元,所以可以利用 Mask mode 的規則,大幅降低破解時間。Mask mode 內建的代表符號如下:
- ?u: 大寫字母
- ?l: 小寫字母
- ?d: 數字
- ?s: 符號
- ?h: 0-9, a-f
- ?H: 0-9, A-F
- ?a: 大寫字母、小寫字母、數字、與符號
- ?b: 0x00-0xff
所以破解 Bobby2003,Mask Mode 參數可以寫成,
-a 3 hash.txt ?u?l?l?l?l?d?d?d?d
再舉一個例子,字串 99zz 的 MD5 雜湊值(-m 0),是 e1594afd390685fd4d9edbf4f42318ea
。
利用 Mask mode 破解可以寫成 :
hashcat -m 0 -a 3 hash.txt ?d?d?l?l
要留意 pattern 「?d?d?l?l」要寫在最後面,否則會出現 「Token length exception No hashes loaded」的錯誤訊息。執行結果如下:
hashcat (v5.1.0) starting...
...
e1594afd390685fd4d9edbf4f42318ea:99zz
Session..........: hashcat
Status...........: Cracked
Hash.Type........: MD5
Hash.Target......: e1594afd390685fd4d9edbf4f42318ea
Time.Started.....: Sun Aug 28 09:28:56 2022 (0 secs)
Time.Estimated...: Sun Aug 28 09:28:56 2022 (0 secs)
Guess.Mask.......: ?d?d?l?l [4]
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 139.0 MH/s (0.10ms) @ Accel:1024 Loops:10 Thr:256 Vec:1
Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 67600/67600 (100.00%)
Rejected.........: 0/67600 (0.00%)
Restore.Point....: 0/6760 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-10 Iteration:0-10
Candidates.#1....: 12ss -> 67qf
Hardware.Mon.#1..: Temp: 43c Util: 43% Core:1032MHz Mem:2505MHz Bus:16
...
另外,還提供了客製化參數 ?1, ?2, ?3, ?4,可以個別用 -1
(--custom-charset1
), -2
(--custom-charset2
), -3
(--custom-charset3
), -4
(--custom-charset4
) 先行定義字母 pattern。
比方說,要同時破解密碼字串 ab12 跟 cd34 ,Mask Mode 可以寫成以下規則:
$ hashcat -m 0 -a 3 -1 ?l?d hash.txt ?1?1?1?1
執行結果如下:
hashcat (v5.1.0) starting...
...
749d7048edd2de31c2c7a88d4d196254:ab12
9497926b4d270dc6e5a538e7b0d4c789:34cd
Session..........: hashcat
Status...........: Cracked
Hash.Type........: MD5
Hash.Target......: hash.txt
Time.Started.....: Sun Aug 28 09:37:48 2022 (0 secs)
Time.Estimated...: Sun Aug 28 09:37:48 2022 (0 secs)
Guess.Mask.......: ?1?1?1?1 [4]
Guess.Charset....: -1 ?l?d, -2 Undefined, -3 Undefined, -4 Undefined
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 613.6 MH/s (1.25ms) @ Accel:256 Loops:36 Thr:256 Vec:1
Recovered........: 2/2 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 1679616/1679616 (100.00%)
Rejected.........: 0/1679616 (0.00%)
Restore.Point....: 0/46656 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-36 Iteration:0-36
Candidates.#1....: sari -> xqxv
Hardware.Mon.#1..: Temp: 47c Util: 20% Core:1189MHz Mem:2505MHz Bus:16
以上設定只能固定密碼長度,比方說,如果想從 2 碼 破解到 4 碼,可以使用 --increment
, --increment-min
, --increment-max
參數。
若要同時破解 「uu」 與 「99cc」的密碼字串。Mask Mode 可以寫成以下規則:
$ hashcat -a 3 -1 ?l?d --increment --increment-min 2 --increment-max 4 hash.txt ?1?1?1?1
執行結果如下,觀察起來 hashcat 是會執行 3 次 (2碼, 3碼, 4碼)。
6277e2a7446059985dc9bcf0a4ac1a8f:uu
Session..........: hashcat
Status...........: Exhausted
Hash.Type........: MD5
Hash.Target......: hash.txt
Time.Started.....: Sun Aug 28 09:45:18 2022 (0 secs)
Time.Estimated...: Sun Aug 28 09:45:18 2022 (0 secs)
Guess.Mask.......: ?1?1 [2]
Guess.Charset....: -1 ?l?d, -2 Undefined, -3 Undefined, -4 Undefined
Guess.Queue......: 1/3 (33.33%)
Speed.#1.........: 5654.4 kH/s (0.09ms) @ Accel:256 Loops:36 Thr:256 Vec:1
Recovered........: 1/2 (50.00%) Digests, 0/1 (0.00%) Salts
Progress.........: 1296/1296 (100.00%)
Rejected.........: 0/1296 (0.00%)
Restore.Point....: 36/36 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-36 Iteration:0-36
Candidates.#1....: sa -> xq
Hardware.Mon.#1..: Temp: 43c Util: 40% Core:1032MHz Mem:2505MHz Bus:16
...
Session..........: hashcat
Status...........: Exhausted
Hash.Type........: MD5
Hash.Target......: hash.txt
Time.Started.....: Sun Aug 28 09:45:18 2022 (0 secs)
Time.Estimated...: Sun Aug 28 09:45:18 2022 (0 secs)
Guess.Mask.......: ?1?1?1 [3]
Guess.Charset....: -1 ?l?d, -2 Undefined, -3 Undefined, -4 Undefined
Guess.Queue......: 2/3 (66.67%)
Speed.#1.........: 202.7 MH/s (0.09ms) @ Accel:256 Loops:36 Thr:256 Vec:1
Recovered........: 1/2 (50.00%) Digests, 0/1 (0.00%) Salts
Progress.........: 46656/46656 (100.00%)
Rejected.........: 0/46656 (0.00%)
Restore.Point....: 1296/1296 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-36 Iteration:0-36
Candidates.#1....: sar -> xqx
Hardware.Mon.#1..: Temp: 44c Util: 64% Core:1110MHz Mem:2505MHz Bus:16
...
8ac564e7709879bdd30a5f0815d8e6e1:99cc
Session..........: hashcat
Status...........: Cracked
Hash.Type........: MD5
Hash.Target......: hash.txt
Time.Started.....: Sun Aug 28 09:45:19 2022 (0 secs)
Time.Estimated...: Sun Aug 28 09:45:19 2022 (0 secs)
Guess.Mask.......: ?1?1?1?1 [4]
Guess.Charset....: -1 ?l?d, -2 Undefined, -3 Undefined, -4 Undefined
Guess.Queue......: 3/3 (100.00%)
Speed.#1.........: 630.2 MH/s (1.26ms) @ Accel:256 Loops:36 Thr:256 Vec:1
Recovered........: 2/2 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 1679616/1679616 (100.00%)
Rejected.........: 0/1679616 (0.00%)
Restore.Point....: 0/46656 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-36 Iteration:0-36
Candidates.#1....: sari -> xqxv
Hardware.Mon.#1..: Temp: 45c Util: 63% Core:1189MHz Mem:2505MHz Bus:16
Mask mode 是如此彈性,能幫助我們節省密碼破解時間。以上舉了4 個 Mask mode 的例子,希望能幫忙到讀者更能理解 Mask mode。如果你有問題,請你在下面的留言區留言,若你喜歡這篇文章,也請你幫忙分享給你的朋友。
參考資料
深入 hashcat 系列文章
- 深入 hashcat 系列:Mask Attack Mode
- 深入 hashcat 系列:Straight Attack Mode (字典攻擊模式)
- 深入 hashcat 系列:Combinator Attack Mode
- 深入 hashcat 系列:Hybrid Attack Mode (綜合攻擊模式)
- 深入 hashcat 系列:per-position Markov chain attack (上篇)
- hcstatgen 篇: per-position Markov chain attack – 深入 hashcat 系列文章
- 使用 hcstat2gen 產出 hcstat2 馬可夫鏈模型儲存格式: per-position Markov chain attack – 深入 hashcat 系列文章
- 使用 sp64 工具程式產出馬可夫鏈模型的字典清單 (Word generator)
- 使用 hashcat 產出馬可夫鏈模型的字典清單 (Word generator)