▷유형: 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>");
}
?>
<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를 쳐서 크롬에 설치할 수 있다.
⑦
확장프로그램 설치 후 다시 문제화면으로 가서 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 |