問題概要
picoCTFの「Verify」という問題の解説記事です。
- カテゴリ: Forensics
- 難易度: Easy
この問題は、提示された SHA-256チェックサム と一致するファイルを大量の候補から探し出し、
decrypt.sh で復号してフラグを得る内容です。問題文
解説
ステップ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での表示順が近い記事を優先しておすすめしています。