CTF for Beginners #ctf4b に参加しました + Write-up

第1回 CTF for Beginners に参加してきました。新しく学べたことが非常に多く、有意義な感じで Very Happy です。
こんな良いイベントにタダで出れていいのか。

まあ長々と書いてもアレですし、多分他の人が書いてくれているので3行でまとめます。

  • Binary ほとんど知らなかったのでとても良かった。x86読めるようになりたいよね
  • Network の話も Wireshark の色々な filter とかを駆使して怪しいデータを探し出す、みたいな話で興奮した
  • Web はとてもワクワクする話だった。Blind SQLi は全く知らない話だったし、1bitの情報しか得られないのにパスワードを文字列長を割り出す + 1文字ずつ前方一致で判定することで reveal 出来る、というのが最高に面白かった

小学生並みの感想ですね。たくさんの情報が詰まっている講義資料を頂けたのが個人的には非常に嬉しかったです。

ところで講義(?)が終わったあとは総まとめとして50分のCTF体験会があって、こんな結果になりました。6位です。

この先は雑な Write-Up があるので、来週の第2回 CTF for Beginners に参加する人にはネタバレになってしまうかもしれません

Web 100 SQLi Lv.0

こんな感じのサービスがあります。セキュアにログインできるそうです。認証が通るとフラグが出てくるっぽいですね。

b6b2269583aecb81cdffaa95ec2838db

やることはシンプルです。
パスワード欄に

' OR 1 = 1; --

をシュートします。おしまい。

Congrats!
FLAG{magical_sql_injection}

Web 200 SQLi Lv.1

AWESOME USER SEARCH, また怪しいサービスですね。
You can get various info even about admin. って書いてるので、まぁ admin のパスワードを出せばいいんだろうな、みたいな感じです。

試しに

' OR 1 = 1; --

してみると、こんな感じで全ユーザーの ID, NAME, PASSWD が吐かれてきます。

99fbf5b03d1de9a48b7a58804ed028cf

PASSWD の欄は * でマスクされていますが、多分これはアプリケーション側で処理されているので、これを ID か NAME かの欄に引っ張ってくればマスキングされないだろう、みたいな発想です。

' OR 1 = 1 UNION SELECT passwd, 1, 1 from users; --

ん゛ん゛……!! ダメですね。そんなテーブルないそうです。スクショ撮り忘れました。
とりあえず SQLite のメタデータを見て、テーブル名とカラム名を取ってきましよう。

' OR 1 = 1 UNION SELECT sql, 1, 1 from sqlite_master; --

これもスクショを撮り忘れましたが、テーブル名は users_hogefuga , パスワードのカラム名は password であることが判明しました。
あとは UNION で引っ張ってくるだけです。

' OR 1 = 1 UNION SELECT password, name, 1 from users_hogefuga;

44c80074b4401d155fca907081c18c2a

おしまい。

Network 100 Find the Key

Web 400 塔 も興味がありますが、400で難しそうだし、時間も長くないので100点問題を先に取りに行きます。

pcap ファイルをWiresharkで覗くと、やたらたくさん ICMP なアレがありますね。
ところで講義の時間に icmp.flag_in でフィルタして ICMP の Identifier (LE) 部分を順番につなげて読むとフラグが出てくる、みたいなのがあったので試してみます。。

出てきました。やったー。

Flag is "CTF for Beginners!"

Network 300 これはファイルですか?

着手した段階で残り10分を切っていたのでだいぶ焦ってました。pcap ファイルを開きます。HTTPがたくさん見えます。
Export Objects > HTTP すると、大量のファイルが出てくるので、Save All して、とりあえず見ていきます。
data というファイルがあったのでとりあえず file にかけてみると、HTMLのようです。ブラウザで開いてみると、どうやらこのページを開いた時の Apache の Indexes ページっぽいです。
あまり役に立ちそうな情報はなかったのでスルー。
残りは
だいたい 10K 程度のテキストファイルなので、とりあえず

cat `echo *.txt | tr ' ' '\n'` | grep -i "flag"

を試してみます。

ターミナルを破壊されました。
66cf3b9af92e76c34a17cc0f53ea5a84

……明らかにテキストではないです。.txt のどれかがバイナリっぽいですね。
改めて ls を見直すと、一つだけファイルサイズがやたらと違うものがあります。file してみると、

osyoyu@Mentsuyu:~/ctf4b/ctf_network_file/flag% file Adefdx2e.txt
Adefdx2e.txt: PNG image data, 466 x 72, 8-bit/color RGB, non-interlaced

PNGじゃん。適当に開くと
flag
フラグが得られました。完了。

最終結果はこんな感じです。Network 200 不審な通信を見つけろ!はいろいろ試したのですが残念ながら解けませんでした。
25e651f46a6cacbdf9750e3e5c3868e9
b1b3ca479d9765535a0544bf35db23ac

CTF for Beginners, 上の方にも書きましたが色々と知ることが多くあり、とても楽しかったです。CTFのワクワク感、最高ですね。
運営の皆さんや会場を提供してくださったGREE、その他のいろんな皆さん、ありがとうございました!