DEFCON 21 CTF Qualification writeup

ボーナス問題以外が解けて嬉しかったので調子に乗って書いてみる。
スクリーンショットとか撮ってなかったので文字で書くだけ。

3dub (web-based challenges) 1  – badmedicine –

適当にユーザ名を入れてログインボタンを押すと/welcomeに飛ばされてログイン成功と出るが、keyはadminだけよと言われる。
そこでユーザ名にadminと入れてログインボタンを押すと、adminではログインできませんと出る。

admin以外のユーザ名を入れてログイン成功した場合、Cookieがセットされる。
見てみると、username=xxxxxxxxとなっており、xxxxxxxxの部分には入力したユーザ名の文字数x2文字の文字列が入っており、2文字でユーザ名1文字分に対応していると推測できる。
ユーザ名をいろいろと変えてやってみると、ユーザ名のn文字目とxxxxxxxxの対応する部分の対応ルールは固定であることがわかるので、一度ユーザ名をadminiにしてログインボタンを押した後、Cookieのusernameの部分の後ろ2文字を削って(‘admin’に対応する文字列にして)から/welcomeに移動するとadminでログインしたことになり、keyが表示される。

3dub (web-based challenges) 2  – babysfirst –

適当にusernameとpasswordを入れてログインボタンを押すとログインに失敗する。
レスポンスヘッダを見てみると、X-Sqlというヘッダがあり、SQL文が書いてあった。

X-Sql: select username from users where username='xxx' and password='yyy' limit 1;

はい、というわけでSQLインジェクションですね。
usernameに

' or 1=1;--

などと入れると、rootとしてログインしましたと出るもののkeyは出ない。
ではrootのパスワードにkeyがあるだろうと思いusernameを

' union select password from users where username='root';--

としてみても「残念。それは違う」と出る。
usersテーブルにはもう1レコード(username=user)あったが、そちらのパスワードでもない。
ではusersテーブルの別フィールドか別テーブルにあるだろうと推測。
いろいろ試したところ、DBはSQLite3であることが判明したので、以下のusernameでテーブル構造を取得。

' union select sql from sql_master where type='table' and name='users';--

usernameとpasswordしかフィールドがなかったので、別テーブルを捜索すると、keysというテーブルがあったので、usernameを

' union select value from keys;--

としてkeyを取得。

OMGACM (guerilla programming) 1  – pieceofeight –

指定されたホストにtelnetで接続すると、8パズルの盤面が送られてくる。
送信した文字により盤面が変化する。

  • l – 空きスペースの左の数字が右に移動する
  • r – 空きスペースの右の数字が左に移動する
  • u – 空きスペースの上の数字が下に移動する
  • d – 空きスペースの下の数字が上に移動する

この4文字から成るシーケンスを送って8パズルを解く。
解けると次の問題が送られてくる。
これを繰り返して50問解くとkeyが送られてくるが、時間制限があり、解答に時間がかかると怒られて接続を切断されてしまうので、アルゴリズムのスピード勝負。

A*法で解くプログラムを自作しようかと一時は思ったが、自分の場合ひどく時間がかかることが予見されたので、ぐぐって出てきたこちらのサイトにあるコードを使わせてもらった。
出てきた問題をひたすら解かせて50問解いてkeyを取得。

OMGACM (guerilla programming) 5

hack the planet!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください