ForbiddenBITS CTF 2013 Writeups
最初の24時間だけ参加しておりました。
眠いので2,3問だけWriteup書いておきます。
X96
TELNETで指定されたIPとポートに接続すると、認証コードが表示され、それをエコーしろと言ってきます。
エコーすると、ゲームが始まります。
ゲームの内容は、全く意味が分かりません。
よく分からない12バイトのデータがランダムに送られてきて、こちらに答えの入力を求めてきます。
この一見するとよく分からない12バイトの文字には、ある規則性があります。
まず、4文字ごとに区切ります。
aaaabbbbcccc
次に、文字のアスキーコードa[0]とb[0]とc[0]を見てみると、次の関係が成り立っています。
b[0] - a[0] = c[0] - b[0]
この関係が、a[1]〜a[3]も同様に成り立っています。
よって、答えは、次のようなコードで求まります。
# split received data iti = recv_data[0,4] nii = recv_data[4,4] san = recv_data[8,4] # calculate each differences d1 = san[0].bytes.to_a[0] - nii[0].bytes.to_a[0] d2 = san[1].bytes.to_a[0] - nii[1].bytes.to_a[0] d3 = san[2].bytes.to_a[0] - nii[2].bytes.to_a[0] d4 = san[3].bytes.to_a[0] - nii[3].bytes.to_a[0] # then get the answer kotae = (san[0].bytes.to_a[0]+d1).chr kotae += (san[1].bytes.to_a[0]+d2).chr kotae += (san[2].bytes.to_a[0]+d3).chr kotae += (san[3].bytes.to_a[0]+d4).chr
10回連続で答えると、フラッグが手に入ります。
rendezvous
パケットファイルが渡されるので、そこからフラッグを探せというもの。
Web通信以外に、何やらあからさまに怪しい通信が見つかります。
これだけでは、まだ、何なのか分かりません。
そこで、もう少し探ってみると、怪しい実行ファイルが見つかります。
このパケットを元に、Chat.exeをダウンロードしようとしてみると、Chat.exeが手に入ります。
試しに起動してみると、どうやら1対1のチャットプログラムのようです。
試しにサーバを立て、そこにクライアントで接続し、パケットをとってみると、
まさに最初に見つけたようなパケットが送受信されていることが分かります。
いろいろ試行錯誤した結果、次のことが分かります。
・ /(スラッシュ)で値が区切られている。(c[0] = a, c[1] = b,...) ・ 最後の数字はキー(鍵)(key = c[c.length-1] ) ・ 最後の数字以外の数字を、後ろから1,2,3,とインデックスをつけると、インデックス xor キー xor 値で復号化できる。
例えば、"102/100/13" なら、((102 ^ 2 ^ 13).chr + (100 ^ 1 ^ 13).chr).reverse!となる。
後は、この規則にそって最初のパケットを復号化すると、フラッグが手に入る。