본문 바로가기

WEB/webhacking.kr

[webhacking. kr] old-01

 

▷유형: PHP

 

▷문제:

01
 문제를 클릭하면 이런 화면이 뜬다. 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>

위에서 부터 차례대로 살펴보자. 

 

[1번에서 쓰인 문법과 용어]

<?php>

: 특정작업이 필요하다고 알려주는 태그 → 안에 php 명령어들이 있다고 표시해주는 것이다. 

include

: 다른 php파일을 불러올 때 사용

$_get

: get방식으로 전송된 값을 받을때

 

쿠키: 서버 접속시 사이트에 의해 사용자의 컴퓨터에 저장되는 값

$_COOKIE["user_lv']

: cookie값이 'user_lv'에 접근할 수 있음

 

setcookie

: 쿠키를 만드는 것

◇형식: setcookie ( $name [, $value [, $expire [, $path [, $domain [, $secure [, $httponly ]]]]]] )

$name: 쿠키 이름

$vale: 쿠키 값

$expire: 지속 시간  ex) time()+60: 60초 동안 지속됨

$domain: 쿠키가 사용될 domain

$secoure: true 일시 https에서만 사용

$httponly: trued일 시 http에서만 사용

→name 빼고 모두 옵션임.

 

 

is_numeric(): ()안에 들어간 값이 숫자인지 확인하는 함수임.

echo: 출력

 

 

 

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

처음 시작할때 view_source라는 걸 클릭해서 이 페이지를 열었으므로 view_source라는 값을 받아 파라미터 값이 1이면 vivew_source라는 파일을 열어 보여줌

 

 

if(!$_COOKIE['user_lv']){

'user_lv'가 쿠키에 존재하지 않을때(!가 앞에 붙어 있어서)

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

user_lv라는 쿠키에 1을 저장하고 time은 86400*30 초 만큼 지속되고 사용될 도메인은 "/challenge/web-01/"임.

 

⇒여기까지는 사이트가 user_lv라는 쿠키를 만드는 코드인듯

 

 

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

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);

'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보다 크거나 같으면 쿠키값을 1로 함

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

'user_lv'값이 5보다 크면 solve함수를 실행한다.  →아마 solve함수가 문제를 clear하는 함수인것

 

⇒ solve함수를 실행해야하므로 'user_lv'의 쿠키값은 5<'user_lv'≤6 이어야한다.

 

 

따라서, 쿠키값을 수정해야한다! →크롬의 editthiscookie 확장 프로그램을 설치해 사용한다.

구글 검색창에 EditThisCookie를 쳐서 크롬에 설치할 수 있다. 

이 프로그램은 php문제에서는 거의 항상 쓰인다. -> php문제는 쿠키를 다루는 문제라는 뜻이랑 일맥상통이넹~~

 

확장프로그램 설치 후 다시 문제화면으로 가서 url 창 옆에 있는 EditThisCookie를 실행하면 cookie값이 1로 설정되어 있는 것을 확인할 수 있다.

 

 

이것을 5.5 로 바꿔준다.

5.5 말고도 5와 6사이에 있는 모든 수 가능이다!!!

 

초록색 체크 표시를 누른후 문제창을 새로고침하면 pwned된다!

 

 

'WEB > webhacking.kr' 카테고리의 다른 글

[webhacking. kr] old-16  (0) 2020.07.31
[webhacking. kr] old-15  (0) 2020.07.31
[webhacking. kr] old-14  (0) 2020.07.31
[php] 용어& 문법 정리  (0) 2020.07.31
[webhacking. kr] old-24  (0) 2020.07.31