늘모자란, 개발 :: [wargame.kr] Challenge 4 - login filtering

늘모자란, 개발

I have accounts. but, it's blocked.

can you login bypass filtering?


인젝션 느낌이 솔솔 난다.
소스를 보라고 권하기 때문에 소스를 보자면

 <?php

if (isset($_GET['view-source'])) {
    show_source(__FILE__);
    exit();
}

/*
create table user(
 idx int auto_increment primary key,
 id char(32),
 ps char(32)
);
*/

 if(isset($_POST['id']) && isset($_POST['ps'])){
  include("../lib.php"); # include for auth_code function.

  mysql_connect("localhost","login_filtering","login_filtering_pz");
  mysql_select_db ("login_filtering");
  mysql_query("set names utf8");

  $key = auth_code("login filtering");

  $id = mysql_real_escape_string(trim($_POST['id']));
  $ps = mysql_real_escape_string(trim($_POST['ps']));

  $row=mysql_fetch_array(mysql_query("select * from user where id='$id' and ps=md5('$ps')"));

  if(isset($row['id'])){
   if($id=='guest' || $id=='blueh4g'){
    echo "your account is blocked";
   }else{
    echo "login ok"."<br />";
    echo "Password : ".$key;
   }
  }else{
   echo "wrong..";
  }
 }
?>
<!DOCTYPE html>
<style>
 * {margin:0; padding:0;}
 body {background-color:#ddd;}
 #mdiv {width:200px; text-align:center; margin:50px auto;}
 input[type=text],input[type=[password] {width:100px;}
 td {text-align:center;}
</style>
<body>
<form method="post" action="./">
<div id="mdiv">
<table>
<tr><td>ID</td><td><input type="text" name="id" /></td></tr>
<tr><td>PW</td><td><input type="password" name="ps" /></td></tr>
<tr><td colspan="2"><input type="submit" value="login" /></td></tr>
</table>
 <div><a href='?view-source'>get source</a></div>
</form>
</div>
</body>
<!--

you have blocked accounts.

guest / guest
blueh4g / blueh4g1234ps

-->



blueh4g라는 아이디로 로그인을 해야되는데 로그인이 안되는 그런 느낌적인 느낌이다.
실제로 시도해봐도 블럭된다고 뜬다. 이제 우린 어떻게 해야할것인가? 특문같은것은 mysql_real_escape_string 덕에 시도할맛이 안나고..
그런데 마지막 주석이 의미심장하다.

가만보니 비교문도 === 가 아니라 == 이다. 이는 대소문자를 가리지 않는다는건데.
혹시나 하는마음에 Guest / guest를 시도하니 패스...

=== 를 써서 비교하는게 맞을 것 같다. 아니면 이상한 아이디랑 비밀번호 쓰지 말든지..
2016/06/07 20:35 2016/06/07 20:35