[WARGAME] los.rubiya.kr - red_dragon

2022. 8. 16. 21:36카테고리 없음

반응형
<?php
  include "./config.php";
  login_chk();
  $db = dbconnect();
  if(preg_match('/prob|_|\./i', $_GET['id'])) exit("No Hack ~_~");
  if(strlen($_GET['id']) > 7) exit("too long string");
  $no = is_numeric($_GET['no']) ? $_GET['no'] : 1;
  $query = "select id from prob_red_dragon where id='{$_GET['id']}' and no={$no}";
  echo "<hr>query : <strong>{$query}</strong><hr><br>";
  $result = @mysqli_fetch_array(mysqli_query($db,$query));
  if($result['id']) echo "<h2>Hello {$result['id']}</h2>";

  $query = "select no from prob_red_dragon where id='admin'"; // if you think challenge got wrong, look column name again.
  $result = @mysqli_fetch_array(mysqli_query($db,$query));
  if($result['no'] === $_GET['no']) solve("red_dragon");
  highlight_file(__FILE__);
?>

id와 no를 get으로 받는다 

하지만 id가 7자보다 크면 안된다.

변수 no가 숫자일경우 no를 그대로 반환하고 아닐경우 1을 출력하게 된다.

 

우선 no의 길이를 확인하기 위해 

 

이런식으로 하면된다. %0a까지 주석처리를 하기 때문에 그 뒤에 오는 숫자는 주석처리가 되지 않아서 no의 길이를 알수있다.

100000000(1억)<no<1000000000(10억) 이다.

이진탐색으로 중간에 오는 값을 찾으면 된다.

반응형