소스보기를 통해 소스코드를 분석해보겠습니다.
$pat="/[1-3][a-f]{5}_.*$_SERVER[REMOTE_ADDR].*\tp\ta\ts\ts/";
if(preg_match($pat,$_GET['val'])){
solve(11);
}
첫줄부터 하나씩 분석해보면
[1-3] = 1부터 3까지의 임의의 숫자 1개
[a-f]{5}_ = 'a' 부터 'f'까지의 문자중 임의의 문자 1개를 5번 반복 후 '_'문자 표시
. = 임의의 문자 1개
* = 임의의 여러 문자
$_SERVER[REMOTE_ADDR] = 클라이언트 IP추출
\t = tab 표시
위 분석을 토대로 정규식을 만들어보면 아래와 같이 만들 수 있습니다.
"1aaaaa_k[공인IP]k%09p%09a%09s%09s"
URL에 tab을 표시할 방법이 없어서 '\t'를 %09로 URL인코딩하여 표현하였습니다.
preg_match(a, b)는 b에서 a패턴에 매치되는지 검사하는 함수입니다.
위에서 만든 정규식에 매치되는 문자열을 URL에 입력하면 아래와 같이 해결할 수 있습니다.