smpCTF Hacker Olympics 2010 Quals に参加しました。

smpCTFはこちら。

smpCTF って何

CTF ( Capture the Flag ) つまり旗をとれ!というコンテスト。
旗には得点が設定されており、とった旗の合計得点が高い人ほど上位になります。



旗を手に入れるためのヒントが提示されるので、後は勝手にがんばってね!という感じ。

初参加

CTF系コンテストには初参加でした。
つい先日参加した、「セキュリティうどん」にていろいろと教えてもらい、参加に至った感じです。
(どうもありがとうございました・・・!)


stgm2として参加したかったのですが、締め切り前に連絡を取り合えてなくて、
一人チームとして参加しました。が、今回は上位に入ることよりも、
雰囲気を味わったり楽しむことを優先してたので、裏ではちょこちょこと情報交換してた感じです。
なので、順位は書きません ;P

ジュース吹いた

・嘘のFLAG情報を流してるところがあったりして、見事に引っかかった人はWall of Shameに。
・ファイル解析を突然IRC上で先行公開され、(中略)、感染して、いろいろとファイルがやられたのでHDDをフォーマットして再インストールした。
・ファイル解析のChallengeが正式に公開されてからメールでレポートしたら、IRCで冗談か?って聞かれた。
・Challenge 6, 7, 8 は、公開されてすぐはユーザ challenge6, challenge7, challenge8 でログインできる状態になってて、即効でFLAG取れた ;D
IRCのチャットはずっとROMしてたけど面白かった。
・stgm2のIRCチャットでは文字化けが起こってしまって(サーバがUTF-8だったのかしら・・)、自分はずっと英語で話してた。
・しかしほとんど自分の発言しかなかった X(

問題レビュー

解説付のものは、Challenge 1, 2, 3, 4, 5, 13, 14, 16, 17 と
Trivia 1, 2, 4, 5, 6, 7 だけ。

・Challenge 1

S=1, P=1, A(1)=1
A(n) = S * P + A(n-1) + R
R=****
A(**)の値は?

計算問題。プログラムを作って終わりだけど、5分毎に値が変わるので、
同じ値でずっとやっていると一生解けない。
開幕からしばらくの間はシステム側がバグっていたため、正しい答えを提出しても通らなかった ;P


・Challenge 2 (misc)
SSHで接続すると、突然vimが起動する。(文字色が黒かったりするわけではない:D
vimが起動する直前に、どこにFLAGがあるかというヒントが隠されている。
あとはがんばって探す、探す、探す。


・Challenge 3 (crypto)

SHA-1のハッシュが 008ce55c7d1b602dc4c4c3ad52a5d064e6d1ef12 となるようなファイルを作れ。
Hint: DRM-0, Linux-1
_DO NOT BRUTE FORCE_ it's not required... 
<!--- t3=(*((unsigned int *)(key+2)))^(*((unsigned int *)(sec+0x56))); -->

指定されたSHA-1ハッシュ値を持つファイルを作れという問題。
当初、正解者がほとんど出ずに謎の問題となっていたが、実はかなり簡単だったというオチ。
HTMLコメントで隠されているC言語のコードでぐぐると、DeCSSのソースコードがヒットする。
後は、そのコードが存在する関数を、タブをスペースに変換してやるだけ、という・・。
IRCでのヒントが、「繋がりを見ろ」「SHA-1の仕組みは関係ない」「ググっても意味なし」「コピペは役に立たない」「いくらか自分で編集しないといけない」「入力欄はそんなに大きくないだろ?つまり、全部のコードは要求されてないんだ」といったもの。気づけなかったのが悔しい。
(ちなみに、全部のコードのコピペはやらかしました。)
詳しくはここを参考にどうぞ。


・Challenge 4 (web)
administratorでログインして、暗号文をゲットして複合してね、という問題。
しかし、administratorでログインしようとすると、access deniedされる。
これもとても簡単で、POSTで投げるとadministratorでログイン完了となる。
後は、暗号文がBASE64なのでデコードしてやると、ヘッダがJPEG。画像として開くと、FLAGが書いてある。


・Challenge 5 (forensics)
ファイルがあるので、解析してね、という問題。
rzip → bzip2 → ファイルいっぱい。
.bash_historyがあるので見てみると、gpgを使ってファイルを暗号化しているのがわかる。
また、OpenOffice.orgのドキュメントファイルがあったり、秘密鍵・公開鍵があったりするが、
実はこれらは全てフェイクで、1.5MB近くあるパケットファイルに答えが隠されている。
Wiresharkで余分なパケットを飛ばしながら見ていくと、FLAGが書かれている。
Challenge IDは問題文のソースに書かれているのだが、これを見逃していると
大量のファイルの海に潜ったまま戻ってこれなくなる :(


・Challenge 6 (pwnables)
・Challenge 7 (pwnables)
・Challenge 8 (pwnables)
SSHでログインして、Exploitしてね、という問題。
公開直後は、各アカウントでログインできちゃってたので、普通にcatするだけだったというひどいオチ。
(おかげで3問とも1stか2ndとれてるハズ・・・。)
自分はExploit系をさっぱり知らないので、他の有志の方の解説待ち ;)


・Challenge 9 (pwnables)
これもSSHでログインしてExploitする問題。
しかし、こっちはHeap Overflowが検知されるため、一筋縄ではいかないよう。
これまた他の有志の方の解説待ち ;)


・Challenge 10 (pwnable)
これもSSHでログインしてExploitする問題。
しかも、ノーヒント。lol
分かる方の解説待ち <3


・Challenge 11 (web)
結構後に公開されたもの。phplistというのが設置されているので、
それをごそごそする感じ。ほとんど手付かずなので詳しくは知らないけど、
IRCで「データベースじゃなくてファイルに答えがある」といった感じのヒントが出されてた。
これまた詳しい説明は他の有志の方にお任せ。


・Challenge 12 (web)
SQLインジェクションの問題。
多分、SQLインジェクションの問題としてはかなり基本的なものなんだろうけど、
やったことも見たこともなかったのでアプローチがわからず、試行錯誤のみ。
しかしこういう問題は面白すぎる。大好き :D
phpがidとpassをパラメータにとり、それぞれがSQL文に埋め込まれてクエリが発行される。
そのため、idまたはpassにSQLを埋め込むことになる。
これも詳しい方の説明待ち。


・Challenge 13 (forensics)
これがForensicsだと!ふざけるな!!!lololol
メールまたはIRCで直接答えを提出する形の問題。
画像が与えられ、「これは何の画像でしょうか」という問題。
画像の下にはなにやらデータが書かれており、これでググると何の画像か答えがトップに出てくる。
そのページのタイトル等、適当な部分をコピペして送るだけで終わり。
よく知らずにIRCで英語で説明したりしたので、「惜しい!もう少し掘り下げて!」と言われて
がんばって説明したら、「真ん中の空欄がヒントです。」と言われて、どツボにはまった。ヒドイw


・Challenge 14 (crypto)

Hint:
Given: (1,2,1) 2001034nq5oos33n0p32roorso7oq1qrr581p632313498531poq5q742r110410r3sr2ssq57152905q64468p28oq63r76339q100
Solve for (2,1,2): ???

これも解けた人がとても少ない問題。
終了2時間前ぐらいにヒント「THINK GREEN (and NO it isn't green or hill cryptography)」が出たけど、
どうやらいくつかのチームには既にヒントを出していた模様。
主催者にヒントを要求するのも重要なテクニックとなるようだ。
(of course, i couldnt solve if i know that hint <3)
この問題については、終了後にIRCで解説があったので、適当に訳しとく。

THINK GREEN -> EV SSL証明書(アドレスバーが緑色になる。)
EV SSL証明書では、2回の証明が行われる。
(1,2,1) や (2,1,2) というのは、2段階の暗号化を意味する。
(a,b,c) とすると、
a = 最初の公開鍵
b = 2つ目の公開鍵
c = 出力を反転
となっている。
(1,2,1) であれば、最初の公開鍵で認証し、続けて2つ目の公開鍵で認証する。
そして、9の倍数・21の倍数番目を除く3の倍数目の文字をとりあげる。
それがもし奇数なら1から、偶数であれば2から使う。
最終的に103文字となる。これは便利な素数だ。
(2,1,2) であれば、最初に2つ目の公開鍵で認証し、次に1つ目の公開鍵で認証する。
後は答えを最後まで反転させて、終わり。

訳が下手すぎる(+間違えてる可能性大)なので、原文も載せておく <3

08:12:22 <#smpctf><[smp]j5_> THINK GREEN -> SSL EV certificates (browser bar goes green when you surf traffic
08:13:11 <#smpctf><[smp]j5_> millions of people per day -> verisign ads 175 million hits a day
08:13:31 <#smpctf><[smp]j5_> search on EV certs on verisign, and you get their Intermediary certificates on their website
08:13:50 <#smpctf><[smp]j5_> if you ever implemented EV certs, you sometimes need to include the intermediary certificates in your appliance or else the browser complains
08:14:00 <#smpctf><[smp]j5_> they have primary (1) certificate and secondary (2) certificate
08:14:09 <#smpctf><[smp]j5_> (1,2,1) and (2,1,2) are a 2-stage encrypt
08:14:22 <#smpctf><[smp]j5_> (a,b,c)
08:14:29 <#smpctf><[smp]j5_> a= first public key to transpose
08:14:33 <#smpctf><[smp]j5_> b= second key to transpose
08:14:42 <#smpctf><[smp]j5_> c= reverse output
08:14:45 <#smpctf><[smp]skiffy> bbl
08:14:58 <#smpctf><[smp]magikh0e> lol
08:15:04 <#smpctf><[smp]j5_> with 1,2,1 you start with the primary intemediary certificate and then use secondary
08:15:16 <#smpctf><[smp]j5_> you take every 3rd, but not 9th, nor 21st character
08:15:21 <#smpctf><[smp]j5_> and if it's even, use from 1
08:15:24 <#smpctf><[smp]j5_> if it's odd, use from 2
08:15:28 <#smpctf><[smp]j5_> the end result is a 103 length string
08:15:32 <#smpctf><[smp]j5_> which is conveniently prime
08:15:55 <#smpctf><[smp]j5_> with inputs of 2,1,2 you start with secondary intemediary then primary intemediary, and reverse your answer at the end
08:16:14 <#smpctf><[smp]j5_> had anyone got far enough, help would have been provided to deal with the reversing
08:16:44 <#smpctf><[smp]j5_> people got as far as SSL EV certs
08:16:49 <#smpctf><[smp]j5_> and started looking at verisign
08:17:01 <#smpctf><[smp]j5_> and suggested to those teams to consider values longer than 103 chars (ie public keys)
08:17:30 <#smpctf><[smp]j5_> i know SSL is practically uncrackable (for now) so any standard implementation of RSA was not on the table, even for my craziness
08:18:10 <#smpctf><[smp]j5_> oh, and the strings were rot13'd which many people figured out
08:18:34 <#smpctf><[smp]j5_> k, pretty much done


・Challenge 15 (misc)
よく分からない箱をかぶったおっさんの写真がある。
IRCのログ漁ってみたけど、よく分からず・・・。誰かヨロシク X(


・Challenge 16 (misc)
実はすごく簡単な問題。
どこか分からないけど、案内標識が写った写真がある。
HTMLソース内にはBASE64エンコードされた文字列があり、
それをデコードすることで、より高解像度の写真にたどり着ける。
高解像度になったことで、写真の奥にある看板の文字が見えるようになる。
これらの情報から、この看板を出しているとこのホームページを探すことができる。
そのホームページに書かれている電話番号を入力することで、FLAGがもらえる。
(ホームページまでたどり着いてたけど、何を入力していいのか分からずじまい。無念。)


っていうのをログ漁って知りました!!!!111

08:45:52 <#smpctf><c0de> And the misc with the slovenian signs?
08:46:01 <#smpctf><c0de> the street sign
08:46:01 <#smpctf><[n0p]\x30> this was realy nice
08:46:05 <#smpctf><c0de> what was the point
08:46:09 <#smpctf><[n0p]\x30> the phone number was the flag ;)
08:46:19 <#smpctf><c0de> which was written where?
08:46:21 <#smpctf><[0x28]Scarecrow> sint


・Challenge 17 (forensics)
こんなウィルスファイルがあります。
これを解析して、「起動処理」「プロセスごとに作られるリモートスレッドの機能」「活動内容」「どのファイルを変更したか」「レジストリのどこを変更したか」「それぞれのスレッドは何をしているか」
などについてメールで報告せよ。という問題。
ていうかていうか。活動内容〜それぞれのスレッドは何をしているか、って、追記されてたのね。知らなかった。
この問題のファイルは、問題が公開されるよりかなり前にIRCで先行公開されており、
その時に解析を試みてた。しかし、何のファイルか書かれてなかった(ファイル名から推察できるだろ、という突っ込みはなしの方向で・・・)。
Ollyで読み込んでも、アンパックがめんどくさかったので、、直接実行した。どかーん。ぱちぱちぱち。
おかげさまで身をもって活動内容を体験することができたので、それについてリポートしたら、「冗談だろ?」って言われた挙句、
FLAGももらえず。感染損。即攻でHDDをフォーマットしてOSを再インストールした。
(普通、VM上でやるだろ・・っていう突っ込みもなしの方向で・・・頭が回ってなかった <3


・Trivia 1

Q. What style of traffic is represented below?

tcpdump -nn -vvv -e -s 1500 -X -i eth0
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 1500
bytes
13:47:23.382938 aa:00:04:00:0a:0a > ab:00:00:03:00:00, ethertype DN
(0x6003), length 50: endnode-hello endnode vers 2 eco 0 ueco 0 src 2.522
blksize 1498 rtr 0.0 hello 10 data 2
        0x0000:  2200 0d02 0000 aa00 0400 0a0a 03da 0500  "...............
        0x0010:  0000 0000 0000 0000 aa00 0400 0000 0a00  ................
        0x0020:  0002 aaaa

ada-uさんに解いてもらいました。Thx!!!
答えは、「decnet」です。


・Trivia 2

Q. Why do you need "%eth0" in the following command:

nmap -6 fe80::a800:4ff:fe00:a0a%eth0

stgm2さんの方で答えは出てたのに、何を入力したらFLAGがもらえるのか分からない状態になってたので、
直接IRCで聞きました。

                                                                                                        • -

06:36:21 hi. what's the format for t2?
06:36:39 what is your answer?
06:36:43 ill tell you if your close
06:36:45 and format
06:37:54 Older versions of Nmap did not support scanning link-local addresses.
06:38:06 The problem is that link-local addresses are interface specific.
06:39:02 u got it
06:39:03 Link Local addressing
06:39:06 there u go
06:39:14 thank you!
06:39:20 np-----------------------------------------------------


・Trivia 3

Q. What protocol is used to pass multicast traffic across external network domains to specific hosts? 

分からずじまいー。誰か分かる方待ち。


・Trivia 4

Q: Identify this libc function

00000000  89C7              mov edi,eax
00000002  89DE              mov esi,ebx
00000004  89CA              mov edx,ecx
00000006  C1E902            shr ecx,0x2
00000009  F3                db 0xF3
0000000A  A5                movsd
0000000B  89D1              mov ecx,edx
0000000D  81E104000000      and ecx,0x4
00000013  F3                db 0xF3
00000014  A4                movsb
00000015  C3                ret

答えは「memcpy」。
IRCのログを見ていると、DEFCONから持ってきた問題だといううわさが・・・。


・Trivia 5
Triviaだけど375点の問題。
赤い線で田んぼの田みたいに区切られた画像があり、左上に「Top Class Companies Only」と書かれている。
問題文には、「NO DUPLICATES..」とだけ書かれている。
当初、「この問題はChallenge 3のヒントになっている」みたいな発言がIRCではあったけど、、うーん。。
自力で解きたい人は、次のところを飛ばしてください。
IRCでの解説を適当に訳しとく。

この画像にはExifデータがついているけど、実はフェイク。
次の画像をエミュレートすることで答えが出る。
http://xkcd.com/195/
Top Class Companies Onlyから、Top Class、つまり「Class A のIPアドレス」が推測できる。
そこで、0.0.0.0/8 〜 63.0.0.0/8 を並べて NO DUPLICATES より、重複を削除する。
さらに、未割り当てのもの、そして Top Class Companies Only より、会社じゃないものを削除する。
例えば、ヨーロッパ(62)など。
後は、各会社の頭文字を最初から順につなげていくと・・・
「GBAIDBXHDAMFCDDUDNDHMPEAJHIBPDCMBUSU」となり、これが答えなのだ。

一応原文も載せておく。

08:09:11 <#smpctf><[smp]j5_> will start with t5
08:09:29 <#smpctf><[smp]j5_> exif data was fake
08:09:40 <#smpctf><[smp]j5_> and if you called that poor company in colorado, hope you have a good long distance plan
08:09:47 <#smpctf><[smp]j5_> goal was to emulate the following picture:
08:09:50 <#smpctf><[smp]j5_> http://xkcd.com/195/
08:10:16 <#smpctf><[smp]j5_> NO DUPLICATES and top class (as in Class A IP addresses) 
08:10:28 <#smpctf><[smp]j5_> arrange them from 0.0.0.0/8 .... 63.0.0.0/8
08:10:40 <#smpctf><[smp]j5_> remove duplicates, empty values, and things which aren't companies
08:10:45 <#smpctf><[smp]j5_> like Europe (62)
08:10:56 <#smpctf><[smp]j5_> and you get...
08:11:34 <#smpctf><[smp]j5_> when using the first letter of each company
08:11:36 <#smpctf><[smp]j5_> GBAIDBXHDAMFCDDUDNDHMPEAJHIBPDCMBUSU
08:11:38 <#smpctf><[smp]j5_> as your answer.


・Trivia 6
PHPのアドレスが指定されて、「adminでログインしてね(^ω^)」とだけ書かれている。
これはあえて答え書かない+ほとんど同じものを作ってみたので、実際にチャレンジしてみてください。
Challenge this!
ただし、サーバに対するハッキング行為はやめといてください。警察が飛んでいきます ;D
Challenge ID と Flag が見つかれば、クリア。


・Trivia 7

Q: What does the recently popular term "ROS" stand for? 
Hint: This is used for bypassing Data Execution Prevention

IRCのログより。答えは「Return Oriented Shellcode」らしい。
聞いたこともなかった X(

戦略的感想

・人が多ければ多いほどいい。詳しくない人でも力に慣れる問題はあると思う。
・というか、分野が広いので、特化型の方が役に立てる。
IRCなどで流れるヒントには微妙なものも含まれるので、信じ込むのはよくない。
IRCを常にウォッチできる人員がいるとよさそう。ただチャットを楽しむだけの人員。:D
・ただし当然英語なので、ある程度すらすら読める人じゃないとダメ。
・ついでに、主催にガンガン質問やらヒントの要求やらができる人が望ましい。聞くだけならタダ。
IRC係、Expoit係、SQLインジェクション係、バイナリ解析係、ググる係、プログラム書ける人、各一人は欲しい。
・あるいは、プログラムは大抵みんな書けると思うので、いらないかも。
IRC係は2人〜3人で交代しながらやれるとなおよさそう。
・ウィルスは実行するな(笑)

おまけ

FLAG入っている思われるパスワードつき圧縮ファイル(backup)があったのだけど・・・

12:53:43 <#smpctf><Scarecrow> was the backup directory used for anything?
12:53:54 <#smpctf><magikh0e> yeah
12:54:02 <#smpctf><magikh0e> if u cracked it, the password was hahahfuckingcheater!

訳:
Scarecrow: backupは何のために使われてたの?
magikh0e: ああ、もしクラックしたら「このチーターめww」(ずるいやつだなお前はww)っていうパスが出るよ。


この記事書くのに4時間もかかった :D