본문 바로가기
Forensic

[Square CTF] Sniffed Off the Wire

by L3m0n S0ju 2021. 8. 15.

Name

sniffed-off-the-wire - Sifting through the noise

Points

100 points

Type

Forensics

Description

After weeks of perching, our avian operatives captured a suspicious network flow. Maybe there's valuable data inside?

 

몇 주 동안 앉았던 후, 우리의 조류 요원들은 의심스러운 네트워크 흐름을 포착했습니다. 내부에 귀중한 데이터가 있는 것은 아닐까?

 

sniffed-off-the-wire.pcap

See also

Work_at_Square(1), Privacy_policy(1), Code_of_conduct(1)

 

 

 

 


와이어샤크로 TCP 스트림을 관찰하면 한쪽에서 상대방에게 특정한 패턴의 데이터를 전송합니다. 해당 데이터들을 살펴보면 아래와 같이 패턴이 있습니다.

 

 

1b 5b 31 32 3b 35     48 5a

1b 5b 31 36 3b 32 33 48 44

1b 5b 38     3b 32     48 4b

 

아스키코드 값을 살펴보면

 

1b = ESC

5b = [

38 = ;

48 = H

 

ESC [{ROW};{COLUMN}H 형태를 가지고 있음을 알 수 있습니다. 해당 형태는 ANSI 이스케이프 코드라 불리며 터미널에서 텍스트가 아닌 명령어로 해석됩니다. 정의는 아래와 같습니다.

 

Cursor Home <ESC>[{ROW};{COLUMN}H

  • Sets the cursor position where subsequent text will begin. If no row/column parameters are provided (ie. <ESC>[H), the cursor will move to the home position, at the upper left of the screen.


출처: https://keydisk.tistory.com/entry/ANSI-escape-code []

 

예시) 1b5b353b31394841 -> [ESC][5;19HA -> 5행 19열에 커서를 위치한 후 A를 입력

 

 

 

 

 


from scapy.all import *

pcap = rdpcap("./sniffed-off-the-wire.pcap") # pcap 파일 불러오기
for packet in pcap:  # pcap파일을 패킷 단위로 분리
    if packet.getlayer("TCP").sport == 4321:  # 출발지 포트가 4321인 패킷
        pRaw = packet.getlayer("Raw") # 데이터 저장
        if pRaw != None: #data가 존재한다면
            data = pRaw.load.decode() # 데이터 디코딩
            print(data, end="") # 개행문자 제거 후 터미널에 출력

 

 

 

 


파일 결과를 rst에 저장하고 more 명령어로 출력

 

 

 

 

 


플래그

엔터를 통해 42%정도 가면 플래그가 출력됩니다.

'Forensic' 카테고리의 다른 글

[HackCTF] Secret Document  (0) 2021.09.12
[HackCTF] So easy?  (0) 2021.09.12
[Square CTF] Needle in the haystack  (0) 2021.09.03
[Square CTF] Reading between the lines  (0) 2021.09.02
[Square CTF] The Robot's Grandmother  (0) 2021.08.12

댓글