hashcat 是一套開源 (MIT License) 的離線密碼破解軟體,還能利用顯示卡 GPU 加快破解速度。其官網宣稱是「世界上最快的密碼破解工具」,廣泛支援許多常用的雜湊值演算法,以及破解攻擊模式。
「深入 hashcat 系列」是針對想要深耕資安領域的你,所撰寫的一系列文章。每篇文章針對 hashcat 其中一個參數、參數值或功能,進行說明,並搭配實做指令範例,幫助你快速掌握 hashcat 。
我們在前篇文章有提到 Combinator Attack,能組合 2 個的字典檔進行破解。而這次談到的 Hybrid Attack (綜合攻擊模式),則是能混合字典檔與 Mask Mode 進行破解。並套用至 hashcat 進行比對,確認密碼是否為字典檔中的單字。
*請留意文章中提到的工具軟體,請在授權環境下執行測試與使用,禁止在非授權環境下執行!
Photo by Michael Sum on Unsplash
Hybrid Attack Mode (混合攻擊模式)
人取密碼的時候,有時喜歡用英文名字加上數字組合。不管是,後綴數字(-a 6 mode),或是前綴數字 (-a 7 mode) 都是現今流行的取密碼習慣。例如,字典檔一樣截取美國國家社會安全局網頁公告 1922 年到 2021 年 100 個美國最常見的名字,依字母順序排列如下:
James
Robert
John
Michael
David
William
Richard
Joseph
Thomas
...
Ralph
Eugene
Russell
Bobby
Mason
Philip
Louis
ref: https://www.ssa.gov/oact/babynames/decades/century.html
直接利用 hashcat 的 hybrid attack mode (-a 6),來進行字典檔與後綴數字的組合。透過 --stdout 的選項,可以直接產生候選字典檔。
$ hashcat -a 6 name.txt ?d?d?d?d --stdout > list.txt
$ cat list.txt
James1234
James0801
James2001
James3101
James9801
...
David8877
David7877
David6523
David1991
David0112
....
William8534
William7477
William6923
William1055
William0255
留意到 hashcat 產生出來的候選字典檔,並不是按照順序逐字產生的,而是有一定亂數排序而成。產生完的字典檔,再用先前文章提到的 Straight Mode (-a 0),就可以進行破解了。 比方說,我們要破解的密碼是 George0502,MD5 雜湊值是 b607418f5aa54e5a7d6b99b18c0cd87a 。
$ echo -n "George0502" |md5sum |sed -e 's/ -//g' > hash.txt
$ cat hash.txt
b607418f5aa54e5a7d6b99b18c0cd87a
$ hashcat -a 0 -m 0 hash.txt list.txt
hashcat (v6.2.5) starting
...
Host memory required for this attack: 2 MB
Dictionary cache built:
* Filename..: list.txt
* Passwords.: 1000000
* Bytes.....: 10720000
* Keyspace..: 1000000
* Runtime...: 0 secs
b607418f5aa54e5a7d6b99b18c0cd87a:George0502
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 0 (MD5)
Hash.Target......: b607418f5aa54e5a7d6b99b18c0cd87a
Time.Started.....: Sun Dec 25 15:04:44 2022 (0 secs)
Time.Estimated...: Sun Dec 25 15:04:44 2022 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (list.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 12318.1 kH/s (0.20ms) @ Accel:1024 Loops:1 Thr:1 Vec:16
Recovered........: 1/1 (100.00%) Digests
Progress.........: 131072/1000000 (13.11%)
Rejected.........: 0/131072 (0.00%)
Restore.Point....: 122880/1000000 (12.29%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: Kenneth9102 -> Jason8605
Hardware.Mon.#1..: Temp: 66c Util: 20%
若是要直接破解,也可利用 -a 6 進行密碼破解,效果就如同下面執行結果。留意到 keyspace 是 100 萬(100 * 10 * 10 * 10 * 10),一百個名字乘上 4 個 0 ~ 9 數字的組合,總共是 100 萬組候選密碼。
$ hashcat -a 6 -m 0 hash.txt name.txt ?d?d?d?d
hashcat (v6.2.5) starting
...
Dictionary cache hit:
* Filename..: name.txt
* Passwords.: 100
* Bytes.....: 672
* Keyspace..: 1000000
...
b607418f5aa54e5a7d6b99b18c0cd87a:George0502
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 0 (MD5)
Hash.Target......: b607418f5aa54e5a7d6b99b18c0cd87a
Time.Started.....: Sun Dec 25 15:11:10 2022 (0 secs)
Time.Estimated...: Sun Dec 25 15:11:10 2022 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (name.txt), Left Side
Guess.Mod........: Mask (?d?d?d?d) [4], Right Side
Guess.Queue.Base.: 1/1 (100.00%)
Guess.Queue.Mod..: 1/1 (100.00%)
Speed.#1.........: 46239.5 kH/s (2.01ms) @ Accel:64 Loops:1024 Thr:1 Vec:16
Recovered........: 1/1 (100.00%) Digests
Progress.........: 204800/1000000 (20.48%)
Rejected.........: 0/204800 (0.00%)
Restore.Point....: 0/100 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:1024-2048 Iteration:0-1024
Candidate.Engine.: Device Generator
Candidates.#1....: James9102 -> Louis8605
Hardware.Mon.#1..: Temp: 72c Util: 14%
而前綴數字的破解方式 (-a 7) 也如同後綴數字 (-a 6),假如我們要破解的密碼是 0699Ethan,MD5 雜湊值是 4ffdb75dae86ffc2f071fd53d5dd977c。產生雜湊值的方式如下:
$ echo -n "0699Ethan" |md5sum |sed -e 's/ -//g' > hash2.txt
$ cat hash2.txt
4ffdb75dae86ffc2f071fd53d5dd977c
利用 hashcat Hybrid attack mode (-a 7) 直接進行破解,指令如下:
$ hashcat -a 7 -m 0 hash2.txt ?d?d?d?d name.txt
...
Dictionary cache hit:
* Filename..: name.txt
* Passwords.: 100
* Bytes.....: 672
* Keyspace..: 1000000
4ffdb75dae86ffc2f071fd53d5dd977c:0699Ethan
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 0 (MD5)
Hash.Target......: 4ffdb75dae86ffc2f071fd53d5dd977c
Time.Started.....: Sun Dec 25 15:25:29 2022 (0 secs)
Time.Estimated...: Sun Dec 25 15:25:29 2022 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (name.txt), Right Side
Guess.Mod........: Mask (?d?d?d?d) [4], Left Side
Guess.Queue.Base.: 1/1 (100.00%)
Guess.Queue.Mod..: 1/1 (100.00%)
Speed.#1.........: 47597.8 kH/s (8.16ms) @ Accel:512 Loops:100 Thr:1 Vec:16
Recovered........: 1/1 (100.00%) Digests
Progress.........: 409600/1000000 (40.96%)
Rejected.........: 0/409600 (0.00%)
Restore.Point....: 0/10000 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-100 Iteration:0-100
Candidate.Engine.: Device Generator
Candidates.#1....: 1234James -> 4006Louis
Hardware.Mon.#1..: Temp: 72c Util: 14%
結語
hashcat 是如此強大,可以讓我們組合字典檔與遮罩模式(Mask mode),進行暴力密碼破解。到目前為止,我們已經學會應用 hashcat 4 種 不同的破解攻擊模式,搭配實做範例,相信你一定更能了解。
如果這篇文章有幫助到你,請幫我再下面按幾下 Like 讚鼓勵我,或是點選 「Buy me a coffee」,請我喝一杯咖啡,並將文章分享給你的朋友。
參考文獻:
深入 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)
