SECCON 2013 CTF オンライン予選
SECCON CTFのオンライン予選に参加してきました。全324チーム中、なんと6位だと思われます(結果発表は後日)。
チームのwrite-upはこちらに順次まとめてもらっています。
http://ganbare-tigers.blogspot.jp/ たくさん解いてくれたチームメンバーに感謝です。
削除されているファイルの名前は何ですか? フォレンジックス 200
バイナリファイルが与えられます。
root@kali64-e430:~# file Filesystem003.bin Filesystem003.bin: data
まず、問題のファイルをざっと見て気になったのが、
strings すると、FILE0という文字がやたら目につく。
stirling でバイナリをみると、先頭が 46 49 4C 45 30 (FILE0)で始まる。
"46 49 4C 45 30" で検索すると、どうやらNTFSのMFTという領域で、メタデータが格納されているらしいとわかりました。マウントできないかとかやってたけどうまくいかないので、MFTを解析する方法を探すと、ntfswalk というツールが見つかります。 https://tzworks.net/prototype\_page.php?proto\_id=12
ntfswalk is a command line a tool that traverses a specified NTFS volume reading all MFT entries and pulling predefined statistics as it runs.
usage: Running 'ntfswalk' on an extracted $MFT file ntfswalk -mftfile <name> [-options]
これ、使えそうじゃないですか。早速、mtffileオプションをつけて実行。
C:\> ntfswalk.exe -mftfile Filesystem003.bin > mftfile.txt
こんな感じでダーッとでてきます。
ntfswalk - limited ver: 0.50; Copyright (c) TZWorks LLC Licensed for Demo use only. run time: 01/26/2014 01:55:55 [UTC] cmdline: ntfswalk.exe -mftfile Filesystem003.bin
mft entry | seq | parent mft | type | ext | ref | date | time-utc | MACB | other info | path and filename | various data types 0x00000000 | 1 | 0x00000005 | file | none | 1 | 04/13/2012 | 04:53:09.733 | si:[macb]; fn:[macb] | | [root]\$MFT | [unnamed data : sz: 0x10c0000]; [bitmap : sz: 0x1008]; 0x00000001 | 1 | 0x00000005 | file | none | 1 | 04/13/2012 | 04:53:09.733 | si:[macb]; fn:[macb] | | [root]\$MFTMirr | [unnamed data : sz: 0x1000]; 0x00000002 | 2 | 0x00000005 | file | none | 1 | 04/13/2012 | 04:53:09.733 | si:[macb]; fn:[macb] | | [root]\$LogFile | [unnamed data : sz: 0xc00000]; 0x00000003 | 3 | 0x00000005 | file | none | 1 | 04/13/2012 | 04:53:09.733 | si:[macb]; fn:[macb] | | [root]\$Volume | [security descr : sz: 0x0064]; [vol name : sz: 0x0010]; [vol info : sz: 0x000c : ver: 3:1 (WinXP)]; [obj id : sz: 0x0010 : 4073b6c4-846d-11e1-b500-005056c00008]; 0x00000004 | 4 | 0x00000005 | file | none | 1 | 04/13/2012 | 04:53:09.733 | si:[macb]; fn:[macb] | | [root]\$AttrDef | [security descr : sz: 0x0064]; [unnamed data : sz: 0x0a00]; 0x00000005 | 5 | 0x00000005 | dir | none | 1 | 04/13/2012 | 04:53:09.733 | si:[…b]; fn:[macb] | | [root]\. | [security descr : sz: 0x00e4]; [$I30 : indx root : sz: 0x0038]; [$I30 : bitmap : sz: 0x0008]; [$I30 : indx alloc : sz: 0x1000]; [$TXF_DATA : logged stream : sz: 0x0038]; 0x00000005 | 5 | 0x00000005 | dir | none | 1 | 05/10/2012 | 08:42:07.387 | si:[mac.] | | [root]\. | [security descr : sz: 0x00e4]; [$I30 : indx root : sz: 0x0038]; [$I30 : bitmap : sz: 0x0008]; [$I30 : indx alloc : sz: 0x1000]; [$TXF_DATA : logged stream : sz: 0x0038];
(ひたすら続くのであとは省略)
みごと、MFTからファイルとディレクトリの一覧が抽出できました。 どうしようかと思っていると、他のメンバーが"type"列に"del"とあるのを見つけてくれました。
0x0000428c | 2 | 0x0000428b | del | exe | 2 | 09/28/2009 | 08:25:08.000 | si:[m…] | | [root]\Documents\SkyhookParser\SkyhookParser.exe [8.3: SKYHOO~1.EXE] | [unnamed data : sz: 0x3400]; 0x0000428c | 2 | 0x0000428b | del | exe | 2 | 05/15/2012 | 08:31:15.753 | si:[.a.b]; fn:[macb]; fn8.3[macb] | | [root]\Documents\SkyhookParser\SkyhookParser.exe [8.3: SKYHOO~1.EXE] | [unnamed data : sz: 0x3400]; 0x0000428c | 2 | 0x0000428b | del | exe | 2 | 05/15/2012 | 08:31:15.754 | si:[..c.] | | [root]\Documents\SkyhookParser\SkyhookParser.exe [8.3: SKYHOO~1.EXE] | [unnamed data : sz: 0x3400];
Flagは SkyhookParser.exe
repeat after me ネットワーク・Web 100
(※途中まで別の人が解いているのを、後から参加しました) パケットのキャプチャが与えられます。
root@kali64-e430:~# file followme.cap followme.cap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 65535)
Wiresharkで開くと、通信内容はTelnetで、後半に別のサーバにsshしていました。下の図は適当なところでFollow TCP Streamしたところ。
問題が"repeat after me"なので同じようにsshを試みますが、パスワードエラー。制御コードやDELなども入力した形跡があってよくわからないので、キャプチャファイルからパスワード入力部分をまるごとバイナリで切り出してそのまま入力すればどうなるだろう、と考えます。切り出したファイルがこちら。
確かsshにパスワードを自動入力する方法があったなーと検索してみると、ちょうど良さそうなツールを発見。 http://sourceforge.net/projects/sshpass/ で、こいつを使ってssh。
root@kali64-e430:~# sshpass -f pass.bin ssh -p 31337 [email protected] Welcome to Ubuntu 12.04.3 LTS (GNU/Linux 3.8.0-29-generic x86_64)
Documentation: https://help.ubuntu.com/
System information as of Sun Jan 26 03:59:50 JST 2014
System load: 0.0 Processes: 81 Usage of /: 1.1% of 96.47GB Users logged in: 2 Memory usage: 13% IP address for eth0: 133.242.16.239 Swap usage: 0%
Graph this data and manage this system at https://landscape.canonical.com/
38 packages can be updated. 21 updates are security updates.
The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.
Last login: Sun Jan 26 03:53:03 2014 from pon091-071.kcn.ne.jp followme$ ls -l total 4 -r–r–r– 1 0 0 25 Dec 24 10:55 flag.txt followme$ cat flag cat: flag: No such file or directory followme$ cat flag.txt Interesting_IPv4_address followme$
うまくいきました! flag.txtの中にFlagが書かれていました。 Flagは Interesting_IPv4_address
calculate it / 計算せよ プログラミング・crypt 100
問題にあるとおり接続すると、計算式らしきものが送られてきます。計算結果を返せばよいのですが、数秒たつと遅すぎると言われます。
root@kali64-e430:~# nc calculateit.quals.seccon.jp 45105 3/3-7-4531448-164-9/3 = Too slow, bye.
pythonで書いてみます。(実は今年からpythonを始めようと思って年末年始にTutorialをみていたのです。)
import socket
def solve(data): # ここに肝心の計算処理を書いて、、、(ですが、書けない理由は後述) return score
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('calculateit.quals.seccon.jp', 45105))
while True: q = s.recv(1024) print q q = q.replace(' =', '').rstrip() a = solve(q) print a s.send(str(a))
という感じで適当にやっていたのですが、どうにも計算方法がわかりません。。途中で大会運営側からヒントが出ていて、どうやらボウリングのスコア計算ということで。 が、何度かトライしてみるも、正解がでないのです。みんなに手計算してチェックしてもらうと合ってるのに。。
6343715/7232117/9/42 96 Try again.
14168-9/9/9/449/116/1 = 105 Really?
138-6/6/323231418/62 = 84 NG.
1/224345516-1721549/6 = 86 No good.
答えをサーバに送るときに、改行を加える必要があったようです。'\n'をつけるとOKでした。しかしここで次の問題が。いい加減なコードなので最終フレームの3投目と連続ストライク/スペアに対応していなかったのです。 1~2問は正解しますが、連続で何問も正解しないといけなくて、途中で突破できないややこしい問が来てアウトでした。運が良ければいけるかと思ったのは甘かったです。頭もボーッとしていたので諦めて、他のメンバーがやってくれるのを待つことに。すみません。。
1/25 12時~1/26 12時まで(夜はみんなで飲んだあと再度参戦(笑))、相当疲れました。とても楽しかったのでまたやりたいです。 みなさんありがとうございました。











