'전체 글'에 해당되는 글 1000건


wargame.kr 5번 wtf_code 라는 문제다.


점수는 450 point! 일단 한번 들어가보독 하자.


흠.. 뭔가 처음보는 언어가 나타날 것 만 같다. 일단 한번 시작해보도록 하자.




 




들어가보니 소스를 다운 받으라 한다. 일단 형식자체가 처음보는 형식이다. ws? 






일단 텍스트 파일로 열어 보았다.



 





..........??.............뭐냐 너는....?? 이게 소스코드라고?


보아하니 일단 공백들이 엄청나게 많다. 저 검은색 동그라미는 뭐냐또....


일단 확장자를 구글링을 해봤다. 찾아보니 저게 whitespace라는 space,tab,enter로 이루어진 언어로 짜여진 코드란다.


뭐 이런게...세상엔 참 별에별게 다 있는거같다...




자 다음은 그럼 이 코드를 해석을 해야 할 거 같다. 


찾아보니 http://ideone.com/ 라는 사이트에서 컴파일이 가능한거 같다.


자 한번 돌려보자.


 




오... 키 값이 나왔다. 첨봤을땐 진짜 뭐하자고..? 했던 그런 문제였다.


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr fly me to the moon  (0) 2018.01.04
wargame.kr DB is really GOOD  (0) 2018.01.04
wargame.kr login filtering  (0) 2018.01.04
wargame.kr flee button  (0) 2018.01.04
wargame.kr QR CODE PUZZLE  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

자 wargame.kr 4번 login filtering이다. 점수는 450 point!

 

흠.. 계정은 있는데 블락당해 있단다. 필터링해서 로그인 할수 있냐고?

 

일단 한번 시작해보자!

 

 

 

로그인 창이 나오고 친절하게 소스를 보라고 한다. 보라면 봐야지. 한번 확인해 보도록 하자.​

----------------------------------------전체 소스-----------------------------------------------​

<?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'])){                     /* POST 방식으로 입력받은 id,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");

 /* mysql_real_escape_sting, trim 함수를 통해 공백문자와 특수문자를 제외하여 sql injection을 예방한다. */

  $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'])){                                            /* id 값이 존재 하는지 확인한다. */ 
   if($id=='guest' || $id=='blueh4g'){                   /* id 값이 guest or blueh4g 이면 블락된 상태 */
    echo "your account is blocked";
   }else{
    echo "login ok"."<br />";                               /* id 값이 guest or blueh4g 만 아니면 성공 */
    echo "Password : ".$key;
   }
  }else{
   echo "wrong..";                                          /* id 값이 존재하지 않으면 오류 출력 */
  }
 }
?>
<!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                                   /*  힌트 부분인 것 같다. guest와 blueh4g에 대한 id, password가 나와있다. */
blueh4g / blueh4g1234ps

-->​

 

-------------------------------------------------------------------------------------------------------​

 

간단하게 주요 소스에 대한 부분만 주석을 통해 설명하였다.

 

 

<!--

you have blocked accounts.

guest / guest                                   /*  힌트 부분인 것 같다. guest와 blueh4g에 대한 id, password가 나와있다. */
blueh4g / blueh4g1234ps

-->​

 

 

​먼저 힌트에서 주어진 대로 guest/guest를 입력해 보았다.

 

your account is blocked

블락당해있다고 출력된다. 필터링을 우회해야 할 것 같다.​

가장 핵심이 되는 부분은 이 부분인 것 같다.

 

if($id=='guest' || $id=='blueh4g'){                   /* id 값이 guest or blueh4g 이면 블락된 상태 */
    echo "your account is blocked";
 }else{
    echo "login ok"."<br />";                               /* id 값이 guest or blueh4g 만 아니면 성공 */
    echo "Password : ".$key;
 }

 

php의 경우 대소문자를 구분하지만 쿼리자체는 대소문자를 구별하지 않기 때문에 guest를 Guest로 바꾸어 입력해 보았다.​ 

 

 

 

 

 

성공! md5방식으로 인코딩된 password가 출력되었따.

 

Post 입력을 통해 받은 Guest 아이디가 디비에선 실제로 guest 아이디의 값들을 가져와 php는 필터링을 위한 아이디 비교 부분에서

잘못된 사용자 아이디로 로그인한 공격자의 우회공격을 필터링 하지 못하였다. 

 

앞선 문제들보다는 조금 더 생각을 해봐야 했던 문제였던 것 같다.


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr DB is really GOOD  (0) 2018.01.04
wargame.kr wtf_code  (0) 2018.01.04
wargame.kr flee button  (0) 2018.01.04
wargame.kr QR CODE PUZZLE  (0) 2018.01.04
wargame.kr 1번 already got.. : 네이버블로그  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

wargame.kr 3번 flee button !!

 

흠.. 450점으로 점수가 꽤나 올라갔다. 1,2번 보다는 확실히 어려울 것 같은 느낌..?

 

버튼을 클릭해보라고? 근데 못잡아? 일단 한번 시작해보도록 하자. 

 

 

 

 

................... 뭔가 쌔까맣다.... 클릭하라고...?

 

근데 아무리 클릭을 하려고 해봐도 클릭이 안된다....

 

캡처하다보니 마우스 포인터가 안보이는데 누르려고 하면 자꾸 도망을 간다.........야이자식아.........누르라매.....

 

 

 

휴... 진정하고 일단 소스부터 보도록 해보자.

 

 

흠... 보아하니 저 망할놈의 버튼을 누르면 현재 창에 ?key=5893 라는 값을 넘겨주는 것 같다.

 

도저히 직접은 못누르겠으니 한번 입력해보겠다.

 

 

나왔다... 너였구나... 휴..

 

근데 뭔가 풀어도 기분이 그닥 좋지가 않다. 농락당한 느낌 ㅠ

 

4번 문제는 이녀석처럼 약올리지 않았으면 좋겠다.


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr DB is really GOOD  (0) 2018.01.04
wargame.kr wtf_code  (0) 2018.01.04
wargame.kr login filtering  (0) 2018.01.04
wargame.kr QR CODE PUZZLE  (0) 2018.01.04
wargame.kr 1번 already got.. : 네이버블로그  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,