はじめに
Hashcatは、非常に強力で広く利用されているパスワード復元ツールです。クラッキングセッションを実行する際、Hashcatには結果を管理する仕組みが必要です。どのパスワードが正常にクラックされ、どれが未解決のままかを把握することは非常に重要です。
この実験では、Hashcatの出力を管理するための基礎を学びます。クラックされたパスワードを自動的に保存する hashcat.potfile について詳しく見ていきます。また、クラック済みパスワードを表示する --show、結果を特定のファイルに保存する -o、まだクラックされていないハッシュを特定する --left といったコマンドラインオプションの使用方法も習得します。これらの機能をマスターすることは、効率的なパスワード監査や復元作業において不可欠です。
hashcat.potfileの目的を理解する
このステップでは、Hashcatの重要なコンポーネントである hashcat.potfile について学びます。将来のセッションで同じハッシュを再クラックすることを避けるため、Hashcatは正常にクラックできたすべてのハッシュとそれに対応するプレーンテキストのパスワードを自動的にファイルに保存します。このファイルは「ポットファイル(potfile)」と呼ばれます。デフォルトでは hashcat.potfile という名前で、~/.local/share/hashcat/ ディレクトリに配置されます。
まずは、基本的な辞書攻撃を実行してハッシュをクラックし、ポットファイルを生成してみましょう。MD5ハッシュを含む hashes.txt ファイルと、パスワード候補が入った wordlist.txt ファイルが用意されています。
以下のコマンドを実行して攻撃を開始します。
hashcat -m 0 -a 0 hashes.txt wordlist.txt
コマンドの詳細は以下の通りです。
-m 0: ハッシュタイプを指定します。0はMD5に対応しています。-a 0: 攻撃モードを指定します。0はストレート辞書攻撃です。hashes.txt: クラック対象のハッシュが含まれる入力ファイルです。wordlist.txt: 試行するパスワードが含まれる辞書ファイルです。
Hashcatが起動します。辞書ファイルにはすべてのハッシュに対する正しいパスワードが含まれているため、プロセスはすぐに完了します。
...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: hashes.txt
Time.Started.....: ...
Time.Estimated...: 0 secs
Guess.Base.......: File (wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: ... H/s (0.00ms) @ Accel:128 Loops:1 Thr:1 Vec:8
Recovered........: 4/4 (100.00%) Digests, 0/1 (0.00%) Salts
Progress.........: 5/5 (100.00%)
Rejected.........: 0/5 (0.00%)
Restore.Point....: 5/5 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: password -> testing
Hardware.Mon.#1..: Temp: 46c Fan: 33%
...
Started: ...
Stopped: ...
出力から、4つのハッシュすべてが復元されたことがわかります。これにより、hashcat.potfile が作成され、結果が記録されました。
ポットファイル内のクラック済みハッシュとパスワードのペアを確認する
このステップでは、hashcat.potfile の内容を直接確認します。これにより、Hashcatがどのようにクラックされた資格情報を保存しているかを理解できます。形式はシンプルで、各行にハッシュ、コロン(:)、そしてクラックされたプレーンテキストのパスワードが記述されています。
ポットファイルの内容を表示するには cat コマンドを使用します。ファイルはホームディレクトリ内の隠しディレクトリにあります。
cat ~/.local/share/hashcat/hashcat.potfile
前回のステップで正常にクラックされたハッシュとパスワードのペアが表示されます。
5f4dcc3b5aa765d61d8327deb882cf99:password
e10adc3949ba59abbe56e057f20f883e:123456
d8578edf8458ce06fbc5bb76a58c5ca4:qwerty
f9664ea1803311b35f81d07d8c9e072d:lab
ご覧の通り、ファイルには hashes.txt からの4つのハッシュと、wordlist.txt 内のパスワードが一致した結果が含まれています。ポットファイルを直接見ることは構造を理解するのに役立ちますが、何千ものパスワードがクラックされる実環境では、読みづらくなる可能性があります。次のステップでは、特定のタスクの結果をより効率的に表示する方法を学びます。
'--show' を使用して特定のハッシュリストのクラック済みパスワードを表示する
このステップでは、結果を確認するためのより実用的な方法を学びます。ポットファイル全体を手動で読む代わりに、Hashcatの --show オプションを使用します。このコマンドは、指定されたハッシュリストをポットファイルと照合し、そのリスト内でクラック済みのハッシュのみを表示するようにHashcatに指示します。新しいクラッキング処理は行われません。
これは、多くの異なるセッションの結果が混在する巨大なポットファイルの中から、特定のターゲットリストの結果だけを素早く確認したい場合に非常に便利です。
以下のコマンドを実行して、hashes.txt ファイルのクラック済みハッシュを表示します。
hashcat -m 0 --show hashes.txt
Hashcatは即座にポットファイルをチェックし、結果を整理された読みやすい形式で出力します。
5f4dcc3b5aa765d61d8327deb882cf99:password
e10adc3949ba59abbe56e057f20f883e:123456
d8578edf8458ce06fbc5bb76a58c5ca4:qwerty
f9664ea1803311b35f81d07d8c9e072d:lab
出力は非常に明確で、「hashes.txt のうち、どのハッシュが既にクラックされているか?」という問いに直接答えてくれます。これが、特定のセッションのクラック済みパスワードを確認する推奨される方法です。
'-o' を使用してクラック済みパスワードを専用の出力ファイルに保存する
このステップでは、クラッキング結果を別のファイルに保存する方法を学びます。ポットファイルはHashcatにとって優れた内部データベースですが、レポート作成や分析のためにクリーンな出力ファイルが必要になることがよくあります。これは -o(または --outfile)オプションを使用して実現します。
攻撃コマンドに -o を追加し、--show と組み合わせると、Hashcatはポットファイルからクラック済みのハッシュとパスワードのペアを取得し、指定された出力ファイルに書き込みます。これは、既にハッシュがクラックされてポットファイルに存在する場合に、その結果を素早く抽出して専用ファイルに保存するのに特に便利です。
--show と -o オプションの両方を使用して、クラック結果を保存するコマンドを実行してみましょう。
hashcat -a 0 -m 0 --show -o cracked.txt hashes.txt wordlist.txt
Hashcatは即座にポットファイルをチェックし、すべてのクラック済みパスワードペアを cracked.txt に書き込みます。
次に、新しい出力ファイルの内容を確認します。
cat cracked.txt
出力は、クラックされたペアのクリーンなリストになります。
5f4dcc3b5aa765d61d8327deb882cf99:password
e10adc3949ba59abbe56e057f20f883e:123456
d8578edf8458ce06fbc5bb76a58c5ca4:qwerty
f9664ea1803311b35f81d07d8c9e072d:lab
この cracked.txt ファイルは、メインのポットファイルとは別に、この特定の攻撃による成功結果を記録したポータブルなファイルとなります。
'--left' を使用して未クラックのハッシュを確認する
このステップでは、どのハッシュがまだクラックされていないかを特定する方法を学びます。これは、解決済みのものを知ることと同じくらい重要です。これにより、次の攻撃(別の辞書ファイルや攻撃モードの使用など)でどこに注力すべきかを判断できるからです。Hashcatには、この目的のために --left オプションが用意されています。
--left フラグは、入力リストの中でポットファイルに存在しない(=まだクラックされていない)ハッシュを表示します。
hashes.txt の中で、まだクラックされていないハッシュがあるか確認してみましょう。
hashcat -m 0 --left hashes.txt
リスト内のすべてのハッシュは既にクラックされているため、出力は空になります(未クラックのハッシュは残っていません)。
また、--left を -o オプションと組み合わせて、残りのハッシュを新しいファイルに保存することもできます。これは、次のクラッキング試行のための作業リストを作成する際によく行われる手法です。
hashcat -m 0 --left -o uncracked.txt hashes.txt
次に、uncracked.txt ファイルの内容を確認します。
cat uncracked.txt
すべてのハッシュがクラック済みであるため、uncracked.txt ファイルは空になります。
まとめ
この実験では、Hashcatの出力を管理・解釈するための重要なテクニックを学びました。これらのスキルは、効率的なパスワードクラッキングのワークフローを構築するための基礎となります。
学んだ内容は以下の通りです:
- すべてのクラック済みパスワードの自動データベースとしての
hashcat.potfileの役割。 hashcat --showを使用して、特定のハッシュリストからクラック済みパスワードをきれいに表示する方法。-oオプションを使用して、レポートや分析のためにクラック済みパスワードを専用の出力ファイルに保存する方法。--leftオプションを使用して未クラックのハッシュを特定し、今後の作業に効率的に集中する方法。
これらの出力およびファイル管理機能をマスターすることで、Hashcatを使用したパスワード復元セッションをより整理された、効率的かつ効果的なものにすることができます。



