⛏️ 삽시일반

낱말퀴즈(꼬들) 해킹으로 base64 이해하기

오늘의 메인 주제는 'Base64'인데요. base64에 대한 개념을 설명드림과 동시에 실습으로 '꼬들'이라는 낱말퀴즈를 해킹해보고자 합니다.

2024.07.27 | 조회 1.03K |
0
|

Hello.Stranger

🛸 해외 IT 트렌드를 가장 먼저 만나보세요. (매일 아침7시 뉴스레터 발행)

 

안녕하세요. 구독자님, 오늘의 메인 주제는 'Base64'인데요. base64에 대한 개념을 설명드린 후에는 실습으로 base64가 사용되고 있는 '꼬들'이라는 낱말퀴즈를 분석해보고자 합니다. 그 분석을 통해 꼬들에서 요구하는 낱말의 정답까지 추출하는 코드를 소개드릴게요.

* 참고: 이 글에서는 꼬들 서버를 해킹하는 방식이 아닌 URL 문자열만을 분석합니다.

 

1. Base64를 아시나요?

1) 설명

Base64는 바이너리 데이터를 텍스트 형식으로 변환하는 인코딩 방식이에요. 이 방식은 64개의 문자(A-Z, a-z, 0-9, +, /)를 사용하여 모든 종류의 데이터를 표현하죠.

일반적으로 컴퓨터는 데이터를 이진 형식(0과 1의 조합)으로 저장하고 처리하지만, 이를 사람이 읽거나 텍스트 기반의 시스템(예: 이메일, URL, JSON 등)에서 사용할 때는 문제가 발생할 수 있어요. 이 때 사용할 수 있는 방식이 Base64에요. 이렇게 0과 1로 이루어진 바이너리 데이터 전송하거나 저장할 때 아스키(ASCII) 텍스트 형식으로 변환한다면 이 문제를 해결할 수 있어요.

 

2) 사용하는 이유

앞 단락에서 몇가지 예를 들어보았는데, 좀 더 다양핸 케이스를 소개드려 볼게요.

1) 암호화된 데이터 저장: 특정 문자나 파일을 암호화하게 된다면 데이터가 바이너리 형태로 보여지게 됩니다. 이러한 데이터를 그대로 전송하거나 저장하면 훼손될 우려가 있는데요. 이 때도 Base64를 사용합니다.

2) 이메일 첨부 파일: 이메일 시스템은 원래 텍스트만을 다루도록 설계되었습니다. 그렇다보니 바이너리로 된 첨부파일들을 메일 서버로 전송하는데 한계가 있어요. 이를 보완하기 위해 Base64를 사용하면 바이너리 파일을 텍스트로 변환하여 쉽게 전송할 수 있어요.

3) URL 인코딩: 흔히들 %가 포함된 URL 인코딩 방식(예: %E3%EE%12)을 사용하긴 할텐데요. 이 또한 특수문자가 포함되어서 일부 환경에서는 데이터가 깨질 가능성이 있어요. 하여, 덩치가 큰 바이너리 데이터를 전송할 때 Base64 인코딩으로 사용하기도 한답니다.

 

3) 흔히들 하는 착각

종종 이러한 착각을 가지고 계신 분이 있어요.

  • "base64로 암호화해서 데이터를 전달해줘"
  • "hash로 함호화해서 데이터를 전달해줘" (자매품)

여기서 중요한 점은 Base64가 암호화 방식이 아니라는 점이에요. 많은 사람들이 이를 혼동하지만, Base64는 단순히 데이터를 다른 형태로 표현하는 인코딩 방식일 뿐입니다. 

  • 암호화(Encryption): 암호화는 데이터를 해독 키 없이는 읽을 수 없게 만드는 과정이에요. 암호화된 데이터는 올바른 키를 가진 사람만이 원본 데이터로 복호화할 수 있습니다.
  • Base64 (Encoding): Base64는 앞서 말한대로 단순히 데이터를 다른 형태로 표현하는 인코딩 방식이죠. 구나 쉽게 디코딩할 수 있으며, 데이터를 숨기는 것이 목적이 아닙니다. :D

2. 꼬들(Kordle)이 뭐야?

1) '엥? 갑분꼬?'

그쵸. 갑자기 분위기 꼬들이 되었어요. 꼬들이라는 게임을 가지고 온 이유는 여기에도 Base64가 활용되어 있기 때문이에요. 앞서 Base64의 개념에 대해 공부를 해봤으니, 실제 활용되고 있는 곳에서 인코딩과 디코딩을 해보려고 해요. 그 과정에서 낱말퀴즈의 정답을 바로 추출될 수 있기도 하더라고요.

 

2) 꼬들이란?

꼬들이란 인터넷에서 할 수 있는 낱말게임인데요. 구구절절 설명하기 보다는 아래에 있는 설명 이미지를 참고하시면 이해가 되실거에요.

이미지 출처: 꼬들
이미지 출처: 꼬들

또한 6자리의 글자를 모드 맞춘다면 '녹색'으로 변하게 되어 게임을 클리어하는 방식이에요. 한번씩 해보면 시간가는줄 모르실수도.. 사담이지만, 지인들이 꼬들 단톡방을 파서 며칠째 그것만 하고 있어요 :)

며칠째 꼬들만 하는 단톡방
며칠째 꼬들만 하는 단톡방

 

3. 다시, Base64 (꼬들 분석)

낱말퀴즈 재밌게 하고 오셨나요? 그럼 본격적으로 꼬들 문제에 base64가 어떻게 사용되고 있는지와 꼬들 정답을 추출하는 script를 개발해보도록 할게요.

돌아온 Base64

앞서 꼬들을 소개드리면서 전달드린 링크는 아래와 같은 형태를 띄고 있어요. 도메인(kordle.kr)과 파라미터(code=~~~)로 구성되어 있으며, 파라미터인 code의 값은 "UktMUUtGX0RLU1NVRA=="로 정의되어 있어요.

알 수 없는 문자들로 이루어진 code의 값. 이 값이 바로 어떠한 값을 base64로 인코딩한 결과입니다. 아마, 이러한 형태를 자주 접하신 분들은 '아, base64구나'를 인지하실테지만 초면인 분은 약간 어색하실거에요 :)

 

Base64 디코딩 해보기

디코딩 하는 방법은 다양합니다. 대부분 개발 언어별로 base64를 인코딩/디코딩하는 함수가 지원되고 있을거구요. 이마저도 코딩하기 싫으신 분들은 온라인에 base64디코딩하는 사이트들이 많으니 검색하셔서 활용해보셔도 됩니다.

저는 간단하게 JavaScript로 한번 해볼게요. base64를 디코딩하는 함수는 'atob'라는 함수이며, 이 함수로 간단하게 디코딩을 진행했어요. (참고: 인코딩은 btoa()) 디코딩한 결과는 "RKLQKF_DKSSUD"이라는 이상한 문자가 나왔네요.

디코딩한 결과, 이것은 영어로 적혀있지만 그렇다고 영어단어는 아니죠? 이는 한글 키보드를 영어로 변환하여 작성한 글이에요. 즉, 위의 디코딩한 결과를 한글 키보드로 그대로 작성해보면 "ㄱㅏㅣㅂㅏㄹ_ㅇㅏㄴㄴㅕㅇ"가 됩니다. 즉, "개발_안녕"이라는 문자가 되는거죠. 이는 정답과 출제자의 이름을 담고 있는 값이었던 거에요 🫢

여기까지 정리

  • 꼬들의 URL에는 base64로 인코딩된 문자열이 있다.
  • 이 값을 base64로 디코딩하면 영어 알파멧으로 된 무엇인가 나온다.
  • 한글 키보드로 작성해보면 "정답_출제자" 조합의 글이 된다.

 

4. 문제 링크 입력만으로 정답 추출하기

앞서 분석한 내용을 토대로 간단한 툴을 개발해볼거에요. 문제의 URL을 입력을 하면 URL에서 code를 추출할 것이고, 추출한 code를 base64로 디코딩하여 정답을 출력해주도록 해보겠습니다.

직접 사용해볼 수 있도록 입력란을 아래에 포함해두었구요. 소스코드의 로직은 간단해서 세줄정도로 말씀드리겠습니다. 그 후에는 소스코드도 첨부해두기만 하겠으니 가볍게 읽어봐주세요!

  • 문제 링크에서 code값 추출
  • code값을 atob()함수로 base64 디코딩
  • 디코딩된 결과가 영어이니, 이를 한글 키보드에 매핑하여 변환해주기

결과물

정답 추출기
정답 추출기
정답 인증하기
정답 인증하기

 

멤버십 구독자만 읽을 수 있어요

가입하시려면 아래를 클릭해주세요

댓글

의견을 남겨주세요

확인
의견이 있으신가요? 제일 먼저 댓글을 달아보세요 !
© 2024 Hello.Stranger

🛸 해외 IT 트렌드를 가장 먼저 만나보세요. (매일 아침7시 뉴스레터 발행)

뉴스레터 문의hello.stranger1337@gmail.com

자주 묻는 질문 서비스 소개서 오류 및 기능 관련 제보

서비스 이용 문의admin@team.maily.so

메일리 사업자 정보

메일리 (대표자: 이한결) | 사업자번호: 717-47-00705 | 서울 서초구 강남대로53길 8, 8층 11-7호

이용약관 | 개인정보처리방침 | 정기결제 이용약관