본문 바로가기
Security/CTF

[AmateurCTF 2024 Write Up] 동아리 팀으로 나간 CTF

by 고간디 2024. 4. 14.

동아리에서 CTF 관심 있는 사람들은 팀 조인하라고 선배 한 명께서 톡방에 올리셔서 바로 이메일 등록했다.

동아리 들어와서 가장 해보고 싶었던 팀 꾸리고 CTF를 해볼 수 있게 되었다.

4월 6일부터 10일까지 꽤 오래 진행되었다.

그래서 그런지 문제도 계속해서 업데이트되서 엄청엄청 많았다.

 

난이도는 별로 어렵지 않다고 해서 안심했는데 역시나 초짜인 나에게는 어려웠다..

CTF가 시작하는 자정까지 대기타다가 정각에 새로고침을 했는데 아무 문제도 안 올라와있었다.

서버 오류인지 20분 정도 연기될거라고 디스코드에 공지가 올라왔다.

 

위에 디코 사진들은 채팅으로 드립 좀 쳤더니 누가 찐따 아니랄까봐 관심 받아서 신나서 캡쳐했다ㅎㅎ

아무튼 가징 쉬워 보이는 걸로 3문제 정도 풀었는데 복기를 좀 해보자

 

web/denied

web/agile-rut

osint/cherry-blossom

 


 

web/denied

what options do i have?

 


웹 링크와 js 파일이 주어졌다.

웹에 들어가보면 Bad! 라는 문구만 뜨고 아무것도 없다.

소스에서도, 쿠키에서도 아무런 정보가 없었다.

 


const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  if (req.method == "GET") return res.send("Bad!");
  res.cookie('flag', process.env.FLAG ?? "flag{fake_flag}")
  res.send('Winner!')
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

주어진 js 파일을 열어봤다.

GET 메소드로 요청할 경우 Bad! 라는 문구가 나오지만, 다른 메소드로 요청하면 쿠키 정보로 플래그를 얻을 수 있는 것 같다.

 


GET이 안되면 POST로 요청을 보내면 될 거라 생각하고 POST 요청을 보내봤지만 Cannot POST라며 빠꾸를 먹었다..

 


OPTIONS 메소드를 요청해서 요청 가능한 메소드가 무엇인지 보니 GET과 HEAD라고 한다.

HEAD 요청을 할 경우 쿠키까지 확인할 수 있기 때문에 HEAD 요청을 보내면 될 거라 생각했다.

 


HEAD 요청을 보내 쿠키를 확인할 수 있었다.

flag 쿠키로 저장되어 있는 값을 URL 디코딩을 하면 플래그를 획득할 수 있다.

 

사실 처음에는 저 ...을 보고 플래그가 너무 길어서 온점 세 개로 생략되어 출력된 줄 알았으나 플래그 자체에 ...이 있는 거였다..

 

 


 

web/agile-rut

check out this cool font i made!

hint: if you get something that looks like the flag try pasting it into the box.

 


나를 새벽 4시까지 못 자게 만든 놈이다..

분명 플래그를 찾았는데 자꾸 틀린 플래그라고 한다

 

디스코드 보니까 많은 사람들이 나와 비슷한 문제를 겪고 있는 것 같았다.

결국 출제자 분께서도 여러번 힌트를 변경하고 문제도 수정해주셨다.

 

풀릴 것만 같아서 계속 붙잡다가 도무지 못 하겠어서 denied를 먼저 시도했는데 바로 풀려버려서 그제서야 자러 갔다..

 


달랑 웹페이지 하나만 주어진다.

폰트 자랑과 함께 폰트를 써볼 수 있는 input 박스가 있다.

 


개발자 도구에서 폰트 파일을 다운로드 받아볼 수 있다.

문제 설명에서도 유추해볼 수 있듯이 폰트 파일에서 정보를 얻어내야 하는 것 같다.

 


FontForge라는 프로그램으로 열었는데 유니코드 문자 맨 끝으로 가면 딱 봐도 수상해 보이는 글자가 있다.

눌러 보면 위에 글자 이름이 나오는데 그냥 초등학생이 봐도 저게 플래그다.

그래서 저걸 열심히 쳐봤는데 자꾸만 틀렸다고 나와서 새벽 4시까지 붙잡고 있던 거다..

 


결국 풀지 못 하고 다음 날이 되어서야 풀었다.

그 날 포렌식 스터디에 나가서 HxD를 깔았었는데 스터디하면서 심심해서 폰트 파일 집어넣어 봤는데 Glyphr Sudio라는 문자열이 보인다.

 


 

혹시나 해서 검색해보니까 온라인에서 폰트를 분석하는 사이트가 등장했다..ㄷㄷ

바로 폰트 파일 올리고 그 수상했던 문자 찾아보니 플래그를 확인할 수 있었다

 


솔직히 뭐가 다른지는 모르겠지만 어찌 맞추긴 했다.

위에 내가 뭘 야무지게 써놨는데 가장 아랫줄을 보면 플래그가 수상한 문자로 변환되어 있는 것을 확인할 수 있다.

저걸 복사해서 플래그에 입력하니까 정답이란다ㅋㅋ

 

솔직히 전에 입력한 거랑 뭔 차이인지 아직도 모름..

포렌식 스터디 안 나갔으면 못 풀 뻔..ㅋㅋ

 

 


 

osint/cherry-blossoms

average southern californian reacts to DC weather. amazing scenery though at the time.

Find the coords of this image!

Grader Command: nc (host) (port)


전형적인 좌표 찾기 Osint 문제로 벚꽃 사진이 주어졌다.

문제 설명 봐서는 워싱턴 DC인 것 같은데 사진 왼쪽처럼 성조기가 많은 곳을 찾아야 할 것 같다.

 


주어진 사진에 넓은 공터가 있었는데 워싱턴 DC 지도를 보니 넓은 공원이 있어서 그곳을 위주로 찾아봤다.

워싱턴 기념탑이 성조기로 둘러싸인 것을 보고 이 근처를 돌다가 찾았다.

 


로드뷰로 비교해가면서 일치하는 곳을 찾았다.

 


#!/usr/bin/env python3
# modified from HSCTF 10 grader
import json
with open("locations.json") as f:
	locations = json.load(f)
wrong = False
for i, coords in enumerate(locations, start=1):
	x2, y2 = coords
	x, y = map(float, input(f"Please enter the lat and long of the location: ").replace(",","").split(" "))
    # increase if people have issues
	if abs(x2 - x) < 0.0010 and abs(y2 - y) < 0.0010:
		print("Correct! You have successfully determined the position of the camera.")
	else:
		print("Wrong! Try again after paying attention to the picture.")
		wrong = True

if not wrong:
	with open("flag.txt") as f:
		print("Great job, the flag is ",f.read().strip())
else:
	print("Better luck next time ʕ·ᴥ·ʔ")

# 38.889020, -77.033697

주어진 코드를 보니 좌표는 오차 범위 0.001 이내로만 맞추면 될 것 같다.

난 저 solution: 뒤에 좌표 쓰면 되는 줄 알고 계속 썼는데 자꾸 플래그가 안 나왔다..

아무리 봐도 내가 찾은 위치가 정확한데 말이다

 


알고보니까 시스템에 접속하고 두 번째 줄에 출력되는 curl 명령어를 실행한 다음 주어지는 토큰을 Solution에 입력해야 좌표를 입력할 수 있게 되는 것이었다..

오차 범위가 생각보다 여유 있어서 그냥 워싱턴 기념탑 좌표를 입력해도 플래그를 얻을 수 있다.

 


난 이렇게 3문제만 풀고 끝냈다.

나중에 보니까 선배들이 많이 풀어주셨더라

 

bathroom-break도 누가 이미 풀어놨지만 나도 한번 풀어봤는데 구글에 이미지 검색을 하니까 누가 레딧에 질문글을 올려놨다..

거기서 사람들이 찾아놓은 위치를 구글 맵으로 찾고 리뷰를 보면 플래그를 얻을 수 있는 사이트 주소가 나왔다.

 

이걸 푼 선배님께서 어떻게 푸신 건지는 모르겠지만 난 이미지 검색으로 찾아서 플래그를 날로 먹을 수 있었다..ㅋㅋ

Osint 문제는 무슨 경찰 수사 같은 느낌이 들어서 굉장히 재미있다.

 


이번 CTF에는 아이템이란 것도 있었는데 잘못 눌러서 내가 티모 스킨을 사버려따ㅠㅠ

칩으로 사는게 아니라 포인트로 사는 건줄 알고 안 사질 줄 알고 구매 버튼을 눌렀더니 바로 사졌다.. 힝

728x90
반응형

댓글