Wargame/web
Lord of SQL Injection#5 wolfman | White Space filtering
수잉
2021. 1. 15. 11:06
preg_match라는 함수가 낯설다.
preg_match('/대조할 문자/', '입력한 문자', $matches); 구조이며
- 대조할 문자 : 찾거나 필터링하고 싶은 문자열 ( 특수문자일때는 앞에 \ 붙이기)
- 입력한 문자 : 사용자가 어떤방식이든 입력 받아 담은 특정 변수
- $matches : 대조할 문자 == 입력한 문자 일때 그 문자는 배열형태로 $matches에 저장
( 출처 : https://flash-ctf.tistory.com/43 )
이를 활용해 해석해보면
pw에 공백이 존재하면 안된다.
(이때 / 뒤에 붙은 i는 대소문자를 구분하지 않는다는 의미이다.)
그리고 마지막에 있는 if문을 보면
pw와 무관하게 id가 admin 일 때 문제가 풀리는 것을 확인 할 수 있다.
id가 admin이기만 하면 되는 거니까 따로 pw파라미터를 구할 필요는 없다.
그런데 내가 입력을 하는 값은 pw의 값이므로 공백이 들어가면 안되는 것을 주의해야 한다 !
주소 뒤에 입력을 할 때
?pw=' or id='admin 이나?pw='||id='admin 을 입력하게 될텐데
첫번째처럼 or 을 쓰는 경우는 or 양쪽에 공백인 %20 가 들어가야하고,
이에 따라 No whitespace ~_~ 문구가 출력된다.
%20을 %0a, %0b, %0c, %0d, %09로 변경해 우회시켜주면된다.
%20을 %0a로 변경시켜주었다.
두번째처럼 || 을 쓰는 경우는 공백이 필요하지 않으니 바로 성공한다.