Hash 的一些爆破方法

前陣子玩了 Digital Overdose 2021 Autumn CTF ,其中有一個分類叫 Hash Cracking ,共有 7 題,正好讓我整理和複現一下解 Hash 的一些工具和解法。

螢幕截圖 2021-10-21 下午2 47 13

總結

一、找先出 Hash 的類型 (例如使用 hashidHash Analyzer)

二、針對該 Hash 類型用一些通用網站爆破 (例如 CrackStation)

三、針對該 Hash 使用工具爆破 (例如 John the Ripperhashcat )

四、加入字典檔爆破 (例如 rockyou.txt wordlist)

我把總結寫在前,是因為這一篇著重在工具的使用上,好讓我日後遇到類似的題目時,能夠快速找回合適的方法和工具。

基本上要用到的 terminal 工具就是 hashidhashcatjohn,還有下載一份字典檔 rockyou.txt,具體安裝的方法我不在這裡一一教學,身為駭客就想辦法把這些東西搞到手吧。

題目與題解

Hash :

Hash 1 : 54a09c22fc0d1af44865e411ff6e8d50

Hash 2 : 52ed4b109a2662fdf15edfd95632667869fc5802

Hash 3 : 550b57fc03f0a800fab603cb8eb4e29fbd5c76655d7ab995b1fe9c6ddf963a3d2627ebd79e067022f792bb2490a260c051aecbc4a7aedb3ec5dbf9439cd66f81

Hash 4 : 451716a045ca5ec7f25e191ab5244c61aaeeb008c4753a2065e276f1baba4723

Hash 5 : $2a$10$QlR/ZlXgQPWfx9JmRffMZutcL3o3w6JAiRbfvGda4u09lrfOvgcH6

Hash 6 : $1$veryrand$QetWu27IoJ2FFSG30xKAQ.

Hash 7 : $6$veryrandomsalt$t8EIWEiDpWYzeC1c44q7f6ZENOuO2wagnrJBPs4d/PptWxAxlnH7qRcf0xnKagaOEHBN9dGBV5Y1syJSB3s6H1

解答 :

Ans 1 : phantomlover

Ans 2 : fishchips

Ans 3 : mommadobbins

Ans 4 : happyfamily

Ans 5 : cowabunga

Ans 6 : scottiebanks

Ans 7 : igetmoney

題目-解答分析:

題目 長度 類型 CrackStation 字典檔 特徵
Hash 1 32(128 bit) MD5 128 bit
Hash 2 40(160 bit) SHA1 160 bit
Hash 3 128(512 bit) SHA512 512 bit
Hash 4 64(256 bit) GOST R 34.11-94   與 SHA256 一樣長度
Hash 5 60 Blowfish(OpenBSD)   開頭為 $2*$
Hash 6 34(128 bit) MD5 Crypt   開頭為 $1$
Hash 7 104 SHA-512 Crypt   開頭為 $6$

如果從事後諸葛亮的角度去分析,全部的 plaintext 都在字典檔內,也就是說只要找對 Hash 類型和用對了方法,就必定能解出。(這只是 CTF 的難度設定,現實情況可不在字典裡)

Hash Cracking 題目

Hash 1

54a09c22fc0d1af44865e411ff6e8d50

先用 hashid 分析 Hash 類型 :

$ hashid "54a09c22fc0d1af44865e411ff6e8d50"
Analyzing '54a09c22fc0d1af44865e411ff6e8d50'
[+] MD2 
[+] MD5 
[+] MD4 
[+] Double MD5 
[+] LM 
[+] RIPEMD-128 
[+] Haval-128 
[+] Tiger-128 
[+] Skein-256(128) 
[+] Skein-512(128) 
[+] Lotus Notes/Domino 5 
[+] Skype 
[+] Snefru-128 
[+] NTLM 
[+] Domain Cached Credentials 
[+] Domain Cached Credentials 2 
[+] DNSSEC(NSEC3) 
[+] RAdmin v2.x 

可能為 MD2 或者 MD5

解法 1:

線上破解 : CrackStation

螢幕截圖 2021-10-21 下午12 23 18

解法 2:

針對 MD5 使用 hashcat

查表 Hashcat Table :

Hash-Mode Hash-Name Example
0 MD5 8743b52063cd84097a65d1633f5c74f5

確認 MD5 的 mode 為 0,即參數 -m 0

$ hashcat -m 0 -O hash1.txt ~/Downloads/rockyou.txt

亦可以輸出到 hash1.output:

$ hashcat -m 0 -O hash1.txt ~/Downloads/rockyou.txt --show -o hash1.output
$ cat hash1.output 
54a09c22fc0d1af44865e411ff6e8d50:phantomlover

Hash 2

52ed4b109a2662fdf15edfd95632667869fc5802

先用 hashid 分析 Hash 類型 :

$ hashid "52ed4b109a2662fdf15edfd95632667869fc5802"
Analyzing '52ed4b109a2662fdf15edfd95632667869fc5802'
[+] SHA-1 
[+] Double SHA-1 
[+] RIPEMD-160 
[+] Haval-160 
[+] Tiger-160 
[+] HAS-160 
[+] LinkedIn 
[+] Skein-256(160) 
[+] Skein-512(160) 

比較可能是 SHA-1

解法 1:

線上破解 : CrackStation

螢幕截圖 2021-10-21 下午12 39 51

解法 2:

針對 SHA-1 使用 hashcat

查表 Hashcat Table :

Hash-Mode Hash-Name Example
100 SHA1 b89eaac7e61417341b710b727768294d0e6a277b

確認 SHA1 的 mode 為 100,即參數 -m 100

$ hashcat -m 100 -O hash2.txt ~/Downloads/rockyou.txt

亦可以輸出到 hash2.output:

$ hashcat -m 100 -O hash2.txt ~/Downloads/rockyou.txt --show -o hash2.output
$ cat hash2.output 
52ed4b109a2662fdf15edfd95632667869fc5802:fishchips

解法 3:

使用 John the Ripper

$ john --wordlist=~/Downloads/rockyou.txt hash2.txt
$ john --show hash2.txt                            
?:fishchips

Hash 3

550b57fc03f0a800fab603cb8eb4e29fbd5c76655d7ab995b1fe9c6ddf963a3d2627ebd79e067022f792bb2490a260c051aecbc4a7aedb3ec5dbf9439cd66f81

先用 hashid 分析 Hash 類型 :

$ hashid "550b57fc03f0a800fab603cb8eb4e29fbd5c76655d7ab995b1fe9c6ddf963a3d2627ebd79e067022f792bb2490a260c051aecbc4a7aedb3ec5dbf9439cd66f81"
Analyzing '550b57fc03f0a800fab603cb8eb4e29fbd5c76655d7ab995b1fe9c6ddf963a3d2627ebd79e067022f792bb2490a260c051aecbc4a7aedb3ec5dbf9439cd66f81'
[+] SHA-512 
[+] Whirlpool 
[+] Salsa10 
[+] Salsa20 
[+] SHA3-512 
[+] Skein-512 
[+] Skein-1024(512) 

比較有可能是 SHA-512

解法 1:

線上破解 : CrackStation

螢幕截圖 2021-10-21 下午12 44 42

解法 2:

針對 SHA-512 使用 hashcat

查表 Hashcat Table :

Hash-Mode Hash-Name Example
1700 SHA2-512 82a9dda829eb7f8ffe9fbe49e45d47d2dad9664fbb7adf72492e3c81ebd3e29134d9bc12212bf83c6840f10e8246b9db54a4859b7ccd0123d86e5872c1e5082f

確認 SHA2-512 的 mode 為 1700,即參數 -m 1700

$ hashcat -m 1700 -O hash3.txt ~/Downloads/rockyou.txt

亦可以輸出到 hash3.output:

$ hashcat -m 1700 -O hash3.txt ~/Downloads/rockyou.txt --show -o hash3.output
$ cat hash3.output 
550b57fc03f0a800fab603cb8eb4e29fbd5c76655d7ab995b1fe9c6ddf963a3d2627ebd79e067022f792bb2490a260c051aecbc4a7aedb3ec5dbf9439cd66f81:mommadobbins

Hash 4

451716a045ca5ec7f25e191ab5244c61aaeeb008c4753a2065e276f1baba4723

解法 1:

從第 4 題這裡開始,線上破解已經無效,但同樣的我們可以先用 hashid 去分析 Hash 類型

$ hashid "451716a045ca5ec7f25e191ab5244c61aaeeb008c4753a2065e276f1baba4723"
Analyzing '451716a045ca5ec7f25e191ab5244c61aaeeb008c4753a2065e276f1baba4723'
[+] Snefru-256 
[+] SHA-256 
[+] RIPEMD-256 
[+] Haval-256 
[+] GOST R 34.11-94 
[+] GOST CryptoPro S-Box 
[+] SHA3-256 
[+] Skein-256 
[+] Skein-512(256) 

這裡有個比較坑的地方,就是會以為 Hash 類型是 Snefru-256 或 SHA-256,但實際上是 GOST R 34.11-94,問我怎麼知道的?當然是逐個試出來的(暴力破解的精髓就是耐性

查表 Hashcat Table :

Hash-Mode Hash-Name Example
6900 GOST R 34.11-94 df226c2c6dcb1d995c0299a33a084b201544293c31fc3d279530121d36bbcea9

確認 GOST R 34.11-94 的 mode 為 6900,即參數 -m 6900

$ hashcat -m 6900 -O hash4.txt ~/Downloads/rockyou.txt

亦可以輸出到 hash4.output:

$ hashcat -m 6900 -O hash4.txt ~/Downloads/rockyou.txt --show -o hash4.output
$ cat hash4.output
451716a045ca5ec7f25e191ab5244c61aaeeb008c4753a2065e276f1baba4723:happyfamily

解法 2:

使用 John the Ripper

$ john --wordlist=~/Downloads/rockyou.txt hash4.txt
$ john --show hash4.txt                            
?:happyfamily

Hash 5

$2a$10$QlR/ZlXgQPWfx9JmRffMZutcL3o3w6JAiRbfvGda4u09lrfOvgcH6

同樣先用 hadhid 查看類型,但這邊有一個值得注意的地方,Hash 中含有多個 $ 符號,必須使用跳脫字元。

$ hashid "\$2a\$10\$QlR/ZlXgQPWfx9JmRffMZutcL3o3w6JAiRbfvGda4u09lrfOvgcH6"
Analyzing '$2a$10$QlR/ZlXgQPWfx9JmRffMZutcL3o3w6JAiRbfvGda4u09lrfOvgcH6'
[+] Blowfish(OpenBSD) 
[+] Woltlab Burning Board 4.x 
[+] bcrypt 

查表 Hashcat Table :

Hash-Mode Hash-Name Example
3200 bcrypt $2*$, Blowfish (Unix) $2a$05$LhayLxezLhK1LhWvKxCyLOj0j1u.Kj0jZ0pEmm134uzrQlFvQJLF6

確認 Blowfish 的 mode 為 3200,即參數 -m 3200

$ hashcat -m 3200 -O hash5.txt ~/Downloads/rockyou.txt

不過這邊有個趣事分享一下,就是關於算力-時間的問題,看看下面 output 的結果,就能看見雖然我是把 hash 給算出來,但我所使用的 2015 年 Macbook Air 11 吋實際共花了 36 分鐘 55 秒才完成,而且還是因為很幸運的,答案 cowabunga 在我字典檔裡排在前 0.37% 的位置(rockyou.txt 字典檔裡共 14344391 行字串,它約在第 52562 行),如果我要把整個字典檔跑完,預計需要 6 天的時間。

$2a$10$QlR/ZlXgQPWfx9JmRffMZutcL3o3w6JAiRbfvGda4u09lrfOvgcH6:cowabunga
                    
Session..........: hashcat
Status...........: Cracked
Hash.Name........: bcrypt $2*$, Blowfish (Unix)
Hash.Target......: $2a$10$QlR/ZlXgQPWfx9JmRffMZutcL3o3w6JAiRbfvGda4u09...OvgcH6
Time.Started.....: Thu Oct 21 13:04:39 2021 (36 mins, 55 secs)
Time.Estimated...: Thu Oct 21 13:41:34 2021 (0 secs)
Guess.Base.......: File (/Users/ivanmak/Downloads/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#2.........:       24 H/s (30.74ms) @ Accel:1 Loops:1 Thr:16 Vec:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 52992/14344384 (0.37%)
Rejected.........: 0/52992 (0.00%)
Restore.Point....: 52224/14344384 (0.36%)
Restore.Sub.#2...: Salt:0 Amplifier:0-1 Iteration:1023-1024
Candidates.#2....: lights1 -> 091803

Started: Thu Oct 21 13:04:27 2021
Stopped: Thu Oct 21 13:41:35 2021

但不過我看了人家的 write up,他的電腦解出用時才 1 分 23 秒,就算跑完整個字典檔預計耗時也才 6 小時 41 分。(實際感受的電腦算力的重要性)

亦可以輸出到 hash5.output:

$ hashcat -m 3200 -O hash5.txt ~/Downloads/rockyou.txt --show -o hash5.output
$ cat hash5.output
$2a$10$QlR/ZlXgQPWfx9JmRffMZutcL3o3w6JAiRbfvGda4u09lrfOvgcH6:cowabunga

Hash 6

$1$veryrand$QetWu27IoJ2FFSG30xKAQ.

先用 hashid 分析 Hash 類型(記得 $ 要加上跳脫字元) :

$ hashid "\$1\$veryrand\$QetWu27IoJ2FFSG30xKAQ."
Analyzing '$1$veryrand$QetWu27IoJ2FFSG30xKAQ.'
[+] MD5 Crypt 
[+] Cisco-IOS(MD5) 
[+] FreeBSD MD5 

似乎是 MD5 Crypt

查表 Hashcat Table :

Hash-Mode Hash-Name Example
500 md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)^2 $1$28772684$iEwNOgGugqO9.bIz5sk8k/

確認 md5crypt 的 mode 為 500,即參數 -m 500

$ hashcat -m 500 -O hash6.txt ~/Downloads/rockyou.txt

亦可以輸出到 hash6.output:

$ hashcat -m 500 -O hash6.txt ~/Downloads/rockyou.txt --show -o hash6.output
$ cat hash6.output
$1$veryrand$QetWu27IoJ2FFSG30xKAQ.:scottiebanks

Hash 7

$6$veryrandomsalt$t8EIWEiDpWYzeC1c44q7f6ZENOuO2wagnrJBPs4d/PptWxAxlnH7qRcf0xnKagaOEHBN9dGBV5Y1syJSB3s6H1

先用 hashid 分析 Hash 類型(記得 $ 要加上跳脫字元) :

$ hashid "\$6\$veryrandomsalt\$t8EIWEiDpWYzeC1c44q7f6ZENOuO2wagnrJBPs4d/PptWxAxlnH7qRcf0xnKagaOEHBN9dGBV5Y1syJSB3s6H1"
Analyzing '$6$veryrandomsalt$t8EIWEiDpWYzeC1c44q7f6ZENOuO2wagnrJBPs4d/PptWxAxlnH7qRcf0xnKagaOEHBN9dGBV5Y1syJSB3s6H1'
[+] SHA-512 Crypt 

可以肯定是 SHA-512 Crypt

查表 Hashcat Table :

Hash-Mode Hash-Name Example
1800 sha512crypt $6$, SHA512 (Unix)^2 $6$52450745$k5ka2p8bFuSmoVT1tzOyyuaREkkKBcCNqoDKzYiJL9RaE8yMnPgh2XzzF0NDrUhgrcLwg78xs1w5pJiypEdFX/

確認 sha512crypt 的 mode 為 1800,即參數 -m 1800

$ hashcat -m 1800 -O hash7.txt ~/Downloads/rockyou.txt

亦可以輸出到 hash7.output:

$ hashcat -m 1800 -O hash7.txt ~/Downloads/rockyou.txt --show -o hash7.output
$ cat hash7.output
$6$veryrandomsalt$t8EIWEiDpWYzeC1c44q7f6ZENOuO2wagnrJBPs4d/PptWxAxlnH7qRcf0xnKagaOEHBN9dGBV5Y1syJSB3s6H1:igetmoney