프롤로그
bandit 문제풀이
저번 비밀번호는 FGUW5ilLVJrxX9kMYMmlN4MgbpfMiqey 이다.
문제
다음 레벨로 가는 비밀번호는 data.txt 파일 안에 저장되어있는데, 그 파일은 base64 인코딩된 데이터가 포함되어있다.
base64란?
바이너리 데이터를 텍스트 형식으로 인코딩하는 방법 중 하나.
주로 이진 데이터를 텍스트로 변환하거나, 아니면 네트워크 전송 및 데이터 저장을 할 때 사용된다.
왜 base64냐? 아스키 코드 중에서 [a-z], [A-Z], [0-9] , +, /까지 총 26+26+10+2= 64개, 즉 기본적인 것만 사용한다고 해서 base64라고 불린다.
그래서 base64 인코딩이라고 한다는 것은, 원래 바이너리 데이터를 Base64 형태로 변환한다는 의미이고,
base64디코딩을 한다는 것은, 인코딩된 데이터를 원래 바이너리데이터로 변환한다는 얘기이다
Base64 장점:
- 이진 데이터를 ASCII 문자로 변환해, 텍스트 기반 시스템에서 안전하게 전송하거나 저장할 수 있다.
- 인코딩된 데이터는 텍스트 편집기에서 쉽게 읽을 수 있다.
Base64의 단점:
- 인코딩된 데이터의 크기가 원래 데이터보다 약 33% 더 커진다.
- 보안적인 인코딩은 아니므로 민감한 데이터를 다룰 때는 암호화를 별도로 사용해야 한다.
리눅스 base64
리눅스에서 base64로 인코딩 디코딩 하는 방법은 다음과 같다.
(1) 인코딩
base64 #인코딩
이렇게 사용하는데,
echo "hello world" | base64
aGVsbG8gd29ybGQK
이렇게 앞의 내용을 | 파이프를 이용하여 넘겨주어도 되고
base64 파일이름
이런식으로 해주어도 잘 작동한다.
(2) 디코딩
base64 --decode #디코딩
이렇게 사용하는데
아까랑 똑같이
echo "dGhpcyBpcyBzZW8gbWluIGphZQoK" | base64 --decode
this is seo min jae
이렇게 사용하거나
base64 --decode 파일명
으로 사용한다.
풀이과정
우선 접속부터 하자.
ssh bandit10@bandit.labs.overthewire.org -p 2220
FGUW5ilLVJrxX9kMYMmlN4MgbpfMiqey
ls
해서 data.txt를 읽어보자.
저렇게 base64로 인코딩된 값이 있다.
cat data.txt|base64 --decode
하면
cat data.txt|base64 --decode
The password is dtR173fZKb0RRsDFSGsg2RWnpNVj3qRr
이렇게 값이 나온다
비밀번호가 나왔다.
정답
비밀번호는 dtR173fZKb0RRsDFSGsg2RWnpNVj3qRr 이다.
==??
근데 아까전에 base64는 a-z, A-Z, 0-9, +/ 이것만 된다고 하지않았나?
왜 아까 base64로 인코딩된거에 ==이거가 있냐? 그러면 base65가 되어야하는 거 아니냐?
이걸 이해하기 위해선 인코딩이 어떻게 작동하는지 알아야한다.
1. 우선 3바이트가를 묶는다. 3바이트는 총 3*8 해서 24비트.
2. 이 24비트를 6바이트씩 4개의 블록으로 나눈다. 그러니까 6비트짜리 4블록이 생성이 된다.
3. 각 6비트 블록들은 아래의 base64들과 매칭이 된다.
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
이렇게 진행되는데, 그러면 3바이트씩 묶어야하지 않는가? 근데 만약의 전체 길이가 3의 배수가 아니라면...?
인코딩 할 대상이 3바이트가 안 되면 맨 뒤에 0을 채워준 다음에 3의 배수로 만들고, 인코딩을 진행한다.
그렇다면, 인코딩이 끝난 후에는 몇 개를 추가적으로 0을 채웠는지 알려줘야 하지 않겠는가?
그래서 3의 배수로 만들기 위해서 1바이트를 추가했다면 =를 한개만 붙이고, 2바이트를 추가했다면 ==을 붙여주는 것이다.
디코딩할 때 =의 개수를 가지고, 참고한다.
에필로그
base64가 이런 거였구나.
'bandit' 카테고리의 다른 글
[2024/bandit] bandit level12 -> level13 Write-up (0) | 2024.11.22 |
---|---|
[2024/bandit] bandit level11 -> level12 Write-up (1) | 2024.11.18 |
[2024/bandit] bandit level9 -> level10 Write-up (0) | 2024.11.10 |
[2024/bandit] bandit level8 -> level9 Write-up (0) | 2024.11.10 |
[2024/bandit] bandit level7 -> level8 Write-up (1) | 2024.11.10 |