hashcatはWindows、Linux、macOSで利用可能なパスワードクラッカーです。ブルートフォース(総当たり)攻撃、辞書攻撃、マスク攻撃に対応しています。
マスクを使いこなすことによって大幅にクラックまでの時間を短縮できる優れたパスワードクラッカーです。
目次
リカバリ済みハッシュ
リカバリに成功したハッシュとパスワードは「hashcat.potfile」に記録されています。ハッシュファイルを指定してリカバリ済みのものを確認することができます。
$ hashcat --show hash.txt
リカバリできていないハッシュを表示するには「--left」オプションを使います。
$ hashcat --left hash.txt
リカバリ済みハッシュを自動的に削除する
hashcatを実行中にリカバリできたハッシュをハッシュファイルから削除するには「--remove」オプションを使います。
$ hashcat --remove -m 1500 -a 0 hash.txt
ハッシュタイプ(-m, --hash-type)
hashcatはJohn the Ripperのように自動的にハッシュタイプを判定する機能がないため実行時にハッシュタイプを指定する必要があります。
ハッシュタイプは「-m」もしくは「--hash-type」オプションで指定します。ハッシュタイプの指定に迷った場合はJohn the Ripperを使うと判明する場合があります。
DES形式の場合はハッシュタイプが 1500 になるので次のように指定します。
$ hashcat --remove -m 1500 -a 0 hash.txt wordlist.txt
ハッシュタイプの最新情報は公式サイトで確認してください。
https://hashcat.net/wiki/doku.php?id=example_hashes
マスク
マスクを使うと文字列+数字のようなパスワードフォーマットを指定することができます。
定義
マスク形式 | マスクの意味 | マスクに適用される内容 |
---|---|---|
?l | アルファベット小文字 | abcdefghijklmnopqrstuvwxyz |
?u | アルファベット大文字 | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
?d | 数字 | 0123456789 |
?s | 記号 | !"#$%&'()*+,-./:;<=>?@[]^_`{|}~ |
?a | ?l?u?d?sと同じ | すべての文字列 |
?b | 16進数 | 0x00 - 0xff |
マスクを指定する際にシングルクォートが必要かどうかはOSによって異なります。Unix系OSでは 「?」 をエスケープするためにシングルクォートで囲む必要があります。
※Windowsでルールをシングルクォートで囲むと「'」がパスワード文字列として認識されてしまうので注意が必要です
アルファベット小文字 7文字 + 数字1桁を表現するマスクは次のように指定します。
'?l?l?l?l?l?l?l?d'
カスタムマスク(-1, -2, -3, -4)
「アルファベット大文字」もしくは「小文字」 を表現する場合は次のようにしてカスタムマスクを定義する必要があります。
-1 '?l?u'
はじめの「-1」はカスタム定義の番号です。これで1番目のカスタムマスクが定義され、「?1」としてマスクを利用できます。カスタムマスクは4つまで定義でき、-2 xxx -3 xxx -4 xxx のようにして定義できます。
さきほど作成したカスタムマスクは'?1?1?1?1?1?1?1?d'
のように使うことができます。
$ hashcat -m 1500 -a 3 hash.txt -1 '?l?u' '?1?1?1?1?1?1?1?d'
マスクの長さを指定する(-i, --increment)
マスクの長さを指定したい場合に使います。
たとえば ?d?d?d?d とすると数字4桁(0000~9999)に限定されます。数字1桁~4桁の組み合わせ(0~9999)を指定したい場合は次のようにします。
$ hashcat -m 1500 -a 3 hash.txt --increment '?d?d?d?d'
桁数を限定することもできます。数字2桁~4桁(00~9999)にしたければ次のようにします。
$ hashcat -m 1500 -a 3 hash.txt --increment --increment-min 2 --increment-max 4 '?d?d?d?d'
もちろん、数字だけでなくアルファベットや記号でも同様の指定ができます。すべての文字列で7~8桁を指定したければ次のようにします。
$ hashcat -m 1500 -a 3 hash.txt --increment --increment-min 7 --increment-max 8 '?a?a?a?a?a?a?a?a'
ルールを適用する(-r)
予め用意されているルールファイル、あるいは自作のルールファイルを適用することができます。ルールファイルは「rules」ディレクトリに収められているので、次のように適用します。
$ hashcat -m 1500 -a 0 hash.txt wordlist.txt -r rules/best64.rule
アタックモード(-a, --attack-mode)
辞書攻撃やマスク攻撃、それらの組み合わせやブルートフォース攻撃など多彩な攻撃方法を選択できます。
アタックモード | アタック内容 |
---|---|
0 | 辞書攻撃 |
1 | 辞書同士の組み合わせ |
3 | ブルートフォース |
6 | 辞書+マスク |
7 | マスク+辞書 |
9 | アソシエート攻撃 |
辞書攻撃( -a 0 )
指定した辞書ファイル(ワードリスト)を使ってパスワードのリカバリを試みます。
$ hashcat -m 1500 -a 0 hash.txt wordlist.txt
辞書同士の組み合わせ( -a 1 )
2つの辞書を組み合わせて単語を生成することができます。
$ hashcat -m 1500 -a 1 hash.txt wordilst-1.txt wordlist-2.txt
wordlist-1.txtとwordlist-2.txtが次のような内容だった場合
wordlist-1.txt
- yamada
- saito
wordlist-2.txt
- taro
- hanako
次のような単語が生成されます。
- yamadataro
- yamadahanako
- saitotaro
- saitohanako
それぞれの辞書にルールを適用することもできます。
-j で1番目の辞書、-k で2番目の辞書にルールを適用します。単語は「$」になります。たとえば単語同士を「-」でつなぎたい場合は次のようにします。
$ hashcat -m 1500 -a 1 -j '$-' hash.txt wordilst-1.txt wordlist-2.txt
シングルクォートが必要かどうかはOSによって異なります。Unix系OSでは $ をエスケープするためにシングルクォートが必要ですが、Windowsの場合はシングルクォートを文字列として扱うことがあるため注意が必要です。
- yamada-taro
- yamada-hanako
- saito-taro
- saito-hanako
さらに2番目の辞書にルールを適用したければ -k を使います。最後に感嘆符(!)を付けたければ次のようにします。
$ hashcat -m 1500 -a 1 -j '$-' -k '$!' hash.txt wordilst-1.txt wordlist-2.txt
- yamada-taro!
- yamada-hanako!
- saito-taro!
- saito-hanako!
ブルートフォース( -a 3 )
一部のハッシュフォーマットを除いてブルートフォースでは現実的な時間でリカバリできないので、これは最終手段となります。
ブルートフォースではマスクと組み合わせて単語のパターンを限定した方が現実的な時間でリカバリできる確率が上がります。
アルファベット小文字 7文字+数字1桁とするならば次のようにします。
$ hashcat -m 1500 -a 3 hash.txt '?l?l?l?l?l?l?l?d'
辞書+マスク( -a 6 )
辞書ファイルの各単語に対してマスクを適用します。
wordlist.txtが次のような内容だった場合
- yamada
単語の後ろに数字4桁を付けたい場合は次のようにします。
$ hashcat -m 1500 -a 6 hash.txt '?d?d?d?d'
- yamada0000
- …
- yamada9999
マスク+辞書( -a 7 )
辞書ファイルの各単語に対してマスクを適用する。
wordlist.txtが次のような内容だった場合
- yamada
単語の前に数字4桁を付けたい場合は次のようにします。
$ hashcat -m 1500 -a 7 hash.txt '?d?d?d?d'
- 0000yamada
- …
- 9999yamada
hashcatの中断と再開(--restore, --session)
hashcatは定期的に復元ポイントを作成してリストアファイルに保存します。デフォルトは hashcat.restore というファイル名で保存され、途中でhashcatを終了したりパソコンの電源が落ちてしまった場合でもリストアファイルがあれば再開できます。
$ hashcat --restore
再開時にオプションを変更することはできません。
hashcatを複数実行する場合はセッションを分けておくとリストアファイルを複数保存できます。その場合は --session オプションでセッション名を指定します。
$ hashcat -m 1500 --session mysession -a 3 hash.txt
これで mysession というセッションでhashcatが実行され、mysession.restore というリストアファイルが作成されます。
セッションを指定して再開するには次のようにします。
$ hashcat --restore --session mysession
後で再開する予定でhashcatを終了する場合は「c」を押下します。これで次の復元ポイントを保存してから終了します。「q」で終了する場合は最新の復元ポイントを保存する前にhashcatを終了するので注意してください。
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。