워게임/wargame.kr

[webhacking.kr] login filtering 문제 풀이

KwonYongHyeon 2021. 1. 2. 21:20
반응형

 

 

나는 login 붙은 문제를 좋아해서 그냥 바로 이 문제로 넘어왔다(???)

음 우선 바로 시작해보자.

 

문제를 살펴보도록 하겠다.

 

 

아유 안타까워라

계정이 차단당한 안쓰러운 친구를 무시할 수는 없으니 바로 이 친구를 구해주도록 하겠다.

Start 클릭!

 

 

훌륭하게도 <get source> 부분이 눈에 띈다.

눌러 보자.

<?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

-->

 

 

 

대충 이렇게 생긴 코드가 나온다.

 

이제 우리가 주목해야 할 부분은 여기이다.

 $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..";
  }
 }
?>

이 부분인데, 맨 처음 부분을 본다면 대충 눈치가 있는 사람이라면 mysql을 사용한다는 점을 알 수 있을 것이다.

그 뒤에는 guest와 blueh4g라는 안쓰러운 친구들이 계정을 차단당했다는 사실을 알 수 있다.

이걸로 무엇을 알 수 있냐고?

우리가 보아야 할 부분은 if구문이다.

코드는 $row['id'] 를 통해서 우리가 쓴 아이디가 맞는지 틀리는지 확인한다.

그래서 guest와 blueh4g라는 안타까운 아이디를 사용하면 계정을 차단했다는 메시지가 뜨는 것이다.

하지만 이때, 저 코드가 비교하는 것은 $row 아이디가 아니라, 우리가 입력한 아이디이다($id=='guest' || $id=='blueh4g' 부분을 통해 유추할 수 있다.).

또한 여기서 mysql은 기본적으로 대소문자를 구별하지 않기 때문에, 내가 아이디 값으로 대소문자를 섞어 넣어도 문제없이 뚫린다는 말이다.

 

ID: GuEsT

PW: guest

라고 입력하여 로그인 해보겠다.

 

guest한테 전화해서 밥이라도 사라고 해야겠다.

 

풀렸다.

 

 

반응형