深入 hashcat 系列:Mask Attack Mode

by iok
發佈日期: 更新日期: 626 人次瀏覽 3 分鐘 閱讀時間
深入 hashcat 系列:Mask Attack Mode

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。如果你有問題,請你在下面的留言區留言,若你喜歡這篇文章,也請你幫忙分享給你的朋友。

參考資料

相關文章

留言