티스토리 뷰


※ 던전을 클리어하는 과정에서 얻은 힌트를 공유하려고 합니다.

※ 정확한 답을 알려드리지 않습니다. 스스로 해결하시길 권장합니다.



http://los.eagle-jump.org/(클릭)





  문제 분석




<?php 


  
include "./config.php"
  
login_chk(); 
  
dbconnect(); 

  -- DB연결을 위한 코드 ↑--


  if(strlen($_GET[shit])>1) exit("No Hack ~_~"); 
  if(
preg_match('/ |\n|\r|\t/i'$_GET[shit])) exit("HeHe"); 

  -- preg_match를 통한 필터링 ↑--


  $query "select 1234 from{$_GET[shit]}prob_giant where 1"
  echo 
"<hr>query : <strong>{$query}</strong><hr><br>"

  -- 실행 쿼리 ↑--


  $result = @mysql_fetch_array(mysql_query($query)); 
  if(
$result[1234]) solve("giant"); 
  
highlight_file(__FILE__); 

  -- 해결 포인트 ↑--


?>



  해결 과정



필터링 

    \n,\r,\t → 공백을 만드는것을 방지하기 위한 필터링

   strlen( $_GET[shit] ) > 1 → GET값 shit에 들어가는 문자열의 길이가 1을 넘으면 안된다.

       


-  실행 쿼리 

   $query "select 1234 from{$_GET[shit]}prob_giant where 1"

   ㆍ현재 쿼리에서 from과prob_giant가 붙어있어 쿼리 오류를 내고 있다.


-  해결 포인트

   ㆍ if($result[1234]) solve("giant"); 

   ㆍ현재 쿼리를 정상적으로 동작 시키면 문제가 해결될 것 같다.


  현재 쿼리가 query : select 1234 from prob_giant where 1 형식이다. form과 prob_giant가 붙어있기 때문에 쿼리상

  오류를 내고있고 이로 인해 쿼리가 동작하지 않고 있다. 현재 쿼리를 동작 시켜주기위해서는 shit값에 공백에 해당하는

  문자를 넣어줘야하는데 strlen( $_GET[shit] ) > 1 조건이 있어서 까다롭다. 


  공백 필터링을 우회할 수 있는 문자들을 총동원해서 공백 우회를 시도하다보면 문제를 해결할 수 있다.

   

   ㆍ공백우회 문자 -> /**/, %20, %2b, + , %09, %0a, %0b, %0c, %0d, %a0,


  ↑쉬어가기 문제인것 같다.





  giant 중요 포인트



  ㆍSQL query에서 공백 역활을하는 문자를 익혀둔다.

  ㆍBlind SQL Injection을 시도할 때 머리속에 데이터 베이스의 구성을 그릴 수 있어야 한다.

  ㆍBlind SQL Injection을 시도할 때 자동화 코드 구성 해보기


'War Game > [ los ] Lord of the SQL' 카테고리의 다른 글

los : nightmare  (1) 2018.11.11
los : succubus  (1) 2017.10.06
los : bugbear  (0) 2017.06.27
los : darkknight  (0) 2017.06.24
los : golem  (0) 2017.06.23