1. はじめに
- 対象問題: picoCTF - RED (Forensics / Easy)
- 一言: 一見ただの赤い画像に隠されたギミックを解く問題
2. 与えられたファイルと初期調査
まずはダウンロードした red.png のメタデータをWSLで調査します。
exiftool red.png
#poemにCrimson heart, ~ Bold in every stroke.と書かれている
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
3. 考察
詩の各行の頭文字を縦に読むと、C-H-E-C-K-L-S-B = 「CHECK LSB」 になります。
ステガノグラフィの手法としてよくある、画像データのLSB(最下位ビット)に暗号データを埋め込むLSB法を使っていると推測。
参考にさせていただいたブログ
Linuxでステガノグラフィ技術を使って画像ファイルの中にテキストファイル埋め込む
https://qiita.com/sabanomisoni/items/a37fd4e522a35987e8fc
4. フラグの抽出(解法)
LSBの抽出には、PNGのステガノグラフィ解析で強力な zsteg コマンドを使用しました。
4-1. zstegによる解析
WSL環境で以下のコマンドを実行し、RedチャンネルのLSBデータを抽出します。
# インストール(初回のみ。Rubyのパッケージマネージャを使いま)
sudo apt install ruby -y
sudo gem install zsteg
# 解析を実行
zsteg red.png
実行結果の text: セクションに、末尾に == が含まれる`"cGljb ~"という怪しい文字列(Base64形式)がありました。
4-2. CyberChefでのデコード
抽出した文字列をCyberChef に投入します。
-
Input:
zstegで得られたBase64文字列を入力 -
Recipe:
From Base64を適用
デコードした結果、フラグ文字列が出現しました。
5. まとめ・感想
- 一見ただの単色画像に見えても、メタデータのテキストに次のステップ(CHECK LSB)への伏線が隠されている良問でした
-
zstegツールを使用しましたが、pythonコードで自作する方法もあるようです