読者です 読者をやめる 読者になる 読者になる

blog.toxn

あしあと

CTF for ビギナーズ 2015 長野に行ってきた

お疲れ様でした。 SECCON 2015のまえに、リハビリと弱点解消のために行ってきました。

ctf4b.doorkeeper.jp

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」ファイルが与えられる。

Wiresharkで開くと、TELNETのパケットが。

f:id:toxn:20150705211655j:plain

Follow TCP Streamで見てみる。

f:id:toxn:20150705211416j:plain

flagがすぐ見つかった。

Network200 - Insecure Protocol 2

「net200.pcap」ファイルが与えられる。

これもnet100と同じでTELNET

f:id:toxn:20150705211707j:plain

これもFollow TCP Streamで見てみる。

f:id:toxn:20150705211426j:plain

こちらは実際に繋がないとダメっぽかったので、コマンドラインから。

f:id:toxn:20150705211911j:plain

flagゲット。

Network300 - File Transfer Protocol

「net300.pcap」ファイルが与えられる。

中身は、FTPの通信ぽい。

f:id:toxn:20150705212507j:plain

FTPFTP Dataのみ。

f:id:toxn:20150705212516j:plain

FTP Dataのほうが怪しそうなので、見てみる

ftp-dataでディスプレイフィルタ

f:id:toxn:20150705212810j:plain

2番目と4番目のパケットがそれぞれ↓

ctf4b{This_communication_is
_encrypted.}

間にはテキストとして読めないデータが。怪しい。

データ部は「PK」で始まってたので、ヘッダがPK=zipということで、unzip。2.txtが出てきて、中身が↓

_not

繋げたらflagに。

あとから見たら、最初のパケットのデータ部にファイルパーミッションらしきものが見えるし、Export Select Packet Bytesでファイル化してみたらこんなん。

f:id:toxn:20150705213418j:plain

2.zipというのがヒントだったのね。

Network400 - This quiz is NETWORK challenge

「nw400.exe」というファイルのみ与えられる。 pcapファイルじゃないの?というところからちょっとびっくりしたんだけど、fileコマンドで調べてもexeファイル。 バイナリ解析?と勘ぐってIDAにかけてみるものの、中身もろくに見えず。。。 とりあえず実行してみると、一瞬プロンプトが見えてすぐ消える。

Networkの問題だから、通信してるのかも?ということでWiresharkでInterfece指定してキャプチャ開始。 実行してみると、TCPのパケットが。

f:id:toxn:20150705205635p:plain

TCPのパケットなので、Follow TCP Streamしてみる。

f:id:toxn:20150705205936j:plain

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?

アクセスするとこんな画面。

f:id:toxn:20150705195748j:plain

教えてもらったSQLiを試してみる。

f:id:toxn:20150705195751j:plain

ログインできて、flag取れた。

f:id:toxn:20150705195755j:plain

Web200 - Find the flag

アクセスするとこんな画面。

f:id:toxn:20150705195801j:plain

Flag is hidden in HTTP traffic.

ってことなので、通信を見てみようとChromeの開発者ツールのNetworkを開いて、画面リロードしてみる。

f:id:toxn:20150705195800j:plain

通信は1つだったので、Headerを見ていくと、Flag=という明らかに答えっぽいものが。

f:id:toxn:20150705195807j:plain

パーセントエンコーディングされてたので、Consoleに切り替えてdecodeURIComponent()にかけてみると、答えが出てくる。

Web300 - 1M4G3 V13W3R

はい、こんな画面。

f:id:toxn:20150705195810j:plain

画像アップロードの画面なので、とりあえず何かアップロードしてみる。

(キャプチャないけど)アップロードした画像が下に表示される。

講義の中で「phpファイルをアップロードして動いたらヤバイですよね〜」という話もあったので、何かphp書いてみないといかんのか?とか考えたんですが、ちょっとそこまではできないなーと。

アップロードした画像をクリックしてみる。

f:id:toxn:20150705195813j:plain

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

f:id:toxn:20150705195816j:plain

先頭のコメント部分にflagが。

まとめ

400,500の問題はどれも難しかった…

本戦に向けてモチベーションすごく上がりました! 運営の皆様お疲れ様でした!ありがとうございます!

がんばるぞー

*1:.exe抜けてた…