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

2010/06/01 23:54

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 인코딩으로 보면 두 엔드포인트 간의 통신 내용을 볼 수 있습니다. 언뜻 내용을 훝어보면, 계정 생성, 로그인, 안내 메시지 등등을 볼 수 있습니다.

[자세한 내용을 보려면 클릭]


다음으로 분석할 것은 엔드포인트의 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 ··· 293.html
PORT NUMBERS :: http://www.iana.org/assignments/port-numbers
크리에이티브 커먼즈 라이센스
Creative Commons License
주석.
  1. PORT NUMBERS

6l4ck3y3 0x05 Network RCE , ,

Trackback Address:http://hisjournal.net/blog/trackback/318