Write-Up
해당 문제는 아래의 정규 표현식에 맞춰, val 값을 request하면 해결할 수 있다.
<?php
$pat="/[1-3][a-f]{5}_.*$_SERVER[REMOTE_ADDR].*\tp\ta\ts\ts/";
if(preg_match($pat,$_GET['val'])){
solve(11);
}
else echo("<h2>Wrong</h2>");
echo("<br><br>");
?>
$pat 에 해당 하는 정규표현식 패턴은 아래와 같이 해석될 수 있다.
[x-z] : range를 표현하며 x ~ z 사이의 문자를 의미한다. ( 하이픈(-)은 두 문자 사이의 범위(from - to)를 의미 )
x{n} : 반복을 표현하며 x 문자가 n번 반복됨을 의미한다.
\t : tab 을 표현하며 탭 문자를 의미한다.
. : 모든 문자열(숫자, 한글, 영어, 특수기호, 공백 모두! 단, 줄바꿈X
* : 직전 문자 0번 이상 반복
최종 정답은 아래와 같다.
?val=2abcde_.119.203.7.102.%09p%09a%09s%09s
+plus
?val=2cabcc_.....119.203.7.102.dot%09p%09a%09s%09s
?val=2cabcc_가119.203.7.102.dot%09p%09a%09s%09s
참고
https://codingeverybody.kr/php-preg_match-%ED%95%A8%EC%88%98/
위의 regexr 사이트를 통해 정규 표현식 패턴 일치 여부를 확인해 볼 수 있다.