[Bandit] Level 10 → Level 11
Bandit Level 10 풀이 과정을 설명합니다.
문제
Level Goal
The password for the next level is stored in the file data.txt, which contains base64 encoded data
패스워드는 data.txt 속에 있고, base64로 인코딩되어 있다고 하네요.
이번 문제는 인코딩된 문자열을 디코딩할 수 있느냐?를 물어보는 문제입니다.
해결
ls -al명령어를 통해 data.txt 파일을 확인할 수 있습니다.
file명령어를 통해 data.txt 파일의 형태를 확인해보니 txt 파일이네요.
cat명령어를 통해 data.txt 파일을 읽어보면, encoding 된 문자열들이 출력됩니다.암호화된 것과 인코딩되었다는 것은 엄연히 다른 말입니다. (상세한 것은 구글링해보기)
어쨌든 핵심은 인코딩은 키가 필요하지 않아요.
쉽게 이야기해보자면, apple이라는 평문을 data.txt에 있는 값처럼 encoding 기법을 통해 우리가 알아보기 어려운 형태로 변환할 수 있어요. 문제에서 활용된 기법은 base64입니다. (참고로 마지막 끝에 ==이 붙는 특징을 갖고 있습니다.)
이때, 나만 아는 키를 가지고 apple을 저 이상한 글자로 바꾸고 싶다면, 우리는 이 bandit level 10을 풀 때 굉장한 난이도를 갖게 됩니다. 문제를 만드신 분이 어떤 키로 apple를 저 이상한 글자로 만드셨는지까지 알아내야 하기 때문입니다.
이렇게 키를 갖고 만들게 되면 암호화를 하게 된 것이고, 이상한 글자(암호문)에서 apple(평문)을 알아내는 과정을 복호화라고 합니다.
그렇지만 encoding은 키를 필요로 하지 않기 때문에 간단합니다. encoding 규칙에 따라 치환만 해주면 됩니다. 그래서 구글에 base64 decoder만 검색하셔도 online tool이 굉장히 많이 제공되는 것을 보실 수 있습니다.
그렇기 때문에 encoding과 encrypt는 엄연히 다른 말이고, 개념을 달리 알고 있는 것이 맞습니다.
저도 지금 제 지식으로 작성하고 있는 것이다 보니 오개념이 있을 수 있습니다.
틀린 부분은 댓글로 알려주시면 감사하겠습니다.
어쨌든, encoding되어 있는 이상한 글자를 평문으로 바꾸고 싶다면 decoding을 해야합니다. decrypt가 아닌거죠.
리눅스에서는 base64에 대해서 encoding/decoding 할 수 있는 명령어와 옵션을 제공하고 있습니다.
base64 명령어에
-di옵션을 추가하면 data.txt 를 decoding 하여 평문을 구할 수 있습니다.decoding option :
-di
핵심
base64
리눅스용 encoding, decoding 도구
문자열 또는 파일 입력가능
8비트 이진 데이터(실행 파일, zip 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이뤄진 문자열로 바꾸는 인코딩 방식
encoding 시, base64 [file] 의 형태로 사용
decoding 시, base64 --decode(-d) [file] 의 형태로 사용
댓글
이 글이 마음에 드셨다면 반응이나 댓글을 남겨주세요!
댓글을 작성하려면 로그인하세요

뉴스레터 구독하기
새로운 포스트가 올라오면 이메일로 알려드려요!