きっかけ
もともとCrackStationを使って解いていたのですが、John the Ripperを使った場合にどうなるのか気になり実行してみました。今回はそのまとめを書いていきます。
John the Ripperの概要
※John the Ripper=JtRと省略して書かせていただきます。
JtRは、UNIXやMacOS、Windowsなど複数のOSに対応している、オープンソースのパスワードクラックツールです。
ハッシュ化されたパスワード(パスワードハッシュ)から、元のパスワードを特定するために使用します。そのため、利用するには事前にパスワードハッシュを別途入手しなければなりません。(サイバー情報局から参照)
参照元:https://eset-info.canon-its.jp/malware_info/tool/240717.html
JtRと同様にhashcatというツールがあります。
JtRはhashcatと比較すると、クラックできるハッシュ形式数は劣りますがどちらも非常に便利です。
対応しているハッシュ形式
JtRが対応しているハッシュ形式は以下の通りです。
descrypt, bsdicrypt, md5crypt, md5crypt-long, bcrypt, scrypt, LM, AFSなど…
記述しているハッシュ形式は一部にすぎません。
全て確認したい場合は、下のコマンドを打ち込んでください。
$ john --list=formats
実行するとこのように対応しているハッシュ形式が表示されます。

TryHackMe-Blue タスク4
問題名:Blue URL:https://tryhackme.com/room/blue
meterpreter内でhashdumpを打ち込むとハッシュ化された情報が出てきます。

Jonさんのパスワードをクラックするので、Jonさんのデータをコピーして空のファイルに保存しておきます。
私は、hash.txtというファイルを作成して保存しました。

※JtRを使う場合は、クラックしたい対象データをJtRが理解できる形式に変換してあげる必要があります。しかし、今回のデータは JtR が理解できる形式にもともとなっているため、形式を変換する必要はありません。
実行
準備が整ったので、JtRを使ってクラックしていきたいと思います。
以下のコマンドを打ち込んでください。
john --format=NT --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
コマンドの解説
john は JtRのことを表しています。
--format=NTはJtRにクラック対象はNTハッシュだと定義してます。
--wordlist=/usr/share/wordlists/rockyou.txt はJtRで使う辞書を指定します。
今回はrockyou.txtという世界的に広く知られている辞書を使いました。
この辞書には沢山の単語が登録されており、その中の単語とハッシュ化されたパスワードが一致するかを調査します。
最後にパスワードを保存してあるファイル名を書きます。
--format=NTが必要な理由
今回クラックする対象のデータは2種類のハッシュ形式が記載されています。
Jon:1000:aad3b435b51404eeaad3b435b51404ee:ffb43f0de35be4d9917ac0cc8ad57f8d:::
構造
ユーザー名 : RID(Relative Identifier) : LMハッシュ : NTハッシュ : : :
aad3b435b51404eeaad3b435b51404eeは無効化時の固定値であり、LMハッシュの代わりに空のハッシュが入っていることが分かります。
よってクラックすべきハッシュはNT形式の方です。
しかし、JtRはより弱く解析しやすいLMハッシュが優先される傾向があるため、NTハッシュをクラックしてくださいと指定する必要があるからです。
Jonさんのパスワードをクラックすることができました!
Jonさんのパスワードは、alqfna22です。
※すでにJonのパスワードをクラックしているため、'No password hashes left to crack'と表示されていますが、初回の人はパスワードが画面上に表示されているはずです。
パスワードが表示されない方用
JtRは一度クラックしたパスワードのデータを保存してくれます。
確認したい場合は、以下のコマンドを打ち込んでください。
john --show --format=NT hash.txt
今回は、--format=NTを指定してクラックしたので--showオプションの後に--format=NTと入力します。
--format=NTをつけなくても一応データは表示されるかもしれませんが、NT形式ではなくLM形式のクラック結果を表示してしまう事態が発生します。
下の画像は--format=NTをつけなかった場合と、--format=LMをつけた場合の結果であり、どちらも同じデータが返ってきていることがわかります。
実行結果

よって、--format=NTとしっかり定義してあげることが大事だと思います。
おまけ
Blueではクラック対象のハッシュ形式がすでにJtRで理解できる形式に変換されていたため、ハッシュ形式の変換を行いませんでした。
しかし、今回のようなケースはあまりない気がします
そこでJtRが理解できる形式に変換する方法を記載しておきます。
JtRの形式へ変換するには?
形式を変換するには 2john というコマンドを使います。
この 2john はクラックしたいデータの形式によってコマンド名が少し変わります。
例えば、zipファイルにつけられたパスワードを解読したい場合は zip2john を使います。
実際のコマンドは下のようになります。
zip2john zipfile > zipfile_hash.txt
これは zip2john で zipfile のデータをハッシュ化し、 zipfile_hash.txt に保存するという流れになっています。
これでJtRが理解できる形式に無事変換することができました!
あとはこのファイルを使って、
john --wordlist=/usr/share/wordlists/rockyou.txt zipfile_hash.txt のように JtR でクラックしてあげるだけです。
ここまで閲覧していただき、ありがとうございます。

