02/23~24、TDUへSECCONに行って来ました。結果を先書くとチームが2位でした。
チームはwasamusume。
メンバーはみむらさん、かーみさん、Decさん、あたがわさん、ゆったんさん、自分の六人。ゆったんさんって違和感
横浜大会の一位より進出、って感じですね。
ほんと楽しかったです。競技も泊まりも。
大会は行く前から問題回答型ではなく、「サーバ攻防型」と伝えられていたのですが、
自分がイメージしていたものとだいぶ違いました。
大会後に聞いたところ、King of the Hillとかいうルールらしい?http://www.phdays.com/ctf/king/
よくわかんないです。
まあ、簡単にルール。
一大問につき、サーバのIPとFLAGファイル(後述)のHTTP的URLを与えられて、それから問題解答型同様なSubmitページがあるんです。
そこにアクセスするわけですが、必ずしもhttpdが動いているとも限らず、ポートスキャンだのなんだのかましていくわけですね。
あとはまあそのポートで動いてる実行ファイルの脆弱性をついたり、
WebでSQL/OSコマンドインジェクションったりなんなりしてkeyを盗んでSubmitすると。
これが一つです。
FLAGファイルについてですが、たとえばhttp://12.34.56.78/flag.htmlというURLを与えられた場合、なんとかしてそのファイルに自分のグループ固有の値を書き込むわけですね。
サーバはそのファイルを定期的に見に行って、値が書かれているにチームに点数をくれるわけです。
ファイルへの書き込み方はもちろん、そのファイルに自分の値を書き込んで、他のグループにアクセスさせなくしたりすれば独り占めできるわけでして。
うーん、我ながら説明が下手だな。
きっと他の人も書いてくれるので他の人の参考にしてくださーい。
大問がみんな惑星の名前で、それぞれごっちゃになってたり、いろいろ手を出しすぎてわけわかんなくなってるんで覚えてる限りでwriteupしたいと思います。
ただ、今回のルール的に、同じメンバーの方とかぶる部分が多そう。
Writeup
Neptune*1
あたがわさんにネットワークの指導をしていただきながらやりました。
80番ポートに普通にアクセスすると、
「It works! ヒント:8080ポートにパケットキャプチャしながらアクセスしてごらん!」的なメッセージ。
言われたとおりにアクセスすると、TCPのFlagsがめっちゃおかしいんです。
ただのSYNパケット送った時、レスポンスはWiresharkによればこんな感じ。
ACKとSYN"だけ"ビットが立っていないことに気づく。「あれ、フラグ逆じゃね?」
ほんとはローカルのどっかhookとかしてFlagsをNOT解釈するようにすればいいんでしょうが、
僕にはできないので、PythonベースなScapyちゅうパケット作れるツール使いました。
sr1(IP(dst='サーバIP')/TCP(dport=8080,flags='S',seq=***)).show()
とかするとSYN送れます。
まあFlagsは脳内補完してですね、通信すると8080もちゃんとHTTP返します。
途中、あたがわさんがiptablesを弄って何かしてくれましたが、よくわからない。
このへんからあたがわさんに交代。
あたがわさん氏のブログ氏*2
他チームの接続監視とかこわい
Venus*3
「>この<プログラムが動いてます」とか言って、ARMなELFがDLできます。
ポートスキャンしてアクセスして、
Input years:
ってされるんで、
1;ls /home/* -la
とかすればシェルを動かせます。catしましょう。
それからもう一つのポートで別のプログラム*4が動いてるんですが、このELFをさっきのシェルで
$ nc <ip> 10081 > names 1;cat /home/bin/names
22番ポートでDebianなsshが動いてるにもかかわらず、10022番ではFreeBSDを名乗るSSHが動いてた、怪しい。
Mercury
stage1:
ディレクトリトラバーサルで、クエリに"stage2/.htpasswd%00"投げる。
ゆったんたんたんさんがjohn the ripperにかけてくれる。
でてきたパスワードで認証
stage2:*6
SQLインジェクション。passwordがアスタリスクで伏せられているが、
先のトラバーサルでSQLのテーブル名とか調べて、passwordをuser行に表示するようにunionしてやればでてくる。
そこから先は他メンバーさん.