Packet Madness 200 풀이를 통한 패킷 분석 연습

DEFCON 18 CTF 예선의 Packet Madness 200점 문제의 풀이입니다. 이 문제를 통해 패킷 분석의 기초를 연습할 수 있습니다.

문제


These folks speak a different language. Join their site and translate the key for us.

File : pkt200_55216efa7a182fb0.pcap

패킷 분석


사용자 삽입 이미지그림 1 : Wireshark 로 본 pkt200_55216efa7a182fb0.pcap

Packet Madness 유형은 패킷을 분석하는 문제입니다. 그래서 문제에 pcap 파일이 주어지죠. pcap 파일을 Wireshark 로 열면 [그림 1]과 같이 잘 정리되어서 패킷들이 보입니다. 사실, 말이 잘 정리된 것이지, 너무 잘 정리되어 있어서 처음 보는 사람은 이게 뭔가 싶을 정도로 복잡합니다.

우선, 패킷 분석을 할 때 가장 먼저 봐야할 것은 어떤 프로토콜로 통신을 했는가입니다. 5번 째 열을 보면 프로토콜 종류가 나오죠. 이 문제에서는 다행히 TCP 프로토콜을 이용하였습니다. TCP 나 UDP, SSL 프로토콜 패킷은 다른 프로토콜에 비해서 분석하기가 조금 편합니다. Follow Stream 기능을 이용하면 보기 쉽거든요.

사용자 삽입 이미지그림 2: Follow TCP Stream

Follow TCP Stream 을 이용하여 EBCDIC 인코딩으로 보면 두 엔드포인트 간의 통신 내용을 볼 수 있습니다. 언뜻 내용을 훝어보면, 계정 생성, 로그인, 안내 메시지 등등을 볼 수 있습니다.

[자세한 내용을 보려면 클릭]
For help at any time enter: ?%.
cmd : .
?%
a – new user%l – login%n – news%m – maintenance%q – quit%? – print this message%
cmd : .
a%
New user id: .
marsddtek%
New user password: .
ilovesheep%
Again: .
ilovesh33p%
Passwords do not match.%.
cmd : .
a%
New user id: .
mars.ddtek%
New user password: .
ilovesh33p%
Again: .
ilovesh33p%
Welcome .
mars.ddtek, we hope you enjoy our bbs%.You may now login%.cmd : .
l%
User: .
administrator%
Password: .
password%
Invalid user.%.
cmd : .
l%
User: .
admin%
Password: .
pass%
Invalid user.%.
cmd : .
l%
User: .
root%
Password: .
root%
Invalid user.%.
cmd : .
m%
Please log in to use maintenance mode.%.
cmd : .
n%
Please log in to read the news.%.
cmd : .
l%
User: .
mars.ddtek%
Password: .
ilovesh33p%
Welcome back.
mars.ddtek.%.
cmd : .
m%
Insufficient privileges.%.
cmd : .
l%
User: .
Admin%
Password: .
admin%
Invalid user.%.
cmd : .
l%
User: .
Admin%
Password: .
12345%
Invalid user.%.
cmd : .
?%
a – new user%l – login%n – news%m – maintenance%q – quit%? – print this message%
cmd : .
q%

다음으로 분석할 것은 엔드포인트의 IP 와 Port 입니다. 3번 째, 4번 째 열이 두 엔드포인트의 IP 이고, 6번 째 열의 첫 번째 정보가 각각의 Port 입니다. Endpoint List 기능을 이용하여도 확인할 수 있죠. 이 문제에서는 192.41.96.15 이 사용자이고, 192.41.96.121 이 서버일 것으로 추측할 수 있습니다. 서버는 sun-as-jmxrmi 서버인데, 이것은 8686 Port 를 흔히 사용합니다. 기본 Port 번호에 대해서는 [^1]참고 문서에 잘 나와 있습니다.

이로소 필요한 정보는 모두 분석되었습니다. 이 문제를 풀기 위해서는 192.41.96.121 서버의 8686 Port 로 접속하고 pcap 파일의 통신 내용을 바탕으로 하여 키를 얻어야 할 것입니다.

문제 풀이


서버에 접속하여 EBCDIC 인코딩을 풀어주는 프로그램을 python으로 작성하였습니다.

#!/usr/bin/python

import socket
import threading

HOST = '192.41.96.121'
PORT = 8686

class ConnThread(threading.Thread):

       def __init__(self):
              threading.Thread.__init__(self)
              self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

       def run(self):
               self.sock.connect((HOST, PORT))
               msg = self.recvMsg()
               while msg:
                      print msg.decode('EBCDIC-CP-BE').encode('ascii')
                      msg = self.recvMsg()

       def sendMsg(self, msg):
               self.sock.send(msg.decode('ascii').encode('EBCDIC-CP-BE') + '%')

       def recvMsg(self):
               return self.sock.recv(1024)

if __name__ == '__main__':
       c = ConnThread()
       c.start()

       while 1:
               c.sendMsg(raw_input())


아래는 작성한 프로그램으로 서버에 접속한 로그 중 일부입니다.


cmd :
n
Welcome to our news bulletin board
5/21/2010 – Defcon qualifiers are underway.
5/18/2010 – It’s Bob Randolph’s birthday today, wish him well
      if you see him
5/16/2010 – It’s IBM old timer’s night at the bowling alley.
      The key thing to remember at these things is that:
      once upon a time IBM ruled the world
4/29/2001 – First post! w00t!

처음에는 pcap 파일에 나와 있는 mars.ddtek 계정으로 로그인하여 maintenance 를 열면 키가 나올 줄 알았는데, pcap 파일의 통신 내용을 자세히 보면 그 계정도 권한이 부족하다는 것을 알 수 있습니다. 그래서 news 를 자세히 읽어봤더니 조금 황당한 글귀가 있었네요.

5/16/2010 – It’s IBM old timer’s night at the bowling alley.
      The key thing to remember at these things is that:
      once upon a time IBM ruled the world

해석하면, “IBM 어쩌구저쩌구~~~. 기억해야 할 키다: once upon a time IBM ruled the world” 입니다. 키는 바로 “once upon a time IBM ruled the world” 이었네요.

참고 문서


『와이어샤크를 활용한 실전 패킷 분석』 :: http://www.acornpub.co.kr/book/packet
Converting EBCDIC characters to ASCII :: http://mail.python.org/pipermail/tutor/2008-November/065293.html
PORT NUMBERS :: http://www.iana.org/assignments/port-numbers

  1. PORT NUMBERS

Similar Posts

  • 까보소 :: 보안의 흐름은 스마트폰으로?

    애플 모바일운영체제(iOS) 신규취약점 주의 http://kjcc2.tistory.com/710 다들 아시다시피 아이폰, 아이패드, 아이팟의 IOS 에서 취약점이 발견되었습니다. 최초에 이 취약점은 탈옥(Jailbreak)용으로 발표되었는데, 원격 코드 실행과 권한 상승이 가능하여 긴급 취약점으로 분류되었지요. Apple iOS pdf Jailbreak Exploit :: http://www.exploit-db.com/sploits/ios_pdf_exploit.7z 이번 취약점은 PDF 파일의 폰트를 처리하는 과정에서 발생하며, 아래 자료에서 잘 설명되어 있습니다. Jailbreak with PDF FlateDecode filter :: http://digdog.tumblr.com/post/894317027/jailbreak-with-pdf-flatedecode-filter…

  • DEFCON 2009 :: Binary L33tness 100, EDB로 풀어보자.

    지난 6~8일에 있었던 데프콘 CTF 예선 문제입니다. 위 그림처럼 실행하면 암호를 묻고 틀린다면, 욕을 하는 기분 나쁜 녀석입니다. 기분도 나빠졌으니 까짓꺼 한 번 깨줘야겠죠? 준비 사항 리눅스 계열의 OS. libnet1 패키지 Evans Debugger 이 파일은 ELF 포맷으로 되어 있습니다. ELF란 유닉스, 리눅스 등의 실행 파일의 구조인데 ,이에 대해 설명하려면 끝이 없으니 자세한 내용을 알고 싶으시면…

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다