【picoCTF】[MSB] Writeup
問題概要
- Category: Forensics
Description:
This image passes LSB statistical analysis, but we can't help but think there must be something to the visual artifacts present in this image...
Download the image here
日本語訳:
この画像はLSBの統計的分析を通過していますが、画像に現れている視覚的なアーティファクトには何か理由があるに違いないと思わずにはいられません……
画像はこちらからダウンロードできます
解法のプロセス(アプローチ)
1. 画像の確認と初期調査
まずはダウンロードしたファイル(Ninja-and-Prince-Genji-Ukiyoe-Utagawa-Kunisada.flag.png)を開いて確認してみます。
どうやら、画像の上半分に不自然なノイズが走っているようですね。
念のため binwalk コマンドで確認してみます。
binwalk Ninja-and-Prince-Genji-Ukiyoe-Utagawa-Kunisada.flag.png
実行結果:
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 1074 x 1500, 8-bit/color RGB, non-interlaced
41 0x29 Zlib compressed data, default compression
何かしらのデータがZlibで圧縮されており、ステガノグラフィー(画像へのデータ隠蔽)であることがわかります。
2. 「MSB」というヒントとツールの準備
ここで問題文を振り返ってみると、「LSB(Least Significant Bit:最下位ビット)の分析は通過している」と書かれています。しかし、問題名は 「MSB(Most Significant Bit:最上位ビット)」 です。
ステガノグラフィーは通常、画像の変化を目立たせないためにLSBにデータを隠しますが、今回はあえてノイズが目立つMSBにデータを隠しているのだと推測できます。これが最大のヒントでした。
MSBからのデータ抽出には、sigBits.py という外部ツールが便利です。ターミナルからダウンロードして準備します。
# sigBitsツールの取得
wget [https://raw.githubusercontent.com/Pulho/sigBits/master/sigBits.py](https://raw.githubusercontent.com/Pulho/sigBits/master/sigBits.py)
# 画像処理用の依存ライブラリをインストール
pip install Pillow
💡 コラム:sigBits とは?
画像のピクセルデータ(RGB値)の特定のビット(最下位ビットや最上位ビットなど)を抽出し、隠された文字列やデータを復元するためのPythonスクリプトです。
3. MSBからのデータ抽出とフラグの獲得
準備した sigBits.py を使って、画像のMSBからデータを抽出します。
python3 sigBits.py -t msb -i Ninja-and-Prince-Genji-Ukiyoe-Utagawa-Kunisada.flag.png -out output.txt
📌 コマンドのオプション解説:
-
-t msb: 抽出するターゲット(Target)を指定します。今回は最上位ビットなのでmsbです。 -
-i [ファイル名]: 入力(Input)する画像ファイルを指定します。 -
-out [ファイル名]: 抽出したデータを保存する出力(Output)ファイル名を指定します。
コマンドが完了すると、抽出されたデータが output.txt に保存されます。
最後に、このテキストファイルの中から grep コマンドを使ってフラグの形式(picoCTF{...})を検索します。
grep -oE "picoCTF\{[^}]+\}" output.txt
(※ -oE オプションは、正規表現を使って一致した部分だけを綺麗に抜き出すための指定です)
実行結果:
picoCTF{15_y0ur_que57_qu1x071c_0r_h3r01c_572ad5fe}
推測通り、見事にフラグがヒットしました!
Flag:
picoCTF{15_y0ur_que57_qu1x071c_0r_h3r01c_572ad5fe}
お疲れさまでした!
