SECCON 2014 Online Qualifications 2014年12月8日


12/6~12/8に行われていた, SECCON 2014 Online Qualificationsにwasamusumeとして参加した.
今回の予選は世界中から参加していただけでなく, 本戦がDEFCON CTFの予選の一つの大会としても指定されていたため, CTFTimeで上位にいるようなチームが大量に参加していた.
もともとwasamusumeは全国大会へのシード権をもっていたため, いつもよりも楽しめた.

結果はおよそ1000チーム中33位. Exploitをやらなかったのが痛手かなぁ.

Easy Cipher [Crypto 100]


87 101 108 1100011 0157 6d 0145 040 116 0157 100000 0164 104 1100101 32 0123 69 67 0103 1001111 1001110 040 062 060 49 064 100000 0157 110 6c 0151 1101110 101 040 0103 1010100 70 101110 0124 1101000 101 100000 1010011 1000101 67 0103 4f 4e 100000 105 1110011 040 116 1101000 0145 040 1100010 0151 103 103 0145 1110011 0164 100000 1101000 0141 99 6b 1100101 0162 32 0143 111 1101110 1110100 101 0163 0164 040 0151 0156 040 74 0141 1110000 1100001 0156 056 4f 0157 0160 115 44 040 0171 1101111 117 100000 1110111 0141 0156 1110100 32 0164 6f 32 6b 1101110 1101111 1110111 100000 0164 1101000 0145 040 0146 6c 97 1100111 2c 100000 0144 111 110 100111 116 100000 1111001 6f 117 63 0110 1100101 0162 0145 100000 1111001 111 117 100000 97 114 0145 46 1010011 0105 0103 67 79 1001110 123 87 110011 110001 67 110000 1001101 32 55 060 100000 110111 0110 110011 32 53 51 0103 0103 060 0116 040 5a 0117 73 0101 7d 1001000 0141 1110110 1100101 100000 102 0165 0156 33

見ての通り, 2, 8, 10, 16進数がごちゃまぜになっている.
問題をみ始めた頃にはチームメンバーが途中までやっていたので, どの部分がフラグに当たるのか先に探した.
というのも, (他のチームの人に聞いたら大丈夫だったらしいが)10進数と16進数の判断を間違えるとフラグが出てこないと思い, 手でやろうとしたため.

SECCON{W31C0M 70 7H3 53CC0N ZOIA}

 

Shuffle [Binary 100]

find the string before randomizing.

バイナリが渡されるので適当にIDAに投げ込む. 予想していたけれどrand関数を使用してランダム化を行っている.
gdbでsrandにbreak, あとはメモリ内検索するだけ. 1分かからずにおわり.

SECCON{Welcome to the SECCON 2014 CTF!}

 

Reverse it [Binary 100]

Reversingの問題だとずっと思い込んでいて, アーキテクチャがなんなのかわからねぇって泣いてた.
ずっとヘッダに注目していたので, なんとなくフッタをみてみた.
どうみてもJPEGです本当にありがとうございました.

バイナリが反転されているのと, 1バイトずつ上位ビットと下位ビットが反転している.
チームメイトが「すぐ書くよ」と言ってくれたので自分でコードは書いてない.
あとで書いて貼っておく.

SECCON{6in_tex7}

 

 Get the key.txt [Forensic 100]

ふってきたファイルをFTK Imagerで開く.
ftk
眺めるとdummyっぽいファイルが大量に存在するが, 一番上にある “1” のファイルの中に, key.txt が入っていることが分かる.
これをexportする. GZ Decompressをすることでkey.txtを得られる.

SECCON{@]NL7n+-s75FrET]vU=7Z}

 

REA-JUU WATCH [Web 200]

やるだけ.
通信を眺めていると, 質問?の全てに回答したあとに json を取りにいってPointを確認している.
その json にはUsernameとPasswordが含まれている.
json を取りに行くときのGETのパラメータにUserIDが含まれているので, ID1のユーザとしてログインすることでフラグを得られると仮定.

GET http://reajuu.pwn.seccon.jp/users/chk/1 HTTP/1.1
Host: reajuu.pwn.seccon.jp
Connection: keep-alive
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36
Referer: http://reajuu.pwn.seccon.jp/quiz/7?co=6&ch=19
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,ja;q=0.6
Cookie: CAKEPHP=nru75las1g28ihki6gp52k8re2

HTTP/1.1 200 OK
Date: Sat, 06 Dec 2014 05:49:46 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.35-0+deb7u2
Vary: Accept-Encoding
Content-Length: 61
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

{"username":"rea-juu","password":"way_t0_f1ag","point":99999}

あとはこれでログインして, 適当に質問に答える.
余談だが, この問題以外にも, Responseでjsonが降ってきてるのにContent-Typeがtext/htmlだったのは, 進捗に追われていたからなのだろうか.

SECCON{REA_JUU_Ji8A_NYAN}

 

Bleeding “Heartbleed” Test Web [Web 300]

チームメイトと一緒に解いた問題.
ソースコードをみると山崎さんが作成した問題ということが分かる.
よってこれはSQLiteのSQLiの問題であることがだいたい分かる.

が, IPアドレスやPort番号にはSQLiは存在しない. OSコマンドインジェクションもない.
チームメイトから,
「HeartBeed Response」の部分でSQLiするのではないかと言われて, サーバをたてる.
脆弱性のあるOpenSSL, またApacheを用意してささっと準備.
tcpdumpを利用してパケットをとって, それをもとにチームメイトがSSL Handshakeをするコードを書いた.
任意の文字列をHeartBeed Responseに含められるようになったので, あとはSQLi.
予想通りSQLiteだった.
それにしても, 本質に辿り着くまでの道のりが長かったなぁ.

SECCON{IknewIt!SQLiteAgain!!!}

 

まとめ

完全にExploitを解くのを忘れていた. チーム内で誰がExploitを解くべきか考えると私がやるべきであるし, もっとExploit, Pwn系の問題をやろうと思った. 全国大会までには解けるようにしたい.
その他では, 単純なミスで時間を費やしてしまうことが多かった. 気づいたら一瞬の問題で何度か時間を費やしてしまったので, 今後は気をつけたい. また, 暗号とか. QRとか, ほとんどチームメイトに任せっきりだったこと, コードを書くスピードがチームメイトのほうが早いのである程度投げてしまったことは, 今後改善したいと思った.
それによりチーム全体での問題を解く効率も高まるだろうし, 私自身の力にもなるし.
ともあれ, 反省点はこのくらいで.

今回は途中からチームメイトのおうちに泊まりこみでいって参加していたが, 一人でするときよりも効率がとてもよかったし, 何より楽しかった. ここ最近ずっとCTFに対する熱が冷めていたけれど, みんなでできるCTFは楽しいと改めて思った.
CTFのために学習するのではなく, 学習したことの確認みたいな意味でCTFをやりたいとは思うけれど, でもやっぱりCTFで上位に食い込めたら, とも思ったりする.

何はともあれ, 全国大会までもっと知識を詰めていきたいですね. Exploit, Pwnをもっと頑張ろう.

Leave a Reply