김승현
[Lord Of SQLInjection] vampire 9번 문제 write up 본문
문제는 이렇게 생겼다. 한 줄 한 줄씩 분석해보자.
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
$_GET[id] = strtolower($_GET[id]);
첫 번째 줄은 ./config.php를 포함한다는 내용입니다.
두 번째 줄은 로그인을 했는지 체크하는 내용입니다.
세 번째 줄은 db를 연결합니다.
네 번째 줄은 id에서 대소문자 구분 없이'(작은 따옴표)를 필터링하는 내용입니다.
그러난 후 id의 내용들을 소문자로 바꿉니다.
$_GET[id] = str_replace("admin","",$_GET[id]);
$query = "select id from prob_vampire where id='{$_GET[id]}'";
첫 번째 줄은 id의 내용에 admin이 포함된다면 공백으로 치환하는 내용입니다.
두 번째 줄은 $query에 select id from prob_vampire where id='{$_GET[id]}' 내용을 저장하는 내용입니다.
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("vampire");
highlight_file(__FILE__);
query : {$query}의 내용을 강조해서 출력합니다.
$result에 db를 연겨랗고 query의 내용을 저장합니다.
만약 $result['id']의 내용이 admin이면 vampire 문제가 solve 됩니다.
id를 admin으로 입력해서 쿼리문을 작성하면 되지만
$_GET[id] = str_replace("admin","",$_GET[id]);
아래의 코드에서 admin을 지워버립니다. 그러나 이렇게 공백치환으로 admin 입력을 막는 경우
admadminin과 같이 작성하면 admadminin처럼 중간의 admin이 사라지면서 admin이 저장됩니다.
(aadmindmin이나 adadminmin이나 admiadminm도 가능합니다!)
<입력한 내용>
?pw=adadminmin
'Web > Lord Of Sql' 카테고리의 다른 글
[Lord Of SQLInjection] golem 11번 문제 write up (0) | 2023.03.22 |
---|---|
[Lord Of SQLInjection] skeleton 10번 문제 write up (0) | 2023.03.18 |
[Lord Of SQLInjection] troll 8번 문제 write up (0) | 2023.03.14 |
[Lord Of SQLInjection] orge 7번 문제 write up (0) | 2023.03.14 |
[Lord Of SQLInjection] darkelf 6번 문제 write up (0) | 2023.03.12 |