워게임/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
라고 입력하여 로그인 해보겠다.
풀렸다.