-
[cor] whack a frogCTF/forensic 2022. 8. 15. 16:57
이 문제는 pcap 파일과, 사이트 주소를 하나 준다.
https://whack-a-frog.be.ax/
whack-a-frog.be.ax
이 사이트에서 통신한 기록을 가지고 무엇을 해야하나보다.
우선 wireshark를 통해 pcap 파일을 뜯어보았다.
중간중간에 /anticheat?x=*&y=*&event=* 처럼 통신한 흔적이 보인다.
burpsuite로 사이트를 잡아보니 마우스 클릭, 클릭 해제, 이동과 같은 모든 행동에 대해 통신한다는 것을 알 수 있었다.
클릭을 하고 드래그를 하고 이런 저런 행동을 한 것이 모두 pcap 파일에 저장되어 있는 것이다.
우선 tcp 통신에 대한 패킷들만 추려냈다.
tcp.stream tcp.stream을 통해 tcp 통신만 추려냈고 이 내용들을 txt 파일로 추출해왔다.
file->export->as plain text 이제 이 파일을 가지고 파싱을 해야한다.
엄청난 양이다.
우선 txt파일에서 내용을 모두 읽어온 다음, event가 포함된 줄만 받아와서 x와 y, event를 파싱해 경우에 따라 작업을 해주면 되겠다.
마우스 드래그는 클릭 이후에 드래그를 할 테니, 마우스가 클릭된 이후에만 마우스 이동 이벤트를 신경써야 한다.
2차원 배열을 크게 만들어 모두 빈칸으로 초기화 시킨 다음, 마우스 이벤트에 따라 *을 넣고 마지막에 출력시키면 무엇인가 나올 것이다.
f = open('./tcp.txt', 'r', encoding='utf-8') data = f.readlines() isMouseDown = 0 height = 100 width = 700 #make width=700 height=100 table table = [ [ ' ' for _ in range(width) ] for _ in range(height) ] for line in data: #parsing events if 'event' in line: tmp = line.split('?')[1].split('&') #parsing x, y, event x = tmp[0].split('x=')[1] y = tmp[1].split('y=')[1] event = tmp[2].split(' ')[0].split('event=')[1] #event handler if event == 'mouseup': isMouseDown = 0 elif event == 'mousemove' and isMouseDown == 1: table[int(y)][int(x)] = '*' elif event == 'mousedown': isMouseDown = 1 for i in table: for r in i: print(r, end="") print("") f.close()
위와 같이 코드를 짰고 실행시켜보니 플래그가 나왔다.
LILYXOX