일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 포렌식
- 버그헌팅
- webhacking
- C언어
- 정보보안
- Pwnable
- 문제풀이
- 네퓨즈
- CTF
- 프로그래밍
- WarGame
- 웹해킹
- wargame.kr
- 시스템
- xcz
- nefus
- 코드게이트
- 블록체인
- DVP
- webhacking.kr
- hacking
- 워게임
- 해킹
- 정보보호
- 선린인터넷고등학교
- 포너블
- kangsecu
- 보안
- 자료구조
- 버그바운티
- Today
- Total
kangsecu's B1og
[Wargame.kr] login filtering 문제풀이 본문
이번 시간에는 [Wargame.kr]의 문제인 login filtering 이라는 문제를 풀어보겠습니다. 이 문제의 점수는 450p 입니다.
우선 문제에 들어가면 이렇게 id와 password를 입력할 수 있는 로그인 폼이 있습니다.
밑에 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
-->
자 이제 코드를 분석 해보도록 하겠습니다.
if (isset($_GET['view-source'])) {
show_source(__FILE__);
exit();
}
이 부분은 우선 코드를 보여주는 부분입니다.
if(isset($_POST['id']) && isset($_POST['ps'])){
include("../lib.php"); # include for auth_code function.
id와ps부분에 파라미터가 있으면 lib.php를 함수에 포함시킵니다.
mysql_connect("localhost","login_filtering","login_filtering_pz");
mysql_select_db ("login_filtering");
mysql_query("set names utf8");
이 부분은 쿼리를 연결 시키는 코드 입니다. mysql을 사용할때 사용하죠.
$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')"));
이 부분은 post로 전송한 id 와 ps를 escape한 후 각각 $id , $ps에 넣고, $row에 명령문을 실행한 결과를 넣는 부분 입니다.
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..";
}
}
마지막으로 이 부분은 $row에 id변수값이 존재할경우 에는 guest 나 blueh4g 일 경우메세지출력 하고 아닐 경우에 key값을 보여줍니다.
&row에 id변수값이 존재하지않을경우엔 메시지를 출력합니다.
주석 부분은 그냥
<!--
you have blocked accounts.
guest / guest
blueh4g / blueh4g1234ps
-->
당신은 guest / guest 와 blueh4g / blueh4g1234ps 라는 두개의 막힌 계정을 가지고 있다는 뜻 입니다.
===============================================================================================================
자 그럼 이제 본격적으로 풀어 보도록 하겠습니다.
우선 쿼리에서는 대문자와 소문자의 구분이 없습니다. 그리고 이걸 이용하여 문제를 해결하면 됩니다 .
ex)
id에 guest를 입력하게 되면 php코드에 의해서 your account is blocked 이라는 문자가 출력 되지만,
id에 guest를 앞에 g만 대문자인 id=Guest를 넣어주면 php코드에서 필터링이 되지않으며 쿼리에서는 guest와 같은 값 인줄 알고 key를 내어준다는 문제입니다.
그렇다면 간단하게
id=Guest pw=guest를 입력해주면 클리어 하게 됩니다.
이상으로 풀이를 마치겠습니다.
'Web Hacking > wargame.kr' 카테고리의 다른 글
[Wargame.kr] DB is really GOOD 문제풀이 (0) | 2017.12.26 |
---|---|
[Wargame.kr] Qr code puzzle 문제풀이 (0) | 2017.05.01 |
[Wargame.kr] WTF_code 문제풀이 (0) | 2017.04.29 |
[Wargame.kr] flee button 문제풀이 (0) | 2017.04.29 |
[Wargame.kr] already got 문제풀이 (0) | 2017.04.29 |