Gae Ko's Blog

los : giant 본문

웹해킹 /[los] Lord of SQL

los : giant

Gae Ko 2017. 8. 17. 15:32

[코드분석]


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

↑DB와 연결을 위한 코드


  if(strlen($_GET[shit])>1) exit("No Hack ~_~"); 

↑strlen함수를 통한 문자열 길이 제한 


  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"); 

↑문제의 포인트



[내 풀이]


코드를 보면 strlen함수를 통해 shit의 입력값의 문자열길이를 한자리로 제한하고

공백, \n, \t, \r을 포함한 입력값을 필터링하여 공백과 공백대신 할 문자열들을 막고있다.

그리고 쿼리실행문을 보면 select 1234 from{$_GET[shit]}prob_giant where 1 이렇게 from과 prob_giant가 붙어져있어서 쿼리실행이 안되고 있다.

이 문제를 해결해서 쿼리를 실행하면 문제가 풀린다고 한다.


공백을 대체하면서 한 글자인 문자열이 무엇인지 계속 생각하고 찾아보았지만 나오지 않는다....


결국 문제 힌트를 보았다...ㅠ


힌트 1. 현재 쿼리를 실행하기위해서 shit값에 공백에 해당하는 문자를 넣어줘야함

힌트 2.  strlen($_GET[shit])>1 조건에 만족해야함


음... 힌트들이 이미 내가 알고 있는 사실들인데 

내가 알고 있는 공백을 대신할 문자열로 /**/  와 %09, %0b, %0c, %0d, %0a 이 있다.


URL- encoding 

  Description 

%0b 

  virtical tab 로 이스케이프 문자로는 \v 

%0c 

  form feed 로 서식 제어 문자

%0d 

  carriage return 로 제어문자로 

  커서를 현재행의 맨 좌측으로 옮기기, \r 을 가리킨다

%0a 

  line feed 로 제어문자로 

  커서를 현재 행의 다음 행으로 옮기기, \n 를 가리킨다

%09 

  Tab 로 이스케이프 문자로는 \t


아하.... 하나하나 찾아보니 드디어 알거 같다!

preg_match를 통해 \n, \t, \r 이 포함된 입력값을 필터링해주는데 

공백을 대신할 수 있는 표에 있는 문자열중에서 필터링되는 것을 제외하면 %0b, %0c 

주석표시인 /**/은 문자열길이가 1보다 크므로 탈락! 


그래서 가능하다고 생각되는 %0b와 %0c 를 하나하나 넣어보았다.



▲ 제어문자라고해서 출력되는게 없는 줄 알았는데 이상한 문자가 출력되었다. 이건 뭐지.... 하지만 그래도 SUCCESS !!


▲ %0c는 프린트기기에서 다음페이지로 넘어가게 하는 서식 제어문자로 출력되는 값이 없이 공백을 대신한다. SUCCESS !!



[p.s]

문자열의 길이가 1보다 크면 안된다고 하는데 %0c 와 %0b는 길이 인식을 어떻게 하길래.... 흠 

그리구 %0b은 virtical Tab 이라길래 출력값이 없을 줄 알았는데 왜 출력값이 나오는걸까...? 

민지언니에게 물어봐야징

 

[물어본 결과]



'웹해킹 > [los] Lord of SQL' 카테고리의 다른 글

los:zombie_assassin  (0) 2017.09.03
los : assassin  (0) 2017.08.26
los : bugbear  (0) 2017.08.17
los : darkknight  (0) 2017.08.17
los : golem  (0) 2017.08.17