本日、 TDUCTF 2015 に参加してきました!運営の皆様、ありがとうございました!
個人戦で、結果は上の画像の通り 13 位でした。
まずは、出題された問題一覧です。
全部で 39 問ありますね。 4 時間なのにめっちゃありますねw
以下、淡々と解いた問題の writeup です。解いた順番ではなく(覚えていない)、問題一覧の順序です。
練習問題 (Example, 39 Points)
見れば分かるあれです。
Flag: TDU{SAKURAInternet}
clock (Misc, 150 Points)
下の Wikipedia のリンクの時計が写った写真がダウンロードできます。撮影日時が 2015/01/02 11:35 です。 JST で答えなきゃいけないっぽく、撮影場所がロンドンらしいのでプラス 9 時間の 20:35 が答えでしょう。
Shepherd Gate Clock – Wikipedia, the free encyclopedia
Flag: TDU{2015_01_02_20_35}
XSS me (Misc, 100 Points)
そういえば、なぜかメニューバーからデベロッパーツールが出せるなーと思いました。そこに alert(1) と入れてアラートを出せばフラグが出ます。
Flag: TDU{Electron_CTF_Frontend_is_Cool_ya?}
ESPer (ESP, 10 Points)
なんか最近はやっているらしいので、「友利奈緒」でしょう。
Flag: TDU{友利奈緒}
Lucky 7 (Network, 200 Points)
接続すると、 Challenge! とかいう文字列に続いて、 12345678 != 77777777 のような文字列が出てきます。 Lucky 7 なので、最初は当たるまで待つ問題かと思ったのですが、そんなはずはなく。途中でパケットを見ろというヒントが出て分かりました。どうやら、不等号の左辺は 3-way handshake の最後の ack のシーケンス番号のようです。ということで、そこが 77777777 になるように、 3-way handshake をしてフラグゲットです。フラグは忘れましたが、解答に使ったプログラムを載せておきます。
# -*- coding: utf-8 -*- import random from scapy.all import * def main(): port = random.randint(50000, 60000) seq = 77777776 ip = IP(dst = '172.16.13.5') tcp = TCP(sport = port, dport = 7777, flags = 'S', seq = seq) rev = sr1(ip/tcp) seq = seq + 1 ack = rev.seq + 1 tcp = TCP(sport = port, dport = 7777, flags = 'A', seq = seq, ack = ack) rev = sr1(ip/tcp) if __name__ == '__main__': main()
TDUCTF運営からのフラグを盗め (Network, 400 Points)
この問題は途中までのポイントしか得ていません。メールのやりとりが含まれた pcap がダウンロードできます。なので、普通に中身を見ると、 flag.zip とかいう添付ファイルが 2 つあるので、それを解凍しようとしますが、パスワードがかかっています。 1 つ目のパスワードは、やりとりされているメールの中から分かりますが、 2 つ目がわかりません。 1 つ目と同じファイルが含まれてそうだったので、既知平文攻撃を試みましたが、なぜかダメでした。なお、 1 つ目が分かったところで途中ポイントです。
Flag: TDU{I_KNOW_CREAR_TEXT_IS_NOT_SECURE}
おわり? (Crypto, 100 Points)
以下の画像が手に入ります。
僕はこれの解き方を知っていたので、途中の S 以外はすぐに分かりました。 S は B なのか L なのかと試したあとに分かりました。色を英語にして、その何文字目かって事ですね。例えば、 2 文字目は紫で purple で、それの 2 文字目なので U ですね。一応、フラグは書かないでおきますw
Lie (Web, 100 Points)
アクセスするとクッキーの画像が出てくるので、 Cookie にある isPro=False を True にすればフラグが出てきます。フラグは忘れました。
14:50 (Misc, 200 Points)
14 時 50 分に突然、さくらインターネットさんのプロモーション動画のようなものが流れてきたのですが、そこの動画中にフラグが表示されました。また、途中で YouTube のすかしが出てたので、あとで見るときのために URL を覚えておこうと思ってアクセスしたら、説明欄にもフラグがありました。
Flag: TDU{試される大地}
Flag: TDU{説明にもフラグが}
SQL Practice (Web, 300 Points)
確か以下のスクリプトだったと思いますが、それで作られたデータベースがあるので、 SQL 書いてそこからフラグを見つけてくださいってことでした。 select * from tweets where text like ‘%TDU{%’ って感じでいけたと思います。フラグは忘れました。
自分のツイートをcsvからsqlite3なdbに引っ張ってくるスクリプト(汚い)
nullflood (Misc, 100 Points)
めっちゃスパースなファイルが渡されるのですが、その 0 の所々におおよそ 1 文字ずつフラグが入っているので、 strings で取り出します。僕が試したときは、最低文字列長 -n 1 を指定しないと出てきませんでした。
Flag: TDU{Strings_is_useful}
以上です。