$ :(){ :|:& };:

$ :(){ :|:& };:

:: fork failed: resource temporarily unavailable

CTF for beginners 2016@長野に参加してきた

5/15(日)にctf4b@長野に参加してきた


長野県民としてこれほど嬉しい企画はない。 SECCONメルマガで「ctf4bを長野で開催する」という通知が届いてから5分で応募完了し、その日から非常にわくわくしていた私は当日意気揚々と長野市に向かった。

参加者の方は自分含めみんな長野の各地の山奥からのそのそ集結するんだろうなあと勝手に想像していたのだが、実際遠方からの参加者も多くいて驚いた。

講義はReversing,Web,Forensicsの3つを受けることができた。 思ったことをざっくりとまとめておく。

  • Reversing

    • apk解析
      いつも自分はDEXを取り出して、dex2jarをかけたあとそのままJD-GUIを使ってしまうのだが、今回はjarをさらにunzipかけてclassファイルをprocyonというデコンパイラで.javaを生成する仕方でやってみた。

    • elf解析
      今までgdbとobjdump使ってじっくり見てたけど、全く使った事なかったIDA使ってみて本当に感動した。実機にDemoバージョンを入れてみたので今後どんどん使っていきたい。

  • Web

    OSコマンドインジェクションだったり、PHPのis_numeric()の謎挙動、include()が生む脆弱性について等の講義だった。

    面白かったのは、PHPのType Confusionのお話
    PHPでは期待しない型の引数が与えられたときNULLを返す関数の仕様が多い。例えばstrcmpもそうなのだが、PHPでは NULL == 0 => tureなのである。strcmpは比較した結果が等しい時も0を返すため、これでパスワード等を比較していると脆弱性を生む原因になるみたいだ。

  • Forensics

    パケット解析をWireSharkで各ペインだったりフィルタだったりの使い方、TCP StreamとかProtocol Hierarchyの見方の説明を受けながら、実際に使ってみる感じだった。

    ファイル調査では、fileコマンドでは抽出できない入れ子ファイルの抽出はbinwalkでできるということを知った。

    個人的に一番楽しかった。


最後にミニコンテストのようなものを1時間ぐらいした。 誰がが旗取った時に「ピコーンピコーン!!」となるのが非常に新鮮だった。

結果は6位だった

f:id:taiyoslime:20160611225718p:plain

上から順番に解こうとしたため、難しい問題で時間を溶かした挙句最後に位置していたバイナリ問まで辿り着くのにかなり時間がかかってしまった。
数カ月前のJOI本選の教訓がまったく活かせていない。

今までは極めて牧歌的に、バイナリ眺めて全挙動を把握しきってから問題にとりかかるーーーということをしていたのだが
実際限られた時間の中で旗取るのにそんなことをしているのは明らかに無駄、いう極めて当たり前のことに気づけていなかった。

本当はWriteupなるものを書いてみたかったのだが、自分の作業の痕跡があまりにぐちゃぐちゃすぎたのでやめた。

これから少しづつOnline CTF等に参加しつつ実践経験を積んでいきたい。