setodaNote

忘れる用のメモ書き

SECCON CTF 2019 公式予選(QUALS) Writeup

この週末に開催されていた SECCON CTF 2019 公式予選(QUALS) にチームで参加していました。

解いた問題について Writeup を記載します。


Sandstorm (misc)

解き方

問題を見ると「I've received a letter... Uh, Mr. Smith?」という文章とともに画像が与えられていました。

f:id:soji256:20191020181041p:plain:w459
問題文

画像にはなにやら文字が書かれており、以下のように読めます。  
 
 
 

Hi guys
My name is Adam.

I've created yet another stegano.
Can you find hidden message?

 
 
 
 
Adam と名乗っています。堂々のステガノ宣言です。  
 
 
問題文と合わせると彼の名前は Adam Smith というようです。  
 
 
一応、調べてみると哲学者がヒットするものの、現時点では特にヒントになるような情報は得られず。  
 
 
ja.wikipedia.org  
 
 
画像の方を追ってみます。  
 
 
 
 
 
画像をダウンロードしてみるとファイル名は
「sandstorm.png_9ad613a618d8bf698f9fc1cd21a50c8298cd708d」
となっていました。  
 
 
 
png です。 
 
 

バイナリエディタで見てみても「89 50 4E 47(臼NG)」とあったので、きっと拡張子の通り png なのでしょう。ふむふむ。

f:id:soji256:20191020182403p:plain
バイナリエディタで画像ファイルを見たところ
 
 
 

ステガノと宣言されているので、以下のサイトも参考にステガノの解き方を試していきます。  
  qiita.com

 
 
 

  • steghide
    • 一番最初に思いつたもの。画像の名前「Adam」が復号鍵として使えそう。ただ jpeg にしか使えないものだったような。調べてみてやっぱりそうだった。けど一応試す。何も出ず。パスワードを空にした場合も試すが、やはり何も出ず。  
       
  • stepic
    • png のステガノ手法を調べていて png にも文字を隠せるものがあるらしいと知ったもの。これは!とインストールして試してみるが、やはり何も出ず。残念。  
       
  • 青い空を見上げればいつもそこに白い猫
    • 名前が好きなのでよく使うステガノ解析ツール。うさみみハリケーンの補助ツールとして同梱されている。隠蔽されたデータを表示するさまざまな表示モードを備えているのでそれをぱらぱらと適用してみる。文字の周りだけ変化があったもののアンチエイリアスのせいっぽくてフラグにはつながらなさそう。他に特にめぼしいものは何も出てこず。  
       
       
       
       
       

・・・ここまで成果ゼロ。  
 
 
 
 
 
ふむぅ。  
 
 
 
 
 

改めて画像をよく見てみます。とりあえず。  
 
 

f:id:soji256:20191020190503p:plain
画像を拡大してみたところ
 
 
 

んー・・・  
 
 
 
 
 
んー・・・・・・  
 
 
 
 
 

んーー・・・・・・・・・?  
 
 
 
 
 

(・・・どことなく QR コードっぽい。)  
 
 
 
   
 
 
 
   
 
 

(そういえば SECCON といえば QR コード問題という気もする。)  
 
 

(とりあえずスマホをかざしてみる。)  
 
 

 
 
 

(虚しさだけが残った。)  
 
 
 
 
 

んー・・・。どうしよう。  
 
 
 
ドットをずらすと QR コードになるかもしれない。 
 
 
 
 
でも脈絡もなしにそんな解き方するだろうか。 
 
 
 
 
それに少し面倒そう。やるなら最後。 
 
 
 
 
他に思いつかないので、みんながステガノを解くときに試しているものを試していく。  
 
 
 
   
 
 
 
 
以下のサイトなどを参考にしました。

( Binwalk )

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 584 x 328, 8-bit/color RGBA, interlaced
59            0x3B            Zlib compressed data, best compression
  • exiftool
    • そういえばやっていなかった。
( Exiftool )
File Type                       : PNG
File Type Extension             : png
MIME Type                       : image/png
Image Width                     : 584
Image Height                    : 328
Bit Depth                       : 8
Color Type                      : RGB with Alpha
Compression                     : Deflate/Inflate
Filter                          : Adaptive
Interlace                       : Adam7 Interlace
Background Color                : 255 255 255
Image Size                      : 584x328
Megapixels                      : 0.192

特にめぼしいところは・・・  
 
 
 
 
 
 
 
 
・・・  
 
 
 
 
 
 
 
 
・・・・・・!?  
 
 
 
 
 
 
 
 

f:id:soji256:20191020191633p:plain
Adam さんに集中線
 
 
 
 
・・・・あ、アダムさん!!!  
 
f:id:soji256:20191020195858p:plain
Adam Smith (1723~1790) 出典:Wikipedia
 
 
 
   
 
 
 
 
念の為に適当な png を同じように exiftool にかけてみる。  
 
 
 
Interlace については Noninterlaced となっており、Adam さんは出てこなかった。  
 
 
ので、この Adam という記述はヒントということでよさそう。  
 
 
フラグに近づけた気がすると楽しくなってきますね。 
 
 
 
 
 
 
項目から察するに画像の表示方法に関するものっぽい。  
 
 

「Adam7 Interlace」で調べてみると、どうやらネット回線が遅かったときに徐々に画像を表示させる方法のひとつらしいことが分かる。

en.wikipedia.org  
 
 

この手法と同じように画素を抽出して並べるとフラグにつながる画像になりそうな気がする。  
 
 
そんなプログラムを書くのか・・・。  
 
 

んー・・・  
 
 
 
 
 
 
 
(ネットで回線が遅いときに表示させる方法・・・)  
 
 
 
(ということは、遅い回線をエミュレートしてブラウザ表示させるのでも目的の画像が得られる?)  
 
 
 
(確か VM って通信速度の帯域を制限かけれたような・・・) 
 
 
 
 
 
・・・・!!    
 
 
 
(勝ち筋が見えたときの画像) #著作権上の配慮  
   
 
 
 
ということで VM の設定を変更します。

f:id:soji256:20191020193323p:plain
VM の回線速度をモデム並みに設定変更
 
 
 
 
画像を適当な場所に設置します。  
 
 
 
ブラウザでアクセスします。  
 
 
 
ちらっとQRコードらしい画像が見える。  
 
 
 
が、すぐに完全な画像が読み込まれてしまう。  
 
 
 
モデム並みにしたとはいえ案外処理が早い・・・(もう少し遅くすればよかった)  
 
 
 
 
 
   
(何度か試す)  
 
 
 
 
 
   
 
 
 
 
 
 
 
f:id:soji256:20191020193535p:plain
現れた QR コード
 
 
 
 
 
 
f:id:soji256:20191020203730p:plain
Find out! (やったぜ)
 
 
 
 
 
 
 
 
スマホで読み取る。

SECCON{p0nlMpzlCQ5AHol6}

無事、フラグゲット。  
 
とっても楽しかったです。

 

フラグ

SECCON{p0nlMpzlCQ5AHol6}

 
   
 

付録

Sandstorm の別解

参考文献

ステガノ解析

Beeeeeeeeeer (misc) の試行錯誤

Tanuki (misc) の試行錯誤

ag:高速 grep コマンド

dd コマンド

gzip -dc コマンド

更新履歴

  • 2019/10/20 新規作成
  • 2019/10/20 「参考文献」を追加
  • 2019/10/21 「付録」に Sandstorm の別解 Writeup を追加。
  • 2019/10/21 「参考文献」に Beeeeeeeeeer (misc) の試行錯誤 を追加。