[CTF] CSAW CTF反省編

初めてオンラインCTFに参加してみました。
結果はお察しでした。
Web100, 200, 400, Triviaちょっとくらいですかねー。実力不足を感じました。

忘れないうちにまとめ


[Web] Guess Harder - 100 points

最初、開いてみると、It works!がでてきたので、エスパー問題かよって思ってちょっと焦った。
/flag.txt とか必死にアクセスして404ばっか出してた。

で、しばらく経って/にアクセスしてみると、Set-Cookieだったっけ、admin=falseが飛んできてた(と思う)
cookieをtrueに書き換えてあげると、flagがでた

[Web] NeverNote - 200 points

問題文:
from: Nevernote Admin 
to: challenger@ctf.isis.poly.edu
date: Thurs, Sep 19, 2013 at 3:05 PM
subject: Help

Friend,
Evil hackers have taken control of the Nevernote server and locked me out. While I'm working on restoring access, is there anyway you can get in to my account and save a copy of my notes? I know the system is super secure but if anybody can do it - its you.
Thanks,
Nevernote Admin
メッセージを送るページがあったので、管理人にメッセージを送ってみる(ここに辿り着くまで1日かかった、ひらめかなかった。悔しい。)
で、リンクがある(不自然?)んで、リンク先でアクセスを記録できるように細工しておく。
自分はvar_dump($_SERVER);とかvar_dump($__REQUEST)とか仕込んでおいた。
で、送信する。
最初、管理人のメールアドレスは問題文に書かれてなかったんだけど、いつのまにか問題文に追記されてたので、エスパー問題かよって思った。
ウーン、ヒントなしじゃあ解けなかったかもなぁ。つらい。

で、送信する(なぜか送信ボタンがModifyNoteなのよね。)

すると、管理人からのアクセスがある。
array(32) {
  ["SCRIPT_URL"]=>
  string(9) "/test.php"
  ["SCRIPT_URI"]=>
  string(26) "http://ksswre.net/test.php"
  ["PHP_DOCUMENT_ROOT"]=>
  string(28) "/home/XXXXXX/public_html"
  ["HTTP_REFERER"]=>
  string(224) "http://XXX.XXX.XX.XXX/viewmessage.php?enc=wskg%2FNZ0L8WNUxa9ZMQ2MyJA8HQiPS7EGoQIBr8tEARuc9ojkLu3sm4suBrxZiwIAIDoUuHjOw8ThqJGQ4heP7CFvlf7JmhI%2FtrKTP4ZnzCM80Rc0ijRBs8QfjBXI%2FrnRBL577ny2G0f9l1xfI5oot4z8rHS8%2BfHdoWTvzPR1y8%3D"
リファラのリンクを開くと、サーバ管理人がみたと思われる自分からのメッセージが読める。
最初、ここからどうやってセッションジャックするんだーとか思って考えてたんだけど、そんな必要なかった。下に管理人のNote見っけた。
めっちゃいい問題だった(感動)

[Web] WidgetCorp - 400 Points

問題文:
http://128.238.66.224
これも解くのに時間かかった。つらかった。

ログインすると、Cookieがセットされる。3つあった。
PHPSESSID -> PHPのセッション変数
widget_tracker -> base64_encode(data)
widget_validate -> SHA512(data)

これはすぐに分かった。dataは独自形式なのかなぁと思って特に気にも止めてなかった。盲点。
ここで1日くらいかかった、残念すぎる。

最後の最後になって、dataがphpのserialize()だとわかった。
http://php.net/manual/ja/function.serialize.php

で、この、widget_trackerの値そのままで /widget_list.php でwidgetが表示されていた。
あと、widgetの編集の /edit.php で、他人のwidget見れちゃってた。

となると ... SQLiだッ。データベースのどこかにflagがあるんだッ。きっと。

ここに辿り着くまでが長かった。
リクエスト投げるスクリプト書いて、リクエスト投げました。
% ./genreq.rb '1) union select null,table_name,null,null from information_schema.tables -- '
すると、ずらずらーっとテーブルが流れてきた。その中に flag という名前のテーブルを発見。
% ./genreq.rb '1) union select null,column_name,null,null from information_schema.columns  -- '
カラム名を取得。 (ここ、テーブル名を指定して取得すればよかった。)
これで、flagテーブルのflagカラムにありそう、と分かった。
% /genreq.rb '1) union select null,flag,null,null from flag  -- ' 
flagがでてきました。

keyがneeds moar hmacでニヤニヤしてた。

/*
 * おまけ
 */

/style.css
░░░░░░░░░░░░░░░░▄░░░░░░░░░░░░░░▄
░░░░░░░░░░░░░░░▌▒█░░░░░░░░░░░▄▀▒▌
░░░░░░░░░░░░░░░▌▒▒█░░░░░░░░▄▀▒▒▒▐    wow
░░░░░░░░░░░░░░▐▄▀▒▒▀▀▀▀▄▄▄▀▒▒▒▒▒▐
░░░░░░░░░░░░▄▄▀▒░▒▒▒▒▒▒▒▒▒█▒▒▄█▒▐         such stylesheet
░░░░░░░░░░▄▀▒▒▒░░░▒▒▒░░░▒▒▒▀██▀▒▌                  how to hacker
░░░░░░░░░▐▒▒▒▄▄▒▒▒▒░░░▒▒▒▒▒▒▒▀▄▒▒▌    so color
░░░░░░░░░▌░░▌█▀▒▒▒▒▒▄▀█▄▒▒▒▒▒▒▒█▒▐
░░░░░░░░▐░░░▒▒▒▒▒▒▒▒▌██▀▒▒░░░▒▒▒▀▄▌
░░░░░░░░▌░▒▄██▄▒▒▒▒▒▒▒▒▒░░░░░░▒▒▒▒▌         doge flage is not the key
░░░░░░░▀▒▀▐▄█▄█▌▄░▀▒▒░░░░░░░░░░▒▒▒▐
░░░░░░░▐▒▒▐▀▐▀▒░▄▄▒▄▒▒▒▒▒▒░▒░▒░▒▒▒▒▌             get points
░░░░░░░▐▒▒▒▀▀▄▄▒▒▒▄▒▒▒▒▒▒▒▒░▒░▒░▒▒▐
░░░░░░░░▌▒▒▒▒▒▒▀▀▀▒▒▒▒▒▒░▒░▒░▒░▒▒▒▌
░░░░░░░░▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▒░▒░▒▒▄▒▒▐
░░░░░░░░░▀▄▒▒▒▒▒▒▒▒▒▒▒░▒░▒░▒▄▒▒▒▒▌  
░░░░░░░░░░░▀▄▒▒▒▒▒▒▒▒▒▒▄▄▄▀▒▒▒▒▄▀
░░░░░░░░░░░░░▀▄▄▄▄▄▄▀▀▀▒▒▒▒▒▄▄▀
░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▀▀

まとめ

実力不足をかんじました。CryptoとかMiscに手が出ませんでした。
Web300は、Androidのソース読むだけで解決したんですね..
動的テストをしようと必死にやろうとしてました。。

コメント

このブログの人気の投稿

インターネット共有のための sysctl での設定に躓いた