티스토리 뷰

728x90
반응형

문제 개요

패킷 캡쳐 파일 하나를 받았습니다. 그리고 URL 하나도 제공 받았는데요. 접속하면 아래와 같은 페이지 하나가 나옵니다.

위 페이지에서는 개구리 부시 하나를 선택하고 마우스를 움직이는 대로 개구리 부시가 그려진다고 합니다. 그리고 실제로 서버로 계속 마우스 움직이는 좌표를 전송하고 있는 것을 볼 수 있습니다.

정확히 어떤 문젠지 모르겠지만, 마우스 포인터의 좌표를 기록하고 있었고, 패킷 캡쳐 내용도 보니깐 캡쳐되는 마우스 움직임의 좌표가 기록되어 있었습니다. 그렇기 때문에 좌표의 움직임을 그대로 재현하면 문제가 풀릴 것 같았습니다.

 

문제 풀이

Wireshark 에서 HTTP GET 메소드만 보게 하기 위해 아래와 같은 필터링을 걸었습니다.

http.request.method==GET

 

이제 위 URL 부분만 모두 추출하고 다시 x와 y 좌표와 event만 모두 추출해보고 하나의 파일로 저장해보겠습니다.

정규식은 대충 이정도로 설정했습니다. x=\d{1,3}&y=\d{1,3}&event=\w*

그리고 x= 와 y= 와 event= 를 제거해주고 파일 하나 생성한 뒤 아래와 같은 목록을 생성하였습니다.

365&10&mousemove
295&20&mousemove
204&31&mousemove
105&39&mousemove
82&39&mousemove
65&37&mousemove
54&34&mousemove
50&34&mousemove
39&30&mousemove
...생략...

총 2203 개의 줄의 좌표들이 생성됩니다.

 

이제 마우스를 드래그 했을 때 그림이 그려져야 한다는 것을 알고 있기 때문에 이 원리를 그대로 적용해서 python turtle 모듈로 한번 그려보았습니다.

import turtle

with open('axis.txt', 'r') as f:
	turtle.setup(1000, 1000)
	window = turtle.Screen()
	t = turtle.Turtle()
	t.shape('turtle')
	t.speed(10)
	t.penup()
	
	lines = f.readlines()
	for i in range(0, len(lines)):
		line = lines[i].strip().split('&')
		if line[2] == 'mousedown':
			t.pendown()
		elif line[2] == 'mouseup':
			t.penup()
		t.goto(int(line[0])-200, int(line[1])+50)

input()

그랬더니 알파벳 7개가 나왔는데, 뒤집어진 꼴이어서 제대로 봤더니 아래와 같이 나왔습니다.

결론적으로 corCTF{LILYXOX} 가 되는 것을 알 수 있습니다.

 

- 끝 -

728x90
반응형
댓글