【picoCTF】Hidden in plainsight - JPEGコメントとsteghideで埋め込まれたフラグを抽出

問題概要

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

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

問題文

picoCTF Hidden in plainsight

解説

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

ステップ1: 画像ファイル形式の確認

まずはファイル形式の確認から始めます。fileコマンドを使って、img.jpg の形式を確認します。
$ file img.jpg
img.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, comment: "c3RlZ2hpZGU6Y0VGNmVuZHZjbVE9", baseline, precision 8, 640x640, components 3
この出力から、img.jpg はJPEG画像であることがわかります。 commentフィールドに着目すると、エンコードされた文字列が含まれています。
これはフラグの手がかりとなる可能性があります。

ステップ2: コメントのデコード

文字列(c3RlZ2hpZGU6Y0VGNmVuZHZjbVE9)は終端が===ではありませんが、文字列の構成からBase64エンコードされている可能性が高いです。
ですので、Base64デコードを試みます。
$ echo "c3RlZ2hpZGU6Y0VGNmVuZHZjbVE9" | base64 -d
steghide:cEF6endvcmQ=
デコードの結果、steghide:cEF6endvcmQ= という文字列が得られました。
ここで、steghide: という部分に注目します。
steghideはステガノグラフィー(画像などのメディアファイルにデータを隠す技術)に関連するツールの名前です。
おそらく、steghideツールを使用して、img.jpgから隠されたデータを抽出する必要があることを推測できます。
続く部分 cEF6endvcmQ=は終端が=であることから、Base64エンコードされた文字列である可能性が高いです。


cEF6endvcmQ=をBase64デコードしてみます。
$  echo "cEF6endvcmQ=" | base64 -d
pAzzword
デコードの結果、pAzzword という文字列が得られました。
これはおそらく、steghideツールで使用するパスワードです。

ステップ3: steghideでのデータ抽出

次に、steghideツールを使用して、img.jpgから隠されたデータを抽出します。
steghideがインストールされていない場合は、インストールしてください。
$ steghide extract -sf img.jpg -p pAzzword
wrote extracted data to "flag.txt".
このコマンドにより、img.jpgから隠されたデータが抽出され、flag.txtというファイルに保存されます。

ステップ4: フラグの確認

最後に、flag.txtファイルの内容を確認します。
$ cat flag.txt
picoCTF{××××××}
flag.txtからフラグを取得できました。 ※フラグは伏せ字にしています。

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

file

file <ファイル名>

fileコマンドは指定したファイルの種類を判別します。拡張子ではなく、ファイルの中身(マジックナンバー)を基に判別します。 ctfでは拡張子が偽装されていることが多いため、ファイル形式の確認に役立ちます。


echo + base64

echo '<Base64エンコード文字列>' | base64 -d
base64コマンドはBase64エンコードおよびデコードを行うツールです。
-dオプションを付けることでデコードが可能です。
ctfでは、Base64エンコードされたデータがよく使われるため、デコードに役立ちます。

steghide

steghide extract -sf <画像ファイル名> -p <パスワード>
steghideコマンドは、画像や音声ファイルにデータを隠したり、抽出したりするためのツールです。
-sfオプションでステガノグラフィー対象のファイルを指定し、-pオプションでパスワードを指定します。 ctfでは、画像ファイルに隠されたデータを抽出するのに役立ちます。

まとめ

picoCTFの「Hidden in plainsight」問題では、画像ファイルのコメントにBase64エンコードされた情報が隠されており、
それを手がかりにしてsteghideツールを使用して隠されたデータを抽出しました。
ファイル形式の確認、Base64デコード、ステガノグラフィー解析の基本的なスキルが求められる問題でした。
▼ポイントは以下の通りです。
  • 拡張子やファイル名に惑わされず、まずはファイル形式を確認する。
  • 画像ファイルのメタデータ(コメントなど)にも注目する。
  • 不自然な文字列はエンコードされている可能性があるため、適切なデコードを試みる。
  • steghideなどのステガノグラフィーツールの使い方を覚えておく。

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

NEXT
次におすすめ

【picoCTF】Flag in Flame - 巨大ログからBase64化されたPNGを復元してフラグ取得

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