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

問題概要

picoCTFの「Secret of the Polyglot」という問題の解説記事です。

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

問題文

picoCTF Secret of the Polyglot

解説

ステップ1: 配布ファイルの確認

問題文から配布ファイル flag2of2-final.pdf をダウンロードし、内容を確認します。
まずはevinceでビュワーを起動してみます。
$ evince flag2of2-final.pdf
picoCTF Secret of the Polyglot PDF

フラグの一部っぽい文字列が表示されています。しかし、完全なフラグではないようです。

1n_pn9_&_pdf_2a6a1ea8}

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

次に、file コマンドを使ってファイルタイプを確認します。
$ file flag2of2-final.pdf 
flag2of2-final.pdf: PNG image data, 50 x 50, 8-bit/color RGBA, non-interlaced
flag2of2-final.pdf は実際にはPDFではなく、PNG画像ファイルであることがわかります。
拡張子が.pdfとなっていますが、内容はPNG画像データです。このようなファイルは「ポリグロットファイル」と呼ばれます。


ステップ3: 拡張子を変更して内容を確認

拡張子を.pngに変更し、画像ビューアで開いてみます。
$ mv flag2of2-final.pdf flag2of2-final.png
$ xdg-open flag2of2-final.png

フラグの前半部分が表示されました。

picoCTF Secret of the Polyglot PNG

以下のような文字列が確認できます。

picoCTF{f1u3n7_

ステップ4: フラグの取得

フラグの前半部分と後半部分を組み合わせると、完全なフラグが得られます。

picoCTF{xxxxx}

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

使用したコマンドまとめ

evince

evince <PDFファイル名>

LinuxのPDFビューアです。今回のように「配布ファイルがPDFっぽい」ケースでは、まず見た目を確認するのに使えます。


file

file <ファイル名>

拡張子ではなく、ファイルの中身(マジックナンバーなど)を見て形式を判定します。 CTFでは拡張子偽装がよくあるので、最初に実行すると安心です。


mv

mv <元ファイル名> <新ファイル名>
ファイル名(拡張子を含む)を変更します。 今回のように「実体はPNGなのに拡張子がpdf」の場合、.png に変えて画像として開けるようにします。

xdg-open

xdg-open <ファイル名>

Linuxで、既定のアプリケーションでファイルを開きます。 画像なら画像ビューア、PDFならPDFビューアが起動します。


まとめ

この問題は「拡張子に惑わされず中身を見る」ことが重要な、Forensicsの基礎が詰まった問題でした。

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

  • file コマンドでファイルタイプを確認する
  • 拡張子を変更して異なる形式で内容を確認する
  • ポリグロットファイルの概念を理解しておく
NEXT
次におすすめ

【picoCTF】CanYouSee - 画像に隠されたフラグを見つけ出す

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