[WARGAME][los] giant

jckim22·2022년 11월 25일
0

[WEBHACKING] STUDY (WARGAME)

목록 보기
106/114

아래는 서버 코드이다.

<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(strlen($_GET[shit])>1) exit("No Hack ~_~"); 
  if(preg_match('/ |\n|\r|\t/i', $_GET[shit])) exit("HeHe"); 
  $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__); 
?>

이번 문제에서는 아래에 공백을 우회하는 개행문자들을 필터링하고 있다.

그리고 아래를 보면 shit파라미터에 받는 내용이 from prob 사이에 들어간다.
결국 공백을 만들어 쿼리가 참이 되게 해야하는 문제이다.

/**/인 주석을 사용해보았지만 if(strlen($GET[shit])>1) exit("No Hack ~~"); 이것처럼 길이를 체크하고 있어서 실패했다.


아래처럼 +를 사용해보았는데 실패였다.
아마 +는 디코딩 될 때 아예 공백으로 인식이 되어서 그런 것 같다.

그래서 구글링으로 다른 우회 기법을 알아보았다.

한 3가지 정도 더 알 수 있었는데 그 중 수직탭(vertical tab)이라는 것을 발견했다.
우리가 흔히 쓰는 탭은 수평탭인데 여기서는 필터링 되고 있으므로 수직탭을 사용하면 되겠다.

수직탭은 인코딩하면 %0b라고 한다.

글머 페이로드로 아래처럼 %0b를 보내주자.

그럼 성공적으로 solve할 수 있다.

profile
개발/보안

0개의 댓글