| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- XSS
- write-up
- Cross-Site Scripting
- Cyber Security
- THM
- 보안 스터디
- web hacking
- 정보보안
- TryHackMe
- Blue Team
- 리눅스
- 해킹 스터디
- CTF
- 모의해킹
- SoC
- Bandit
- IR
- 워게임
- Web
- 사이버 보안
- 블루팀
- 해커
- cert
- http
- 보안 관제
- linux
- OverTheWire
- 리눅스 기초
- 정보보호
- 해킹
- Today
- Total
AnbyMata의 해킹 노트
[Bandit] Level 11 → Level 12 본문
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 파일 열어보기

= 홈 디렉토리 안에 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인 파일을 찾습니다.

= data.txt 파일이 위치한 경로는 "./data.txt"입니다.
= 즉, 홈 디렉토리 ( . ) 안에 바로 존재합니다.
2) cat 명령어로 data.txt 파일의 내용 확인
- data.txt 파일의 내용을 한 번 확인해봅니다.

= ROT13으로 인코딩된 파일의 내용이 출력됩니다.
[4-1] tr 명령어를 활용해 문자열 치환
3) tr 명령어로 알파벳을 13칸씩 회전시키는 치환을 수행
- 변환할 문자 범위는 `A-Za-z` 입니다. (대문자+소문자)
- 대문자 변환 결과는 `N-ZA-M` 입니다.
- (앞의 13 알파벳은 N-Z, 나머지 13 알파벳은 A-M)
- 마찬가지고 소문자 변환 결과는 `n-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` 입력

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 |