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!となる。
後は、この規則にそって最初のパケットを復号化すると、フラッグが手に入る。

Crunch

眠すぎるので、ざっくりとだけ。

  1. 色域指定選択して、どちらかの領域を削除。(GIMPなどでできる。選択時に、閾値を0にしておく。)
  2. QRコードが現れるので、開く。
  3. 16進がずらーーーっと書かれたページが開かれる。
  4. バイナリデータに戻す。
  5. 戻したバイナリデータに対して、xortoolを使うと、画像が出現。(キーはfbbits)
  6. 画像にフラッグが載っている。