📝 はじめに
本記事は picoCTF のステガノグラフィ問題
「Hidden in plainsight」 の writeup です。
画像ファイルに隠された情報を読み解くために、
- Exif 情報の解析
- Base64 の二段階デコード
- steghide を用いた埋め込みファイルの抽出
といったステップを順に踏んでフラグを取得しました。
macOS と Windows(WSL) の両方に対応した解析手順 を掲載しているため、環境に依存せず再現可能です。
ステガノ系の CTF 問題でよく使うテクニックが一通り経験できる構成なので、学習目的にも最適です。
🔍 1. メタデータ(Exif)を確認
まずは画像 img.jpg のメタデータを調べます:
exiftool img.jpg
すると、次のような怪しい Comment を発見します:
Comment : ****(Base64 らしき文字列)
→ ここが最初の手がかりです。
🔑 2. Base64 をデコード(1 回目)
echo **** | base64 --decode
上記コマンドでComment の文字列をデコードすると、次のような形式の文字列になります:
steghide:****
ここで重要なのは:
🎯 steghide: の後ろに続く文字列が Base64 っぽい形式のまま残っていること
- 英数字 + = で終わる
- 長さが4の倍数
- Base64 特有の文字構成(A–Z, a–z, 0–9, +, /, =)に一致
この特徴から、コロン : の右側も Base64 でエンコードされた文字列であると分かります。
つまり:
- 最初の Base64 → steghide のヒント
- 2つ目の Base64 → steghide のパスワード
という 2段階構造です。
ステガノ問題では「ヒントの中にさらにヒント(Base64)」という
多層構造がよく使われる定番パターンです。
🔑 3. Base64 をデコード(2 回目)
右側の Base64 をもう一度デコードすると、埋め込み解除に必要なパスワードが得られます。
echo **** | base64 --decode
# 出力
****
🐳 4. steghide の実行環境(macOS / Windows WSL)
macOS の場合:Homebrew では steghide が入らない → Dockerで解決
macOS には公式 formula が無いため、Docker 上で Ubuntu を動かすのが確実です。
docker run --rm -it -v "$(pwd)":/work ubuntu:22.04 bash
コンテナ内で:
apt update
apt install -y steghide
cd /work
steghide extract -sf img.jpg -p <デコードしたパスワード>
成功すると:
wrote extracted data to "flag.txt".
Windows(WSL あり)の場合:WSL が一番簡単
WSL(Ubuntu など)を使える場合、
sudo apt update
sudo apt install steghide
だけでインストール可能です。
あとは Linux と同じ:
steghide extract -sf img.jpg -p <パスワード>
→ macOS や Docker より圧倒的に楽です。
Windows(WSL なし)の場合:steghide for Windows を利用
steghide の Windows バイナリは配布されています(自己責任領域がやや強め)。
例:
https://steghide.sourceforge.net/
※ 公式だが古いため antivirus による誤検知が出ることがあります。
これを回避したい場合:
- WSL を有効化して Ubuntu を入れる
- あるいは Docker Desktop を使う
のが現代的な選択肢です。
🚩 5. フラグを確認
フラグを取得できればクリアです。
🧠 まとめ
- Exif 情報→ Base64 → steghide はステガノの鉄板ルート
- Base64 の多段構造は picoCTF でよく使われる
- macOS で steghide を使うなら Docker が一番確実
- 画像から情報を抜く時はまず Comment / UserComment を疑う