본문 바로가기

웹/LOS

LOS # giant

728x90
반응형
SMALL

쿼리문!

query : select 1234 fromprob_giant where 1

 

코드를 분석해보자.


<?php 
  
include "./config.php"
  
login_chk(); 
  
$db dbconnect(); 
  if(
strlen($_GET[shit])>1) exit("No Hack ~_~"); 

//문자열의 길이를 구하는 함수 strlen()을 사용하고 있다.

$_GET[shit]에 입력되는 문자열의 길이가 1을 넘으면 안된다는 이야기인 것 같다.

 

 

<strlen()>

: 문자열의 길이를 구하는 함수

 

사용 형식

: strlen(string)

 


  if(
preg_match('/ |\n|\r|\t/i'$_GET[shit])) exit("HeHe"); 

//역시나 필터링되고 있는 문자열들이 꽤 있다.

$_GET[shit] -> \n, \r, \t


  
$query "select 1234 from{$_GET[shit]}prob_giant where 1"
  echo 
"<hr>query : <strong>{$query}</strong><hr><br>"
  
$result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if(
$result[1234]) solve("giant"); 

//문제의 해결 조건이다.

이 쿼리를 정상적으로 동작시켜주면 문제가 해결될 것 같다!


  
highlight_file(__FILE__); 
?>

 

이제 문제를 어떻게 풀어야 할지 생각해보자.

쿼리문을 다시 봤는데 조금 이상하다...

 

fromprob

이렇게 띄어쓰기가 되지 않고 붙어있다.

이거를 띄어쓰기해 줘야 할 것 같은 느낌인데...

 

아까 preg_match를 기억해내보자.

분명 공백을 필터링해주고 있었다.

 

공백을 우회해주면서도, strlen의 조건을 만족시켜줘야 한다.

공백 우회 문자에는 여러 가지가 있다.

-> 주석 : /**/

line feed : %0a, %0b, %0c

tab : %09

 

 

 

 

이것저것 해보다가

shit에 %0c를 입력해주니 바로 문제가 해결되었따!

 

728x90
LIST

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

LOS # assassin  (0) 2021.03.31
LOS # bugbear  (0) 2021.03.28
LOS # darknight  (0) 2021.03.16
LOS # golem  (0) 2021.03.14
LOS # skeleton  (0) 2021.03.13