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
패킷 분석

Packet Madness 유형은 패킷을 분석하는 문제입니다. 그래서 문제에 pcap 파일이 주어지죠. pcap 파일을 Wireshark 로 열면 [그림 1]과 같이 잘 정리되어서 패킷들이 보입니다. 사실, 말이 잘 정리된 것이지, 너무 잘 정리되어 있어서 처음 보는 사람은 이게 뭔가 싶을 정도로 복잡합니다.
우선, 패킷 분석을 할 때 가장 먼저 봐야할 것은 어떤 프로토콜로 통신을 했는가입니다. 5번 째 열을 보면 프로토콜 종류가 나오죠. 이 문제에서는 다행히 TCP 프로토콜을 이용하였습니다. TCP 나 UDP, SSL 프로토콜 패킷은 다른 프로토콜에 비해서 분석하기가 조금 편합니다. Follow 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
Trackback Address:http://hisjournal.net/blog/trackback/318