【picoCTF】Verify - SHA-256チェックサムで正しいファイルを特定し復号

問題概要

picoCTFの「Verify」という問題の解説記事です。

  • カテゴリ: Forensics
  • 難易度: Easy

この問題は、提示された SHA-256チェックサム と一致するファイルを大量の候補から探し出し、decrypt.sh で復号してフラグを得る内容です。

問題文

picoCTF Verify picoCTF Verify

解説

ステップ1: picoCTFのサーバーにSSHで接続する

まず、問題文に記載されている情報を使って、picoCTFのサーバーにSSHで接続します。

ssh -p xxxxx ctf-player@rhea.picoctf.net
xxxxxは問題文に記載されているポート番号に置き換えてください。
接続後、パスワードを求められるので、問題文に記載されているパスワードを入力します。
初回接続時にフィンガープリント確認が表示された場合は yes と入力して承認します。

ステップ2: ファイルの確認

SSHで接続した後、まずは現在のディレクトリにあるファイルを確認します。

ctf-player@pico-chall$ ls
checksum.txt  decrypt.sh  files

チェックサム(SHA-256)の確認

checksum.txtファイルには、SHA-256チェックサムが含まれているようです。内容を確認します。
ctf-player@pico-chall$ cat checksum.txt 
3ad37ed6c5ab81d31e4c94ae611e0adf2e9e3e6bee55804ebc7f386283e366a4
この値が、files/ 配下にある「復号対象ファイル」の SHA-256 ハッシュと一致するかを確認する必要があります。


filesディレクトリの確認

次に、filesディレクトリ内に大量のファイルがあることを確認します。
ctf-player@pico-chall$ ls files
0agQiFLS  6vYE68JA  DHDt0q0q  J75ycvyv  Oq8kRa6b  TSJCXwIT  XfZqFKg1  btZJHGWw  gQQDt3TI  oRzmzVaf  vfN94Ek3
0pEkV2ds  7U4dSToL  DMo5tbhE  JBVTXHTa  OzUaGPJp  TTjLO7LQ  XjZyXSLg  c3eE4Atp  gY52Y8t0  oZ71cyGG  vnr7vUto
0wWA41ot  7cnZoSuo  DNZBkTaH  JJxoEHaC  P0zSZ01H  ThekmVcy  XrAdESZl  cWvaGe5W  gZ9thrVF  oaOPzO00  w63X3jh4
0yVzp2am  83NyszLP  Di7h281J  JXT0M9Rt  PB3Mh3mc  TqHFzH54  XrvFYdDg  caGexAeh  hDyxnGKZ  oeq8cWO4  wVXmJCep
(中略)
6rd0x1aK  Cz1ZfreC  Ic0zhcYV  Opx3E3FO  TBQytfqs  XeegDb5b  brRmUfmD  ftNxaFsY  oGmnMVYP  vTgToTLG
filesディレクトリには多数のファイルが存在しています。 これらのファイルの中から、SHA-256ハッシュがchecksum.txtに記載されている値と一致するファイルを探す必要があります。

ステップ3: sha256sum で一致するファイルを特定する

sha256sum コマンドは、ワイルドカード(*)を使うことで、 ディレクトリ内のすべてのファイルに対して一度に実行できます。

ctf-player@pico-chall$ sha256sum files/*

上記のコマンドを実行すると、以下のように

<SHA-256ハッシュ値>  files/<ファイル名>

という形式で、すべてのファイルの SHA-256 ハッシュが一覧表示されます。


上記のコマンドと、checksum.txt に記載されているハッシュ値を比較し、一致するファイルを見つけます。 (出力が大量になるので、grep で絞り込むのが手早いです。)
ctf-player@pico-chall$ sha256sum files/* | grep 3ad37ed6c5ab81d31e4c94ae611e0adf2e9e3e6bee55804ebc7f386283e366a4
3ad37ed6c5ab81d31e4c94ae611e0adf2e9e3e6bee55804ebc7f386283e366a4  files/e018b574
files/e018b574が該当ファイルであることがわかりました。

ステップ4: decrypt.shスクリプトを使ってファイルを復号する

次に、decrypt.shスクリプトを使って、該当ファイルを復号します。 問題文に示されていたように、
./decrypt.sh files/<ファイル名>

の形式で実行することで、復号が行われます。

先ほど特定したfiles/e018b574を復号します。
ctf-player@pico-chall$ ./decrypt.sh files/e018b574
picoCTF{xxxxx}

※フラグはマスクしています。

復号が成功し、フラグが表示されました。


使用したコマンドの軽い解説

ssh

ssh -p <port> <user>@<host>
sshコマンドは、リモートサーバーに安全に接続するためのプロトコルです。
-pオプションでポート番号を指定できます。

sha256sum

sha256sum <ファイル>
sha256sum files/*
ファイルのSHA-256ハッシュ(チェックサム)を計算します。大量のファイルがあるときは files/* のようにまとめて実行できます。

grep

sha256sum files/* | grep <検索文字列>

標準出力から一致する行だけを抽出します。今回のように「正解のハッシュ値が1つだけ分かっている」ケースで特に便利です。


まとめ

この問題では、復号そのものよりも「正しい入力ファイルをチェックサムで特定できるか」が主眼でした。

▼ポイントは以下の通りです。

  • checksum.txt にあるSHA-256と一致するファイルを sha256sum で探す
  • 出力が多いので grep で絞り込む
  • 一致したファイルを decrypt.sh に渡してフラグ取得

閲覧ありがとうございました!

NEXT
次におすすめ

【picoCTF】Secret of the Polyglot - PNGとPDFのポリグロットファイルから2つのフラグ断片を復号

カテゴリ: Forensics難易度: Easy#picoCTF
次の記事へ →
同じカテゴリ/難易度/picoCTFでの表示順が近い記事を優先しておすすめしています。