본문 바로가기
해킹/webhacking.kr

[webhacking.kr] Challenge(Old) old-01 풀이

by yenua 2022. 6. 14.
반응형

https://webhacking.kr/challenge/web-01/

 

Challenge 1

 

webhacking.kr

처음에 들어가면 아래와 같이 level 1이라는 문구가 출력된다.

 

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']>=4) $_COOKIE['user_lv']=1;
  if($_COOKIE['user_lv']>3) solve(1);
  echo "<br>level : {$_COOKIE['user_lv']}";
?>
<br>
<a href=./?view-source=1>view-source</a>
</body>
</html>

위쪽의 php문을 살펴보면 SetCookie()를 통해 쿠키값 user_lv이 1의 값을 가지며 현재 시간에 86400*30초 뒤에 만료되게 생성된다.

SetCookie() 함수에 대한 자세한 내용은 아래를 참고하자.

https://webisfree.com/2015-03-02/[php]-쿠키-설정하기-setcookie() 

 

[PHP] 쿠키 설정하기, setcookie()

php에서 쿠키를 설정 및 사용하는 방법에 대하여 알아볼려합니다.

webisfree.com

 

아래쪽의 php문에서는 문제 해결 조건이 있는데, solve() 함수가 인자 레벨에 대하여 문제를 해결했음을 나타내는 것 같다. solve 함수로 들어가는 방법은 user_lv가 3을 초과해야하는데, 숫자가 아닌 경우나 4 이상인 경우에는 user_lv가 1로 변경되어서 solve 함수로 들어갈 수 없게 된다.

 

해답은 매우 간단한데, user_lv가 정수라는 편견을 가지고 있어서 삽질을 좀 했었다.. 실수 범위에서 3 초과 4 미만인 수는 매우 많다. 개발자 도구에서 쿠키값을 해당하는 실수로 변경해주면 된다.

 

 

user_lv를 3.1로 바꿔 old-01 문제를 해결할 수 있었다.

반응형