ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Webhacking .kr - Challenge(old) 01 문제 풀이
    워게임(Wargame)/webhacking.kr 2020. 2. 25. 00:01

     

    Webhacking .kr - Challenge(old) 01 문제 풀이

     

    Webhacking.kr 사이트의 Challenge(old) 01 문제를 풀어보고자 한다.

    웹 사이트는 https://webhacking.kr 이다.

     

    [그림 1] Challenge(old)-01 문제

     

    회원가입 및 로그인 후, [old-01] 문제를 클릭하면 아래와 같은 페이지가 나타난다.

     

    [그림 2] old-01 문제 클릭 시 출력 화면

     

    출력된 웹 페이지를 살펴보면, 검은 화면에 'level : 1'이라는 단어와 링크 형식으로 되어 있는 'view-source'를 확인할 수 있다.

    'view-source'를 클릭해보면, 아래 [그림 3]과 같이 소스코드가 출력된다.

     

    [그림 3] view-source 클릭 시 출력 화면

     

    [그림 3]의 php 소스코드를 살펴보면, 처음으로 해당 페이지 로딩 시 SetCookie()를 통해 만료기간이 약 한 달(30일)인 쿠키값을 생성하고 있다.

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

     

    SetCookie()에서 설정 가능한 옵션에 대한 자세한 설명은 아래 '더보기'를 클릭하면 된다. 

    더보기

    SetCookie()에서 설정가능한 옵션

    • 쿠키명(필수) : 설정될 쿠키 이름
    • 쿠키값(선택) : 쿠키 이름에 입력될 값
    • 만료시간(선택) : Default 값은 0이며, 쿠키가 유지될 시간을 설정
    • 경로(선택) : 경로를 지정할 경우, 특정 위치와 하위 경로에서만 사용 가능하도록 설정됨
    • 슬러쉬(/) : 슬러쉬 기호를 값으로 입력할 경우 전체 경로에서 사용됨을 의미
    • 도메인(선택) : 사용될 도메인을 지정 가능하며, 서브도메인 입력시 해당 서브도메인만 사용 가능
    • 보안(선택) : 보안 프로토콜인 https에서만 사용 가능하도록 설정함
    • httponly : HTTP에서만 사용가능하도록 하여 스크립트에 의한 쿠키 접근을 허용안하게 함

     

     

    그리고 위와 같이 [그림 3] 하단의 php 소스코드를 살펴보면, is_numeric()를 통해 설정된 쿠키값이 숫자가 아니거나, 6보다 크거나 같으면 1로 세팅되는 것을 확인할 수 있다.

    그리고 설정된 쿠키값이 5보다 크다면, solve(1) 함수를 호출하고 있음을 확인할 수 있다.

      if(!is_numeric($_COOKIE['user_lv'])) $_COOKIE['user_lv']=1;
      if($_COOKIE['user_lv']>=6) $_COOKIE['user_lv']=1;
      if($_COOKIE['user_lv']>5) solve(1);

     

    solve(1)를 호출하면 문제가 해결될 것 같다는 생각이 들며, user_lv 값이 5 < x < 6 사이로 설정해주면 된다.

    웹 프록시 도구인 Burp Suite를 이용하여, user_lv를 5.1로 수정 후 전송하면 solve(1) 호출되면서 풀이가 완료된다.

     

    [그림 4] Burp Suite를 이용하여 user_lv 값 변조

     

    아래는 정상적으로 문제를 해결했을 때, 출력되는 화면이다.

     

    [그림 2] old-01 문제 해결 시 출력 화면

     

    이것으로 old-01 문제 풀이 끝.


    댓글

Designed by Tistory.