問題概要
picoCTFの「RED」という問題の解説記事です。
- カテゴリ: Forensics
- 難易度: Easy
問題文
解説
この問題では、与えられたPNG画像ファイルから隠されたフラグを抽出することが求められます。
ステップ1: 画像ファイルの確認
まずは、提供されたPNG画像ファイル
red.png を確認します。
見た目は普通の赤い画像ですね。
ステップ2: 画像の形式確認
file コマンドを使って、画像ファイルの形式を確認します。$ file red.png
red.png: PNG image data, 128 x 128, 8-bit/color RGBA, non-interlaced
PNG形式の画像ファイルであることがわかります。特に手がかりはありません。
ステップ3: 画像のメタデータ確認
exiftool を使って、画像のメタデータを確認します。$ exiftool red.png
ExifTool Version Number : 12.76
File Name : red.png
Directory : .
File Size : 796 bytes
File Modification Date/Time : 2026:01:14 21:20:37+09:00
File Access Date/Time : 2026:01:14 21:27:03+09:00
File Inode Change Date/Time : 2026:01:14 21:25:55+09:00
File Permissions : -rwxrwxrwx
File Type : PNG
File Type Extension : png
MIME Type : image/png
Image Width : 128
Image Height : 128
Bit Depth : 8
Color Type : RGB with Alpha
Compression : Deflate/Inflate
Filter : Adaptive
Interlace : Noninterlaced
Poem : Crimson heart, vibrant and bold,.Hearts flutter at your sight..Evenings glow softly red,.Cherries burst with sweet life..Kisses linger with your warmth..Love deep as merlot..Scarlet leaves falling softly,.Bold in every stroke.
Image Size : 128x128
Megapixels : 0.016
Poemという独自フィールドに詩が含まれていますが、この時点ではフラグそのものは見当たりません。 ※実はこのPoem自体もヒントの1つです。私は後で気づきました。
ステップ4: 可読文字列の確認
strings コマンドを使って、画像ファイル内の可読文字列を確認します。$ strings red.png
IHDR
tEXtPoem
Crimson heart, vibrant and bold,
Hearts flutter at your sight.
Evenings glow softly red,
Cherries burst with sweet life.
Kisses linger with your warmth.
Love deep as merlot.
Scarlet leaves falling softly,
Bold in every stroke.x
IDATx
IEND
ステップ5: Poemのヒントを読み解く(頭文字)
strings の出力をよく見ると、Poem の各行の頭文字が不自然に整っています。Crimson...
Hearts...
Evenings...
Cherries...
Kisses...
Love...
Scarlet...
Bold...
先頭文字だけ抜き出すと以下になります。
C H E C K L S B
つまり CHECKLSB = LSB(最下位ビット)を確認せよ というヒントです。
ステップ6: LSBを抽出して隠しデータを復元
ここからは
zstegを使ってLSB解析を行い、隠しデータを抽出します。
zsteg は画像のビット面(LSBなど)を総当たりで解析できる定番ツールです。$ zsteg -a red.png
出力結果の中に以下のようなBase64文字列が含まれているはずです。
cGljb0NURntyM2RfMXNfdGgzX3VsdDFtNHQzX2N1cjNfZjByXzU0ZG4zNTVffQ==
これをデコードすればフラグ、もしくは次なるヒントが得られるはずです。
zsteg が無い場合(インストール手順)
zsteg がインストールされていない場合、以下の手順でインストールします。まずRubyとビルドツールを入れます。
$ sudo apt update
$ sudo apt install -y ruby-full build-essential
次に
gem で zsteg をインストールします。$ sudo gem install zsteg
ステップ7: Base64デコードしてフラグ取得
最後に、抽出したBase64文字列をデコードしてフラグを取得します。
$ echo "cGljb0NURntyM2RfMXNfdGgzX3VsdDFtNHQzX2N1cjNfZjByXzU0ZG4zNTVffQ==" | base64 -d
picoCTF{xxxxx}
※フラグはマスクしています。
フラグを取得できました!
使用したコマンドの軽い解説
strings
strings <ファイル名>
バイナリ内に含まれる可読文字列を抽出します。画像に埋め込まれたメタデータやヒント(今回のPoemのようなもの)を拾えることがあります。
exiftool
exiftool <ファイル名>
画像などのメタデータを読み取るツールです。コメントや独自フィールドに情報が隠される問題がよくあります。
zsteg(任意)
zsteg -a <画像ファイル名>
画像のビット面(LSBなど)を総当たりで解析し、隠しデータを見つけるためのツールです。
まとめ
この問題のポイントは、メタデータ(Poem)そのものにフラグがあるのではなく、Poemが「次に何をやるべきか」を示すヒントになっている点です。
▼ポイントは以下の通りです。
exiftool/stringsでメタデータ・可読文字列を確認する- Poemの頭文字から CHECKLSB(LSBを見よ)を読み取る
- LSB解析(zsteg / 自作スクリプト)で隠しデータを抽出する
閲覧ありがとうございました!
NEXT
次におすすめ
読み終わったら、そのまま次へ
【picoCTF】Ph4nt0m 1ntrud3r - WiresharkでPCAPを解析して不審な通信からフラグ発見
カテゴリ: Forensics難易度: Easy#picoCTF
次の記事へ →
同じカテゴリ/難易度/picoCTFでの表示順が近い記事を優先しておすすめしています。