Web開発者の日常

主にプログラミング関連。たまに日常も綴ります。

CTF for ビギナーズ 2015 札幌 #ctf4b

time 2015/06/15

CTF for ビギナーズ 2015 札幌 #ctf4b

こんばんは。

日曜日には、 CTF の初心者向け勉強会に参加してきました!

CTF for ビギナーズ 2015 札幌

CTF for ビギナーズは、コンピュータセキュリティ技術を競う競技であるCTF (Capture The Flag) の初心者を対象とした勉強会です。本勉強会では、CTFに必要な知識を学ぶ専門講義と実際に問題に挑戦してCTFを体験してもらう演習を行います。

土曜日の OSC で、 CTF for ビギナーズ運営スタッフの一人である山本さんから聞いて初めて存在を知り、参加申し込みをしました。

東京や横浜の方だと直ぐに定員が埋まるそうですが、札幌で CTF に興味がある人は少ないのか前日でもギリギリ間に合いました。

 

sponsored link

内容

CTF の紹介、法律と倫理のお話があり、その後

  • バイナリ問題について
  • Web 問題について

の話がありました。ネットワーク問題については資料だけ配布されました。

一通りの説明と、 Windows 上でツールを使ったハンズオン形式で学びました。

簡単に学んだ後、初心者向けの CTF 問題を解きました。

Writeup

Web 問題を覚えている範囲で書きたいと思います。

Network や Binary の問題と違い、 Web 問題は競技が終わってから再度挑戦することは不可能なので、全問ネタバレします。

CTF for ビギナーズ-Problems

問題番号. 問題名, 配点

2. SQLi for Beginners, 100

パスワードに

'OR'1'='1'--

等を入れてログインすると Flag が手に入ります。

3. 1M4G3 V13W3R, 200

問題を作成した @yagihashoo さんにしてやられました…

任意コード実行と見せかけて、ディレクトリトラバーサルでした。

みんな騙されていたのか、誰一人として解けませんでした。

解法は、

view.php?file=../index.php

として index.php のコードを覗き見て、怪しいファイルを読み込んでいるのでそのファイル名を view.php?file に指定してアクセスすると Flag が手に入ります。

4. SQLi for Beginners Returens, 300

記憶があやふやですが、2番と同様にログインすると user1 になります。

適当な SQL の文法エラーを出すと SQLite3 であるとこが分かります。

***admin*** でログインするように書かれているので、 UNION 句を使ってデータベースの情報を取得します。

スクリーンショット 2015-06-14 16.12.07

そして、 admin でログインできました。

スクリーンショット 2015-06-14 16.15.57

5. Innovative Auth, 400

正直、問題の趣旨がよくわからないまま解いてしまいました。

2, 4 に引き続きログイン処理なのですが、デフォルトのユーザ名とパスワードが与えられます。

デフォルトでフォームに入力されているので、ログインボタンを押すだけでログインできます。

ログイン処理は POST で行っているので application/x-www-form-urlencoded と思いきや、 POST なのに QueryString でユーザ名とパスワードを渡す実装になっていて、早とちりにより無駄に時間を食いました。 curl 使う必要なかったんや…。

フォームに入力したパスワードはハッシュ値[未検証]っぽい値に変換されて送信する挙動なので、フォームから SQLi は難しそうです。

なので、 POST に拘らず GET で QueryString としてユーザ名とパスワードを渡してみると、ログインできた時の挙動と同じになりました。

因みに、ログイン時に叩く auth.php は JSON を返してくるだけで Redirect しません。 admin でログインする必要があるのですが、 admin のパスワードなんて知らないよ!とパスワードを空にして送信すると、なんと…ユーザー名とパスワードが JSON で返ってきました。

このパスワードを QueryString に指定して GET を叩くことでログイン処理が完了し、返ってくる JSON に含まれている Redirect 先の URL に手動で飛ぶと Flag が手に入ります。

完全にエスパー問題でした。こんなの分かる訳無いし、非現実的すぎるわ…と思いました。

6. Universal Web Page(笑), 500

Web 最後の問題です。500点問題ですが、事前に渡された資料に書かれている通りの問題でした。

ディレクトリトラバーサルと PHP の機能の

php://filter/convert.base64-encode/resource=index.php

とを組み合わせることで、 index.php のソースが Base64 エンコードされた文字列を入手できるので、手元でデコードします。

Base64

index.php の最後に Flag が書かれていました。

index.php

 

結果

勝手に上位 10 名を載せてしまいましたが、問題があれば報告してください。すぐにユーザ名が見えないように加工します。

スコア

冷静に考えて、ポイントが 2000 以上の人は初心者ではないのでは…

申し訳ありませんでした。

最後に

驚いたことに、 CTF のために用意されたサーバはファイルサーバの除いて全て Raspberry Pi だったようです。

stacked RPi! #ctf4b

Yu Yagihashiさん(@yagihash)が投稿した写真 –

スコアサーバは開始直後は若干重くなったものの、落ちることもコネクションが切られることもなく安定稼働していたように感じました。今度は100人規模の CTF for ビギナーズでも試すそうです。

 

運営の方々ありがとうございました。参加者の方々お疲れ様でした!

sponsored link

ブックマーク



アーカイブ

2017年3月
« 5月    
 12345
6789101112
13141516171819
20212223242526
2728293031