Challenge old 11번 문제입니다.
접속해보니 Wrong라는 글자와 소스코드 링크를 제시해줍니다.
소스링크에 접속해보면
우리가 봐야할 키가 되는 소스코드는 아래 구문입니다.
<?php
$pat="/[1-3][a-f]{5}_.*$_SERVER[REMOTE_ADDR].*\tp\ta\ts\ts/";
if(preg_match($pat,$_GET['val'])){
solve(11);
}
pat이라는 변수에 대입을 한다는 것은 알겠는데
이게 뭔지를 몰라서 구글링을 해보니 정규표현식 이라고 합니다.
이런식으로 특정한 규칙을 가진 문자열의 집합을 표현하는데 쓰이는 언어라고 합니다.
이러한 표를 토대로 코드를 해석하면
[1-3] | 1~3중 한개의 숫자 |
[a-f]{5} | a~f중 5개의 영문자 |
_. | _기호 한개 |
*$_SERVER[REMOTE_ADDR].* | 접속자의 공인 IP주소 한번 |
\tp\ta\ts\ts | \t 띄어쓰는 탭 과 pass 문자 |
위 표로 정리 할 수 있습니다.
즉 변수 pat = 1bcdef_(IP주소)\tp\ta\ts\ts 인것을 알 수있습니다.
그러나 solve(11)을 실행하려면 조건식을 맞춰야 하는데 preg_match( )함수를 찾아보니
간단하게 앞의 문자열과 뒤에 문자열이 일치하는지 보는 함수라고 합니다.
즉 val = 1bcdef_(IP주소)\tp\ta\ts\ts 값을 대입한다면 조건식이 True 가 되며 해결이 가능합니다.
입력할 곳이 주어지지 않았으므로 URL에 입력해보겠습니다.
입력을 했으나 해결이 되지 않아 어디가 문제인가 찾아보니 URL에 입력할 때에는
URL-encoding이 필요하다고 합니다.
아래 표에서 tap은 %09로 표현해야 한다고 적혀있습니다.
그럼 다시 \t 을 %09로 바꿔서 대입해보면
조건식이 True가 되어 solve(11)이 실행 된것을 볼 수 있습니다.
'Wargame(Web) > Webhacking.kr Writeup' 카테고리의 다른 글
WebHacking Writeup 7번 문제 (0) | 2022.07.06 |
---|---|
Challenge(old)-03번 문제 Writeup (0) | 2022.06.15 |
Challenge(old)-10번 문제 Writeup (0) | 2022.06.15 |
Challenge(old)-06번 문제 Writeup (0) | 2022.06.15 |
Challenge(old)-01번 문제 Writeup (0) | 2022.06.14 |