los : vampire
[코드분석]
<?php
include "./config.php";
login_chk();
dbconnect();
↑DB와 연결을 위한 코드
if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
↑preg_match를 통한 필터링
$_GET[id] = str_replace("admin","",$_GET[id]);
↑str_replace함수 작동
$query = "select id from prob_vampire where id='{$_GET[id]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
↑쿼리실행
$result = @mysql_fetch_array(mysql_query($query));
if($result['id'] == 'admin') solve("vampire");
↑문제의 포인트
[내 풀이]
코드를 보면 preg_mach를 통해 싱글쿼터(')를 필터링하고
GET방식으로 넘겨받은 id입력값이 'admin'인 경우에 문제가 해결된다고 한다.
여기서 중간에 str_replace라는 새로운 함수가 포함된 코드가 있는데
str_replace함수란
str_replace( mixed $search, mixed $replace, mixed $subject )
함수이름처럼 문자열(subject)에 특정단어(search)가 포함되어 있는 부분을 원하는 값(replace)으로 치환한 결과값을 반환해준다.
그럼 이 문제에서는
$_GET[id] = str_replace("admin","",$_GET[id]);
입력받은 값에서 'admin'이라는 단어가 포함되있으면 그 부분은 공백으로 바꾸라는 뜻으로
문제의 포인트가 id='admin'인 걸 생각해보면 입력할 id값으로 직접적으로 'admin'으로 값을 넘겨줄 수 없다는 뜻이다.
생각을 하다가 srt_replace함수가 'admin'이라는 문자열을 찾는건데 대소문자를 구분해서 찾는 거 같아서 혹시나 하는마음에 대문자로 'ADMIN'으로 값을 입력해 보았다.
오 SUCCESS !!
예상치 못햇는데 풀리면 기쁘당 ! ㅎ.ㅎ