SECCON CTF 2013 に参加した。

眠すぎて死にそうなので Writeup 書き殴り。
スコアは 2802、19位でした。

練習問題 [100]

答えは、「SECCON」です。
Flag: SECCON

Enjoy the Game [100] バイナリ


このゲームをクリアしたらパスワードが得られる。
you will get the password if you get a goal of the dungeon.
起動すると一人称視点の立体迷路が始まる。
ゴールに行けばいいんだろうけど、もしゴールに行けないような
ステージになってたらどうしよう・・と思ったけど、100点問題でそれはないか、と。
data ディレクトリの中にメタセコイアのファイルがあったので、
適当にメタセコイアをダウンロードしてファイルを編集。
ゴールマスと通常マスの2つがあったので、通常マスのサイズを0.1倍に変更して保存。
すると、ゲームを起動するとゴールが丸見えなんだなあ。遠くの道も丸見えなんだなあ。
(ネトゲでよくあるチートですめ。)

結構遠い道のりでしたけど、手動でクリア。
ゴールマスにたどり着くと、MessageBox が出現。

Flag: 3D_dUnGEoN

ここはどこ? [100] フォレンジック

ファイルだけ渡されるので、中身を見てみる。メールだ。
文字コード直すのめんどくさいのでIED&D。答えの様式が書いてある。
さらに添付ファイルがあるので、デコード。tiffファイル。動物園の写真。
GPS情報がひっついてるので、GoogleMapでポン。Taipei Zooだ!

Flag: Taipei Zoo

calculate it / 計算せよ [100] プログラミング


nc calculateit.quals.seccon.jp 45105

Hint1: 四則演算ではありません / It is not a four arithmetic operations.
Hint2: 計算例 81 9- 16 6- 4/ 15 X 3- 72 45 = 82
Hint3: G- G- G- G- G- G- G- G- G- G- = 0
Hint4: X X X X X X X X X XXX = 300

最初、四則演算かと思ってひたすら投げるも、全部間違いと怒られる。
ヒント3〜4を見て、ようやくボーリングだと気付く。
後は、Rubyでごりごりスクリプトを書いて解きました。時間かかりすぎた。
何が嫌らしいって、最後にトータルスコアを聞かれる!
追加実装して走らせたら、さらにハイスコアまで聞かれた!笑った。


コードは死ぬほど汚いので載せません:p

Flag: Bowling is very fun!!

削除されているファイルの名前は何ですか? [200] フォレンジック


ファイル Filesystem003.bin の内容を確認し、次の設問に回答してください。 削除されているファイルの名前は何ですか?

あー、これは。苦手なタイプだ。きっと解けない。
そう思いながらもチャレンジしたら、解けました。やった。

NTFSの構造。0x16バイト目のビットを確認して、1が立っていなければ
削除されてるファイルらしい。適当にRubyでpry使って見てたら見つけた。
最初に何件か見つかるけど、それは空レコードっぽい。

a = File.open('/home/dolphin/seccon2013/Filesystem003.bin','rb')
while a.read(1024)[0x16].ord & 1 == 1
end

[147] pry(main)> while a.read(1024)[0x16].ord & 1 == 1
[147] pry(main)* end                                  
=> nil                
[148] pry(main)> a.pos
=> 17445888           
[149] pry(main)> a.pos.to_s(16)                                                                                                                                                              
=> "10a3400"  

Flag: SkyhookParser.exe

Find the key! [200] ネットワーク

この問題はきっと @clc_igu にゃんが書いてくれるに違いない。
(追記) 書いてくれました! → seccon2013 ctf オンライン予選 write up - Ruby_log

Hidden Message? [300] ネットワーク

JPG形式の画像ファイルが渡される。
末尾にこんな文字列が。

134.133.95.10.in-addr.arpa
どうやら、JPGファイルは途中からpcapファイルだったらしい。(thanks to @clc_igu)
パケットを眺めつつ。各IPへ疎通確認。133.242.55.252 だけ ping が通る。
nmap してみると、DNSが空いてる。よしゃ、問い合わせてみよう。

dolphin@bt:~/seccon2013$ nmap 133.242.55.252

Starting Nmap 5.61TEST4 ( http://nmap.org ) at 2013-03-17 23:13 JST
Nmap scan report for 133.242.55.252
Host is up (0.035s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp filtered smtp
53/tcp open domain

さっきのJPG末尾にあったIPを問い合わせてみると、Flagゲット。


dolphin@bt:~/seccon2013$ dig -x 10.95.133.134 @133.242.55.252

; <<>> DiG 9.7.0-P1 <<>> -x 10.95.133.134 @133.242.55.252
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29823
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;134.133.95.10.in-addr.arpa. IN PTR

;; ANSWER SECTION:
134.133.95.10.in-addr.arpa. 3600 IN PTR You.G0t.a.H1dd3n.m3ss4g3.1n.Th15.DNS.

;; AUTHORITY SECTION:
10.in-addr.arpa. 3600 IN NS haruna.great.

;; Query time: 72 msec
;; SERVER: 133.242.55.252#53(133.242.55.252)
;; WHEN: Sun Mar 17 23:15:32 2013
;; MSG SIZE rcvd: 120

Flag: You.G0t.a.H1dd3n.m3ss4g3.1n.Th15.DNS.

ログインパスワードを解明せよ [300] フォレンジック


調査対象パソコンのユーザー名Forensicsのパスワードが不明な状態です。 システムの電源を落とす前に、win32ddにより、メモリ全体のイメージファイル(RAW形式)が取得されています。 このイメージファイルを解析し、ユーザー Forensics のWindowsへのログオンパスワードが何かを特定してください。

メモリをダンプした対象システムは Windows 7, x86(32bit)です。

あ、これも苦手なヤツだ。もうむり、あきらめよ・・
と思ったんですが、そいえばメモリのイメージをごそごそする何かがあった気がして。
ぐぐってみたら、ちゃんと解けました。やった。


Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
forensics:1000:aad3b435b51404eeaad3b435b51404ee:98ffdb1b29e7c88954326cd4011141d8:::

抽出したハッシュがなかなか処理できなかったけど、ここのサイトでなんとか。
Johnがなんかうまく動かなかった。。

Flag: Kani3

Enter 8-char password to the interpreter [400] バイナリ


リバースエンジニアリングを行うかヒントを元にパスワードを入力し、秘密の鍵を取得せよ。

なんとなく cat したらヒントが書いてあった。
(なんで cat したのか未だに分からない。)


ヒント 1: パスワードはかつて存在したゲーム企業のキャッチコピーの一部。 ( HINT 1: The password is a part of promo words which former Japanese game company used.

IDAとかで開いた感じ、リバースはめんどくさそう。。
なんとかならないかなーと思って、いくつか関連しそうな企業をぐぐって確認。
ハッカーインターナショナルは、名前がそれっぽいけどキャッチコピーが見当たらず。
たまたま「かつて存在したゲーム企業 キャッチコピー」でぐぐったら
コンパイルが2件目に出る。「の〜みそコネコネ コンパイル」がキャッチコピー。
8文字にしては長いし、どうしよう。と思って、「konekone」って入れたら
パスワードが出てきてクソワロwwwwwwww
・・・ごめんなさいごめんなさい(◞‸◟;)

Flag: pUyOPuyO

古典暗号ちゃれんじ★ [500] 暗号


telnet 133.242.50.48 65437 で問題サーバに接続して、 5個のシーザー暗号と、5個の換字式暗号と、 単語区切りのスペースが消されたシーザー暗号と換字式暗号、 計12個を、それぞれ10秒以内に解いてください。

答えは、平文の「a」が、暗号文だと何になるかで答えてください。

フラグが3つあります。

10問目まで解けた時点で350点。11問目までで+50点。 12問目まですべて解けると、+100点で、計500点が得られます。

最初は手動でツール使いながら解いてたんだけど、時間制限的にむつかしい。
なので、ツールで解いてくれるツールを作った。悪い子だ。
以下のサービスを利用。スペースが除去されててもさっくりと解読してくれる。

Flag1: Et tu, Brute?!!!
Flag2: Kanji? Kaeji??
Flag3: you are cryptogram solver!!

順番にフラッグを入れないと得点されないとかあったら嫌なので、フラッグは順番に入れた。

箱庭XSS Final [500] ウェブ

ひたすらXSSする!16回XSSする!
しかも、一度出てきたキーワードは使えない。ひぃぃ。
XSSとか全然知らないので、記号プログラミングとイベントを参考に解きました。


"><"
石投げないでください(◞‸◟)
イベント名がだんだん使えなくなって最後苦しかった。もっとスマートに解きたい。


8問目正解するともらえるフラッグ


Stage8までをクリアしたご褒美

                                                                                                                                                              • -

スコアサーバに「折り返し地点まで来たよ!!」と送信してください。
途中点がもらえます。submit underlined part as (halfway-)flag.

全問正解するともらえるフラッグ


おめでとうございます! 見事に全問正解です。

スコアサーバに「アイ・アム・アラート出したいマン!」と送信してください。
submit underlined part as flag.

Crossword Puzzle [300] その他 (追記)

こちらのWriteupを見て、クロスワードパズルの各項目の答え自体は
あってると思われるので、ここに置いておきます。
著名人特集っぽかったので、フラッグも著名人かなと決めつけたのが
敗因だったかな、という感じがする。。(あと、kanntai にやたらと引っ張られてた。)

まとめ

楽しかったー!!!!!
久しぶりのCTFだったので、ほんっと楽しかった。
IRCは、海外のCTFと違ってゆったり?とした雰囲気。
問題も良いのがたくさん揃ってて、すんごく面白かった。
クロスワードは、ほとんど埋まったのにフラッグが全く分からず!
QRコードは、何故か仕様書を読んでそれに沿ってデコードしようとしても
ぜんぜんできなかったのが心残り。くそー。超悔しい。10時間ぐらいかけたのに。

本戦に進む方たちは頑張ってー!
寝る!!!