반응형
<?php
include "../config.php";
login_chk();
dbconnect();
if(strlen($_GET[shit])>1) exit("No Hack ~_~");
if(preg_match('/ |\n|\r|\t/i', $_GET[shit])) exit("HeHe");
$query = "select 1234 from{$_GET[shit]}prob_giant where 1";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysql_fetch_array(mysql_query($query));
if($result[1234]) solve("giant");
highlight_file(__FILE__);
?>
소스코드 분석
우선 if(strlen($_GET[shit])>1) exit("No Hack ~_~"); 이 구문을 통해서 2개 이상의 문장이 넘어올 경우 필터를 하게 된다. shit파라미터는 \n,\r,\t들을 막고 있다.
쿼리를 봤을 때 select 1234 from{$_GET[shit]}prob_giant where 1 그렇다 from과 prob 사이를 띄워 주면 될 것 같다.
풀이
%20,%0d,%0a외에도
php에서 공백 대신 쓸 수 있는 것들이 있다고 한다.
%20, %09, %0a, %0b, %0c, %0d, %a0등이 있다.
페이로드는
shit=%0b 등으로 하면 된다.