LOS - goblin 해설

2020. 3. 21. 02:19문제연습/LordOfSql(LOS)

반응형

 

티스토리 블로그는 PC 환경에 최적화되어 있습니다.

모바일 유저분들은 아래 네이버 블로그를 이용해 주세요.

 

 

LOS - goblin 해설

네이버 블로그는 모바일 환경에 최적화되어 있습니다.PC 유저분들은 아래 티스토리 블로그를 이용해 주세...

blog.naver.com

 

안녕하세요, ICMP입니다.

저번 문제에 이어서 goblin 문제를 풀어보도록 하겠습니다.

 

1. 문제 내용

인젝션 기법을 이용해 로그인을 성공해야 합니다.

 

2. 문제 해설

일단 코드를 확인해 보도록 하겠습니다.

<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~"); 
  if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~"); 
  $query = "select id from prob_goblin where id='guest' and no={$_GET[no]}"; 
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; 
  if($result['id'] == 'admin') solve("goblin");
  highlight_file(__FILE__); 
?>

저번 문제와 차이점을 알아보도록 하겠습니다.

 

  if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~"); 
  if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~"); 

no 값 입력 시 문자 필터가 바꿨네요.

', ", `, 등 문자 처리를 위한 기호가 모두 막혔습니다.

 

  if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; 
  if($result['id'] == 'admin') solve("goblin");

흠, no 값만 GET 함수로 입력을 받는데 id가 admin으로 인식해야 합니다.

 

그러나 문자 필터링 때문에 기존의 방식은 사용이 불가능합니다.

흠, 문제의 핵심은 id를 admin으로 설정함과 동시에 문자열임을 나타내는 ''와 같은 기호의 필터를 우회하는 것이라고 볼 수 있겠습니다.

 

찾아보던 중 char 함수를 이용하는 방식이 있었습니다.

char : 인자로 아스키코드값이 들어가며 아스키코드에 매칭되는 문자를 리턴합니다.

 

현재는 no에 어떤 값이 매칭되어야 하는지에 대한 단서가 없으므로 no 값에 상관없이 쿼리문에 들어가는 id를 admin으로 인식되로록 하겠습니다.

 

char 함수를 이용하면 굳이 따옴표 기호를 사용할 필요가 없고 admin이라는 글자를 아스키코드값으로 넘겨주면 자동적으로 문자열이 됩니다.

이렇게 인젝션을 해주면 우리가 원하는 결과를 얻을 수 있습니다.

 

주소창 뒤에? no=0% 20or% 20id=char(97,100,109,105,110)을 연결해서 적으시면 됩니다.

(단, no=1은 guest로 인식하기 때문에 no에는 1을 제외한 어떠한 값도 넣을 수 있습니다.)

 

이번 문제는 id 문자 필터링 우회가 핵심입니다.

다양한 풀이가 있으니 꼭 한번 찾아보시길 바랍니다.

다음 시간에는 orc 문제 풀이를 진행할 것이므로 반드시 스스로 한번 풀어 보세요.

이상, ICMP였습니다!!!

반응형

'문제연습 > LordOfSql(LOS)' 카테고리의 다른 글

LOS - cobolt 해설  (0) 2020.03.17
LOS - gremlin 해설  (0) 2020.03.16