728x90
<?php
  include "./config.php";
  login_chk();
  $db = sqlite_open("./db/manticore.db");
  $_GET['id'] = addslashes($_GET['id']);
  $_GET['pw'] = addslashes($_GET['pw']);
  $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("manticore");
  highlight_file(__FILE__);
?>

이번에도 SQLite DB우회 문제이다.

시작부터 addslashes로 ',",\,NUL에 대하여 앞에\를 붙이는 이스케이프 처리한다.

MySQL에선 addslash를 우회가 어렵지만 SQLite에선 앞에 \를 붙인다고 '가 이스케이프 처리되지 않는다.

만약 id='\'라면 id가 \가 되는 것이다.

참고로 문자열 안에서 '를 이스케이프 처리하려면 \'가 아닌 ''(따옴표 2개)으로 사용한다.

답: ?id=' or id=char(97,100,109,105,110) --

입력하면 id='\' or id='admin' -- 이 된다.

id가 \인 id는 없어서 무시, SQLite에선 0x61646d696e가 안 통해서 char(97,100,109,105,110)으로 대체, 마지막 한 줄 주석을 사용하였다.

728x90

'Lord of SQL Injection' 카테고리의 다른 글

poltergeist  (0) 2023.01.05
banshee  (0) 2023.01.05
chupacabra  (0) 2023.01.05
cyclops  (0) 2023.01.04
godzilla  (0) 2023.01.04

+ Recent posts