주어진 예제에 대해 문제를 풀어보며 와이어샤크 사용 방법을 익히고 네트워크 포렌식의 기본적인 방법을 알아보자...
주어진 pcap 파일을 와이어샤크로 열고 netcat-0.7.1.tar.gz 파일 다운로드되는 부분을 필터를 걸어 검색해보자
http.request.method == GET && http.request.uri contains "netcat-0.7.1.tar.gz"


패킷번호는 찾았다. 근데 여기서 멈추면 아쉬우니 전송되는 파일도 추출해보자
HTTP Stream으로 열고 해당 내용을 test.tar.gz으로 저장후 HxD를 통해 열버보았다.

HxD로 열어보면 시그니처가 안보인다. GET 메소드가 보이는걸 보니 앞부분을 제거해줘야한다.

페이로드가 압축파일(gz)인것을 이미 알고있다. 그럼 gz의 시그니처를 확인하고 해당 시그니처 기준 앞부분을 다 날리면 페이로드를 얻을 수 있을것이다.
GZ의 시그니처는 1F 8B 08 이다.

HxD의 찾기 기능을 통해 시그니처 값을 찾고 해당 부분 앞을 전부 제거해주자

저장하면 정상적으로 파일이 열리는 것을 확인할 수 있다.

해당 방법 말고도 와이어샤크에서 제공하는 기능을 통해 추출할 수도 있다.



아니면 NetworkMiner같은 툴로 뽑아내도 된다.

앞에서 이미 확인한 정보다.
http://iweb.dl.sourceforge.net/project/netcat/netcat/0.7.1/netcat-0.7.1.tar.gz
와이어샤크에서 ip값을 필터를 걸어 확인해보면 쉽게 확인가능하다.
ip.addr == 216.34.181.60 && tcp.port == 80

마찬가지로 필터걸어서 확인해보자
frame.number == 4503


tshark를 이용해도 쉽게 확인가능하다.
tshark -r Download_PCAP.pcap -Y “frame.number == 4503”

tshark -r Download_PCAP.pcap -Y "frame.number == 4503" -T fields -e http.referer

필터걸어서 확인하자
현재는 몇개없어서 직접 카운팅 했는데 많다면 tshark 써서 보는게 더 편할 것 같다.

필터걸어서 확인해보자 Content length 값을 확인하면 된다.
http.request.url contains "3DaySale_300x250_Plane4_Fly_for_72.jpg"

tshark로도 가능하다.
tshark -r Download_PCAP.pcap -Y "http.response" -T fields -e http.content_length -e http.response_for.uri 2> /dev/null | grep "3DaySale_300x250_Plane4_Fly_for_72.jpg”

필터걸어서 패킷 번호 확인하자
dns.qry.name == "www.google.com" && dns.flags.response == 1

tshark로도 해보았다.
tshark -r Download_PCAP.pcap -Y "dns.qry.name == "www.google.com" && dns.flags.response == 1" -T fields -e frame.number 2> /dev/null




하나씩 찍어보다 수상해보이는것을 찾았다.


전송된파일 찾기

PK 보이는거 보니 ZIP 파일이다. 근데 뒤에 쓰레기값 붙어있다. 제거하고 zip으로 저장하면 내용을 볼 수 있다.





문제풀면서 와이어샤크 필터 종류가 정말 많다는 것을 뼈저리게 느꼈다... 필터들을 잘 알고있으면 손쉽게 내가원하는 정보만 쏙쏙 빼서 볼 수 있을것 같은데 필터 종류가 한두개가 아니다보니 자주쓰는것만 외우게 되고 쓸때마다 검색해보고 하게 되는 것 같다.
요즘 트랜드인 MCP를 여기다 붙여서 필터거는 부분을 생성형 AI한테 맡기면 편할것 같다...라는 생각을 했는데 찾아보니 이미 깃헙에 관련 프로젝트가 존재한다.
이런걸 볼때마다 사용하면 정말 손쉽게 문제해결이 되는데 이게 공부하는 입장에서 써야하나 아니면 스스로 한땀한땀 삽질하며 해야하나 고민이 많이 된다....