Kortsec1 2023. 8. 1. 23:37

1. Code

<?php
  include "./config.php"; 
  login_chk();
  $db = dbconnect();
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
  if(preg_match('/\'/',$_GET[id])) exit("HeHe");
  if(preg_match('/\'/',$_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 = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if($result['id']) solve("succubus"); 
  highlight_file(__FILE__); 
?>

 


2. Condition

  • 작은 따옴표를 필터링한다.

 


3. Solution

Single Quote를 입력하여 정해진 쿼리에서 벗어나야 한다.

하지만, '는 필터링 되었기 때문에 다른 방법을 찾아보았다.

 

바로 쿼리속 Single Quote를 Escaping 시키는 것이다.

구체적인 설명은 다음과 같다.

 

 

"select id from prob_succubus where id='{$_GET[id]}' and pw='{$_GET[pw]}'"

위 쿼리에서 id, pw에 아래 값을 보낸다고 해보자.

변수명
id \
pw  union select 1#

 

"select id from prob_succubus where id='\' and pw=' union select 1#'"

원래 있던 Single Quote가 문자처리 되면서, pw값이 sql구문으로 들어간다.

 

음.. 이게 끝이다.

 


4. Injection

더보기

 

아래 값을 보내주면 문제가 해결된다.

 

변수명
id \
pw  union select 1#

 

img_1 succubus clear