'Wargame'에 해당되는 글 454건


wargame.kr 11번 strcmp 라는 문제다.

점수는 한단계 오른 550point!

흠... 보아하니 strcmp 함수의 취약점을 가지고 우회를 하란소리인거 같다. 시작해보자.


소스부터 확인해보자.

if (strcmp($_POST['password'], $password) == 0)

이 부분이 핵심 소스 인 것 같다.

이 부분이 성립하게 하려면  입력받은 password 값이 더미 파일로 랜덤하게 돌린 md5, sha1 방식의 암호화를 거친 값과 같아야하는데 sleep 함수로 brute force 공격까지 막고 있고 또 그렇게 풀라고 하는 문제인 것 같지도 않다.

뭔가 strcmp 함수자체에 취약점이 있을 것 같다. php strcmp 취약점으로 구글링을 해보았다.

lucky!! 역시나 php 5.3버전에서 함수의 인자값으로 배열을 주게되면 리턴 값이 0이 되어 두 값이 동일

때와 같아져 비밀번호를 몰라도 우회가 가능하게 된다.


그러면 입력 값을 배열값으로 바꿔 넘기면 자연스럽게 클리어가 될 것 같은 느낌이 든다.

burp suite를 켜서 한번 시도해보자.

맨 밑에 password 값을 넘길때 변수를 배열로 바꿔 배열값으로 넘겼다.


성공! 점수가 올라서 살짝 긴장했는데 비교적 간단했던 문제였다.


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

wargame.kr tmitter  (0) 2018.01.04
wargame.kr type confusion  (0) 2018.01.04
wargame.kr EASY_Crackme  (0) 2018.01.04
wargame.kr md5 password  (0) 2018.01.04
wargame.kr md5_compare  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

wargame.kr EASY_Crackme

2018. 1. 4. 16:40

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.


wargame.kr 9번 md5 password 라는 문제다.

점수는 500 point!

흠.. md5랑 관련이 있는 것 같다. 근데 true라는 옵션은 처음본다. 일단 시작해보자.

흠... 일단 소스부터 확인해보자.

.md5($ps,true) 부분에서 sql 취약점을 찾아야할 것 같다.

일단 true란 옵션은 처음보니 이것부터 알아보도록 하자.

오호.. 찾아보니 출력 값을 기존의 16진수로 출력하는 방식이 아닌 바이너리 형태로 출력한다고 한다.

그렇다면 바이너리 형태로 출력됬을때 ' or '1'='1 같은 sql injection을 발생시키는 md5 hash 값을 찾

아내면 될거라는 결론이 나온다.

검색을 통해 찾아보니  129581926211651571912466741651878684928 라는 값에서 sql

injection이 가능한 hash 값이 출력되는 것 같다.

입력해보았다.


정상적으로 나온다. 성공!


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

wargame.kr strcmp  (0) 2018.01.04
wargame.kr EASY_Crackme  (0) 2018.01.04
wargame.kr md5_compare  (0) 2018.01.04
wargame.kr fly me to the moon  (0) 2018.01.04
wargame.kr DB is really GOOD  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

wargame.kr 8번 md5_compare 라는 문제다.
 
점수는 500point!
 
흠.. 일단 비교해보라고? 알았다. 어디한번 시작해보자.



흠...소스부터 확인을해보자.


흠.. 플래그 값을 얻으려면 chk라는 변수가 true로 유지되어야 하는 것 같다.

유지조건을 살펴보니

첫번째로는 ctype_alpha 함수를 통해 v1에 알파벳 외의 다른 문자가 있으면 안된다.

두번째로는 is_numeric 함수를 통해 v2에 숫자 외의 다른 문자가 있으면 안된다.

마지막으로 md5로 출력한 hash 값이 서로 같아야 한단다.

서로 다른 값을 md5로 돌려서 같아야 된다고..? 아무리 해쉬충돌이 발생할 수 있다지만

그걸 찾아내라는 것도 아닌거 같고 찾고 싶지도 않다.

뭔가 취약점이 있을거 같다.

그럼 그렇지. 찾아보니 php magic hash 취약점이라는게 존재한다.

0e로 시작하는 문자열을 비교하면 typecast가 적용이 되어서 우선순위가 더 높은 float형으로 비교가

되어 둘다 0이 된다는 뜻이다.

즉, md5를 통해 출력된 해쉬 값이 "0e어쩌고"=="0e어쩌고" 형식이되면 0=0으로 바뀌어 비교가 되어

결과가 true가 되게 된다.

오호라...신기하구만...

그러면 해쉬 값이 0e가 나오는 문자열만 찾으면 될 것 같다.

aabg7XSs    aabC9RqS    240610708    QNKCDZO

대충 찾아보니 이렇게 4개 정도를 찾았다.

저중에서 v1은 알파벳만이어야하니까 QNKCDZO를 쓰고 v2는 숫자만이니까 240610708을 써보자.


잘 나온다. 성공!

뭔가 풀면서 새로 알게된 점이 많았던 문제였다.  


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

wargame.kr EASY_Crackme  (0) 2018.01.04
wargame.kr md5 password  (0) 2018.01.04
wargame.kr fly me to the moon  (0) 2018.01.04
wargame.kr DB is really GOOD  (0) 2018.01.04
wargame.kr wtf_code  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

wargame.kr 7번 fly me to the moon 이라는 문제다.


점수는 500 point!


흠.. 부정행위 방지 시스템을 우회하여 게임을 클리어 해보라는 것 같다. 한번 시작해보자.





오호.. 뭔가 재밌어 보이는게 나왔다. 게임인가..? 해보라니까 어디한번 해보자.







..? 31337점을 얻으란다. 근데 2점... 몇번 더 해봤는데 50점이상을 못가봤다.


내가 게임을 못하는게 아니다. 애초에 불가능한 게임이었다.(아마도)


소스부터 확인해보자.







흠... 일단 자바스크립트 부분이 난독화가 되어있다. 상당히 수상한 부분이다.



 


일단 자바스크립트 언팩 사이트를 통해 난독화부터 풀어주자.

https://www.strictly-software.com/unpacker#unpacker



 


난독화된 소스다.


음.... 저 부분 밑으로도 꽤나 긴 소스코드가 있다.


일단 자세하게 살펴보기로 하자.





오.. 분석하다보니  수상한 부분이 발견됬다. 데이터를 어딘가로 보내는 것 같다.


일단 Ox32bb배열 값들은 나와있으니 들어 있는 내용들을 확인해보자.





출력된 결과를 정리 해 봤다.


$[ajax]({

type: "POST",

url: "high-scores.php",

data: "token=" + token + "$score=" + BTunnelGame["getScore"](),

success: function (_0x8618x19) {

showHighScores(_0x8618x19)

}

})


대충 이런코드가 나온다. 음.. 아무래도  BTunnelGame["getScore"]() 부분이 점수 계산해서 얻어오는 부분인 것 같다.


저 부분을 크롬 개발자 모드로 접속 후 31337로 바꿔서 전송해보자.



 



키 값이 나왔다. 성공!


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

wargame.kr md5 password  (0) 2018.01.04
wargame.kr md5_compare  (0) 2018.01.04
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
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

wargame.kr 6번 DB is really good 라는 문제다.


점수는 500 point!


흠.. 뭔가 하고 보니 데이터베이스 종류가 뭐냐고 묻는다.


근데 유저 이름과 데이터베이스의 연관성을 찾아보란다.


흠.. 일단 들어가보자.





이름을 쓰고 로그인을 하란다. 뭐지? 일단 한번 해보자. 아이디는 내이름!








로그인이 되었다. 흠... 뭐 어쩌라고..? 그러고보니 이름가지고 데이터베이스 종류를 알아내라고 했던거 같다. 


 




일단 소스부터 보도록 하자.




흠... 보아하니 일단 admin 사용자에 대해서 필터링이 되어 있다.


로그인해보니 접속이 안된다.




흠.. 뭐 어쩌라고.. 일단 이름이랑 연관이 있다 했으니 이것저것 이름을 막 쳐봤다.


일단 admin가지고 이것저것 특수문자를 넣어서 하다 보니 오.. /를 넣었을때 에러화면이 처음으로 떴다.



흠... 보아하니 데이터베이스 파일을 열수가 없단다. 


뭔 파일을 여나 봤더니 open('./db/wkrm_a/dmi..') 이부분이 수상하다.

a/dmin이라고 쳤던 아이디가 포함된게 수상하다.


/를 가지고 이것 저것 더 쳐보기로 했다.








오... 보아하니 내가 친 아이디가 디비파일명으로 들어가는 것 같다.


./db/wkrm_{userid}.db 이런 방식이다.


그렇다면 admin의 디비 파일명은 ./db/wkrm_admin.db 일 것 같다. 한번 들어가보겠다.


다운이 받아진다. splite3방식이기 때문에 sqlite viewer 다운로드받아 열어보았다.


 



내용을 확인해보니 


Congratulations!!


Here is flag!


./dhkdndlswmdzltng.php


라는 문구가 보인다.


한번 들어가보자.



 



성공!


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

wargame.kr md5_compare  (0) 2018.01.04
wargame.kr fly me to the moon  (0) 2018.01.04
wargame.kr wtf_code  (0) 2018.01.04
wargame.kr login filtering  (0) 2018.01.04
wargame.kr flee button  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

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

메모 기록용 공간

,

wargame.kr 2번째 문제 QR CODE PUZZLE !!

일단 들어가보자....

300점짜리 문제다! 자바 스크립트 퍼즐? 일단 시작해 보기로 하자!

 

 

 

 

 

??? 학교 도서관 들어갈때 많이 찍었던 qr 코드가 나온다. 오랜만이다 너...

 

 

 

 

 

보아하니 저걸 맞춰야 하는 거 같은데............ 일단 퍼즐이 움직여지는걸로 봐서 수동으로도 가능한거 같긴 하다..

 

심심한데 그냥 맞춰볼까..?... 정신차리자 영신아 그럴려고 이걸 풀고 있는게 아니잖아 ㅠ

 

 

유혹을 떨쳐버리고 소스부터 보기로 했다. 

 

 

 

 

흠... 보아하니 주석처리 되있는 부분이 뭔가 수상하다.

 

그 중에서 unescape('.%2f%69%6d%67%2f%71%72%2e%70%6e%67') 라는 부분이 눈에 띈다. escaple 함수로 인코딩된 16진수들을 다시 아스키코드로 디코딩 하는 것 같다. 

 

네이버에서 url decoder를 검색해 사이트 하나를 찾았다.

http://www.urldecoder.org/

한번 돌려보도록 하자!

 

 

 

./img/qr.png 라는 경로가 나왔다.

 

뭔가가 있을 것만 같다. 한번 들어가 보자!

 

 

오..! 정답으로 보이는 qr code가 나왔다.

실제로 ​입력해본 결과 남은 빈칸 하나는 나머지 부분들을 맞추면 자동으로 생성되었다.!

아직까지는 가벼운 느낌이다!

 


'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 flee button  (0) 2018.01.04
wargame.kr 1번 already got.. : 네이버블로그  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,