俺的 Capture The Flag Writeup

Capture The Flag に挑戦したときの記録を自分用にドキュメント化して置いておくだけのブログ。

[CpawCTF] 第六夜: JPEG に埋もれた個人情報

Q10.[Forensics] River

以下、問題文

Q10.[Forensics] River

10pt

JPEGという画像ファイルのフォーマットでは、撮影時の日時、使われたカメラ、位置情報など様々な情報(Exif情報)が付加されることがあるらしい。 この情報から、写真に写っている川の名前を特定して欲しい。

問題ファイル: river.jpg

FLAGの形式は、"cpaw{river_name}"

例:隅田川 → cpaw{sumidagawa}

答案

今回は問題文に jpeg 形式で保存された写真が添付されているようです。 この写真がどこで撮影されたものなのかがわかれば、それが直接 Flag になるみたいですね。

何はともあれ、画像をダウンロードします。

f:id:comeonknowhow:20200519182837j:plain
river.jpg

見たことない場所ですね。 知っている人にとっては、一瞬でクリアな問題なのでしょうか

あ、いや、そういう問題ではないようです。 以下の文面に着目します。

JPEGという画像ファイルのフォーマットでは、... 位置情報など様々な情報(Exif情報)が付加されることがあるらしい。

jpeg に付加される Exif 情報には、位置情報が含まれるらしいので、これがわかれば Flag のヒントになりそうです。

ところで、Exif 情報とはなんでしょう...? 初耳です。

以下、wikipedia より引用。

Exchangeable image file format(エクスチェンジャブル・イメージ・ファイル・フォーマット)は、富士フイルムが開発し、当時の日本電子工業振興協会 (JEIDA)で規格化された、写真用のメタデータを含む画像ファイルフォーマット。デジタルカメラの画像の保存に使われる。略称はExifで「エグジフ」(もしくは「イグジフ」)。

直訳すると「画像に勝手に付け加えられる情報のフォーマット」というところでしょうか。

jpg ってせっかく情報落として、圧縮効率高めているのに、余計な (?) 情報付与して大きくしないほうがいいのではないか...? という意見は考えなかったことにします。

プリントなどする際には「カメラがどんなものだったか」という情報や、画像処理の際に「ISO 感度, シャ速, 絞り」などがあると何かと応用が効くらしいです。 あまりやらないので、わからないすけど

ただ、写真に位置情報などの個人情報が残ってしまうって、個人的にはゾッとしますけど、SNS などにアップロードするときには、このうちのいくつかが削除されるなどの対策が取られているらしいです。

Exif 情報は、PNG に対応してないので、写真を撮影したものを jpg で保存されたものを、スクショ撮って png にして...とかって書いてありますが、それもう (以下略)

とまあ、Exif 情報に関して、斜め読みしたところで、 これを見る (調べる) 方法を探していきましょう。

exif 情報 確認 [検索] とすると、 EXIF確認君 - 画像情報解析ツール というのが出てきますね。

ここに、問題から入手した画像をアップロードしてみましょう。

f:id:comeonknowhow:20200519184319p:plain
EXIF情報確認君

右に、GPS, 地図というタブあるので、それぞれ選択してみます。

f:id:comeonknowhow:20200519184415p:plain
GPS

f:id:comeonknowhow:20200519232251p:plain
地図

どうやら「甲突川」という場所だろう、ということが地図からわかります。

読みがわからないので、調べると「こうつきがわ」と読むらしいです。

問題文下部にある回答の例を見ると 隅田川 -> cpaw{sumidagawa} なので
甲突川 -> cpaw{koutukigawa}Flag Get でしょう。

submit

Flag が見つかったので、提出します。

f:id:comeonknowhow:20200519184727p:plain
submit

弾かれてしまいました?

f:id:comeonknowhow:20200519184749p:plain
rejected

おや? と思い他の方の writeup を拝見すると、「甲突川」のスペルは「koutsukigawa」だそうです。

Flagはcpaw{koutsukigawa}

参考にさせていただいたサイト

f:id:comeonknowhow:20200519184929p:plain
re-submit

f:id:comeonknowhow:20200519184946p:plain
accepted

一悶着ありましたが、無事 10pt 獲得です。 ごちそうさまでした。

次回は、パケットの一部を保存したファイルを解析せよ、とのこと。
こういうことが知りたかったんだよ〜。ということで次回も張り切っていきます。

別解

exiftool という Perl 製のライブラリ / コマンド使っても (こちらでは、緯度経度が) 求められるそうです。

私のメインPC は macbook なので、Homebrew で入れるには

brew install exiftool

すれば良いそうです。

サーバは Ubuntu 派なので、Ubuntu で呼び出してみたら「libimage-exiftool-perl から取得してくれ」と言われました。 どっちでも使えるっぽいですね。

$ exiftool

Command 'exiftool' not found, but can be installed with:

sudo apt install libimage-exiftool-perl

使用方法はざっくりと以下の通り。

exiftool 使い方 参考

# man
$ exiftool

# exif 情報を表示する
$ exiftool {ファイル名} 

# 日本語で表示 (タブがバラバラになるのでオススメしない...)
$ exiftool -lang ja {ファイル名}

今回の問題に対する実行結果です。

$ exiftool ~/Downloads/river.jpg
ExifTool Version Number         : 11.85
File Name                       : river.jpg
Directory                       : /Users/sudachi/Downloads
File Size                       : 414 kB
...(中略)
GPS Position                    : 31 deg 35' 2.76" N, 130 deg 32' 51.73" E

これで 緯度経度の位置がわかるので、Google map にでも渡せば、場所がわかるカモですね。

ちなみに、Google map で検索するには、緯度と経度それぞれの初めにある「XXX deg」の部分を「XXX°」に変える必要がありそうです。

元: 31 deg 35' 2.76" N, 130 deg 32' 51.73" E
検索用: 31° 35' 2.76" N, 130° 32' 51.73" E

以上です。