パスワード探索ツール「hastcat」を使用して、ハッシュ化されたパスワードなどの元の値を探索してみる。
インストール
Mac の場合 Homebrew でインストールできる。
$ brew install hashcat
マニュアル
詳しい使用方法は Wiki にまとめられている。
hashcat [hashcat wiki]
使用方法
書式
基本的な書式は以下となる。
hashcat -m <Hash-type> -a <Attack-mode> <探索するハッシュ値を記述したファイル> <文字種または辭書ファイル>
Hash-type
- [ Hash modes ] -
# | Name | Category
======+==================================================+============
900 | MD4 | Raw Hash
0 | MD5 | Raw Hash
100 | SHA1 | Raw Hash
1300 | SHA2-224 | Raw Hash
1400 | SHA2-256 | Raw Hash
10800 | SHA2-384 | Raw Hash
1700 | SHA2-512 | Raw Hash
...
Hash-type では、ハッシュ値のアルゴリズムを使用する。例えば md5 なら -m 0
となる。また、sha1(md5($pass))
のように「ハッシュ値のハッシュ値」の探索も用意されている。
Attack-mode
- [ Attack Modes ] -
# | Mode
===+======
0 | Straight
1 | Combination
3 | Brute-force
6 | Hybrid Wordlist + Mask
7 | Hybrid Mask + Wordlist
Attack-mode では、探索モードを指定する。総当り (brute force) なら -a 3
となる。
文字種
総当りモードで使用する文字種は、第2引数で指定する。デフォルトで指定できる文字種は以下が用意されている。
? | Charset
===+=========
l | abcdefghijklmnopqrstuvwxyz
u | ABCDEFGHIJKLMNOPQRSTUVWXYZ
d | 0123456789
h | 0123456789abcdef
H | 0123456789ABCDEF
s | !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
a | ?l?u?d?s
b | 0x00 - 0xff
例えば「半角英数字と記号5文字」なら ?a?a?a?a?a
となる。
実行例
前提
「文字列の md5 ハッシュ値を取って、さらにその sha1 ハッシュ値を取ったもの」を総当りで探索してみる。
$ php -r 'echo sha1(md5("Hello"));' > hash.txt
$ cat hash.txt
212c74b6b176a383b9da995e439471fa015256a9
つまり、sha1(md5($pass)) == "212c74b6b176a383b9da995e439471fa015256a9"
となる文字列 $pass
を探索する。
実行結果
$ hashcat -m 4700 -a 3 hash.txt '?a?a?a?a?a'
hashcat (v6.1.1) starting...
(略)
212c74b6b176a383b9da995e439471fa015256a9:Hello
Session..........: hashcat
Status...........: Cracked
Hash.Name........: sha1(md5($pass))
Hash.Target......: 212c74b6b176a383b9da995e439471fa015256a9
Time.Started.....: Fri Apr 9 10:27:38 2021 (3 secs)
Time.Estimated...: Fri Apr 9 10:27:41 2021 (0 secs)
Guess.Mask.......: ?a?a?a?a?a [5]
Guess.Queue......: 1/1 (100.00%)
Speed.#2.........: 52216.2 kH/s (4.94ms) @ Accel:8 Loops:2 Thr:512 Vec:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 163840000/7737809375 (2.12%)
Rejected.........: 0/163840000 (0.00%)
Restore.Point....: 1638400/81450625 (2.01%)
Restore.Sub.#2...: Salt:0 Amplifier:48-50 Iteration:0-2
Candidates.#2....: GO_ ! -> H`Q02
Started: Fri Apr 9 10:27:37 2021
Stopped: Fri Apr 9 10:27:42 2021
このように、「Status: Cracked」となり、ハッシュ値から元の文字列「Hello」を発見できた。
なお手元の環境では、半角英数字と記号の7文字総当りで約24時間かかるらしい。
コメント