문제 이름 : vampire
소스코드
1
2
3
4
5
6
7
8
9
10
11
12 |
<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
$_GET[id] = str_replace("admin","",$_GET[id]);
$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");
highlight_file(__FILE__);
?> |
cs |
위 문제의 클리어 조건은 id를 admin으로 인식시키면 클리어가 된다.
먼저 코드를 보면 str_replace 라는 함수가 등장하였다.
이함수는 문자열에서 특정문자를 발견하게되면 원하는값으로 변경해주는 함수이다.
예를들면
$a = "abcd" ;
str_replace("a","xx",$a);
코드가있다면 $a변수에 a라는 문자 혹은 문자열이 포함되있따면 그 a자리를 xx로 바꿔주는 함수이다.
출력하게되면 xxbcd 이런식으로 출력되게될것이다.
이문제도 이런식으로 풀어보자
admin이라는 문자열이 있다면 "" 그냥 지워버린다고 보면된다.
이문제는 생각을 많이했던것같다.
처음에는 str_replace함수에 어떤 널바이트 같은 취약점같은것이 있을줄 알았으나 아니였다.
잔머리를 이용해서푸는문제였다.
admin을 만나면 없애버리니 adadminmin 으로 입력하면 어떨까?
admin은 지워지고 뒤에 두개 admin이 붙어서 admin으로 인식하게될거다.
----------------------------------------------------------------------------------------------------------------
본인같은경우는 처음에 위방법처럼 푼게아니였다 바로 이전문제도 마찬가지다.
본인은 admin 사이에 \를 넣어서 풀었따 ad\min 이런식으로.
하지만 출제자가 의도한것은 아니였다.
문제를 푸는방법은 여러가지가 있지만 출제자의 의도도 파악하는것도 좋을거같다.