1. 문제
- 패스워드는 data.txt 파일안에 잇는데 base64로 인코딩된 데이터를 포함하고 있다.
2. Base64 on Wikipedia
2.1 Base64란?
- Base64는 이진 데이터를 텍스트로 인코딩하는 방법으로, 바이너리 데이터를 64개의 고유한 문자로 변환하여 텍스트 형식으로 안전하게 전송할 수 있도록 설계되었다.
- 목적: 텍스트만 지원하는 시스템에서 바이너리 데이터를 안전하게 전송.
- 주요 활용:
- 이메일 첨부파일 전송 (SMTP 제한으로 7비트 ASCII만 지원).
- HTML/CSS에서 이미지나 바이너리 데이터를 임베드.
- URL이나 JSON 등 바이너리 데이터를 텍스트 환경에서 다룰 때.
2.2 Base64의 특징
- 64개의 고유 문자:
- A-Z, a-z, 0-9: 62개
- +와 /: 마지막 2개 문자
- =: 패딩(Padding) 문자
- 인코딩 과정:
- 6비트씩 나누어 총 64개의 값 중 하나로 매핑.
- 원본 데이터의 크기가 3바이트의 배수가 아니면 = 패딩 추가.
- 효율성:
- 데이터 크기 증가: 원본 바이너리 데이터보다 33~37% 더 커짐.
2.3 Base64 인코딩 과정
- 원본 데이터를 8비트(1바이트) 단위로 나눔.
- 6비트씩 묶어 새로운 그룹으로 나눔.
- 각 6비트 그룹을 Base64 문자 테이블에 매핑.
- 남은 데이터가 6비트에 못 미칠 경우, =로 패딩.
- 예제 (ASCII 텍스트: "Man"):
- 원본 데이터(ASCII):
- M: 01001101
- a: 01100001
- n: 01101110
- 24비트로 결합: 010011010110000101101110
- 6비트씩 나눔: 010011, 010110, 000101, 101110
- Base64 테이블 매핑:
- 010011: T
- 010110: W
- 000101: F
- 101110: u
- 결과: TWFu
- 원본 데이터(ASCII):
2.4 Base64 디코딩 과정
- Base64 문자열을 6비트씩 나눔.
- 각 6비트를 원본 8비트 데이터로 변환.
- 패딩(=)이 있다면, 필요한 바이트 수만 디코딩.
- 예제 (Base64 문자열: TWFu):
- Base64 문자: TWFu
- T: 010011
- W: 010110
- F: 000101
- u: 101110
- 24비트로 결합: 010011010110000101101110
- 8비트씩 나눔: 01001101, 01100001, 01101110
- ASCII 변환:
- 01001101: M
- 01100001: a
- 01101110: n
- 결과: Man
- Base64 문자: TWFu
2.5 패딩(Padding)의 역할
- Base64 문자열은 항상 4의 배수 길이를 유지.
- 원본 데이터가 3바이트로 나누어 떨어지지 않으면, = 문자로 패딩.
- 1바이트 남음: == 추가.
- 2바이트 남음: = 추가.
패딩 예시:
- 입력: light work (10바이트)
- Base64 결과: bGlnaHQgd29yaw== (16문자, 2개의 =)
- 입력: light wor (9바이트)
- Base64 결과: bGlnaHQgd29y (12문자, 패딩 없음)
3. 풀이
- data.txt 파일을 보니 base64 인코딩 하고 패딩까지 된 것을 확인할 수 있다.
- “ base64 -d data.txt “ 하면 디코딩 된다.
'Wargame > bandit wargame' 카테고리의 다른 글
12 → 13 까지 필요한 명령어 (0) | 2025.01.06 |
---|---|
Bandit Level 11 → 12 (0) | 2025.01.05 |
Bandit Level 9 → 10 (0) | 2025.01.05 |
Bandit Level 8 → 9 (0) | 2025.01.05 |
Bandit Level 7 → 8 (1) | 2025.01.05 |