2013年11月17日日曜日

CSCamp CTF 2013 Writeup

Web50
問題画面


UsernameとPasswordを入力しsubmitすると、
username and password didn't match というメッセージが出た。

素直にSQLインジェクションを試したが、どれもだめだった


ここを参考に
http://d.hatena.ne.jp/unau/20070719/1186888448

POSTのリクエストを送るときに

username=admin&password[]=a

としたらログインできてflagが出てきた。
Flag: First_ONE_Simple___Right!




Web150


問題画面

入力フォームが1つとボタンが1つ
入力フォームの名前は更新するたびに変わっていた。

cookieのchallengeというところの値が 6505+-+4669これもアクセスするたびに変わっていた
パターンが2つあり
真ん中の-が%2bになることもあった。

試しに 6505-4669を計算したものをsubmitしたところ 遅いぞ!というようなものが出たのでプログラムを書いてsubmitすることにした

プログラムの流れだけ
・サイトにアクセス
・cookieを取ってきて計算する
・HTMLの中から入力フォームの名前を抜き出す
・POSTで送りつける

すると
<div class="alert alert-success">dear bot,<br> here`s your prize 13f611185d0197a63c6c8ee72e114bd2</div>

flag:13f611185d0197a63c6c8ee72e114bd2




Web200

スクショを忘れてしまいました。

問題のタイトルは Javascriptが何とか何とかって感じだったかな?

画面は入力フォーム1つとsubmitボタン1つ

ソースを見ると 難読化された?javascriptがあり 適当なものをsubmitすると you are noob!! とでた

とりあえずIEの動的スクリプトを見たら

function Oo0o(x, i) {
 o = "";
 i == 1 ? (o = atob(x)) : (o = btoa(x));
 return o;
}

function Oo0O() {
 var z = Oo0o("TW96aWxsYS81LjAgKExpbnV4OyBVOyBBbmRyb2lkIDIuMy4zOyBlbi11czsgSFRDX0Rlc2lyZVNfUzUxMGUgQnVpbGQvR1JJNDApIEFwcGxlV2ViS2l0LzUzMy4xIChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgTW9iaWxl", 1);
 var t = 0;
 var OO = 0;
 var str = document.frm1.code.value;
 if (navigator.userAgent == z) {
  z = z.split(";");
  z = (z[2]);
  z = "xoOoO" + z + "oOOoO";
  z = z.substring(5, z.length - 5);
  for (i = 1; i < z.length; i++) t = t + (z.charCodeAt(i) * i);
  for (k = 0; k < str.length; k++) OO += (str.charCodeAt(k) * k);
  OO = OO / 4;
  if ((t ^ OO) == 31341) {
   document.location = "/post_key?pass=" + str + "&u=" + Oo0o(navigator.userAgent);
  } else {
   alert('Inavlid Key');
   return false;
  }
 } else {
  alert("you are noob!!");
  return false
 }
}


if (navigator.userAgent == z)
この部分を通すためにzの値を調べた

zの値は
Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile

ユーザーエージェントを変えて 適当に入力すると alert文がInavlid Keyに変わった。

後はif ((t ^ OO) == 31341)になるように総当りしていたら、
入力値aaayaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazkのときに条件をクリアしflagが出た

Flag: "JavaScript__IS_CO00OOool__^_^"