본문 바로가기
정보보안/wargame

[webhacking.kr] challenge(old). old-01

by 민-Zero 2020. 1. 13.

맨 처음 문제를 풀기 위해 접근하면 다음과 같은 화면이 보인다. 따로 홈페이지의 소스를 확인하면 특별한 게 있을 줄 알았으나

index와 heml에 특별한것은 보이지 않기 때문에 주어진 view-source를 통해 확인해보았다.

 주어진 php 코드는 다음과 같았다. 위에서부터 해석해보자

if($_GET['view-source'] == 1){ view_source(); }

view-source 변수에 1이라는 값이 있으면 view_source함수를 실행하는 부분으로 해석할 수 있다.

 

SetCookie("user_lv","1",time()+86400*30,"/challenge/web-01/");

SetCookie 함수를 사용하여 매개변수로 ("쿠키 이름","쿠키 값",폐기시간,"경로")를 사용하므로 user_lv 쿠키값을 1로 결정하는 부분으로 해석된다.

 

echo("<meta http-equiv=refresh content=0>");

화면에 문자열이나 변수를 출력하는 역할 이다. 따라서 () 안의 문자열이 출력된다.

 

html 부분은 처음 시작시 보았던 화면을 나타내므로 특별히 이상한 부분이 없다.

 

이제 다시 등장하는 php 코드를 확인해보면

if(!is_numeric($_COOKIE['user_lv'])) $_COOKIE['user_lv']=1;

조건문을 통해 user_lv 쿠키값을 확인하여 숫자가 아니라면 user_lv 쿠키값을 1로 설정한다.


if($_COOKIE['user_lv']>=6) $_COOKIE['user_lv']=1;

user_lv 쿠키값이 6 이상이면 user_lv 쿠키값을 1로 설정한다.


if($_COOKIE['user_lv']>5) solve(1);

user_lv 쿠키값이 5보다 크면 solve(1)라는 함수가 동작한다.

 

따라서 user_lv 쿠키값이 5보다 크고 6보다 작은 아무 숫자나 들어가게 된다면 해당 문제가 해결된다고 가정할 수 있다. 그럼 쿠키값을 바꿔서 해당 웹페이지에 응답을 보내보자.

 

쿠키값을 바꿀 수 있는 방법은 여러 가지가 존재한다 몇 가지 정리하면

 크롬에서 기본적으로 지원하는 개발자툴의 Application 메뉴의 Cookies에 가서 해당 변수의 값을 변경하거나

크롬을 사용한다면 EditThisCookie라는 플러그인을 통해 user_lv 변수의 쿠키값을 변조해도 된다.

웹 응용 프로그램 테스트에 자주 사용되는 툴인 Burp suite라는 툴을 이용하여 변조해도 된다. 

 

이번에는 간단하게 크롬 개발자 툴을 이용하여 쿠키값을 변조해 가정이 맞는지 확인해 보자. 

SetCookie를 통해 설정된 user_lv이라는 변수의 쿠키값이 1로 설정되어 있는 것을 확인할 수 있다. 

그럼 이 값을 5보다크고 6보다 작은 임의의 값 5.5로 변경하고 웹페이지에 응답을 보내기 위해 새로고침을 하면

성공적으로 해당 문제가 풀리고 가정이 맞았음을 확인할 수 있다.

댓글