wargame.kr 이 가장 재밌지 않나요?
나는 계정을 갖고 있지만 막혔어. 필터링을 우회해서 로그인을 할 수 있겠니?
음... ㅇㅋ ㄱㄷ
? 힌트로 아이디랑 패스워드를 줘버리네요... 개 쉬운 문제인가
소스코드도 한 번 봅시다.
<?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
-->
여기서 중요한 부분은 딱 한 부분입니다.
if(isset($row['id'])){
if($id=='guest' || $id=='blueh4g'){
echo "your account is blocked";
}else{
echo "login ok"."<br />";
echo "Password : ".$key;
}
row 에 id 값이 있을 시 guest 나 blueh4g 이면 blocked 되고 아니면 키를 주는거네요.
ㅇㅋ ㄱ다
원하는 바와 같이 아이디는 guest 가 아니며 비밀번호 또한 blue가 아닙니다.
?
앟...
여기서 엄청 막혔었습니다. 제가 잘못한 건 줄 알고 조합 다해서 풀어보고... 몰라서 mqsql 문에 관하여 구글링을 해보기 시작했습니다.
php 는 대소문을 구별하나 mysql 문은 대소문을 따로 구별 안 한다고 하네요.
다른 예제는 나중에 찾아 올려드리도록 하겠습니다.
그래서 아이디를 대문자 GUEST 비밀번호를 소문자 guest 로 쳐본 결과 그냥
바로 flag 값을 주네요.
저렇게 아이디 비밀번호 비교하는 php문이 단순할 때는 대소문자로도 우회하는 방법이 있다는 것을 알아 두어야 할 것 같습니다.
아이디가 GUEST로 넘어가기만 하면 비밀번호는 상관없이 키가 나오는 줄 알았는데 아니네요... 크흠..
궁금하시거나 모르시는건 댓글로 말해주세요.
'web_security > wargame.kr' 카테고리의 다른 글
[wargame.kr] strcmp (0) | 2019.01.13 |
---|---|
[webhacking.kr] 4번 문제 풀이 (0) | 2019.01.12 |
[wargame.kr] 3번 flee button 문제 풀이 (0) | 2019.01.10 |
[wargame.kr] 2번 QR CODE PUZZLE 문제 풀이 (0) | 2019.01.09 |
[wargame.kr] 1번 already got 풀이 (0) | 2019.01.08 |