hashcat の使い方

パスワード探索ツール「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時間かかるらしい。

コメント

タイトルとURLをコピーしました