【picoCTF】Scan Surprise - QRコード画像を解析してフラグを読み取る

問題概要

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

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

問題文

picoCTF Scan Surprise

解説

この問題では、与えられたZIPファイル challenge.zip を解析して、隠されたフラグを見つけることが求められます。

ステップ1: ZIPファイルの内容確認

まずは、ZIPファイルの内容を確認します。unzip コマンドを使用します。
$ unzip challenge.zip 
Archive:  challenge.zip
   creating: home/ctf-player/drop-in/
 extracting: home/ctf-player/drop-in/flag.png  
challenge.zip には home/ctf-player/drop-in/flag.png というPNGファイルが含まれていることがわかります。

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

次に、PNGファイルの形式を確認します。file コマンドを使用します。
$ file home/ctf-player/drop-in/flag.png
home/ctf-player/drop-in/flag.png: PNG image data, 99 x 99, 1-bit colormap, non-interlaced
この出力から、flag.pngは確かにPNG画像ファイルであることがわかります。

ステップ3: 画像の表示

PNGファイルが正しく画像として扱えることが確認できたので、実際に画像を開いて内容を確認します。
※ローカル環境であれば、コマンドを使わずに画像ビューアで直接開くことができます。
$ xdg-open home/ctf-player/drop-in/flag.png

画像を開くとQRコードが表示されました。


ステップ4: QRコードの解析

QRコードを解析するために、zbarimg コマンドを使用します。
$ zbarimg home/ctf-player/drop-in/flag.png
QR-Code:picoCTF{xxxxx}

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

以上でフラグを取得できました。


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

unzip

unzip challenge.zip

ZIPファイルを展開します。展開後にどのようなファイル/ディレクトリが作られたかも出力から確認できます。


file

file home/ctf-player/drop-in/flag.png

拡張子ではなく、ファイル本体のシグネチャ(マジックナンバー)から形式を判定します。 CTFでは拡張子偽装があり得るので、最初に実行しておくと安心です。


xdg-open

xdg-open home/ctf-player/drop-in/flag.png

Linuxのデスクトップ環境で、既定の画像ビューアなどを使ってファイルを開きます。 (GUIがない環境では使えないことがあります。)


zbarimg

zbarimg home/ctf-player/drop-in/flag.png

画像内のQRコード/バーコードを解析して、中身(今回ならフラグ文字列)を表示します。


まとめ

この問題は「ZIP → 画像 → QRコード」という段階を踏んでフラグを取得する内容でした。

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

  • まず unzip で中身を確認する
  • file で形式を確かめてから解析に入る
  • QRコードは zbarimg で機械的に読み取る

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

NEXT
次におすすめ

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

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