본문 바로가기

#WarGame/Lord of SQLInjection

Lord of SQLInjection 18번 nightmare

반응형

https://los.rubiya.kr/

 

Lord of SQLInjection

 

los.rubiya.kr

 

 

Lord of SQLInjection 18번 nightmare

 

 

if(preg_match('/prob|_|\.|\(\)|#|-/i', $_GET[pw])) exit("No Hack ~_~"); 

 

필터링

1) prob

2) _

3) .

4) ()

5) #

6) -


if(strlen($_GET[pw])>6) exit("No Hack ~_~"); 

pw 문자열을 6글자로 제한이 되어있다.

 

query : select id from prob_nightmare where pw=('') and id!='admin'

쿼리를 보면 pw는 ('')로 묶여 있다.

 

MySQL Automatic type cast 즉, 자동형변환 특성에 따라 문자열과 숫자와 비교하면 문자열은 자동으로 0으로 변환된다.

pw=('')=0 이렇게 입력을 하게 되면 pw=0=0 으로 true가 된다.

 

 

뒤에 and 구문을 주석처리하기 위해 우회방법에는 ;%00 이 있다. 

;는 첫번재 쿼리를 끝내고 두번째 쿼리를 적기 위해 쓰는 문자열이고 %00은 Null문자이다.

;%00을 쓰게 되면 첫번째 쿼리가 끝나고 두번째 쿼리가 Null문자로 인식이 되어 자동 주석처리가 된다.

 

 

 

--> php?pw=%27)=;%00

 

pw=')=0;%00

pw는 정확히 6글자이다.

 

 

 

 

반응형