본문 바로가기
Write Up/webhacking.kr_old

Webhacking.kr Challenge(old)_1번문제

by 비원(Be one) 2019. 11. 10.
반응형

여러분 안녕하세요. 세이버입니다.

 

2019년 9월 webhacking.kr의 사이트 운영자분이 바뀌면서 몇 가지 문제들과 UI가 변화되었습니다.

오랜만에 문제를 풀기 위해 들어가 봤는데 사이트가 팔린 줄 알았습니다.

검은색 바탕의 사이트가 더 간지 났는데 말이죠...

 

왜 전에 있던 사이트와 다르지?

사이트가 변화된 만큼 새로운 마음으로 다시 한번 문제를 풀어보고자 다시 1번 문제부터 풀어보았습니다.

 

1번 문제는 과거의 문제와 같은 유형이니 기존의 강의를 보고 오셔도 푸실 수 있습니다.

Webhacking.kr 문제풀이_Part2_1번 문제 : https://poci.tistory.com/47

 

Webhacking.kr 문제풀이_Part2_1번 문제

여러분 안녕하세요. POCI입니다. 이번 시간에는 Webhacking.kr의 1번 문제를 풀어보도록 하겠습니다. 우선 로그인을 해야 하는데, 회원가입이 되어있지 않으신 분들은 1강을 보시고 회원가입을 하시기 바랍니다...

poci.tistory.com


1. 문제 파악하기

1번 문제를 클릭합니다.

200점짜리 문제

옆에 php 마크가 있는 걸로 보아 php와 관련된 문제인 거 같습니다.

 

1번을 클릭하면 아래와 같이 검은 화면에

-----------------------

level : 1

view-source

이렇게 쓰인 게 전부입니다.

 

view-source가 하이퍼링크가 되어있는 거처럼 보여서 마우스를 가져다대니 클릭 아이콘으로 바뀌길래 클릭해봤습니다.

 

그랬더니 페이지의 소스가 쓰인 창으로 넘어갔습니다.

<?php
  include "../../config.php";
  if($_GET['view-source'] == 1){ view_source(); }
  if(!$_COOKIE['user_lv']){
    SetCookie("user_lv","1",time()+86400*30,"/challenge/web-01/");
    echo("<meta http-equiv=refresh content=0>");
  }
?>
<html>
<head>
<title>Challenge 1</title>
</head>
<body bgcolor=black>
<center>
<br><br><br><br><br>
<font color=white>
---------------------<br>
<?php
  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);
  echo "<br>level : {$_COOKIE['user_lv']}";
?>
<br>
<a href=./?view-source=1>view-source</a>
</body>
</html>

이런 소스코드입니다.

이 소스코드를 분석해야 문제를 풀 수 있을 거 같습니다.

 

2. 소스코드 분석하기

php 부분이 중요해 보이니 따로 설명드리겠습니다.

<?php
  include "../../config.php";
  if($_GET['view-source'] == 1){ view_source(); }
  if(!$_COOKIE['user_lv']){
    SetCookie("user_lv","1",time()+86400*30,"/challenge/web-01/");
    echo("<meta http-equiv=refresh content=0>");
  }
?>

이 코드에서 중요한 건

if(!$_COOKIE['user_lv']){
    SetCookie("user_lv","1",time()+86400*30,"/challenge/web-01/");
    echo("<meta http-equiv=refresh content=0>");
}

이 부분입니다.

 

user_lv는 쿠키의 이름, 1은 쿠키의 값, time()+86400*30는 만료시간, /challenge/web-01/는 쿠키의 경로를 의미합니다.

즉, user_Iv라는 이름의 쿠키가 없으면 user_lv라는 이름을 가진 쿠키에 1을 넣어서 만들라는 의미입니다.

 

쿠키가 무엇인지에 대한 설명은 아래 링크에서 확인하실 수 있습니다.

쿠키란 무엇인가? : https://poci.tistory.com/48

 

쿠키란 무엇인가?

웹해킹을 하다보면 간혹 쿠키(Cookie)라는 용어를 자주 접하게 됩니다. 인터넷에서의 쿠키는 사용자의 정보를 담는 상자의 역할입니다. 쿠키에는 아이디, 비밀번호, 웹 브라우저의 종류, 접근 권한 등 다양한 사..

poci.tistory.com

다음에 나오는 php 코드는 아래와 같습니다.

<?php
  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);
  echo "<br>level : {$_COOKIE['user_lv']}";
?>

이 코드를 한 줄씩 해석하면


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 쿠킷값이 무슨 수로 바뀌든 다시 1로 바뀌지만, 5초과면 해결된다고 해석할 수 있습니다.

그러나 6 이상이면 다시 1로 바뀌게 됩니다.

 

5 초과면 해결되고, 6 이상이면 다시 1로 된다는 것은 5와 6 사이의 소수점으로 변경하면 해결된다는 의미입니다.

 

3. 쿠킷값 변조하기

쿠킷값을 변조하려면 변조 프로그램이 있어야 합니다.

저는 크롬에서 지원하는 EditThisCookie를 사용했습니다. 아래 링크에서 다운로드하실 수 있습니다.

https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg?utm_source=chrome-ntp-icon

 

EditThisCookie

EditThisCookie는 쿠키 관리자입니다. 이것을 이용하여 쿠키를 추가하고, 삭제하고, 편집하고, 찾고, 보호하거나 막을 수 있습니다!

chrome.google.com

다운로드가 완료되면 크롬 검색창 오른쪽에 쿠키 아이콘이 생깁니다.

 

쿠키 아이콘을 클릭하여 EditThisCookie를 사용해 쿠킷값을 바꿀 수 있습니다.

 

아이콘을 클릭한 모습

쿠킷값 부분에 1이라고 쓰여있습니다. 저부분에 5와 6 사이의 소수점을 입력해줍니다.

 

저는 5.5를 입력했습니다.

쿠킷값을 변경한 다음에 새로고침을 해주면 다음과 같은 창이 뜨게 됩니다.

 

1번 문제가 풀렸다는 창과 함께 스코어를 획득하였습니다.


이번 강의는 여기까지입니다.

 

오늘도 수고하셨습니다.

 


정리

- view-source를 클릭해서 php 코드가 적힌 창으로 이동

- php 코드를 해석

EditThisCookie를 이용하여 쿠킷값을 변조


강의가 유익하셨거나 마음에 드셨으면 구독과 좋아요, 댓글 부탁드립니다.

궁금하신 점이나 질문은 댓글이나 메일 남겨주세요.

poci5003@gmail.com

 

 

 

 

 

반응형