webhacking.kr challenge 11
화면에 이렇게 나오고 끝. 소스 보기를 해도 딱히 다른게 없다.
이걸 해석해 보자면 get방식으로 전달하는 변수명이 val이다. preg_match라는 함수는 preg_match($stringPattern, $string)에서 pattern 정규표현식을 string에 있는지 확인한다. 반환값은 매치가 됐다면 1, 없다면 0을 가진다. 만약 에러가 난다면 FALSE를 반환한다.
정규표현식은 php에서 문자열을 표현하는 방식중 하나다. 여기서는 pat가 정규표현식으로 나와있어 이를 해석해야 한다. 필요한 부분에 대해 설명하자면 아래와 같다.
메타문자 - 1.대괄호 안에서만 or 2대괄호 안 제외하고 어디서나
/: 여러가지로 사용하는 일반적인 회피문자
[]: 클래스정의의 시작과 끝
.:줄바꿈을 제외한 아무 문자
*:0회 이상의 횟수
{}: 최소/최대 횟수의 시작
대괄호 안쪽은 "문자 클래스"라 명명
-:문자 범위 지정
메타문자란 php에서 영문자가 아니지만 특별한 의미를 가진 문자를 의미한다.
그럼 화면에 나온 $pat를 보면
/[1-3][a-f]{5}_.*내 컴퓨터 ip주소*\tp\ta\ts\ts/
라고 써있다. 이를 바탕으로 val을 하나 만들어 준다. \t은 탭을 의미하는데 url 창에 넣어주기 때문에 %09로 써준다. .은 아무 문자나 가증하기 때문에 a로 대체했다.
?val=3fffff_a내 컴퓨터 ip주소a%09p%09a%09s%09s
이렇게 url에 넣어주면
성공!!
**도움이 될만한 자료
정규표현식 패턴들(https://opentutorials.org/module/622/5143)
정규 표현식(https://opentutorials.org/module/6/5141)
참고:
http://php.net/manual/kr/function.preg-match.php
http://ir.php.net/manual/kr/regexp.reference.php


댓글
댓글 쓰기