[Lord of SQLInjection]giant write up

zzsla·2023년 6월 18일
0

문제 정보

없다.

문제

문제에 들어가면 위에 query와 sql명령문이 적혀있고 아래 코드가 나와 있다.

분석

get으로 요청된 shit 값 길이가 1보다 크면 프로그램이 죽는다. 또 shit 값에 , \n, \r, \t가 들어가도 죽는다. 즉 이 부분이 필터링 부분이다.

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

그 다음 query가 나오는데 sql명령문이다.
명령문은 1234를 찾는데 prob_giant라는 테이블에 있고, 항상 참이다.

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

그리고 1234의 결과값이 있으면 문제가 풀린다.

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

취약점

query를 잘 보면 from과 prob_giant가 붙어있는 것을 볼 수 있다. 즉 필터링을 잘 우회해서 그 사이를 빈 공간스페이스( ) 즉 공백을 만들어야 한다.

익스플로잇

필터링된 공백문자를 보면 스페이스( ), 줄바꿈 line feed(\n), 캐리지 리턴 Carriage Return(\r), 탭 tab(\t)이 필터링 되어 있다. 하지만 이것 외 공백문자 필터링을 우회하는 방법이 있다.

수직 탭 vertical tab(\v)이나 폼피드 form feed(\f)를 사용하면 문제를 풀 수 있다.
/?shit=%0b

profile
[README]newbi security hacker :p

0개의 댓글