LOS(The Lord of the SQLI) 14 - GIANT

2021. 1. 17. 18:56정보보안/웹 해킹

14번 문제 GIANT

 

14번 문제인 GIANT이다.

이 문제는 앞서 풀었던 문제랑 달라보인다.

우선 코드를 확인해보자.

 

 

if(strlen($_GET[shit])>1)
if(preg_match('/ |\n|\r|\t/i', $_GET[shit])) 

 

$_GET[shit] 을통 해 받은 shit 파라미터의 길이가 1보다 클 경우 No Hack ~_~ 을 출력하며 종료하고,

\n,(rogod) \r(캐리지 리턴), \t(수평탭) 를 사용하지 못하게 하고 있다.

 

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

쿼리를 확인해보면, shit 파라미터를 받으며, 이 파라미터는 테이블쪽에 관련되있는것 같다.

 

확인해보니 select 1234 fromprob_giant where 1이며

from과 prob_giant 사이에 공백이 없어 쿼리를 제대로 인식하지 못하고 있는걸로 보이며

이를 해결하면 문제를 해결 할 수 있을거라고 생각했다.

 

공백을 대체할 수 있는게 무엇이 있을까 ?

 

일반적으로 사용하는 방법으로는

1) \n → Line Feed

2) \r → Carrage Return

3) \t → Tab

4) /**/ →

5) () → 괄호 등이 있는데 현재 strlen 함수를 통해 한자리만 입력을 할 수 있다.

 

그렇다면 아스키코드표를 살펴보자.

 

 

하늘색으로 표시되어 있는것이 공백 문자로 총 6개가 존재한다.

이 중 필터링이 안되어있는 0x0b, 0x0c를 이용해 문제를 해결할 수 있다.