読者です 読者をやめる 読者になる 読者になる

cookies.txt      .scr

ただのテキストファイルのようだ

SECCON CTF全国大会へ行って来ました - writeup

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によればこんな感じ。
f:id:cookie-s:20130225210110p:plain
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

盗んできて、ファイルを目grepするとキーがでてくる*5


22番ポートでDebiansshが動いてるにもかかわらず、10022番ではFreeBSDを名乗るSSHが動いてた、怪しい。



Mercury

stage1:
ディレクトリトラバーサルで、クエリに"stage2/.htpasswd%00"投げる。
ゆったんたんたんさんがjohn the ripperにかけてくれる。
でてきたパスワードで認証

stage2:*6
SQLインジェクション。passwordがアスタリスクで伏せられているが、
先のトラバーサルでSQLのテーブル名とか調べて、passwordをuser行に表示するようにunionしてやればでてくる。

そこから先は他メンバーさん.

Uranus

5060に接続、passwordとして、hintで与えられていたnri...なんとかをあげるとキーが表示されるし、

nri...; ls; find /

とかすればなんでも実行できる。
keyを2つゲット後は他メンバーさん。









こんな感じでございます。
今回いろいろと学びました。おびただしい量。
二位になれてよかったです。

メンバーさん、実行委員会の方々、スポンサーさんや他の方々もほんとうにありがとうございました。
モンスターエナジーおいしいです。
みなさんと次お会いできるのはいつになろうか.......
そのときはよろしくお願いします。

*1:これに一番時間割いたと思う。他チームが全くできていないので専有できそうだったし。

*2:13/02/26 17:12追加

*3:たぶん。名前違うかも。

*4:names

*5:っつーかnameにKeyって入力するだけで表示できた。

*6:確か。