【write-up】SECCON 2019 Online CTF【[misc]Sandstorm】

前略

この記事はwrite-upではありません。悪しからず。

......

....

..

.

事もあろうにSECCONと情報処理技術者試験がブッキングしてしまったので、SECCONの方はあまり触れていないが、少しでも触った問題については反省会でもしようかと。以下は触った問題一覧。

  • [pwn]one
  • [pwn]Sum
  • [reversing]follow-me
  • [misc]Beeeeeeeeeer
  • [misc]Sandstorm
  • [forensics]repair
  • [crypto]coffee_break

割とまじめに取り組もうとした問題もあるし、ファイル落としてちょっと見ただけの問題もあるが、触ったことに変わりはないので取り合えず。まぁまぁまじめに取り組んだと思われる[misc]Sandstormあたりから反省会を行っていく。

嘆き

誰かのブログで自分のたどったプロセスを「嘆き」と表現していたのが気に入っているので、今後例に倣って「嘆き」を多用していくことにする。

とりあえず問題文からstegano系の問題だと思われたが、とりあえずbinwalkにかける。もちろん何も出ない。

次にtweakpngにかける。

f:id:yamanobori_programing:20191020201013p:plain

第一印象はIDATチャンクがずいぶん多いということ。この記事を書いてる途中で「IDATチャンクの数は画像のサイズに依存するのでは?」とか思ったりしたが、63KBのSandstorm.pngのIDATチャンクの数が8つなのに対し、3KBのpngも43KBのpngもIDATチャンクの数が互いに1つだったのでどういうときにIDATチャンクの数が複数個になるのかはよく分からない。

とりあえずIDATチャンクを消したりして何個かpngを作ってみたものの、flagにつながりそうな情報は得られなかった。

解き方

この記事を見た。

st98.github.io

バイナリエディタで最初のIDAT チャンクのlengthを

00 00 20 00

から

00 00 05 00

に書き換えてchromeで開いたら解けたらしい…

 

🤔???

 

補遺

png全体の構造は以下のようになっている。

f:id:yamanobori_programing:20191020225004p:plain

最初だけpngシグネチャで8bytes占めていて、以下、任意のチャンクが複数個並んで、最後は必ずIENDチャンクで終わっている。

チャンク全体の構造は以下の様になっている。

f:id:yamanobori_programing:20191020225629p:plain

length:data領域が何byteであるのかを示す

type:チャンクの種類を示す。

data:データが格納されている。

CRC:誤り検知のための数値データ。

チャンクの種類は大きく必須チャンクと補助チャンクに分かれるが補助チャンクについては以下を参照。

uno036.starfree.jp

必須チャンクは主にIHDR、IDAT、IENDがあるが、IHDRチャンクには画像サイズやカーラータイプなどの情報が格納されていて、IDATチャンクには圧縮された実際のイメージデータが格納されている(?)。IENDはpngの一番最後のチャンクに必ずいて、データの終わりを示す。

再出撃

改めて渡された画像データを見てみる。

......

....

..

.

 100歩譲って画像をブラウザで表示させようと思ったのは、出題時の画像の渡し方に違和感があったから理解できるにしても、なぜlengthを0x500にしたらQRコードが表示されると分かったのだろうか?0x543bytesのバイナリを見ても多分圧縮されたデータが格納されているだけで、データ長を書き換える根拠となるようなものは(僕の力では)確認できなかった。いったいどうやって解いたんだろうか?

 

まぁ、でも今回の問題でlengthを任意に書き換えることで埋め込まれたデータを取り出せることが分かったので、そのうち勝手にlengthを書き換えてくれるスクリプトでも書いてみようと思う(書いてみるとは言ってない)。

 追記

soji256.hatenablog.jp

VMwareを持っていれば、「仮想マシンの設定の編集」->「ネットワークアダプタ」->「詳細」->「発信転送」->「バンド幅」のところを適切にいじってからどこかに置いておいた画像を開くとQRコードが表示されるようです。(VMの方には環境が入ってないので肌やってない。適当な環境が用意出来たらやってみる予定。)