はじめに
Hashcat は強力で人気のパスワードリカバリツールです。効率的な運用における重要な機能の一つに「potfile」があります。potfile("pot of gold file" の略)は、hashcat が正常にクラックされたハッシュとその対応する平文を自動的に保存するファイルです。これにより、hashcat は以前のセッションで既に解決されたハッシュを再クラックしようとする時間とリソースの無駄遣いを防ぎます。
この実験では、hashcat potfile を使用してクラックされたハッシュを管理する基本を学びます。potfile の場所を特定する方法、その内容を表示する方法、そしてそれをクエリするための特定の hashcat フラグを使用する方法、さらには必要に応じてそれを無視する方法を学びます。
Potfile の目的を理解する
このステップでは、hashcat potfile の基本的な役割について学びます。
potfile は、hashcat の効率性にとって最も重要な機能の一つです。hashcat がハッシュをクラックするたびに、その結果を potfile に保存します。これの主な目的は、解決済みのハッシュのデータベースを構築することです。
新しいクラッキングセッションを開始する前に、hashcat は入力ファイル内のハッシュを potfile のエントリと照合します。ハッシュが既に potfile に存在する場合、hashcat はそれをスキップし、「Removed」ステータスを表示します。これにより、既に完了した作業に貴重な CPU/GPU サイクルを無駄にすることを防ぎます。
potfile のエントリの標準的な形式はシンプルで効果的です。
HASH:PLAINTEXT
このステップは、理解を深めるための概念的なものです。実行するコマンドはありません。このファイルがどこにあるかを見つけるために、次のステップに進むことができます。
デフォルトの hashcat.potfile を特定する
このステップでは、hashcat によって作成されたデフォルトの potfile を特定します。
デフォルトでは、hashcat は現在の作業ディレクトリに potfile を作成しません。代わりに、異なるクラッキングセッションやプロジェクト間で永続化できるように、ユーザーのホームディレクトリ内の専用の hashcat フォルダに配置します。Linux システムでのデフォルトの場所は ~/.local/share/hashcat/ です。
ファイルの存在を確認しましょう。ls -l コマンドを使用して、hashcat ディレクトリの内容を一覧表示します。
ls -l ~/.local/share/hashcat/
出力には、hashcat.potfile と、その他のセッション関連ファイルが表示されるはずです。
total 4
-rw-r--r-- 1 labex labex 42 May 20 10:30 hashcat.potfile
これでファイルが見つかりました。次のステップでは、その内容を表示します。
Potfile の内容を表示する
このステップでは、hashcat.potfile の内容を調べて、クラックされたハッシュがどのように保存されているかを確認します。
potfile はプレーンテキストファイルなので、cat、less、more のような標準的なコマンドラインテキストビューアを使用して中身を見ることができます。今回のような小さなファイルであれば、cat が最適です。
ターミナルで以下のコマンドを実行して、デフォルトの potfile の内容を表示します。
cat ~/.local/share/hashcat/hashcat.potfile
出力には、実験のセットアップ中にクラックされたハッシュが表示され、その後にコロン(:)と平文のパスワードが表示されます。
5f4dcc3b5aa765d61d8327deb882cf99:password
このシンプルな HASH:PLAINTEXT 形式により、ファイルは人間にとっても hashcat 自身にとっても、読みやすく解析しやすいものになっています。
--show フラグを使用して Potfile をクエリする
このステップでは、--show フラグを使用して potfile からクラックされたハッシュを効率的にクエリする方法を学びます。
potfile を手動で cat や grep することもできますが、hashcat は、指定されたファイル内のハッシュが既にクラックされているかどうかを確認するための、より洗練された統合的な方法を提供します。この目的のために --show フラグが使用されます。これはハッシュファイルをインプットとして受け取り、potfile 内で見つかったハッシュのクラックされた平文を出力します。
これを使用して hashes.txt ファイルを確認してみましょう。
hashcat -m 0 --show hashes.txt
コマンドの内訳を見てみましょう。
hashcat: プログラム自体です。-m 0: ハッシュモードを指定します。0は MD5 用で、これはhashes.txtファイル内のハッシュのタイプです。--showが正しく機能するにはこれが必須です。--show: このフラグは、hashcat にクラッキングセッションではなくクエリ操作を実行するように指示します。hashes.txt: 確認したいハッシュが含まれるインプットファイルです。
コマンドは以下の出力を生成します。これは、ハッシュが見つかったため、potfile の内容と同一です。
5f4dcc3b5aa765d61d8327deb882cf99:password
このコマンドは、大量のハッシュリストを持っており、以前にリカバリされたものがどれであるかを素早く確認したい場合に非常に役立ちます。
--potfile-disable で入力からクラック済みハッシュを削除する
このステップでは、hashcat がどのように自動的にハッシュの再クラッキングを回避するか、そして --potfile-disable フラグでこの動作を上書きする方法を学びます。
まず、同じクラッキングジョブを再度実行しようとした場合に何が起こるかを見てみましょう。ハッシュは既に potfile に存在するため、hashcat はこれを認識し、すぐに終了するはずです。
hashcat -m 0 -a 0 hashes.txt wordlist.txt --force
出力を確認してください。Hashcat は、potfile 内ですべてのハッシュが見つかり、それらを再処理しないと報告します。
...
All hashes found in potfile!
NOTE: All hashes loaded from file hashes.txt are already cracked and were skipped.
To re-crack these hashes, you need to remove them from the potfile.
...
では、ベンチマーク目的や異なる攻撃モードをテストするために、ハッシュを再クラッキングしたい場合はどうすればよいでしょうか? --potfile-disable フラグを使用できます。これは、hashcat に potfile の読み書きの両方を完全に無視するように指示します。
今度はフラグを追加して、コマンドを再度実行してください。
hashcat -m 0 -a 0 hashes.txt wordlist.txt --force --potfile-disable
今回は、potfile を無視しているため、hashcat は完全なクラッキング操作を実行します。ステータスの進行状況と、最後に「Cracked」ステータスが表示されます。
...
Session..........: hashcat
Status...........: Cracked
...
Cracked (1/1) hashes, (1/1) digests
...
--potfile-disable の使用は、特定の状況のための特定のツールです。ほとんどの場合、時間を節約するために potfile を活用したいはずです。
まとめ
この実験では、hashcat の potfile を使用してクラック済みハッシュを管理するための基本的なスキルを学びました。
potfile が、解決済みのハッシュのデータベースとして機能する、効率化のための重要な機能であることを理解しました。以下の方法を学びました。
- デフォルトの potfile を
~/.local/share/hashcat/hashcat.potfileで見つける方法。 catのような標準的な Linux コマンドを使用してその内容を表示する方法。--showフラグを使用して、インプットファイルから特定のハッシュを potfile に対してクエリする方法。- 特定のユースケースのために
--potfile-disableフラグを使用して potfile の機能をバイパスする方法。
potfile の使用を習得することは、熟練した hashcat ユーザーになるための基本的なステップであり、より効果的で効率的なパスワードリカバリタスクを実行できるようになります。


