query : {$query}
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\\.|\\(\\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\\.|\\(\\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("cobolt");
elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>";
highlight_file(__FILE__);
?>
sql search 결과 id 가 admin 일 때 solve가 납니다.
1번 gremlin 문제와 다른것을 살펴보면, pw 받아오는 과정에서 md5 해싱을 추가로 하게 됩니다.
따라서 이번에는 pw 부분이 아닌 id 부분을 집중적으로 보면 됩니다.
?id=admin'#
을 보내면 id='admin'#' and pw=md5('') ****가 됩니다.
따옴표를 닫고, 뒷부분을 주석처리해서 무효화해버리면 pw 상관 없이 id가 admin인것만 찾게 됩니다.
query : **select id from prob_cobolt where id='admin'#' and pw=md5('')**