티스토리 뷰
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
반응형
'보안 > CTF' 카테고리의 다른 글
[SSTF] [Web] JWT Decoder Writeup(문제풀이) (0) | 2022.08.27 |
---|---|
[SSTF] [Web] Imageium Writeup(문제풀이) (0) | 2022.08.26 |
[corCTF2022] - [Web] jsonquiz Writeup(문제풀이) (0) | 2022.08.13 |
[corCTF2022] - [Web] simplewaf Writeup(문제풀이) (0) | 2022.08.12 |
[corCTF2022] - [Web] msfrog-generator Writeup(문제풀이) (0) | 2022.08.11 |
댓글