늘모자란, 개발 :: [LOS] assasin

늘모자란, 개발

<?php 
  include "./config.php"; 
  login_chk(); 
  dbconnect(); 
  if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~"); 
  $query = "select id from prob_assassin where pw like '{$_GET[pw]}'"; 
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysql_fetch_array(mysql_query($query)); 
  if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; 
  if($result['id'] == 'admin') solve("assassin"); 
  highlight_file(__FILE__); 
?>


' 를 쓸수 없는데 like 안에 제약이 없으니까 {}% 이런 느낌으로 값을 비교할 수 있다.
그런데 뭐가 admin인지 아닌지를 구별해야되니 그것도 문제다

문자열을 돌려보니 8% 에서 guest가 나왔다. 그러니까 guest의 비밀번호는 8로 시작한다는건데..
이건 어차피 전체 문자열을 찾을 필요가 없다고 생각했다.

풀 스트링으로 다 돌렸는데 guest 만 나왔으니, admin의 비밀번호도 8로 시작하는데 row 경쟁에서 guest가 위이기 떄문일 것이다.
고로 한번 더 작업을 하니 역시 풀스트링인데도 guest만 나왔다. 83까지 획득.

다시 돌리니 832에서 admin이 나왔다. 여기가 분기. 고로 832% 라고 답을 입력하면 해결된다.
너무 간단한 문제라서 따로 루프 없이 손으로 돌리고 중지하고 그랬다. 코드 생략..
2017/06/20 16:26 2017/06/20 16:26