1. 문제 설명
먼저 문제를 클릭해보자.
문제를 클릭하니 다음과 같은 Wrong이라는 문구와 view-source가 있다.
역시 아무런 정보가 없으니 view-source를 클릭해보자.
다른 코드들은 볼 필요 없이 위의 PHP 소스코드를 분석해보자.
먼저 $pat이라는 변수에 어떤 패턴을 저장하였다.
따라서 첫 번째 pat이라는 변수에 저장되어 있는 패턴을 분석해야 한다.
그 후 preg_match 함수를 이용해 앞에서 정의한 패턴을 기반으로 regex를 수행한다.
perg_match에 대한 설명은 여기에 있다. (클릭)
regex를 수행하지만 어떤 문자열이나 값이 있어야 패턴을 적용할 수 있다.
그 값이 바로 $_GET['val'] 값이다.
따라서 GET 형식으로 URL 뒤에 ?val=어떤 값을 넣어줘야 한다.
그렇게 패턴에 매칭이 되면 solve(11) 함수가 실행되면서 문제가 clear 하게 된다.
여기까지 정리해보면 다음과 같다.
GET 형식으로 val을 값을 서버로 넘겨주는데
이때 값은 perg_match에 매칭이 되어야 한다. (그래야 solve(11) 함수가 실행)
perg_match에 매칭 되기 위해서는 pat이라는 변수에 저장되어있는 패턴을 분석해야 한다.
따라서 패턴 분석 후 값을 val에 넣어주면 이번 문제는 clear 할 수 있을 것 같다.
2. 문제 풀이
/[1-3][a-f]{5}_.*$_SERVER[REMOTE_ADDR].*\tp\ta\ts\ts/ 패턴을 하나하나 분석해보자.
첫 번째로 나오는 것이 [1-3]이다.
1-3은 값인 것 같고 먼저 [ ]가 무엇을 의미하는지 살펴보자.
[ ]은 지정된 두 문자 사이에 문자 코드가 있는 문자를 찾는다는 의미이다.
이것이 뭐냐? 쉽게 말해 범위라고 생각하면 된다.
[g-s]는 지정된 두 문자(g,s) 사이에 있는 모든 문자를 주어진 값에서 찾는다는 의미이다.
따라서, abcdefghijklmnopqrstuvwxyz에서
g, h, i, j, k, l, m, n, o, p, q, r, s만 패턴에 맞게 적용되는 것이다.
다음은 [a-f]이다.
똑같이 지정된 두 문자(a,f) 사이에 있는 모든 문자를 주어진 값에서 찾는다는 의미이다.
그렇다면 [1-3][a-f] 이 두 개를 사용해서 매칭 되는 문자열을 찾아보자.
먼저 위에 처럼 주어진 문자열에 [1-3][a-f]을 만족하기 위해서는 첫 글자가 1~3 사이의 숫자여야 한다.
1번을 조사할 때 첫글자가 4니깐 패스, 2번을 조사할때 5라서 패스
3번을 조사할때 3이고 바로 뒤에 오는 문자가 [a-f] 사이에 포함되니 3a가 매칭이 된다.
이제 다음은 {5}
5는 값이니깐 { }가 먼지 먼저 알아야 한다.
Developer에서 정의한 { } 다음과 같다.
{5}는 앞 표현식이 5번 나타나는 부분에만 적용된다는 의미이다.
적용된 부분인 aabab는 {5}의 앞 표현식 [a-f]가 총 5번 a, a, b, a, b로 매칭이 되는 것이다.
3은 [a-f]의 앞의 표현식 [1-3]에 의해 매칭 되는것이다.
그다음은 _ 이건 말그대로 _ 문자를 의미한다.
. 은 새로운 개행이 나오기 전까지의 모든 문자를 의미한다.
*은 앞의 표현식이 0개 이상 연속으로 반복되는 문자를 의미한다.
그 다음은 $_SERVER[REMOTE_ADDR] 변수 값인데
REMOTE_ADDR은 내가 접속하는 IP 주소를 의미한다.
IP 주소는 구글에 what is my ip라고 검색해도 되고 아래의 URL에 들어가서 확인이 가능하다.
https://whatismyipaddress.com/
그렇다면 여기까지 매칭이 되게 val을 작성해보자.
[1-3][a-f]{5}_.*뒤에 원래 $_SERVER [REMOTE_ADDR] 이것이 들어가야 하지만 들어갔다고 가정하고
3 abcde_127.0.0.1가 매칭이 되었다.
이제 남은 것은 \tp\ta\ts\ts이다.
\t은 우리가 알고 있는 탭이다.
____p____a____s____s //____은 탭의 공백을 의미함.
pass라는 단어가 나온다.
따라서 val에 3abcde_자신의ip\tp\ta\ts\ts를 넣어주면 된다.
하지만 GET 방식이다.
GET 방식에서 URL 뒤에 ?val=3abcde_자신의ip\tp\ta\ts\ts를 넣어주면
\이 문자가 URL encoding이 되어 %5C가 들어가면서 %5Cp%5Ca%5Cs%5Cs가 된다.
따라서 탭의 의미를 주려면 %09를 넣어 줘야 한다.
'웹 해킹 > Webhacking.kr' 카테고리의 다른 글
12. old-12 (0) | 2021.11.09 |
---|---|
10. old-10 (0) | 2021.11.08 |
9. old-09 (0) | 2021.11.08 |
8. old-08 (0) | 2021.11.05 |
7. old-07 (0) | 2021.11.04 |