본문 바로가기

wargame/los.eagle-jump.org

vampire

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

문제 이름 : 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 이런식으로.

 

하지만 출제자가 의도한것은 아니였다.

 

문제를 푸는방법은 여러가지가 있지만 출제자의 의도도 파악하는것도 좋을거같다.

 

 

'wargame > los.eagle-jump.org' 카테고리의 다른 글

golem  (0) 2017.07.05
skeleton  (0) 2017.07.05
troll  (0) 2017.07.05
orge  (0) 2017.07.03
darkelf  (1) 2017.07.03