CTF for ビギナーズ 2015 長野に行ってきた
お疲れ様でした。 SECCON 2015のまえに、リハビリと弱点解消のために行ってきました。
12時半から、バイナリ、ネットワーク、Webの講義、最後の2時間ちょっとは実践でした。
講義
Binary
バイナリ弱いので、IDAでのデバッグとか、そもそもfileコマンド使うとかいうところから勉強になったなぁ。 fileコマンドで種類調べて、stringsコマンドで中身を調べてみるとか、どのジャンルの問題解くときにも通じるところかなーと。
あと、アセンブリ読めるようにならないとダメみたいですね。 一般の人間は読めないそうです。
俺は一般の人間をやめるぞ!ジョジョーッ!
しばらく訓練が必要そう。
Network
お決まりのWiresharkを使ってpcapファイルを読み解く。
TCPの一連の流れが見れる「Follow TCP Stream」、ファイルの抽出ができる「Exports Object」あたりはすごく便利。 あとはStatisticsから通信先とか通信の種類の傾向を見ていくと問題の全体像がつかめそう。
Web
SQL Injection (SQLi)、ディレクトリトラバーサル、XSSなどなど、エスパーで解く。
ブラウザの開発者ツールを使って、ユーザからの入出力をしている所を調べてみるとよい。
CTF
本番(?)であるCTFは、講義でやった内容をもとに参加者で得点を競うというアレですね。 100〜500までの問題がBinary, Network, Webにそれぞれ。
Networkのみ400まで、BinaryとWebは300まで解けました。 問題どうやって解いたかメモ残しておきます。
Binary
Binary100 - NOT onion
flag.exeというファイルが与えられる。*1
fileコマンドにかけると、gifファイルらしい。 .gif拡張子つけたらflagが見える。
Binary200 - 読めますか?
canyoureadit.gifが与えられる。 gifファイルを開くと、画像の中にflagっぽいものが一部見える。
stringsコマンドかけたか何かしたんだけどw どうやって解いたんだっけなぁ...
Binary300 - READ and BURST
アセンブリが与えられるので、脳内実行してflagゲット。
Network
パケットが読める!読めるぞぉぉぉぉ
Network100 - Insecure Protocol
「network100.pcap」ファイルが与えられる。
Follow TCP Streamで見てみる。
flagがすぐ見つかった。
Network200 - Insecure Protocol 2
「net200.pcap」ファイルが与えられる。
これもnet100と同じでTELNET。
これもFollow TCP Streamで見てみる。
こちらは実際に繋がないとダメっぽかったので、コマンドラインから。
flagゲット。
Network300 - File Transfer Protocol
「net300.pcap」ファイルが与えられる。
中身は、FTPの通信ぽい。
FTP Dataのほうが怪しそうなので、見てみる
ftp-dataでディスプレイフィルタ
2番目と4番目のパケットがそれぞれ↓
ctf4b{This_communication_is
_encrypted.}
間にはテキストとして読めないデータが。怪しい。
データ部は「PK」で始まってたので、ヘッダがPK=zipということで、unzip。2.txtが出てきて、中身が↓
_not
繋げたらflagに。
あとから見たら、最初のパケットのデータ部にファイルパーミッションらしきものが見えるし、Export Select Packet Bytesでファイル化してみたらこんなん。
2.zipというのがヒントだったのね。
Network400 - This quiz is NETWORK challenge
「nw400.exe」というファイルのみ与えられる。 pcapファイルじゃないの?というところからちょっとびっくりしたんだけど、fileコマンドで調べてもexeファイル。 バイナリ解析?と勘ぐってIDAにかけてみるものの、中身もろくに見えず。。。 とりあえず実行してみると、一瞬プロンプトが見えてすぐ消える。
Networkの問題だから、通信してるのかも?ということでWiresharkでInterfece指定してキャプチャ開始。 実行してみると、TCPのパケットが。
TCPのパケットなので、Follow TCP Streamしてみる。
172.20.1.51というホストに対して /2015tokyo/17.txtを取りに行っている様子。
Authentication: Basic MjAxNXRva3lvOkluc2VjdXJlQXV0aGVudGljYXRpb24=
Basic認証。このあとに200ステータスが返ってきているので、これで入れるっぽい。 Basic認証はユーザ名とパスワードをコロンで繋いで、base64でエンコードしてるので。デコードかける。
2015tokyo:InsecureAuthentication
ほうほう。
http://172.20.1.51/2015tokyo/17.txt
にアクセスしてみると、認証画面が出てくるので、↑のユーザ名・パスを入れるとアクセスできる。 一つ上の階層に移ってみると、1.txtから18.txtくらいまでtxtが並んでいたところ、最後にflag.txtが。
Web
Web100 - Can you login as admin?
アクセスするとこんな画面。
教えてもらったSQLiを試してみる。
ログインできて、flag取れた。
Web200 - Find the flag
アクセスするとこんな画面。
Flag is hidden in HTTP traffic.
ってことなので、通信を見てみようとChromeの開発者ツールのNetworkを開いて、画面リロードしてみる。
通信は1つだったので、Headerを見ていくと、Flag=という明らかに答えっぽいものが。
パーセントエンコーディングされてたので、Consoleに切り替えてdecodeURIComponent()にかけてみると、答えが出てくる。
Web300 - 1M4G3 V13W3R
はい、こんな画面。
画像アップロードの画面なので、とりあえず何かアップロードしてみる。
(キャプチャないけど)アップロードした画像が下に表示される。
講義の中で「phpファイルをアップロードして動いたらヤバイですよね〜」という話もあったので、何かphp書いてみないといかんのか?とか考えたんですが、ちょっとそこまではできないなーと。
アップロードした画像をクリックしてみる。
URLを見ると、
http://172.20.1.61/web300/view.php?file=e41~.png
パラメータに「file=ファイル名」があるので、ファイルパスを指してる?ファイルパスならディレクトリトラバーサル? こういうときは、index.phpに答えが書いてあるというのが定石らしいので、index.phpを探してみる。
http://172.20.1.61/web300/view.php?file=../index.php
先頭のコメント部分にflagが。
まとめ
400,500の問題はどれも難しかった…
本戦に向けてモチベーションすごく上がりました! 運営の皆様お疲れ様でした!ありがとうございます!
がんばるぞー
*1:.exe抜けてた…