2015年11月9日月曜日

SECCON福島大会 サイバー甲子園に参加しました

2015年11月07日(土)に福島の会津で開催されたサイバー甲子園(SECCON予選)に出場しました。10チームが抽選で選ばれ、私(ptr-yudai)のチーム名はinsecureで、theoldmoon0602殿と一緒に参加しました。

結果は2位で決勝の出場権を貰いました。以下が上位3位までの最終スコアです。
 CTF事情を知っている方によると、どうやら1位の方はプロだそうです。
以下は得点の推移です。(上位3チームまでチーム名を残しています)

とりあえず、自分が解いた問題の中で、覚えているもののwriteupを書こうと思います。

binary100
Linuxの32bit実行ファイルが渡されたので、gdbで起動しました。スタックに1を入れて、直後にその値が2より大きいかを調べて分岐しています。setでEIPを変更して続行すると「SECCON{Can Uread me?」と表示されましたが、送信してもポイントゲットならず。色々試して、「SECCON{Can U read me?}」を送ったら正解でした。

binary200:
Linuxの32bit実行ファイルが渡されたので、gdbで起動しました。重要な部分をCっぽく直すと、

gets(s);
for(i=0; i<32; i++) {
  tmp = esp_2C + s[i];
  foo = 0xFF ^ (char)tmp;
  bar = cipher[i];
  if ( bar == foo ) // OK
}


つまり、入力から1文字ずつNOTをとり、それを予め用意されたデータ(cipher)と比較しています。cipherをメモリから出力し、pythonでNOTをとるとフラグになりました。「SECCON{XOR_encryption_message}

network100
パケットデータが渡されます。ファイル無いので覚えてないですが、認証みたいなのがあるので、見るとBase64文字列があります。デコードしたらフラグでした。(たぶん)

network100
パケットデータが渡されます。なんかエラーが連なっているところがあったので、そこらへんのIPの192.168.44.161でSYNフラグが立っている部分をwiresharkでフィルター(ip.src==192.168.44.161 && tcp.flags.syn==1)します。出て来たパケットを上から見ると、各パケットのオフセット0x12に連続してフラグが1バイトずつ書かれていました。「SECCON{Data_is_included_NOT_ONLY_in_payload_but_also_header_field.}

net300
パケットデータが渡されます。wiresharkで見るとメールのプロトコルが使われており、中にいくつか送信されたデータがありました。まず目に止まったのが、何行にもわたるbase64文字列です。メールの添付ファイルだなと思ってデコードすると、zipファイルが出てきます。解凍しようとするとパスワードが求められます。メールの送信データの中にパスワードっぽいフレーズがいくつかあったので、試すと開きました。中にあったファイルはComposite Document Fileというもので、theoldmoon0602殿の助言でLibreで開くと、またパスワードを求められます。これもメール内の別のフレーズで試すと開き、フラグが表示されました。「SECCON{Sending_File_Password_with_Followed_Mail_is_bogus.}


crypt100
「U0VDQ09Oe1VyOXdnbWZZWXh5N2VvOFFnTDJWfQ==」というbase64文字列が渡されるので、デコードすると「SECCON{Ur9wgmfYYxy7eo8QgL2V}」になります。


programming100
turtleとかいうライブラリを使用したpythonのコードが渡されます。windowsのpythonには標準で入っていたので、draw_flag関数を実行すると、亀が絵を書き始めます。ちょっと遅かったので早くし、最後に停止ルーチンを挟むと、国旗が表示されました。theoldmoon0602殿がすぐにミャンマーの国旗であると知らせてくれました。「SECCON{MYANMAR}


web100
アクセスすると同じページがロードされるので、wiresharkで見るとフラグが受信されていました。

web100
ログインページでしたが、何を入力してもサーバー側でエラーになります(出題ミス?)。Fiddlerで見ると、レスポンスの最後にgzipデータがあったので、抽出して展開するとフラグのページが現れました。

misc100
Excelデータの各セルの背景色が色分けされており、SECCONの「突破」マークがドット絵みたいになっていました。Libreで開くと中央らへんに左三角がたくさん並んでいました。調べた結果から、excelのリスト機能と思って調査しました。とりあえず重たいので背景色を全て削除し、リスト内に「#」が書いているところと書いていないところを区別しようと閉じて、再度開くとなぜか三角が減っており、それらがフラグをAAのように表示していました。「SECCON{NIRVANA_KA1}


misc100
「作者は誰か」という問題で、短いアルファベット羅列が渡される。ダブルクオーテーションで囲って調べると、たくさんのサイトがヒット。一番上のサイトを読むと、ベートーベンの楽曲のリズム(だったかな?)であることが判明。形式が指定されていなかったので、いろいろ入力しましたが、最終的にtheoldmoon0602殿が正しい形式で送ってくれました。


感想
CTF歴は1年ちょっとで、SECCON決勝を大きな目標として必死に勉強してきましたが、初の予選で決勝への出場権を貰えて嬉しいです。これからしばらくはAttack&Defenceの勉強をする予定です。
問題はちょうど良い難易度で、CTF4bでの講義が結構役に立ちました。
theoldmoon0602殿のプログラミング力は凄く、何やってるのか分かりませんでした。
まだまだ勉強しないと......