#About
당신은 당신의 친구인 A씨가 요즘 무언가를 열심히 찾는 모습을 발견하였고, 무엇인가 궁금하여 패킷을 캡쳐 해 내었다.
패킷 분석을 통하여 A씨가 검색한 키워드를 찾아내시오.
(검색 키워드간의 구분은 : 문자로 한다.)
#Solution
[그림 1] - 문제 파일 확인
패킷 파일의 확장자는 pcapng이며 해당 파일의 구조가 궁금하다면 http://croas.tistory.com/1?category=265614 를 참조하길 바란다
해당 파일의 분석은 와이어샤크와 NetworkMinor라는 도구 및 파이썬과 파이썬 기반의 scrapy로도 할 수 있지만 Network Minor는
Professional 버전일 경우에만 pcapng 파일을 분석할 수 있으며 파이썬은 시도해보았지만 무슨 이유에서인지
dpkt 모듈을 이용한 패킷 파일 구조 분석이 되지 않았으며 스카피는 별도로 설치 과정을 거쳐야하므로 무난하게 와이어샤크로 분석하도록 하겠다
[그림 2] - 패킷 파일 열람
위 그림은 패킷 파일을 와이어샤크로 열었을 때의 화면이며 문제에서 요구하는 것은 A씨가 검색한 키워드이므로 A씨는 검색을 할때 서버에게 자원을 요청하기 위해 HTTP Request에서 GET 방식을 사용했을 것이므로 아래와 같이 필터링을 해주었더니 A씨가 검색한 키워드를 확인할 수 있었다
[그림 3] - Method GET 필터링
Method GET만 이용한 패킷만 보았을 때 패킷번호 16,075번에서 확인할 수 있었으며 검색한 키워드는 아래와 같다
[그림 4] - 검색 키워드 확인
Answer = forensics_site:CTF_site
사실 이렇게 단순 노동으로 찾기에는 대량의 패킷이 있을 때에는 상당히 비효율적인 방법이므로 추후에
패킷 분석에 있어 파이썬을 이용할 때 추가 업로드를 진행할 예정이다. 현재는 진행하고 싶어도 잘 되던 dpkt 모듈이 되질 않음
[ + ] Pcapng File Analysis Using Python
update : 2017-11-24
# -*- coding:utf-8 -*-
'''
Title : pcapng file analysis
Author : Loddy
Date : 2017-11-24 01:20
'''
import dpkt
import socket
import urllib
f = open("C:/packet_file_VXYbsJw.pcapng",'rb')
packet = dpkt.pcapng.Reader(f)
pcapng = packet.readpkts()
for timestamp,buf in pcapng:
try:
eth=dpkt.ethernet.Ethernet(buf)
ip=eth.data
tcp=ip.data
http_req = dpkt.http.Request(tcp.data)
src = socket.inet_ntoa(ip.src)
dst = socket.inet_ntoa(ip.dst)
if http_req.uri.find('m?') >=0:
print '[+] src : {} --> dst : {}'.format(src,dst)
print '[+] {}'.format(urllib.unquote(http_req.uri))
print '\n',
except:
pass
[그림 5] - 코드 결과
파이썬을 이용하여 와이어 샤크에서 모든 패킷을 보았을 때와 달리, A씨가 검색한 쿼리의 uri만 추출했더니 간단히 확인할 수 있었다
'Wargame' 카테고리의 다른 글
[Cresendo] IconCache Problem 01 (0) | 2017.11.12 |
---|---|
[Cresendo] Network Problem 03 (0) | 2017.11.11 |
[Cresendo] Network Problem 01 (0) | 2017.11.10 |
[Cresendo] Memory Problem 03 (0) | 2017.11.10 |
[Cresendo] Memory Problem 02 (0) | 2017.11.09 |