hashcat ハッシュキャットのいくつかの攻撃モード

Posted inより · 著者:よりパスワードの回復

hashcat には複数の攻撃モードがあります。パラメータ – ヘルプを使用して完全なヘルプを表示すると、次のように「攻撃モード」テーブルが表示されます。

#モード
0ストレート
1組み合わせ
3ブルートフォース
6ハイブリッド ワードリスト + マスク
7ハイブリッド マスク + ワードリスト

1.ストレート

この攻撃パターンは「辞書攻撃」とも呼ばれています。言うことはありませんが、辞書が与えられた場合、hashcat は辞書の内容を行ごとに読み取り、各行のハッシュ値を計算し、ターゲットのハッシュ値と比較します。

例:

  hashcat -a 0 -m 400 example400.hash example.dict 

2.組み合わせ

Baidu は、組み合わせは名詞で、「組み合わせ、コンソーシアム、パスワードの組み合わせ、ジャンプスーツ」を意味すると教えてくれました。この攻撃パターンは実は簡単で、2つのパスワード辞書の内容を組み合わせることです。この攻撃モードを使用するには、2つのパスワード辞書を指定する必要があります。2 つのパスワード辞書 dict1.txt と dict2.txt があるとします。その内容は次のとおりです:

  hunting
  キティ
  レインボー

および

  パリ
  rock

コマンド:

  hashcat -m 0 -a 1 hash.txt dict1.txt dict2.txt

実際に試みた辞書は次のとおりです:

  huntingparis
  ハンティングロック
  キティパリ
  キティロック
  レインボーパリ
  rainbowrock

dict1.txtの単語は左、dict2.txtの単語は右、合計3×2=6個です。

このモードに関連するパラメータは次のとおりです。

  -j, --rule-left
  -k, --rule-right

-j の後のルールは左側に作用し、-k の後のルールは右側に作用します。パラメータ -j '$-' を追加すると、実際に試した辞書は次のとおりです:

  hunting-paris
  ハンティングロック
  キティパリ
  キティロック
  rain-bowparis
  rain-bowrock

パラメータを追加 -j '^!',実際に試した辞書は、

  です。ハンティングパリ
  !ハンティングロック
  !キティパリ
  !キティロック
  !レインボーパリ
  !rainbowrock

パラメータ -k '^>' を追加すると、実際に試した辞書は次のようになります:

  hunting>paris
  狩猟>岩
  キティ>パリ
  キティ>ロック
  雨>ボウパリス
  rain>bowrock

このルールはどんなルールなのでしょうか?「$」、「^」は正規表現と似たような使い方をしているので、正規なのでしょうか?実はそうではありません。hashcat のルールは自分で実装されています。これはまた大きなコンテンツです。詳細については、Rule-based Attack

3.Brute-force

を参照してください。与えられた文字セットのさまざまな組み合わせを試します。hashcat の公式 wiki によると、この方法は時代遅れであり、マスク攻撃に完全に置き換えられているため、研究は行われません。

4. マスク攻撃

これは比較的新しい攻撃方法です。例は次のとおりです。

  hashcat -a 3 -m 0 MD5.hash ?l?l?l?l?l

「攻撃モード」表では、-A 3はブルートフォースに対応していますが、実際には、-A 3はマスク攻撃を使用しています。マスク攻撃は高度なブルートフォースと見なすことができます。

-m パラメータはハッシュ関数のタイプを指定するために使用されます。MD5.hash ファイルには MD5 値が格納されます。肝心なのは最後の文字列「?l?l?l?l?l?l?l」で、このような文字列をmaskと呼びます。

マスクは、いくつかのプレースホルダからなる文字列です。「?l」はプレースホルダーであり、「?」はキーワードであり、後続の「l」を修飾するために使用されます。「?l」は、「?l」に加えて、「?u」、「?d」、「?h」、「?h」、「?s」、「?a」、「?b」の文字セットを表します。以下の表に示します。

0 – 0xff
?文字セット
labcdefghijklmnopqrstuvwxyz
uabcdefghijklmnopqrstuvwxyz
d0123456789
H0123456789abcdef
H0123456789ABCDEF
s!"#$%&'()*+,-./:;<=>?@[\]^_`~{|}
a?l?う?d?s
b

このようにして、「?l?l?l?l?l?l?l」は実際にはパスワード辞書と同等であることがわかります:

aaaaa
ああああ
...
zzzzz

同様に、「?l?u?d」はパスワード辞書に相当します:

  aA0
  aA1
  ...
  bA0
  ...
  zZ9

上の表の文字セットはhashcatに组み込まれており、文字セットを自分で指定することもできます。

  --custom-charset1=文字セット1
  --custom-charset2=文字セット2
  --custom-charset3=文字セット3
  --custom-charset4=文字セット4

パラメータ –custom-charsetN は -N と略すことができます。例えば、–custom-charset1 は -1 と略すことができます。-N で指定された文字のセットは、マスク内でプレースホルダ "?N" として指定されます。たとえば、

  -1 abc123 ?1?1?1

はパスワード辞書に相当します。

  aaa
  aab
  …
  aa3
  …
  333

-Nは、文字集合を表す文字列に加えて、文字集合が格納されている.hcchrで終わるファイルでもよい。hashcat には、インストール パッケージの charsets/ ディレクトリにある .hcchr ファイルが多数付属しています。

プレースホルダ「??」が表す文字の集合は「?」そのものです。さらに、残りの文字がプレースホルダとして使用される場合、文字自体を表します。たとえば、「?lwerner?d」はパスワード辞書に相当します:

  awerner0
  アワーナー1
  …
  zwerner9

以上の知識があれば、mask を理解しやすい。マスクは複数のプレースホルダで構成され、各プレースホルダは文字セットであり、マスクはプレースホルダ文字セットの組み合わせです。プレースホルダの個数とパスワードの長さは等しい。このような設計は、単純に文字の集合とパスワードの長さを与えるよりも、どのようなメリットがあるのでしょうか。

誰かのパスワードが合計 7 桁であることがわかっているとします。最初の桁は大文字、次の 3 桁は小文字、最後の 3 桁は数字です。伝統的な暴力クラッキングの場合、文字セット A-Z、A-Z、0-9 が必要で、合計 62 文字で、最大 62^7=3 521 614 606 208 回の試行が必要で、兆レベルです。このパスワードをマスクで記述すると、「\u\l\l\l\d\d\d」となり、計算が簡単で、(26^4)×(10^3)=456 976 000の可能性があり、億レベルで、前の方法より4桁減少した。

一歩退いて言えば、たとえパスワードの分布が分からなくても、マスクを使えば従来の暴力クラッキングの効果を簡単にシミュレートできます。

今の問題は、マスクが固定されていることです。その中のプレースホルダーの数が死んでいます。パスワードの長さがわからない場合はどうすればよいですか。パスワードが長すぎるのはまだいいですが、もし人のパスワードが3桁しかなくて、私たちのプレースホルダーが4つあって、どうしても解けないのは損ではないでしょうか。まさか1から、それぞれの長さのマスクを一通り書くのでしょうか?それはどんなに面倒なことでしょう。

には 2 つの解決策があります。1 つは mask ファイルを使用して、1 つのファイルに複数の mask を書き込み、コマンド ラインでこのファイルを指定することです。マスクファイルは.hcmaskで終わる必要があることに注意してください。

test.hcmask の内容は次のとおりです。

  ?lさん
  ?l?lさん
  ?l?l?lさん
  ?l?l?l?l

次のコマンドを使用してファイルを使用します。

  hashcat -m 0 -a 3  --show MD5.hash test.hcmask

もう 1 つの解決策は、パラメータ –increment を追加することです。このパラメータは、hashcat に指定されたマスクに従ってプレースホルダーを 1 つから試し、指定された長さまで 2 つ、3 つを試します。次のようにプレースホルダ「abc」を書き、次の文字列のmd5値を計算します。

  A:0cc175b9c0f1b6a831c399e269772661
  b:92eb5ffee6ae2fec3ad71c777531578f
  c:4a8a08f09d37b73795649038408b5f33
  ab:187ef4436122d1cc2f40dc2b92f0eba0
  ac:e2075474294983e013ee4dd2201c7a73
  ba:07159c47ee1b19ae4fb9c40d480856c4
  bc:5360af35bde9ebd8f01f492dc059593c
  ca:5435c69ed3bcc5b2e4d580e393e373d3
  cb:d0d7fdb6977b26929fb68c6083c0b439
  abc:900150983cd24fb0d6963f7d28e17f72
  abc:900150983cd24fb0d6963f7d28e17f72
  bac:79ec16df80b57696a03bb364410061f3
  bca:b64eab8ce39e013604e243089c687e4f
  cba:3944b025c9ca7eec3154b44666ae04a0
  cab:16ecfd64586ec6c1ab212762c2c38a90

「:」の前にハッシュ値を計算する元の文字列があり、「:」の後に計算されたhasn値があります。上記の内容をファイル MD5.hash に保存し、次のコマンドを実行します。

  hashcat -m 0 -a 3< --show --username MD5.hash abc

パラメータ –username を追加するのは、各ハッシュ値の前に元の文字列があるためです。このパラメータを追加すると、hashcat は正しいハッシュ値が見つからないことを示します。このパラメータを追加すると、hashcat はハッシュ値の前の文字列がハッシュ値のユーザー名であると判断し、ハッシュ値をスムーズにロードできます。

実行した結果、ハッシュは 1 つだけ解決されました:

  900150983cd24fb0d6963f7d28e17f72:abc

次にパラメータ –increment を追加し、再度実行します:

  hashcat -m 0 -a 3 --show --increment --username MD5.hash abc

今回、さらに 2 つのハッシュが解けました:

  0cc175b9c0f1b6a831c399e269772661:a
  187ef4436122d1cc2f40dc2b92f0eba0:ab

–increment が働いていることがわかります。しかし同時に、このパラメータがあれば、hashcatはA、ab、abcを順番に試すだけで、プレースホルダを順番に並べて組み合わせたり、さまざまな可能性を試したりすることはないこともわかっています。

5. ハイブリッド攻撃

ハイブリッド攻撃は 2 つの辞書を組み合わせたコンビネーター攻撃と似ていますが、ハイブリッド攻撃は辞書とマスクをハイブリッド化します。

次のような辞书example.dictがすでにあるとします。

     こんにちは
  werner

コマンド:

  hashcat -m 0 -a 6 MD5.hash example.dict ?d?d 

単に辞書を使用することに相当します:

     こんにちは00
  こんにちは01
  …
  こんにちは99
  ヴェルナー00
  ヴェルナー01
  …
  werener99

コマンド:

  hashcat -m 0 -a 7 MD5.hash ?d? dexample.dict

単に辞書を使用することに相当します:

  00hello
  01こんにちは
  …
  99こんにちは
  00ヴェルナー
  01ヴェルナー
  …
  >99werener

前のPowerPathhashcat ソフトウェアを使用してさまざまなハッシュを爆破する方法
次のWWNhashcat の使い方 テクノロジーの共有

トップ記事