본문 바로가기

Hacking/- Webhacking.kr

[Webhacking.kr] Problem 01

반응형

200점에 해당하는 문제이다. PHP코드를 분석할 수 있는지 여부를 묻는 문제라고도 볼 수 있다.


문제 링크


1번 문제를 보면 아래와 같은 검정 화면을 볼 수 있다. 'index.phps'라는  문구가 쓰여 있기 때문에 거기에 힌트가 있을 것이라고 생각하고 index.phps로 들어갔다. 들어가는 방법은 페이지에 있는 "index.phps"를 누르거나 혹은 주소창에 직접 치고 들어가는 방법이 있다.

[사진 1]


index.phps 페이지를 보면 아래 사진처럼 php로 쓰여진 소스코드를 확인할 수 있다.


간단하게 소스코드에 대해서 설명하면, 먼저 user_lv라는 쿠키가 있는지 확인하고, 쿠키 정보가 없으면 user_lv에 1값을 넣고 새로고침을 하는 부분이 첫 번째 부분이다.

두 번째 부분인 if(eregi("[^0-9,.]",$_COOKIE[user_lv])) $_COOKIE[user_lv]=1;user_lv의 쿠키 값에 0~9까지의 숫자나 "."이 아닌 다른 문자열이 들어있는 경우에는 user_lv의 값을 1로 초기화 시킨다는 코드이다.

세 번째 부분인 if($_COOKIE[user_lv]>=6) $_COOKIE[user_lv]=1;user_lv의 값이 6이상인 경우에는 user_lv의 쿠키 값을 1로 변경한다는 코드이다.

마지막 부분인 if($_COOKIE[user_lv]>5) @solve();user_lv의 값이 5보다 크게 한다면 1번 문제가 해결된다는 것이다.


이렇게 해서 문제에 대한 소스코드는 살펴보았고, 이를 통해 문제를 해결하도록 하자. 세 번째와 마지막 부분을 통해서 user_lv의 값이 5보다는 크고, 6보다는 작게 해야 문제가 풀린다는 것을 확인할 수 있다. 그리고 두 번째 부분을 통해 user_lv 값이 0~9까지의 숫자와 "."가 가능하기 때문에 즉 소수를 넣어도 이 부분을 통과할 수 있다는 것을 알 수 있다. 그렇기 때문에 5보다 크고 6보다 작은 소수의 값을 user_lv의 쿠키의 값으로 주면 문제를 해결할 수 있다.


쿠키 값을 변경하는 방법은 여러가지 방법이 있겠지만, 여기서는 Chrome의 확장 프로그램 중 하나인 "EditThisCookie"를 사용하였다. 자신의 브라우저에 맞는 플러그인이나 확장기능을 설치해서 사용하도록 하자.

위와 같은 방식으로 브라우저에서 문제를 해결할 수도 있지만, 이것을 Python code로 작성하면 다음과 같다.

from urllib import request
cookie = "PHPSESSID={your PHPSESSID};"
def challenge1():
	url = "http://webhacking.kr/challenge/web/web-01/"
	header = {"Cookie":cookie+"user_lv=5.5"}
	req = request.Request(url, headers=header)
	print(request.urlopen(req, timeout=5).read())


반응형

'Hacking > - Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] Problem 03  (0) 2016.07.11
[Webhacking.kr] Problem 02-2  (0) 2016.03.19
[Webhacking.kr] Problem 02-1  (0) 2016.03.18
[Webhacking.kr] 0. webhacking.kr 소개  (0) 2016.03.10