Crunch でカスタム単語リストを生成する

Kali LinuxBeginner
オンラインで実践に進む

はじめに

Crunch は、カスタム単語リストを生成するための強力で柔軟なコマンドラインツールです。これらの単語リストは、サイバーセキュリティの分野、特にパスワード強度監査やブルートフォース攻撃を実行するペネトレーションテスターやセキュリティ専門家にとって不可欠です。静的で既製の単語リストとは異なり、Crunch を使用すると、既知のパターン、文字セット、および長さの要件に基づいて非常に具体的なリストを作成でき、攻撃の効率を大幅に向上させることができます。

この実験では、Crunch の基本を学びます。まず基本的な構文を理解し、次に簡単な単語リストの生成、カスタム文字セットの使用、パターンベースのリストの作成、そして最終的にその出力を直接他のコマンドラインツールにパイプする方法を学びます。

Crunch ツールの構文を理解する

このステップでは、crunch コマンドの基本的な構文とヘルプメニューへのアクセス方法を学びます。コマンドの基本的な構造を理解することは、その機能を習得するための最初のステップです。

crunch の基本的な構文は次のとおりです。 crunch <min-len> <max-len> [characterset] [options]

  • <min-len>: 生成される単語の最小長。
  • <max-len>: 生成される単語の最大長。
  • [characterset]: (オプション) 単語生成に使用する文字セット。指定しない場合、crunch はデフォルトで小文字のアルファベットを使用します。
  • [options]: (オプション) ファイルへの保存やパターン使用など、出力を制御するためのさまざまなフラグ。

利用可能なすべてのオプションを確認し、ツールの包括的な概要を得るには、--help フラグを使用できます。ヘルプメニューを表示しましょう。この実験のすべての操作は、デフォルトの ~/project ディレクトリで実行されます。

ターミナルで次のコマンドを実行してください。

crunch --help

すべてのフラグとその説明が記載された詳細な出力が表示されます。しばらく時間を取って確認してください。これは、より高度な機能を探索したい場合に役立つ参照資料となります。

crunch version 3.6

Crunch can create a wordlist based on criteria you specify.  The output from
crunch can be sent to the screen, a file, or to another program.

Usage: crunch <min-len> <max-len> [options]
where min-len and max-len are numbers

... (output truncated) ...

これで基本的な構文とヘルプの見方がわかったので、最初の単語リストを生成する準備ができました。

固定長のシンプルな単語リストを生成する

このステップでは、固定長の最初の単語リストを生成します。これは crunch の最も一般的な用途の 1 つです。最小長と最大長が同じ場合、crunch はその特定の長さのすべての可能な組み合わせを生成します。

デフォルトでは、crunch は単語リストを標準出力(ターミナル画面)に表示します。リストが大きい場合、これは圧倒的で、あまり役に立ちません。より良い方法は、-o オプションを使用して出力をファイルに保存することです。

デフォルトの小文字アルファベットを使用して、すべての可能な 3 文字の単語を生成し、3char.txt という名前のファイルに保存しましょう。

次のコマンドを実行します。

crunch 3 3 -o 3char.txt

このコマンドは、crunch に対して、最小長 3、最大長 3 の単語を生成し、結果を 3char.txt に出力するように指示します。ターミナルには、生成されたリストに関する統計情報が表示されます。

Crunch will now generate the following amount of data: 20280 bytes, 19 KB, 0 MB, 0 GB
Crunch will now generate the following number of lines: 17576

ファイルが正しく作成されたことを確認するには、head コマンドを使用してファイルの最初の数行を表示できます。

head -n 5 3char.txt

アルファベット順のリストの冒頭が表示されるはずです。

aaa
aab
aac
aad
aae

これで、最初の単語リストの生成と保存に成功しました。

特定の文字セットを持つ単語リストを生成する

このステップでは、単語リストにカスタム文字セットを指定する方法を学びます。これは、パスワードに含まれる可能性のある文字に関する情報がある場合(たとえば、数字のみ、または特定の文字のみが含まれる場合)に非常に役立ちます。

文字セットを指定するには、コマンドの最後に、長さの引数の後に、使用したい文字の文字列を追加するだけです。

数字の 0123 のみを使用して、4 桁の PIN コード リストを生成しましょう。このリストは 4digit.txt という名前のファイルに保存します。

このコマンドを実行します。

crunch 4 4 0123 -o 4digit.txt

ここでは、4 4 で長さを正確に 4 文字に設定し、0123 でカスタム文字セットを指定し、-o 4digit.txt で出力を保存します。

生成されたファイルの冒頭を調べて、出力を確認しましょう。

head -n 5 4digit.txt

出力には、指定された数字のみを使用した最初の 5 つの組み合わせが表示されます。

0000
0001
0002
0003
0010

ご覧のとおり、crunch は提供された文字のみを使用するようになり、生成される単語リストに対する制御が大幅に向上しました。

-t フラグを使用してパターンベースの単語を生成する

このステップでは、-t フラグを使用して特定のパターンに基づいた単語リストを生成します。これは Crunch の最も強力な機能の 1 つであり、パスワードの構造の一部を知っている場合に、非常にターゲットを絞った単語リストを作成できます。

-t フラグは、特殊なプレースホルダーを使用してさまざまな文字タイプを表します。

  • @ は小文字のアルファベットに置き換えられます。
  • , は大文字のアルファベットに置き換えられます。
  • % は数字に置き換えられます。
  • ^ は記号に置き換えられます。

パスワードが "user" という単語で始まり、その後に 2 つの数字が続き、最後に 1 つの大文字で終わると仮定しましょう。パターンは user%%, になります。合計長は 7 文字です("user" に 4 文字、%% に 2 文字、, に 1 文字)。

このパターンに基づいて単語リストを生成し、pattern.txt に保存しましょう。

crunch 7 7 -t user%%, -o pattern.txt

このコマンドは、crunch に対して、パターン user%%, に従った正確に 7 文字の単語を生成するように指示します。

次に、出力ファイルの最初の数行を見てみましょう。

head -n 5 pattern.txt

出力は定義したパターンと一致するはずです。

user00A
user00B
user00C
user00D
user00E

この方法により、単語リストのサイズと総当たり攻撃に必要な時間が劇的に削減され、可能性のあるパスワード候補にのみ焦点を当てることができます。

Crunch の出力を直接 Hashcat にパイプする

このステップでは、強力なテクニックを学びます。それは、crunch の出力を別のツールに直接パイプすることです。これは、潜在的に巨大な単語リストをディスクに書き込むことを回避し、スペースと時間を節約するため、非常に効率的です。単語は生成され、リアルタイムで次のプログラムに「パイプ」(送信)されます。

crunch は Hashcat や John the Ripper のようなパスワードクラッキングツールとよく一緒に使用されますが、ここでは簡単な grep コマンドを使用してこのプロセスをシミュレートします。grep はテキストを検索するツールであり、パイピングの概念を実証するために使用します。

パスワードが labex23 であると推測していると想像してください。パスワードは "labex" で始まり、その後に 2 つの数字が続くと考えています。

このパターンに一致する単語を生成し、それを直接 grep にパイプして、ターゲットパスワードが生成されたリストに含まれているかどうかを確認できます。パイプ記号 | は、あるコマンドの出力を別のコマンドの入力に接続するために使用されます。

次のコマンドを実行します。

crunch 7 7 -t labex%% | grep "labex23"

このコマンドは 2 つのことを行います。

  1. crunch 7 7 -t labex%% は、"labex" で始まり、その後に 2 つの数字が続くすべての 7 文字の単語を生成します(例:labex00labex01 など)。
  2. | パイプは、生成された各単語を grep "labex23" コマンドに送信し、その単語が "labex23" と一致するかどうかを確認します。

一致が見つかった場合、grep はそれをターミナルに出力します。

labex23

リアルタイムで単語リストを生成し、別のツールで処理することに成功しました。これは、効率的なセキュリティテストの基本的なスキルです。

まとめ

この実験を完了したことをお祝いします!あなたは、カスタム単語リスト生成のための汎用的なツールである crunch の使用に関する基本的なスキルを習得しました。

この実験では、以下の方法を学びました。

  • crunch コマンドの基本的な構文を理解する。
  • 固定長の単純な単語リストを生成し、ファイルに保存する。
  • カスタム文字セットを指定して、よりターゲットを絞った単語リストを作成する。
  • -t フラグを使用して、既知のパターンに基づいて単語を生成する。
  • crunch の出力を grep のような他のコマンドラインツールに直接パイプして、ファイルに保存せずにリアルタイムで処理を実行する。

これらのスキルは、サイバーセキュリティの多くのタスク、特にパスワード監査や侵入テストにおいて基礎となります。カスタマイズされた単語リストを作成することにより、セキュリティ評価の効率と成功率を大幅に向上させることができます。