LOS #08 troll

2020. 10. 28. 22:53
728x90
728x90
728x90
 

Lord of SQLInjection

 

los.rubiya.kr

Source code

<?php  
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
  if(preg_match("/admin/", $_GET[id])) exit("HeHe");
  $query = "select id from prob_troll 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("troll");
  highlight_file(__FILE__);
?>

 

Query

select id from prob_troll where id=''

 

Write-up

[사진 1]

위 사진에서 확인할 수 있는 정보는 다음과 같다.

  • 파라미터는 id 1개가 사용될 수 있다.

  • id 값에 single quote 필터링을 하고 있다.

  • "admin" id 값을 요구하고 있다.

  • 쿼리문에 single quote가 고정되어 있고 입력한 id 값이 그 안에 전달된다.

single quote 필터링을 하고 있고, 쿼리문에서 id 값을 single quote로 감싸고 있기 때문에 single quote를 우회하기 어렵다. 그런데, 두 버째 preg_match() 함수를 보면 "/i" 옵션이 없다. "/i" 옵션은 대소문자를 구분하는 옵션인데, 소문자 "admin" 값만 필터링하고 있다. mysql에서는 대소문자 구문을 하지 않기 때문에 "ADMIN" 대문자 값을 전달하면 된다.

 

Parameter

id=ADMIN

쿼리문은 다음과 같다.

select id from prob_troll where id='ADMIN'

 

Success

[사진 2]

728x90
728x90

'Wargame > LOS' 카테고리의 다른 글

LOS #10 skeleton  (0) 2020.10.28
LOS #09 vampire  (0) 2020.10.28
LOS #07 orge  (0) 2020.10.28
LOS #06 darkelf  (0) 2020.10.28
LOS #05 wolfman  (0) 2020.10.28

+ Recent posts