ISEC 2010 CTF に参加してきました。

ISEC 2010 CTF 参戦記です。
smpCTFに続き、CTF系コンテストへの参加はこれで2回目です。
相変わらず面白すぎて大変でした。

参加して思ったこと

CTF以外でもいろいろと経験を積んでる(つもり)ので、
きっとそれなりに得点できるだろう!とか考えてたんですが、
18問中2問しか自力で解けませんでした。これはひどい
全体的に問題のレベルが高かったような気がします。
また、問題のジャンルが AndroidWifi らしく、
不得意分野だらけでした。


その分、勉強になることがすごく多かったので、参加してよかったなあと感じます。
途中からは、id:ucq さんと @murachue さんと @ada_u さんの4人でスカイプ会議チャット窓作って、
わいわいと解いてました。すんごく楽しかった。


ただし、100点問題が1問しか解けなかったのが非常に悔しい。くんやしいぃぃ!

問題の傾向(分かる範囲で)

Anrdoid系問題

Android系の問題は、apkファイルがアップされ、そこからキーを探すタイプでした。
apkファイルはLhaplusなどで解凍できるので、解凍してやります。
そこからdexファイルを逆コンパイルします。
コンパイルするには、Dedexer user's manualここのddxを使います*1。要java
後はソースファイルをごそごそごそごそ見たり、エミュレータにインストールしてみたり。
エミュレータへのインストールは、Android Virtual Deviceを立ち上げた状態で次のコマンドでできます。

adb install hogehoge.apk

1問だけAndroid系の問題は解けましたが、実際はソース内に散らばったアスキーコードを繋げてやるとURLになり、
そのURLにアクセスするとフォームがあるので、適当にPOSTしてWiresharkでパケットを取るとクッキーにFLAGがあるという
なんだかよく分からない問題でした。300点。


どうやら凄く綺麗に逆コンパイルできるものがあるらしい。
それを使うと、100点問題なんかは普通にFLAGが丸見えだとのこと。
つまり、Androidあんまり関係ないね、ということだったみたい。
コンパイラの情報求む(´・ω・`)

画像系問題

結局解き方が分からずじまいなんですが、画像の中に
alzファイルが埋め込まれてたり、
alzファイルが埋め込まれてたり、
謎コードが埋め込まれてたり、
・・・
すんごく頑張ったけど結局駄目でした。
alzファイルは、unalzを使ってスクリプトを書いて、ブルートフォースするのがよかったらしい。
(HELLOのパスワードは4321。)
参考までに、IRCのログ。

04:11 (direction) so about q1... earth.png -> there was a layer containing an alzip file
04:11 (direction) used ghex2 to delete the bytes around the ALZ file
04:12 (direction) then the alzip contained a file HELLO
04:12 (direction) to extract it you needed a password
04:12 (Bayes[disekt]) 4321 :)
04:12 (direction) i wrote a small brute force script to check all case combinations of "hello world"
04:13 (direction) multiple passwords extracted the file, but it would always fail CRC or inflation while extracting
04:13 (direction) 4321 was the password???
04:13 (hellman) arrrrrrr
04:13 (hellman) lol
04:14 (Bayes[disekt]) spaceballs reference perhaps
04:15 (direction) :( i didnt get to brute forcing all chars :(
04:15 (direction) :(
04:15 (direction) was so sure it had to do with hello world
04:15 (Bayes[disekt]) it was easy to script unalz
04:15 (Bayes[disekt]) you can check it's return code to find errors
04:15 (direction) thats what i did
04:15 (Bayes[disekt]) and you can even run it in parallel on other machines by splitting your dictionary


画像系問題のために用意しておいた方がよさそうなソフトをいくつか書いておきます。

実行ファイル系

今回の実行ファイル系は、どうやら

  • ドライバ関係
  • 何重かに暗号化された実行ファイル
  • Macの実行ファイル

だったようです。完全にお手上げ状態でした。
暗号化されたやつは、XORされた挙句リバースされてたり、NOTされてたり・・・
そんなやりたい放題なファイルなのに、それを解読しちゃうsutegoma2の方々怖いです><

シェル系

Exploitではなく、telnetなどで接続していろいろ投げるタイプ。
初めて知ったのが、format string attack

[2010/11/05 19:25:34] 勇士Q: 出力をprintf系としてformat string attackかな

%x などを投げることで、いろいろ値を抜き出すことができるらしい。

Web系

ラスト1時間前ぐらいで見つけたのが、Challenge5の問題。
よく分からないサイトに飛ぶんだけど、適当に admin.php とか入れたら開けちゃったという。
後はSQLインジェクション攻撃するだけなんだけど、結構命令が制限されてるので、
blind sql injection*2しなければならず。(今回初めて知った。)
authkey > n みたいな形で二分探索するしか思い浮かばず。authkeyは42文字。
スクリプト書けばすぐ出るのかもしれないけど、終了10分前とか無理w
おまけにcaptchaがついてたので、それも厄介でした。
ただ、何度もcaptchaを入力してて同じのが何回もきてたので、もしやとは思いましたが、
100種類しかなかったようです。(IRC情報)

04:47 (hellman) btw my mate said he used ocr at first to recognzie captcha, but later he noticed there were only ~100 different capthcas

後は、クッキーを見たり、時々現れるjs読み込みタグを見つけて、そこから暗号をデコードしたり、
かなりややこしいものだった。

今回のまとめ

  • 全ては綺麗な逆コンパイルから始まる
  • blind sql injection
  • format string attack
  • ブルートフォースはちゃんと自動化する
  • Web系はWiresharkでしっかり見張る
  • やっぱりIRCは大事な情報源、参加中は去ることながら、終わったあとも要チェック

素敵なCTFをありがとうございました!
参加者の方々はお疲れ様でした!

余談

実はチームAquariumとして登録してたんですが、パスワードを忘れてしまいました。
開始してからパスワードが合わないことに気付き、運営にメールを送りました。
そしたら、すぐに「パスワードを ganppare に変えました」と返信をくれたり、
「do mo a ri ga tto go ja i ma su」と返信をくれたり、対応が凄く神がかってた。
その後もIRCチャンネルがありますよーというメールもいただきました。
この対応には正直感動した(;ω;)
また次回もぜひ参加したいと思わせてくれる、ほんっとに楽しいCTFでした!

余談2

start [CTF Wiki]
こんなの作ったので、よかったら使ってやってください。

*1:java -jar ddx.jar -d 保存先 hoge.dex

*2:if文などの条件を組み合わせて値などを推測する攻撃。