SEC CON2013 オンライン予選 Write-up

忘れないうちにメモー。

自分が担当したところだけ。

network 100 Repeat After Me (未完)

問題文はただのpcapファイル。

中身を見ると、telnetのキャプチャログだとわかるので、何をしているのか調べる。

echoが煩いので、 telnet && tcp.dstport==23 でフィルタ。

中を見ると

  • nslookup
  • ssh
  • ログイン処理
  • (ログイン後)ls

を行っているのがわかる。

あとはキーストロークを読み取って同じことを実行すればOK。

楽勝!

・・・とおもいきや、コントロールシーケンス(バックスペースとか、Ctrl-Uとか)の扱いで手こずり、回答できずじまい。

どうも、Ctrl-Wの挙動を勘違いしているようなのだが、まだよくわからず。

network 200 Find the Key

icmp echo/reply のデータ部分にHTTPのメッセージが乗っているので、こいつを切りだす。

最初は プログラム書いてやろうとしたのだが、実質数パケットだったので、デバッグする手間を考えて手作業で実施。

つまり目Grep、手コピペ

ICMPのヘッダまでは問題なく排除。
HTTPのBODY部からファイルを切り出す手段については、以下の2アプローチ。

ファイル全体が落ちてきている場合

2OO OK でレスポンスが来ているので、Content-Lengthを参考に、
それ以降のパケット(MTUの関係で分割されているっぽい)を切りだす。

また content-type が png だったので、マジックバイトとIENDフィールドがあることも合わせて確認した。

ファイルの一部が落ちてきている場合

Get時にbytesオプショを使い、ファイルの途中からDLしているリクエストもあった。

こいつらは、206 Partial Content で落ちてきている。

まずは同様に、 Content-length、IEND を参考に切り出し。


切り出したら、 Content-range を参考にして、前者のファイルに結合(というか開始ビット以降を上書き)する。


ちなみに全体としては、200OK 2つ、 206 3つがやりとりされていたが、
200OK 1つと、206 1つ扱えればKEYは手に入った。

HTTPヘッダとBODYの境目を見極めるのにちょっと苦労した。

network 300 Hidden Message

pngファイル(やるお)が問題。

Hexdumpで中を見ると、末尾にDNSの逆引きクエリが見える。

また、JPGの終端バイトを探すと、その直後にPCAPファイルのヘッダがある。

この2点から、 バイナリエディタで切り出して、Wiresharkへ。

DNSのクエリを投げていたので、 当該のIPアドレスに当該のクエリを投げたらキーが帰ってきた。

この問題が一番楽だったwww

network 400 SECCON競馬 (未完)

WEBSOCKETでリアルタイム更新される競馬ページ。
レースの結果を予想して答えるのが問題。

きっと何かの脆弱性とかで結果を不正取得できるのだろう、と想像。

Wiresharkでキャプチャしながら操作したり、javascriptを直接実行したりして、
更新時に実施されるコマンドとレスポンスを調査、列挙。
(ここは主にチームメイトの先輩に助けてもらいました)

その後、パラメータを変えて試行錯誤。

KIAIで2時間ぐらいぐらいやったところ、 get_result という、競馬の結果を手に入れるコマンドがSQLエラーを返してくることを発見。
コマンドの性質的にもこいつが狙い所だろうと判断して的を絞る。

・・・が、エスケープ処理が強固で結局突破できず。。


あとは細々HELPに入ったりしたが、メインはNETWORK問題のみ。


チーム全体の成績は 3300点(12位タイ)

6人チームで、独力で500点、協力して800点。まあ、役にはたったかな?

所感

NETWORK以外の知識がなさすぎるのが反省点。
できる問題終えたあと(手詰まり含む)は、ほとんど役立たずだった。
せめてもうひとつぐらい得意分野を作っておくことにする。

でも久々に徹夜でPC打ち込んで楽しかった。