前陣子玩了 Digital Overdose 2021 Autumn CTF ,其中有一個分類叫 Hash Cracking ,共有 7 題,正好讓我整理和複現一下解 Hash 的一些工具和解法。
總結
一、找先出 Hash 的類型 (例如使用 hashid 或 Hash Analyzer)
二、針對該 Hash 類型用一些通用網站爆破 (例如 CrackStation)
三、針對該 Hash 使用工具爆破 (例如 John the Ripper 和 hashcat )
四、加入字典檔爆破 (例如 rockyou.txt wordlist)
我把總結寫在前,是因為這一篇著重在工具的使用上,好讓我日後遇到類似的題目時,能夠快速找回合適的方法和工具。
基本上要用到的 terminal 工具就是 hashid、hashcat 和 john,還有下載一份字典檔 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
解法 2:
針對 MD5 使用 hashcat
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
解法 2:
針對 SHA-1 使用 hashcat
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 --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
解法 2:
針對 SHA-512 使用 hashcat
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
,問我怎麼知道的?當然是逐個試出來的(暴力破解的精髓就是耐性)
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 --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
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
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
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