본문 바로가기

wargame/LOS

[LOS]14번 GIANT

GIANT



14번 문제

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

  if(strlen($_GET[shit])>1) exit("No Hack ~_~"); 
  // $_GET[shit]의 길이가 1보다 크면 안 됨
  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"; 
  // prob_giant 테이블에서 레코드 하나를 1234로 select하는 쿼리
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysql_fetch_array(mysql_query($query)); 

  if($result[1234]) solve("giant"); 
  // 쿼리를 실행한 결과가 존재하면 문제 해결
  highlight_file(__FILE__); 
?>


이전의 형식과 다른 형식의 문제다!

문제를 살펴보니 from과 prob_giant 사이에 공백없이 $_GET[shit]이 있어 쿼리가 제대로 실행되지 않는게 문제인 것 같다.

따라서 우리는 $_GET[shit]안에 공백을 넣어주면 된다.

%0a를 넣어봤다.

%0a는 \n이므로 실패. \t인 %09나 \r인 %0d도 실패할 것이다

/**/을 넣어봤다.

한 글자 이상이므로 실패

%0c (vertical tab)를 넣어봤다.

성공!

마찬가지로 %0b(form feed)도 성공한다.


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

[LOS]16번 ZOMBIE ASSASSIN  (0) 2019.08.09
[LOS]15번 ASSASSIN  (0) 2019.08.09
[LOS]13번 BUGBEAR  (0) 2019.08.06
[LOS]12번 DARKNIGHT  (0) 2019.08.02
[LOS]11번 GOLEM  (0) 2019.07.24