この週末に開催されていた SECCON CTF 2019 公式予選(QUALS) にチームで参加していました。
- SECCON2019
https://www.seccon.jp/2019/
解いた問題について Writeup を記載します。
Sandstorm (misc)
解き方
問題を見ると「I've received a letter... Uh, Mr. Smith?」という文章とともに画像が与えられていました。
画像にはなにやら文字が書かれており、以下のように読めます。
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 なのでしょう。ふむふむ。
ステガノと宣言されているので、以下のサイトも参考にステガノの解き方を試していきます。
qiita.com
- steghide
- 一番最初に思いつたもの。画像の名前「Adam」が復号鍵として使えそう。ただ jpeg にしか使えないものだったような。調べてみてやっぱりそうだった。けど一応試す。何も出ず。パスワードを空にした場合も試すが、やはり何も出ず。
- 一番最初に思いつたもの。画像の名前「Adam」が復号鍵として使えそう。ただ jpeg にしか使えないものだったような。調べてみてやっぱりそうだった。けど一応試す。何も出ず。パスワードを空にした場合も試すが、やはり何も出ず。
- stepic
- png のステガノ手法を調べていて png にも文字を隠せるものがあるらしいと知ったもの。これは!とインストールして試してみるが、やはり何も出ず。残念。
- png のステガノ手法を調べていて png にも文字を隠せるものがあるらしいと知ったもの。これは!とインストールして試してみるが、やはり何も出ず。残念。
- 青い空を見上げればいつもそこに白い猫
- 名前が好きなのでよく使うステガノ解析ツール。うさみみハリケーンの補助ツールとして同梱されている。隠蔽されたデータを表示するさまざまな表示モードを備えているのでそれをぱらぱらと適用してみる。文字の周りだけ変化があったもののアンチエイリアスのせいっぽくてフラグにはつながらなさそう。他に特にめぼしいものは何も出てこず。
- 名前が好きなのでよく使うステガノ解析ツール。うさみみハリケーンの補助ツールとして同梱されている。隠蔽されたデータを表示するさまざまな表示モードを備えているのでそれをぱらぱらと適用してみる。文字の周りだけ変化があったもののアンチエイリアスのせいっぽくてフラグにはつながらなさそう。他に特にめぼしいものは何も出てこず。
・・・ここまで成果ゼロ。
ふむぅ。
改めて画像をよく見てみます。とりあえず。
んー・・・
んー・・・・・・
んーー・・・・・・・・・?
(・・・どことなく QR コードっぽい。)
(そういえば SECCON といえば QR コード問題という気もする。)
(とりあえずスマホをかざしてみる。)
(虚しさだけが残った。)
んー・・・。どうしよう。
ドットをずらすと QR コードになるかもしれない。
でも脈絡もなしにそんな解き方するだろうか。
それに少し面倒そう。やるなら最後。
他に思いつかないので、みんながステガノを解くときに試しているものを試していく。
以下のサイトなどを参考にしました。
DominicBreuker/stego-toolkit: Collection of steganography tools - helps with CTF challenges
https://github.com/DominicBreuker/stego-toolkit
binwalk
- 一応やってみるが特に何も出てこず。
( 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
特にめぼしいところは・・・
・・・
・・・・・・!?
・・・・あ、アダムさん!!!
念の為に適当な png を同じように exiftool にかけてみる。
Interlace については Noninterlaced となっており、Adam さんは出てこなかった。
ので、この Adam という記述はヒントということでよさそう。
フラグに近づけた気がすると楽しくなってきますね。
項目から察するに画像の表示方法に関するものっぽい。
「Adam7 Interlace」で調べてみると、どうやらネット回線が遅かったときに徐々に画像を表示させる方法のひとつらしいことが分かる。
この手法と同じように画素を抽出して並べるとフラグにつながる画像になりそうな気がする。
そんなプログラムを書くのか・・・。
んー・・・
(ネットで回線が遅いときに表示させる方法・・・)
(ということは、遅い回線をエミュレートしてブラウザ表示させるのでも目的の画像が得られる?)
(確か VM って通信速度の帯域を制限かけれたような・・・)
・・・・!!
(勝ち筋が見えたときの画像) #著作権上の配慮
ということで VM の設定を変更します。
画像を適当な場所に設置します。
ブラウザでアクセスします。
ちらっとQRコードらしい画像が見える。
が、すぐに完全な画像が読み込まれてしまう。
モデム並みにしたとはいえ案外処理が早い・・・(もう少し遅くすればよかった)
(何度か試す)
スマホで読み取る。
SECCON{p0nlMpzlCQ5AHol6}
無事、フラグゲット。
とっても楽しかったです。
フラグ
SECCON{p0nlMpzlCQ5AHol6}
付録
Sandstorm の別解
SECCON 2019 Online CTF write-up - Qiita
https://qiita.com/kusano_k/items/6ad4c50dbfffb96e0fca#sandstorm-279-pt-62-solvesSECCON 2019 Online CTF の write-up - st98 の日記帳
https://st98.github.io/diary/posts/2019-10-20-seccon-online-ctf.html
参考文献
ステガノ解析
DominicBreuker/stego-toolkit: Collection of steganography tools - helps with CTF challenges
https://github.com/DominicBreuker/stego-toolkitSteganography - A list of useful tools and resources | 0xRick
https://0xrick.github.io/lists/stego/Forensics入門(CTF) - Qiita
https://qiita.com/knqyf263/items/6ebf06e27be7c48aab2eマジックナンバーまとめ - Qiita
https://qiita.com/forestsource/items/15933888466ba9c3f048
Beeeeeeeeeer (misc) の試行錯誤
- bashシェルスクリプトの記述の仕方に関するメモ書き - Qiita
https://qiita.com/daisukeshimizu/items/c01f29f8398cc7f5c396#bash--x--set--x
Tanuki (misc) の試行錯誤
ag:高速 grep コマンド
運用時に大活躍する必須コマンド - Qoosky
https://www.qoosky.io/techs/f11a6cfea8通常版grepより100%高速なgrep実装「grab」 | ソフトアンテナブログ
https://www.softantenna.com/wp/software/grab/
dd コマンド
- バイナリファイルの一部をバイト数指定で切り出す方法 | Divide et impera
https://glorificatio.org/archives/3203
gzip -dc コマンド
- gzファイルを解凍せずに調べる - Dimension Planet Adventure 最終章 最終話『栄光なる未来』
https://ksmzn.hatenablog.com/entry/2014/02/27/175743
更新履歴
- 2019/10/20 新規作成
- 2019/10/20 「参考文献」を追加
- 2019/10/21 「付録」に Sandstorm の別解 Writeup を追加。
- 2019/10/21 「参考文献」に Beeeeeeeeeer (misc) の試行錯誤 を追加。