問題概要
picoCTFの「hashcrack」という問題の解説記事です。
- カテゴリ: Cryptography
- 難易度: Easy
問題文
解説
ステップ1: picoCTFのサーバーに接続
まず、問題文に記載されているサーバーに接続します。
ncコマンドを使用して、指定されたホストとポートに接続します。nc verbal-sleep.picoctf.net xxxxx
Welcome!! Looking For the Secret?
We have identified a hash: 482c811da5d5b4bc6d497ffa98491e38
Enter the password for identified hash:
※ポート番号は問題文に記載されているものを使用してください。
接続すると、ハッシュ値
ハッシュ値は、サーバー側が特定のパスワードをハッシュ化したものであり、この問題では、ハッシュ値をもとに元のパスワードを特定することが求められます。
482c811da5d5b4bc6d497ffa98491e38 が表示されます。ハッシュ値は、サーバー側が特定のパスワードをハッシュ化したものであり、この問題では、ハッシュ値をもとに元のパスワードを特定することが求められます。
続いて表示される
Enter the password for identified hash: は、
ユーザーに対して このハッシュ値に対応するパスワードを入力するよう求めている ことを意味します。ステップ2: ハッシュ値のアルゴリズムを特定
表示されたハッシュ値
以下の特徴から、このハッシュ値は MD5 アルゴリズムで生成されたものであると判断できます。
482c811da5d5b4bc6d497ffa98491e38 の特徴からアルゴリズムを特定します。以下の特徴から、このハッシュ値は MD5 アルゴリズムで生成されたものであると判断できます。
- ハッシュ値の長さが32文字であること
- 使用される文字が16進数(0-9, a-f)であること
ステップ3: hashcatを使ったハッシュ解析
hashcat を使用してハッシュ値を解析し、元のパスワードを特定します。まず、解析対象のハッシュ値を
hash.txt というファイルに保存します。$ echo "482c811da5d5b4bc6d497ffa98491e38" > hash.txt
次に、使用するワードリストを選定します。
今回は「weakly hashed passwords」と問題文に記述されていることから、弱いパスワードが使われていると推測できます。
そのため、弱いパスワードが多数含まれる有名なワードリスト
rockyou.txtを使用します。$ hashcat -m 0 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
-m 0はMD5ハッシュを指定するオプションです。-a 0は辞書攻撃モードを指定するオプションです。
出力の一部に以下のような行が含まれていて、解析が成功したことがわかります。
482c811da5d5b4bc6d497ffa98491e38:password123
この場合、ハッシュ値
482c811da5d5b4bc6d497ffa98491e38 に対応するパスワードは password123であることがわかります。※Kali Linuxなどのペネトレーションテスト用ディストリビューションには、rockyou.txt が標準で含まれていますが、その他の環境では別途ダウンロードが必要です。
以下を参考に
rockyou.txtを入手してください。wget https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt
ステップ4: サーバーにパスワードを送信
特定したパスワード
password123 をサーバーに送信します。Enter the password for identified hash: password123
Correct! You've cracked the MD5 hash with no secret found!
Flag is yet to be revealed!! Crack this hash: b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3
Enter the password for the identified hash:
サーバーから新たなハッシュ値
同様に、このハッシュ値に対応するパスワードを特定します。
b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3 が提示されます。同様に、このハッシュ値に対応するパスワードを特定します。
ステップ5: 2つ目のハッシュ値のアルゴリズムを特定
表示されたハッシュ値
以下の特徴から、このハッシュ値は SHA-1 アルゴリズムで生成されたものであると判断できます。
b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3 の特徴からアルゴリズムを特定します。以下の特徴から、このハッシュ値は SHA-1 アルゴリズムで生成されたものであると判断できます。
- ハッシュ値の長さが40文字であること
- 使用される文字が16進数(0-9, a-f)であること
ステップ6: 2つ目のハッシュ値の解析
同様に、2つ目のハッシュ値
b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3 を hash2.txt に保存します。$ echo "b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3" > hash2.txt
次に、
hashcat を使用して解析します。$ hashcat -m 100 -a 0 hash2.txt /usr/share/wordlists/rockyou.txt
-m 100はSHA-1ハッシュを指定するオプションです。
出力の一部に以下のような行が含まれていて、解析が成功したことがわかります。
b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3:letmein
この場合、ハッシュ値
b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3 に対応するパスワードは letmein であることがわかります。ステップ7: サーバーにパスワードを送信2
特定したパスワード
letmein をサーバーに送信します。Flag is yet to be revealed!! Crack this hash: b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3
Enter the password for the identified hash: letmein
Correct! You've cracked the SHA-1 hash with no secret found!
Almost there!! Crack this hash: 916e8c4f79b25028c9e467f1eb8eee6d6bbdff965f9928310ad30a8d88697745
Enter the password for the identified hash:
な、なんだと…!? まだフラグは出てこないのか…!?
サーバーから新たなハッシュ値
サーバーから新たなハッシュ値
916e8c4f79b25028c9e467f1eb8eee6d6bbdff965f9928310ad30a8d88697745 が提示されます。
同様に、このハッシュ値に対応するパスワードを特定します。ステップ8: 3つ目のハッシュ値のアルゴリズムを特定
表示されたハッシュ値
916e8c4f79b25028c9e467f1eb8eee6d6bbdff965f9928310ad30a8d88697745 の特徴からアルゴリズムを特定します。
以下の特徴から、このハッシュ値は SHA-256 アルゴリズムで生成されたものであると判断できます。- ハッシュ値の長さが64文字であること
- 使用される文字が16進数(0-9, a-f)であること
ステップ9: 3つ目のハッシュ値の解析
同様に、3つ目のハッシュ値
916e8c4f79b25028c9e467f1eb8eee6d6bbdff965f9928310ad30a8d88697745 を hash3.txt に保存
します。$ echo "916e8c4f79b25028c9e467f1eb8eee6d6bbdff965f9928310ad30a8d88697745" > hash3.txt
次に、
hashcat を使用して解析します。$ hashcat -m 1400 -a 0 hash3.txt /usr/share/wordlists/rockyou.txt
-m 1400はSHA-256ハッシュを指定するオプションです。
出力の一部に以下のような行が含まれていて、解析が成功したことがわかります。
916e8c4f79b25028c9e467f1eb8eee6d6bbdff965f9928310ad30a8d88697745:qwerty098
この場合、ハッシュ値
916e8c4f79b25028c9e467f1eb8eee6d6bbdff965f9928310ad30a8d88697745 に対応するパスワードは qwerty098 であることがわかります。ステップ10: サーバーにパスワードを送信3
特定したパスワード
qwerty098 をサーバーに送信します。頼む、今度こそフラグを出してくれ…!
Enter the password for the identified hash: qwerty098
Correct! You've cracked the SHA-256 hash with a secret found.
The flag is: picoCTF{xxxxx}
※フラグはマスクしています。
ついにフラグが表示されました!
ついにフラグが表示されました!
使用したコマンドの簡単な解説
hashcat
hashcat -m [ハッシュタイプ] -a [攻撃モード] [ハッシュファイル] [ワードリスト]
ハッシュを解析するためのコマンドです。
各オプションの意味は以下の通りです。
各オプションの意味は以下の通りです。
-m [ハッシュタイプ]: ハッシュアルゴリズムを指定します。
例:0(MD5),100(SHA-1),1400(SHA-256)-a [攻撃モード]: 攻撃モードを指定します。
例:0(辞書攻撃)[ハッシュファイル]: 解析対象のハッシュ値が保存されたファイルを指定します。[ワードリスト]: 使用するワードリストファイルを指定します。
まとめ
picoCTFの「hashcrack」問題では、提示されたハッシュ値に対応するパスワードを特定することが求められました。
▼ポイントは以下の通りです。
hashcat を使用して、MD5、SHA-1、SHA-256の各ハッシュ値を解析し、最終的にフラグを取得することができました。▼ポイントは以下の通りです。
- ハッシュ値の特徴からアルゴリズムを特定すること
hashcatを使用して効率的にハッシュ値を解析すること
閲覧ありがとうございました!
NEXT
次におすすめ
読み終わったら、そのまま次へ
【picoCTF】EVEN RSA CAN BE BROKEN??? - 偶数Nの性質を突いてRSA暗号を復号
カテゴリ: Cryptography難易度: Easy#picoCTF
次の記事へ →
同じカテゴリ/難易度/picoCTFでの表示順が近い記事を優先しておすすめしています。