AnbyMata의 해킹 노트

[Bandit] Level 11 → Level 12 본문

OverTheWire/Bandit

[Bandit] Level 11 → Level 12

AnbyMata 2026. 3. 14. 22:00

OverTheWire - Bandit : Level 11 → Level 12. Write-up!

출처: https://overthewire.org/wargames/bandit/bandit12.html

 

OverTheWire: Level Goal

We're hackers, and we are good-looking. We are the 1%. <!-- Please read and accept the Rules! --> Level Goal The password for the next level is stored in the file data.txt, where all lowercase (a-z) and uppercase (A-Z) letters have been rotated by 13 posit

overthewire.org

시작을 위해 "ssh -p 2220 bandit11@bandit.labs.overthewire.org" ssh 로그인합니다!

( 비밀번호: Level 10 → Level 11 에서 얻은 비밀번호 )

 

[1]  문제 요약

다음 레벨의 비밀번호는 data.txt 파일 안에 저장되어 있습니다.

그 파일 안의 모든 소문자 (a~z)대문자 (A~Z)가 각각 13칸씩 회전되어 있습니다. (13칸씩 이동)

[보충 설명]
이해를 위해서 소문자 (a~z)가 1칸씩 회전(이동)했다를 설명해보겠습니다.
a → b, b → c 와 같이 한 칸씩 이동하여 인코딩되었다는 소리입니다.
즉, "abbc"라는 원문을 1칸씩 이동하여 인코딩하면, "bccd"가 저장되게 됩니다.
(참고로, 이를 암호학에서 `Caesar cipher` (shift1) 이라고 합니다.)

이번 문제에서는 13칸씩 소문자와 대문자가 이동합니다.
즉, a → b, b → o 로 인코딩됩니다.
(참고로, 이를 암호학에서 `ROT13` 이라고 합니다. `Caesar cipher`의 한 형태이기도 합니다.)
`Caesar cipher`와 `ROT13` 둘다 현대 암호학에서는 사용하지 않은 고전 치환 암호들입니다.

 


[2]  사용되는 명령어들

- man : 리눅스 명령어의 메뉴얼 (사용법, 옵션, 설명)

- grep : 파일 또는 입력 내용에서 특정 문자열(패턴)을 필터링

- sort : 입력된 내용을 줄 단위로 정렬

- uniq : 연속된 중복 행을 제거 or 중복 여부를 분석

- strings : binary 파일에서 읽을 수 있는 문자열만 추출 (human-readable 문자열만)

- base64 : 데이터를 Base64 형식으로 인코딩 또는 디코딩

- tr : 입력 문자의 치환, 삭제, 대소문자 변환 등을 수행

- tar : 여러 파일/디렉토리를 하나의 아카이브로 묶거나 해제

- gzip : 파일을 gzip 형식으로 압축 또는 해제

- bzip2 : 파일을 bzip2 형식으로 압축 또는 해제

- xxd : 파일을 16진수(hex) 덤프 형태로 출력하거나 복원

 

 


[3]  문제 접근 과정

1)  data.txt 파일 위치 파악 후, 내용 확인

 - `ls -a`로 숨겨진 디렉토리/파일 목록까지 확인 후, data.txt 파일 열어보기

`ls -a` → `ls` → `cat data.txt`

 = 홈 디렉토리 안에 data.txt 파일이 있음을 확인했습니다.

 = 암호화된 문장이 출력되었습니다. (ROT13으로 인코딩 된 상태)

 

 

 

2)  data.txt 파일 내용 분석

 - cat 명령어로 확인해본 파일의 내용은 다음과 같습니다.

 = 대문자는 대문자끼리, 소문자는 소문자끼리 회전되어 변환되었을 것입니다.

 = 숫자는 변환되지 않고, 원본 그대로 유지되었을 것입니다.

 

 

 

3)  문자열복원시킬 방법들

 - 1. tr 명령어는 문자열을 치환, 삭제, 대소문자 변환 등을 수행

 → tr 명령어를 사용하면, 원래 상태로 복원할 수 있을 것입니다.

[보충 설명]
tr 명령어 사용법은 직접 찾아봅시다!

 

 - 2. 문자열을 13칸씩 회전시키는 프로그램을 만들거나 사용

 → 파이썬, C 등의 언어로 프로그램을 만들어 data.txt 파일의 내용을 넣어 복원시킵니다.

[보충 설명]
영어 알파벳은 총 26개입니다.
ROT13은 알파벳을 13칸씩 앞으로 이동시키는 방식입니다.
그래서 ROT13으로 인코딩된 문자열을 다시 한 번 13칸씩 이동시키면, 원래의 문자로 복귀하게 됩니다.
이는 ROT13으로 암호화된 문자열을 복호화(decryption)하는 방법입니다.

 

 

 

4)  ROT13 복호화 프로그램 사용

 - ROT13고전 암호 기법에 해당하기 때문에, 이를 복호화할 있는 프로그램들이 이미 존재합니다.

 → 그 프로그램들을 사용해 문자열을 쉽게 복원할 수 있습니다.

 

 

 


[4]  문제 풀이 및 분석

1)  find 명령어로 data.txt 파일이 위치한 경로 찾기

 - find 명령어에서 홈 디렉토리 ( . )를 탐색 경로로 지정했습니다.

 - "-name data.txt" 옵션을 통해 파일 이름이 data.txt인 파일을 찾습니다.

`find . -name data.txt` → `ls`

 = data.txt 파일이 위치한 경로는 "./data.txt"입니다.

 = 즉, 홈 디렉토리 ( . ) 안에 바로 존재합니다.

 

 

 

2)  cat 명령어로 data.txt 파일의 내용 확인

 - data.txt 파일의 내용을 한 번 확인해봅니다.

`cat data.txt`

 = ROT13으로 인코딩된 파일의 내용이 출력됩니다.

 

 

 

[4-1] tr 명령어를 활용해 문자열 치환

3)  tr 명령어로 알파벳을 13칸씩 회전시키는 치환을 수행

 - 변환할 문자 범위는 `A-Za-z` 입니다. (대문자+소문자)

 - 대문자 변환 결과는 `N-ZA-M` 입니다.

 - (앞의 13 알파벳은 N-Z, 나머지 13 알파벳은 A-M)

 - 마찬가지고 소문자 변환 결과는 `n-za-m` 입니다.

`cat data.txt ❘ tr 'A-Za-z' 'N-ZA-Mn-za-m'`

 = 비밀번호 획득!

 

 

 

[4-2] 13칸씩 회전시키는 파이썬 프로그램

3)  파이썬으로 프로그램 작성

 - 알파벳을 13칸씩 이동시키는 프로그램을 만들었습니다.

 = `+13`을 통해 13칸 회전한 후, `%26`으로 알파벳 범위 내에서 회전하도록 합니다.

 = if 부분은 소문자, elif 부분은 대문자 부분이고, 나머지는 변환하지 않고 그래도 유지합니다.

[보충 설명]
ord() = 문자를 ASCII 코드 숫자로 변환
chr() = 숫자를 문자로 변환

파이썬에서 문자는 연산을 할 수 없습니다.
그래서 문자를 숫자 (ASCII 코드)로 변환해야 합니다.
문자 'a'는 ASCII 코드로 97이고, 'b'는 98, 'c'는 99로 이어집니다.

계산된 결과가 숫자이기때문에 다시 문자로 변환해야합니다.

 

 

 

4)  프로그램을 사용해 원본으로 복원

 - data.txt 파일의 내용을 프로그램에 입력합니다.

 → 비밀번호 획득! 

 

 

 

[4-3] ROT13 복호화 프로그램 사용

3)  CyberChef 사이트

 - 암호화 도구인 CyberChef 사이트를 사용하겠습니다.

 - 주소: https://gchq.github.io/CyberChef/

 

CyberChef

 

gchq.github.io

 

 

 

4)  Operations 검색창 `ROT13` 입력

CyberChef

 

 

 

5)  data.txt 파일 내용 복호화

 - 숫자 회전 옵션을 제외한 채로 파일 내용을 Input 부분에 넣어 복원시킵니다.

 = 비밀번호 획득!

 

bandit 비밀번호는 반드시 따로 복사해서 저장해두기! (메모장 등으로)

 

 


[Bandit] Level 11 → Level 12. Clear.

 

[Bandit] Level 12 → Level 13. Continue...

'OverTheWire > Bandit' 카테고리의 다른 글

[Bandit] Level 10 → Level 11  (0) 2026.02.17
[Bandit] Level 9 → Level 10  (0) 2026.02.13
[Bandit] Level 8 → Level 9  (0) 2026.02.10
[Bandit] Level 7 → Level 8  (0) 2026.02.09
[Bandit] Level 6 → Level 7  (1) 2026.02.06