SECCON CTF 第一回 全国大会に参加してきました。


WP_000101

どうもみむらです。

先日、自分の通っている東京電機大学にて SECCON CTF 全国大会が開かれ、
そこに wasamusume として参加してきました。

九工大, 筑波大, NAIST, IISEC と予選が計4回実施されたわけですが、
そのうち、IISEC (横浜) での大会において優勝し、今回全国大会に参加してきたという感じです。

参考資料:

パケット解析にクルシミマス? SECCON横浜大会開催 – @IT
http://www.atmarkit.co.jp/ait/articles/1212/26/news026.html

SECCON CTF 横浜大会に行ってきました – みむらの手記手帳

 

結果は2位。

本当に僅差で、かなり悔しいけれど、
一方でここまでよく行ったなと、今結果を見て思いますね。

http://www.seccon.jp/2013/02/blog-post_26.html

image

内訳:

image

うむむ。。

 


大会ルール:

このへん参照。
http://www.phdays.com/ctf/king/

“King of The Hill” というらしい。

今回の大会の感じから簡単に書くと、

最初はウェブアプリなり何なり、そのサーバ上で動いているやつの脆弱性を突いてフラグを取る。
(この辺は、予選の時と同じような感じ。

その後、自分のチームのフラグワード(15分ほどで書き換わる)をサーバの指定された所に書き込んで、
あとは更新されたら更新して、相手のチームがフラグをとれないように、書き込めないようにいろいろと細工する。

上のランキングでは、
「サブミット」となっているのが脆弱性を突いてフラグを取って、得点サーバに送信して得られたポイントで、
「フラッグ」となっているのが、サーバに自分のフラグワードを書き込み続けた時間に対してのポイント
になっています。

フラッグについては更新される毎に書き込めているかを得点サーバからチェックされ、
書き込めていると判断されたチームに対して、解けているチーム数に応じた得点がその都度付与されます。

 

・・・だいたいこういう感じの攻防戦でした。


チーム構成:

かーみーさん, あたがわさん, Dec さん, ゆったんたん, Cookie-s (こおしいず) さん。 あと私。

横浜の際のメンバ構成をそのまま変えずに参加しました。

 

チーム名は wasamusume

こういうことを言われたりするのですが、
その辺に関しては、 “ SECCON CTF 福岡大会に参加してきた “ あたりの記事を見てください。

わかる人にはわかるとおもいます。。

 

あと、チームリーダーだったんですが、
主に仕事したのは雑用と、メディア対応と、幼女対応(重要, 大事)
だったよーな。。

あめ玉を頂いて、そしてスカイツリーがすごいということを伺いました。
大会中ってみんなピリピリしてるんですが、あの方のおかげで和みました。


Writeup:

すでにチームのメンバがいくつか書いていますので、
そちらを先にご覧ください。

第一回 SECCON CTF 全国大会に参加してきました! – falcon071011.log

SECCON CTF全国大会へ行って来ました – writeup  – cookies.txt .scr

SECCON 全国大会参加 – あたがわの日記

今回はチーム全員が協力して問題に取り組むという形であり、
この問題は誰、というような解き方をしていません。

従いまして、断片的になりますことご了承ください。

 

Mercury:

Stage1:

JPN, Eng というプルダウンメニューがあり、選択すると文字が出る。

ディレクトリトラバーサルの脆弱性突くもの。
NULL 文字を表すのに “%0” ではなく、 “%00” と表記すべきというところに気づくのに遅れたのが、まず反省点。

hoge と入力すると、 hoge.txt を見に行くことと、 stage2 というディレクトリを見つける。

ゆったん, こおしいずさんの2人が
“ stage2/.htpasswd%00 “ をやってパスワード情報の書かれたファイルを取り出し、
John The Ripper において平文情報に戻す。

後はその情報を元にアクセス。

 

Stage2:

SQL クエリを投げた結果が一覧で表示される。ただし、パスワード部分は “ * “ に置換されている。

SQL Injection を突くもの。
同一のレコードにパスワードが平文で記述されているため、
UNION でくっつけて 平文表示されている領域に表示させるようにすれば出てくる。

この辺も高校生コンビが UNION して結果を見せてくれた。

パスワードに /stage3xyz/ とあり、そこにアクセス。

 

Stage3:

画像をアップロードするアップローダー。

index.php と *.jpg (だったかな)が許可されていることがエラーからわかる。
適当に、 exec 関数を呼ぶ php ファイルをアップロードするとちゃんと動く。

find コマンドを実行させてディレクトリ構造を調べると、
/home/stage4 というディレクトリがあることに気づく。

同時に、 /var/www/html/  に FLAG というファイルがあることもわかる。

 

しばらく悩んだ後、
私「かーみーさん、 /home/stage4/.ssh/ にアクセス用の鍵書き込め無いかね?w」

ってことで、かーみーさんの Linux 環境でキーを作成、 PHP で echo 使って書き込む。

=> \書けた/ => \アクセスでけた!!/ => \なんかキー出た!/ => ウォッシャアアア

ということでそれを送信して得点。

 

Stage4:

SSH でつないでもすぐに切られてしまうため、どうしようという状態に。

私「SCP だったらつながるんでね?」
かーみー「えっ・・?」

ということで、 WinSCP つかって SCP モードで接続。  => \一覧出てきた/

/etc/sudoers を見ると、 stage4 から stage5 に /bin/vi をシェルとして上がれるよ! とあったので、
そこから vim を使っていかにしてフラグを書き込むかに悩み。

(注: /bin/vi とありますが、中身は vim 7.x でした。

 

私はそれまで知らなかったんですが、 引数でもいろいろとできるんですね。 vim すげー。

 

vim で素直に追記しようとすると、「swap ファイルが残ってるけれどどうすんの!」と聞かれて、
それどころじゃないよ! とやっている間に SSH が切られてしまう。

いろいろとやって、

# sudo -u stage5 /bin/vi "+:! echo FLAG >> /var/www/html/FLAG"

これで書き込めることがわかる。
ということで、緑の wasamusume さんフラッグポイント獲得 (voice: 児玉清 or 博多華丸

 

 

Neptune:

(02/28 修正: Uranus ではなく Neptune でした。

あたがわさんから “.backdoor” という名前の x86 バイナリを頂く。IDA に投げ込む。

“2つの引数取るよ!”  “一つ目は ‘IamTOM’ だよ!!” と
アセンブラコードさんが、私に超絶アピールしていたので、その旨をあたがわさんに伝える。

 

 

なんかこんなこと言われましたが、違うんですよ! アセンブラコードが(ry

 

・・・・変なこと書くと、ますます怪しい人認定もらうので黙っておきます。

挙動としては、 引数を2つ取るかどうかを判定し、
取るなら1つめが “IamTOM” かどうかを判定する。

この2つが正しければ、2つめの引数を system 関数へ渡すという流れになっていました。

参考資料: http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/system.3.html

 

flag 書くには特定のユーザ権限が必要なのですが、 この .backdoor というファイルを持っているユーザが、
flag を持っているユーザと同じで、
このプログラムで命令を実行すると、ファイルを持っているユーザ権限で動くため、
flag ファイルを書き込める、と。 そんな感じ。

 

あとは、あたがわさんがサーバ監視して、他のチームがやってくるのをニヤニヤ。

それこそ、城に侵入して天守閣まで上り、敵が攻め入れずにがんばっているのをニヤニヤ眺めているような。

 

 

Jupitor:

Windows XP 上に置かれた anhttpd と、その他のプログラムを組み合わせる問題。
私が一番力を入れてやっていた問題ですが、解けませんでした。。

MS08-067 の脆弱性が残った XP だったようで、そいつで侵入できたらしいです。

加えて、大会中に RDP 接続を行ってごにょごにょされたり、 shutdown コマンドが実行されたりして、
最終的にシャットダウン状態になって終了まで復活しませんでした。 しょぼん。。

自宅に戻ってから、 Armitage を使ってごにょごにょ。

この辺も、チーム mofupp さんがやった形跡が見られたんかなー。んー。

 

Mars:

2日目の後半から参加。( Jupitor を落とされたので )

私「どんな感じ?」
Dec さん 「ここに打つと、コマンドが実行されるんだけど、結果がかえってこないんよー。」
私「 Dec さん、 メールサーバー立てたら帰ってくるかな・・?w」

ってことで、私のマシンでメールサーバー立てる。

あたがわさんに 「ネット構成どんな感じになってるんー?」 と聞いていろいろと調べてもらったところ、
NAPT の下に各島が潜ってると思いきや、そんなことまったくないということがわかる。

・・・で、私のパソコン宛にメール来ないかなーと待ってみる => メール来ませんでした。

私「んじゃ、 netcat 使えないかなw」
Dec さん 「!?」

ということで、私のマシンで netcat を listen モードで立ち上げて待機。 => 結果が帰ってくる!

うぉし、これで行くぞ-!!! とやっていたんですがタイムアップ。

 


参加してみて:

今回のチームは、大変すばらしいチームであったと思います。

ノリがよく、和気藹々として、それでいて技術力がある。
これほどすばらしいチームというのも、他にないのではないかと思います。

チームメンバが書いているブログを見てみますと、
wasamusume のリーダーやってよかったなと思うわけです。

 

今回の全国大会で SECCON CTF は今年度分の一つの区切りということになるかと思います。

今回協力して頂いたチームメンバ以外にも、
九州大会、筑波大会で協力を頂いた方がいます。

皆さんの協力や応援があり、全国大会でこのように接戦となるような結果を収められたというのは、
チーム wasamusume としていい結果だったのではないかと思います。

本当にありがとうございました。

勿論、多くの反省点や1位をとれなかったという点がありますが、
これは来年度版の SECCON CTF があれば、そこでまた再挑戦できたらなと思っております。

各地で予選が開催される際は、また声を掛けるかと思いますが、
その際は、もしよろしければご協力頂けたらと思います。

 

そして、他のチームの皆様や運営に関わった皆様、
スポンサーの皆様等々をはじめとする関係者の皆様に感謝の意を申し上げます。

 


最後に:

硬い文章で終わらすってのは、どーも wasamusume っぽくないので。

私のムチャぶりに対応して頂いたチームメンバに謝罪しつつ。

そして、その場のノリで 私がくすぐって、くすぐられた方へ。
・・・こればっかりは反省してないので、またやります(ぉ

 

来年度、また SECCON があれば、このメンバをベースにまた招集を掛けたいですね。


 

関連記事