ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [취약점분석] 네이트 앱스토어 (BuddyPang) 인증 취약점
    0x04 Security/vulnerabilities 2010. 10. 28. 10:49



    1. 요약


    버디팡이라는게임은 네이트 앱스토어에서 서비스하는 SNS방식의 게임서비스이다. 

    친구들을 초대해서 같이 게임을 즐길수있고 전체랭킹, 일촌랭킹등의 서비스를 제공한다.

    게임상에서는 캔디를 모아 게임을 진행할수있고 연료의주입과 아이템을 살수도있다. 

    그러나 이게임에는 오고가는 정보들이 암호화되어있지 않은것이 취약점으로 존재한다.


    2.  취약점 분석 

     

    게임을 시작하면 서버로부터 다음과 같은 정보들을 POST방식으로 요청하게된다. 


    POST /game/buddypang/buddypang.php HTTP/1.1

    Accept: */*

    Accept-Language: ko-KR

    Referer: http://link1.mireene.com/~fever/game/buddypang/BangTheFriend.swf?v=1267327197773

    x-flash-version: 10,0,45,2

    Content-Type: application/x-www-form-urlencoded

    Content-Length: 90

    Accept-Encoding: gzip, deflate

    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)

    Host: feverapps.co.kr

    Connection: Keep-Alive

    Cache-Control: no-cache


    uAgree=Y&uSeq=36006938&frSeqs=54086339%2C49700138&uNm=

    %EB%B0%95%ED%83%9C%EC%A7%84&mode=all


    이걸 토대로 본다면 

    실제로 swf 파일이 있는  서버 http://link1.mireene.com/~fever/game/buddypang/BangTheFriend.swf

    에서 swf파일을 Load 해올것이고 


    아래 정보들을 보면 uSeq 정보는 미니홈피의 tid 값의 정보이고 

    frSeqs 는 친구들의 tid값이라는것을 알수가있다. 

    uAgree는 사용자가 게임약관에 동의를 했는지 안했는지 체크를 하는 변수인것같다. 


    그래서 실행을 한다음 Start버튼을 누르면 다음과 같은 정보를 전송한다


    ===================================================================

    POST /game/buddypang/buddypang.php HTTP/1.1

    Accept: */*

    Accept-Language: ko-KR

    Referer: http://link1.mireene.com/~fever/game/buddypang/BangTheFriend.swf?v=1267327197773

    x-flash-version: 10,0,45,2

    Content-Type: application/x-www-form-urlencoded

    Content-Length: 54

    Accept-Encoding: gzip, deflate

    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)

    Host: feverapps.co.kr

    Connection: Keep-Alive

    Cache-Control: no-cache


    ump=1090&uSeq=36006938&ucu=0&ucd=8053&urp=990&mode=gst

    ===================================================================


    ump : 사용자의 파워 

    uSeq : 게임하고자하는사람의 미니홈피 tid값

    ucu : 유저의 승리횟수

    ucd : 유저의 캔디갯수 

    urp : ?

    mode : gst -> 게임시작

       all  -> 전체 

       brt -> ? 



    캐릭터가 공중을 날다가 떨어지게되면 다음과같은 패킷이 발생한다. 


    ===================================================================


    게임체크패킷 


    POST /game/buddypang/buddypang.php HTTP/1.1

    Accept: */*

    Accept-Language: ko-KR

    Referer: http://link1.mireene.com/~fever/game/buddypang/BangTheFriend.swf?v=1267327197773

    x-flash-version: 10,0,45,2

    Content-Type: application/x-www-form-urlencoded

    Content-Length: 49

    Accept-Encoding: gzip, deflate

    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)

    Host: feverapps.co.kr

    Connection: Keep-Alive

    Cache-Control: no-cache


    uSeq=36006938&frSeqs=54086339%2C49700138&mode=brt



    -------------------------------------------------------------------


    서버에 값을 등록시켜주는 패킷 


    POST /game/buddypang/buddypang.php HTTP/1.1

    Accept: */*

    Accept-Language: ko-KR

    Referer: http://link1.mireene.com/~fever/game/buddypang/BangTheFriend.swf?v=1267327197773

    x-flash-version: 10,0,45,2

    Content-Type: application/x-www-form-urlencoded

    Content-Length: 802

    Accept-Encoding: gzip, deflate

    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)

    Host: feverapps.co.kr

    Connection: Keep-Alive

    Cache-Control: no-cache


    dlg=%C2%9B97%3B%3FF%3E%40EGDDJIGGKJRILNSURRXWVU%5DZ%60b%EB%B0%BE%ED

    %84%86%EC%A7%AF%5B%60d%5F%60gkfld%EB%B1%8B%ED%84%93%EC%A7%

    BCsporkwtzurrv%7Dt%7C%7B%7E%7B%C2%80%C2%81%C2%82%7E%C2%85%C2

    %81%C2%89%C2%83%C2%8C%C2%87%C2%84%C2%88%C2%88%C2%86%C2%8E%C2

    %8E%C2%94%C2%90%C2%92%C2%92%C2%95%C2%91%C2%95%C2%99%C2%97%C2

    %95%C2%97%C2%99%C2%A1%C2%99%C2%99%C2%A3%C2%9B%C2%9B%C2%9E%C2

    %9E%C2%A8%C2%A0%C2%AB%C2%A2%C2%AD%C2%A4%C2%AF%C2%A6%C2%B1%C2

    %AB%C2%B3%C2%AA%C2%AA%C2%B4%C2%AD%C2%B3%C2%B2%C2%BA%C2%B2%C2

    %B1%C2%B4%C2%B8%C2%BA%C3%80%C2%B8%C2%BA%C2%B9%C2%B9%C2%BD%C2

    %BC%C2%BE%C2%BE%C2%BD%C3%80%C3%83%C3%80%C3%85%C3%8A%C3%8F%C3

    %87%C3%89%C3%8E%C3%90%C3%8D%C3%8D%C3%93%C3%92%C3%91%C3%90%C3

    %99%C3%92%C3%99&uwc=0&fsk=36006938&ucr=646%2E95&umc=13218%2E63&fwn=N&

    mode=rst&ump=1090&uSeq=36006938&mcd=&myn=&urp=990&ymd=&ucd=8053&mtp=


    -------------------------------------------------------------------


    다시 리스트를 갱신해서 가져오는 패킷


    POST /game/buddypang/buddypang.php HTTP/1.1

    Accept: */*

    Accept-Language: ko-KR

    Referer: http://link1.mireene.com/~fever/game/buddypang/BangTheFriend.swf?v=1267327197773

    x-flash-version: 10,0,45,2

    Content-Type: application/x-www-form-urlencoded

    Content-Length: 49

    Accept-Encoding: gzip, deflate

    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)

    Host: feverapps.co.kr

    Connection: Keep-Alive

    Cache-Control: no-cache


    uSeq=36006938&frSeqs=54086339%2C49700138&mode=all


    ===================================================================



    2010-02-28 12;34;17.jpg


    packet.jpg

    위의 패킷을 토대로 조작을 하면 다음과같이 플레이가 가능하다 




    3. 결론 

    위의 정보를 토대로 요약하자면 다음과 같이 정보를 주고받는다. 


      1. 사용자의 게임접속 요청 

    2. 서버에서 정보를가져옴 

    3. 시작을했을경우 시작한 값을 넘겨줌 

    4.  땅에 닿았을경우 친구들의 목록을 가져옴

    5.  서버로 게임결과를 보냄

    6.  서버로부터 갱신된 데이터를 가져옴 


    다음과 같이 패킷이 오가는것을 확인할수있었다.

    위와같은 SNS방식의 게임은 앞으로 많이 나올텐데 값의 인증방식이 너무 허술한것같다.

    값을 그냥 평문으로 전송할것이 아니라 암호화를 거쳐서 전송을 하고

    값을 조작했는지 안했는지 알기위한 패리티비트를 넣어주면 좋을것같다.

Designed by Tistory.