0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MSB picoCTF (Writeup)

0
Posted at

【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)を開いて確認してみます。

image.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}


お疲れさまでした!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?