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)