SECCON CTF全国大会に参加(優勝)しました
2/23, 2/24に東京電機大学へ行ってSECCON CTF全国大会に出場、優勝しました。@nash_fs, @waiotto, @wasao, @nullmineral, @superbackerの5人でチーム0x0として出場しました。初めての攻防戦でしたが、なんと優勝を果たしました。
ルール
・スコアサーバの問題一覧に、それぞれのサーバのIPアドレスとフラッグワード(後述)が書かれるべきページのアドレスが掲示されている。
・問題サーバに侵入し、キーワードを見つけると100点獲得。1つのサーバに複数のキーワードが隠されていることもあり、1つキーワードを見つけると他のキーワードのヒントが得られることもある。
・フラッグワードは5分毎に変更される。サーバをクラックし、問題で指定されたページに自チームのフラッグワードを書き込むと、少しポイントをもらえる。フラッグワードが変更されるたびに、htmlを書き換えれば得点できるので、他チームの妨害がなければ継続的にポイントを獲得できる。
・DoSは禁止だが、rootを取ったり、他チームがアクセスできないようにしてしまうのはOK。
write upではない何か
Mercury
アクセスするとeng.txt, jpn.txt, stage2(ディレクトリ), stage1.cgiなどのファイルが置かれている。stage1.cgiにアクセスすると、JapaneseとEnglishを選択するリストボックスがあり、Sendボタンを押すとクエリが?lang=engなどになる。ここで、lang=hogeなどとするとhoge.txtが見つからないと言われる。stage2を見ようとするとBASIC認証が必要らしく、HTTPヘッダを見るとapacheらしいのでlang=stage2/.htpasswd%00として、出てきた文字列をJohnTheRipperにかけてパスワードを得、stage2に入ると1つ目のキーワードを得て、stage2に進む。
Johnのところだけやって後はチームメンバがやってくれました。
Venus
アクセスするとcalsというARMのelfが渡される。10082番ポートで動いてたやつ?ARMわからないので投げました。
Mars
お問い合わせフォーム?Web系はわからんので投げました。
Uranus
内容覚えてません……。投げました。
Neptune
一番力を入れて取り組んだ問題です。
80番ポートをブラウザで開くと、8080番ポートにパケットキャプチャしながらアクセスしろと言われるので、8080番ポートにSYNを投げると、フラグがたくさんたったパケットが帰ってきます。
よく見ると、SYNとACKだけが0で、他のフラグが(Reservedも含めて)1になっているので、フラグが反転しているんだろうと当たりをつけました。フラグを無視してseq,ackを適切に調整してACKを返すコードをscapyで書いたのですが、なぜかHTTPのリクエストを送っても帰ってこず、解けませんでした。あとで聞いたところやり方は合っているらしいので、どこかが違っていたようです。力を入れていただけに非常に悔しかったです。
感想
全国大会は攻防戦だと聞いたときは「自チームに割り当てられたサーバを守り、他チームのサーバを攻撃する」というルールなのかと思っていましたが、実際には「問題サーバがいくつか用意されていて、そこへ侵入・占領して相手チームが入れないように妨害する」という感じでした。しかし、これはこれでパッチを書いたりする必要がなく、純粋に攻撃に専念できるので楽しかったです。
今回の大会は攻防戦という形式上、ホテルに持ち帰って解析できるファイルが手元にほとんど残らないのが少し残念でした。おかげでよく眠れましたが。
他チームの妨害・監視のためにssh接続し続けなければならなかったり、定期的にフラッグワードを書き込むために、競技用ネットワークから外部ネットワークに切り替えられない、というような状況が発生することもあるようなので、PCは複数持っていったほうがいいかもしれません。
自分はMercuryでJohnかけるところをやったのと、残りの時間のほとんどはNeptuneに挑戦していました。結局、Neptuneは攻略できなかったのでとても悔しかったです。でも、優勝できたのはとても嬉しいです。