안녕하세요. 이번엔 웹해킹 문제 11번을 풀어겠습니다.

http://webhacking.kr/ 에서 문제 11번에 들어가 봅시다.

음. 소스처럼 보이는 문구가 적혀있습니다. 일단 소스를 분석해봅시다. 그림은 삽입하지 못했습니다. 죄송합니다.

이번엔 소스에도 별 내용이 없습니다. solve 소스도 안보이는걸로 보아 평범하게 풀기는 힘든 문제인것 같군요. 일단 문제 11번에 적혀있는 소스를 해석해봅시다. 일단 if문부터 봅시다. preg_match함수가 쓰였군요. preg_match란 PHP에서 패턴이 일치하는 문자 혹은 숫자를 판단하기 위해서 사용되는 함수이며 preg_match(패턴, 비교할 변수) 형태로 사용됩니다. 음 그렇다면 저기서는 &pat가 패턴이고 &_GET[val]가 비교할 변수이겠군요.그리고 $_GET는 method = "get" 이란 의미로 설정된 폼으로부터 값을 수집하는데 사용하는 함수입니다. 저기에선 &_GET[val]라고 쓰였으므로 폼으로부터 val 값을 수집하라 라고 해석할 수도 있겠군요. 그럼 val값을 폼에 적어야 되겠군요. 폼으로부터 가져온 val값이 pat패턴과 일치하면 패스워드를 출력하라고 되있으니까요. 폼은 형식이란 뜻으로 여기에서는 주소형식이라는 뜻으로 해석합니다.

if문이 쓰인걸로 보아 만약 패턴이 일치한다면 패스워드를 출력하라 뭐 이런 소리군요. 그리고 if문 앞에 &pat가 있는 걸로 보아 패턴이 주어진 것 같습니다. 참고로 패턴을 만든다 이 소리는 정규식을 이용했다는 것입니다. 패턴을 만들기 위해서는 정규식에 맞춰 짜야하기 때문입니다.그럼 정규식에 맞추어 해석해 보겠습니다.

" " : 패턴을 만들때 들어가는 기본 형식입니다.

/ : 처음과 끝을 나타냅니다.

[] : 안에 존재하는 문자나 숫자 중 하나만을 나타내라는 뜻이며 []안의 -는 범위를 나타냅니다. 예를 들면 [a-z]는 a에서 z중 하나를 나타내라는 뜻이고 [1-50]은 1부터 50에서 하나를 나타내라는 뜻입니다.

{}= 앞에 있는 문자를 {}안의 개수만큼 출력하라 라는 뜻입니다. 즉 [3]{5}는 3을 5번 출력하라는 뜻입니다.

* = *앞의 문자를 0개 이상으로 포함한다 라는 뜻이므로 a*b는 b,ab,aab,aaab를 포함한다고 볼 수 잇습니다.

\t = tap이라는 의미를 가지며 url로 쓰기 위해서는 인코딩을 해야합니다. url인코딩을 했을 경우 %09라는 값이 나온다.

이에 맞춰서 $pat="/[1-3][a-f]{5}_.*IP주소.*\tp\ta\ts\ts/"; 를 해석하면 1aaaaa_.IP주소.%09p%09a%09s%09s 가 나옵니다. 이것이 pat의 패턴입니다. 그리고 이 패턴이 &_GET[val]과 일치해야 하고 &_GET은 폼에서 값을 가져오라는 뜻이므로 주소형식에 입력을 해야합니다. 변수가 val 이므로 그대로 주소에 val = 식으로 적어주시면 되겠습니다. 아 그리고 php에서 주소창에 변수를 입력하실 때에는 주소 맨 끝자리에 ?를 붙이고 변수를 입력하셔야 합니다.

다적으셨으면 엔터를 쳐주세요.

네 이것으로 11번 문제 풀이를 마치겠습니다.

'Webhacking' 카테고리의 다른 글

Webhacking - 27번문제  (2) 2015.07.10
Webhacking - 문제24번  (0) 2015.07.10
webhacking시작 - 문제17번  (6) 2015.07.05
webhacking시작 - 문제1번  (0) 2015.07.04
webhacking시작 - 회원가입  (0) 2015.07.04
Posted by englishmath
,