반응형
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글자이다.
반응형
'#WarGame > Lord of SQLInjection' 카테고리의 다른 글
Lord of SQLInjection 20번 dragon (0) | 2021.09.23 |
---|---|
Lord of SQLInjection 19번 xavis (0) | 2021.09.18 |
Lord of SQLInjection 16번 succubus (0) | 2021.09.17 |
Lord of SQLInjection 15번 assassin (0) | 2021.09.16 |
Lord of SQLInjection 14번 giant (0) | 2021.09.16 |