CTF 문제 풀이법 찾으러 온 사람들은 나가시고 다른 사람들이 쓴 Write Up 찾아보시기를 추천드립니다
저는 풀이법을 쓰긴 썼는데 한 문제 밖에 못 풀었을 뿐더러 잡소리가 대부분인 경험 기록 글이라 별 도움되는 내용은 없을 듯..
2월 3일에서 4일까지 이틀간 진행된 DiceCTF에 참여해봤다
아직 간단한 웹해킹 정도만 조금씩 배우고 있는 상태고 리버싱도 흘끗흘끗 기초적인 내용만 좀 공부해놨는데 지난 2일에 CTFTimes라는 사이트를 우연히 알게 되었다
바로 다음 날에 열리는 CTF가 있길래 좀 읽어봤더니 온라인 참여도 가능하다고 한다
배운 것도 없어서 한 문제도 못 풀거라고 예상했지만 CTF에 어떤 문제들이 등장하고 어떻게 진행되는지 경험이라도 해보기 위해서 혼자서 싱글 팀을 만들어 참가해보기로 했다
FunnyLogin
web/funnylogin
can you login as admin?
NOTE: no bruteforcing is required for this challenge! please do not bruteforce the challenge.
CTF는 오전 6시에 열렸지만 평소처럼 열심히 백수 생활을 하는 중인 나는 점심이 되고 나서야 깨어나서 컴퓨터를 켰다
일단 몇 번 해보기라도 한 웹해킹부터 찾아봤다
사람들이 가장 많이 푼 문제가 제일 쉬운 문제일 것이라 생각해서 제일 먼저 시도해본 문제가 funnylogin 문제였다
소스 코드를 대충 훑고 사이트를 딱 보니까 SQL Injection을 야무지게 조지면 간단하게 풀릴 것 같았다
이 정도는 워게임에서 몇 번 접해본 적이 있어서 검색 좀 하다보면 풀 수 있을 것 같았다
열심히 파이썬 코드 짜고 request도 써보고 오랜만에 selenium도 써봤다
sqlite 문법도 검색해보고 뭐 아는 게 없으니 이것저것 찾아보고 삽질만 5시간을 해댔다
열심히 userid 꺼내려고 Blind SQL Injection을 해봤지만 뭔가 이상한 것 같다
이 과정들을 백만번 이상은 시행해야하는데 그럴 수가 있나...
좀 생각을 하고 했어야 하는데 미련한 나는 처음 문제 풀어볼 생각에 신나서 열심히 코드를 짰다
NOTE: no bruteforcing is required for this challenge! please do not bruteforce the challenge.
저녁 먹고 다시 문제를 살펴보는데 위 문구를 발견하고 나서야 내 뻘짓을 깨달아버렸다..
애초에 랜덤이라서 반복을 돌릴 때마다 값이 바뀌는데 코드도 제대로 이해 못 한 나였다
여담으로 오후 9시 10분 전에 funnylogin 문제 사이트가 다운됐다
하도 사람들이 Brute Force를 해대서 잠시 다운시켰다고 한다..
괜히 미안해짐..ㅠㅠ
죄송해요 DiceCTF
뭔가 풀 수 있을 줄 알고 둘째 날 자정 넘어서까지 붙잡고 있었음..
내일 학교 일찍 가야 하는데 CTF는 오전 6시에 끝나서 새벽 3시까지 싸매다가 그냥 포기하고 잤는데 아침에 일어나서 정답 확인해보니까 내가 못 풀 만한 문제였음..
그냥 편하게 발 뻗고 잠 좀 충분히 잘 걸 그랬다
DiceDiceGoose
web/dicedicegoose
Follow the leader.
앞선 funnylogin 문제를 고민해보다가 안 될 것 같아서 그냥 버리기로 했다
사람들이 제일 많이 풀어서 이 문제가 제일 쉬운 문제일텐데 이것마저도 못 풀어내면 다른 문제들도 못 풀거라 생각했다
다른 문제는 뭐 나오는지나 보자 하고 문제 목록을 보는데 내가 뻘짓하던 사이에 가장 많이 풀린 문제가 FunnyLogin에서 DiceDiceGoose로 바뀌어있다
어떤 문제인지 보니까 WASD로 주사위를 움직여서 네 방향 중 랜덤으로 움직이는 Goose를 잡는 게임이었다
처음에는 스크립트도 안 보고 이게 뭐지?? 하면서 키보드 화살표를 마구 눌렀는데 아무 일도 안 일어난다
마우스 포인터를 올려도 손가락으로 안 바뀌는 걸로 봐서는 클릭하는 것도 아닌 것 같다
혹시나 하는 마음에 WASD를 눌러봤는데 주사위와 함께 검정색 블럭이 이동한다
이제 개발자 도구를 열고 스크립트를 찾아 읽어보기 시작했다
너무 길어서 대충 쓱 훑었다
어?? score 변수가 있네
그러면 어떤 짓을 하면 score가 올라가겠고 그 score가 쌓이면 FLAG를 얻을 수 있겠구나!!
라고 생각하고 다시 게임으로 돌아와 미친 듯이 WASD를 눌러댔다
한참을 연타하다가 처음 만난 사람이라 통성명을 하려는지 갑자기 내 이름을 묻는 입력창이 떴다
아 여기에 조건에 맞는 입력값을 주거나 이 입력에 injection을 걸어서 플래그를 얻는 건가
라고 생각해봤지만 그냥 간단하게 아무 글자나 쳐서 확인 버튼을 눌러보기로 했다
오 You Won!이라는 글자와 함께 score가 보인다
위 사진은 문제를 풀고 나서 스크린샷을 찍어서 124점인데 처음 score 떴을 때는 480점 정도가 나왔다.. 헤헤
근데 저 Brag on Twitter는 뭐지
아까 스크립트에서 봤던 정체불명의 X 공유 링크 (야동 링크 아님)가 생각났지만 일단 만들어진 하이퍼링크를 눌러봤다
로그인이 안 되어있어서 로그인을 하라는데 오래전에 야한 거 볼 때 좀 쓰던 트위터 계정을 데려와서 다시 들어가봤다
뭐지 이거 올리고 링크를 타고 들어가면 뭐가 있나
Follow the leader.
문제 설명에서 봤던 문구가 떠오른다
아 트위터에서 CTF 운영자를 팔로우하면 FLAG를 알 수 있는 건가
라는 멍청하고 귀여운 생각으로 일단 게시글을 올려봤다
그러고 저 링크로 이동해봤는데 그냥 내 플레이를 리플레이해주는 거였다..
그냥 게임 컨셉인 것 같다
이제 제대로 코드를 분석해보기로 했다
예전에 유튜브에서 개발자 도구 Console에서 스크립트 막 입력해서 지렁이 게임 해킹하고 구글 네트워크 오류 미니게임 해킹하는 걸 본 적이 있다
나도 그 사람들에 빙의해서 열심히 코드 분석을 하기로 했다
처음에는 눈으로 그냥 보고 머리 써가면서 했는데 힘들어서 그냥 복사해서 VS Code에 옮겨서 주석 달아가면서 분석했다
중요하게 봐야할 코드는 이동할 때 저장되는 변수와 FLAG 생성에 쓰이는 history 관련 코드 정도이다
그렇게 긴 코드도 아닐 뿐더러 불필요한 코드들을 정리하면 얼마 안 되는 분량이라 어렵지 않게 분석할 수 있다
처음엔 주사위 위치랑 Goose 위치 좌표만 바꾸고 함수를 실행해서 score 9점을 만들고 FLAG를 얻어냈다
내 인생 처음으로 참가해본 CTF에서 처음으로 풀게 될 문제의 정답을 싱글벙글 떨리는 손으로 입력해봤다
근데 플래그가 일치하지 않는댄다..
플래그 형식이 틀렸나 싶었지만 그것도 아닌 듯하다
허수특)) 나 말고 기계를 의심함
서버 문제인가 싶어서 조금 기다렸다가 해봤는데도 결과는 같다
결국에 내가 틀렸음을 인정하고 다시 스크립트 분석으로 돌아와서 FLAG 생성 함수를 찾았고 그에 맞는 스크립트를 작성해 알맞은 FLAG를 얻어낼 수 있었다
Player와 Goose의 위치를 history 배열에 추가해야 그에 맞게 history 값이 생성된다
그래서 그냥 score를 9로만 맞추고 플래그를 생성하면 제대로 된 플래그 값이 생성되지 않는다
history.push([player, goose]) 를 통해서 9점이 만들어질 수 있는 Player와 Goose의 이동 경로를 찾아서 좌표들을 push해준 다음에 플래그를 뽑아내야 한다
디스코드 보니까 이 dicedicegoose 문제를 못 풀어서 징징대는 외국인 친구들이 몇 명 있었는데 나같은 개뉴비들이 아니었을까 싶다
자꾸 힌트 달라고 하고 어떻게 하냐고 물어보고 하는데 까고 보면 코드도 너무 길어서 분석 안 했다는 사람도 있었다..
번역기 돌려서 나도 배운지 한 달도 안 된 개뉴비인데 이 문제 풀었다고 그들을 기만하고 싶었지만 왠지 채팅을 치지 않는 진정한 고수들이 널려 있을 게 뻔하기 때문에 참았다
그리고 꽁으로 1포인트 주는 misc 문제 두 개도 풀었다
디스코드 들어가서 플래그 찾으면 1포인트, 구글 폼 제출해서 설문조사 참여하면 1포인트
이렇게 총 107점 390등으로 나의 인생 첫 CTF를 마무리했다
이 글 제목에 Write Up이라고 해놓긴 했는데 사실 Write Up이 뭔지 잘 모른다
그냥 검색 좀 해보니까 이렇게 풀이법 쓰고 후기 좀 끄적이는 거 같길래 나도 한번 따라해봤다
디스코드 보니까 이런 거 쓰고 제출하면 추첨으로 뭐 주는 것 같던데 이왕 하는 거 써봤어요
한글이라 알아볼까 싶지만 알아서 번역기 쓰고 읽어보실 듯..??
한 문제도 못 풀줄 알고 참가했던 CTF인데 한 문제라도 풀 수 있게 되서 정말 좋았고
앞으로 공부를 계속해서 해낼 수 있도록 할 동기 부여도 되어준 것 같아 좋은 경험이었다
'Security > CTF' 카테고리의 다른 글
SecurityFACT CTF w. Alkon 2024 Writeup (0) | 2024.11.16 |
---|---|
2024 5월 Space War Web WriteUp (0) | 2024.05.12 |
[AmateurCTF 2024 Write Up] 동아리 팀으로 나간 CTF (0) | 2024.04.14 |
[LA CTF 2024 Write UP] 두번째로 참가해본 CTF (0) | 2024.02.19 |
댓글