OverTheWire Bandit 워게임을 풀다가 막힌 레벨이 있나요? 이 글에서는 각 레벨의 풀이 논리와 핵심 명령어를 정리해 드릴게요. 단순히 정답을 제공하는 것보다, 왜 그 명령어를 써야 하는지 이해할 수 있도록 설명에 집중했어요.
Bandit은 직접 명령어를 입력하고 결과를 확인하면서 배우는 것이 가장 효과적이에요. 이 가이드는 참고용 힌트로 활용하고, 실제 입력은 직접 해보는 것을 권장해요.
Level 0: 기본 SSH 접속
목표
Level 0의 목표는 SSH로 Bandit 서버에 접속하는 거예요. 아직 풀어야 할 문제가 있는 게 아니라, 접속 자체가 첫 번째 과제예요.
핵심 명령어
ssh bandit0@bandit.labs.overthewire.org -p 2220을 입력하면 돼요. 비밀번호는 bandit0예요. 처음 접속할 때 호스트 진위 확인 메시지가 나오면 ‘yes’를 입력하면 돼요.
배우는 것
SSH(Secure Shell) 접속 방법을 배워요. 포트 지정(-p), 사용자명@호스트 형식을 익히게 돼요. 리눅스 서버 접속의 기본 중의 기본이에요.
Level 0 → 1: readme 파일 읽기
목표와 풀이 논리
홈 디렉토리에 있는 readme 파일 안에 Level 1 비밀번호가 있어요. ls로 현재 디렉토리의 파일 목록을 확인하고, cat readme로 파일 내용을 출력하면 돼요.
핵심 명령어
ls— 현재 디렉토리 파일 목록 출력cat 파일명— 파일 내용 출력pwd— 현재 디렉토리 경로 확인
Level 1 → 2: 하이픈 파일명 읽기
목표와 풀이 논리
파일 이름이 -예요. 그냥 cat -를 입력하면 cat이 하이픈을 표준 입력(stdin) 기호로 해석해 버려요. 이를 피하려면 상대 경로로 명시적으로 지정해야 해요.
해결 방법
cat ./- 또는 cat < -를 사용하면 돼요. ./는 “현재 디렉토리”를 의미하므로 cat이 이를 파일명으로 인식해요. 특수 의미가 있는 문자로 시작하는 파일명 처리 방법을 배우는 레벨이에요.
Level 2 → 3: 공백 파일명 읽기
목표와 풀이 논리
파일명이 spaces in this filename처럼 공백을 포함해요. 쉘에서 공백은 인수 구분자로 해석되기 때문에, 그냥 입력하면 여러 파일명으로 쪼개져요.
해결 방법
cat "spaces in this filename"처럼 따옴표로 감싸거나, cat spaces\ in\ this\ filename처럼 각 공백 앞에 백슬래시를 붙이면 돼요. 탭 키를 눌러 자동 완성을 사용하면 쉘이 자동으로 이스케이프를 처리해 줘서 편해요.
Level 3 → 4: 숨김 파일 찾기
목표와 풀이 논리
inhere 디렉토리 안에 숨겨진 파일이 있어요. 리눅스에서 이름이 .으로 시작하는 파일은 숨김 파일이에요. 일반 ls 명령에서는 보이지 않아요.
해결 방법
ls -la 또는 ls -a를 사용하면 숨김 파일까지 모두 볼 수 있어요. -a 옵션이 all(모두)을 의미해요. 숨김 파일 이름을 확인한 뒤 cat으로 읽으면 돼요.
Level 4 → 5: 사람이 읽을 수 있는 파일 찾기
목표와 풀이 논리
inhere 디렉토리 안에 여러 파일이 있고, 그중 사람이 읽을 수 있는(ASCII text) 파일에 비밀번호가 있어요. 바이너리 파일인지 텍스트 파일인지 구분하는 방법을 배워요.
해결 방법
file ./-file0* 명령으로 각 파일의 타입을 확인할 수 있어요. file 명령은 파일 내용을 분석해서 타입을 알려줘요. “ASCII text”라고 표시된 파일이 정답이에요.
Level 5 → 6: find로 특정 조건 파일 찾기
목표와 풀이 논리
조건이 여러 개 주어져요. 사람이 읽을 수 있고, 1033 바이트이며, 실행 불가능한 파일을 찾아야 해요. find 명령의 여러 옵션을 조합해야 해요.
해결 방법
find . -type f -size 1033c ! -executable을 사용하면 돼요. -size 1033c는 1033 바이트, ! -executable은 실행 불가능한 파일을 의미해요. find 명령의 다양한 옵션 조합을 익히는 핵심 레벨이에요.
Level 6 → 7: 시스템 전체에서 파일 찾기
목표와 풀이 논리
이번에는 서버 어딘가에 있는 파일을 찾아야 해요. 소유자가 bandit7이고 그룹이 bandit6이며 33 바이트인 파일이에요.
해결 방법
find / -user bandit7 -group bandit6 -size 33c 2>/dev/null을 사용해요. /는 루트 디렉토리 전체를 검색한다는 뜻이고, 2>/dev/null은 권한 오류 메시지를 숨기는 역할이에요. 오류 메시지 리다이렉션의 개념을 배우는 중요한 레벨이에요.
Level 7 → 8: grep으로 텍스트 검색
목표와 풀이 논리
매우 큰 파일(data.txt) 안에서 millionth라는 단어 옆에 비밀번호가 있어요. 파일 전체를 읽는 것은 비효율적이니 grep을 사용해요.
해결 방법
grep "millionth" data.txt를 사용하면 해당 단어가 포함된 줄만 출력돼요. grep의 기본적인 사용법을 배우는 레벨이에요.
Level 8 → 9: sort와 uniq 조합
목표와 풀이 논리
파일 안에 여러 줄이 있는데, 딱 한 번만 등장하는 줄에 비밀번호가 있어요. 중복을 찾아내는 방법을 배워요.
해결 방법
sort data.txt | uniq -u를 사용해요. sort로 먼저 정렬하고, uniq -u로 한 번만 나오는 줄을 필터링해요. 파이프(|)로 명령을 연결하는 방법을 익히는 레벨이에요.
Level 9 → 10: strings와 grep 조합
목표와 풀이 논리
바이너리 파일에서 사람이 읽을 수 있는 문자열 중 =으로 시작하는 줄에 비밀번호가 있어요.
해결 방법
strings data.txt | grep "==="를 사용해요. strings 명령이 바이너리에서 텍스트 문자열을 추출하고, grep이 특정 패턴을 가진 줄을 필터링해요.
Level 10 → 11: base64 디코딩
목표와 풀이 논리
파일 내용이 base64로 인코딩되어 있어요. 디코딩해서 비밀번호를 찾아야 해요.
해결 방법
base64 -d data.txt를 사용해요. -d 옵션이 디코딩을 의미해요. base64는 바이너리 데이터를 텍스트로 표현하는 인코딩 방식이에요.
공통 팁과 정리
자주 쓰이는 명령어 모음
ls -la— 숨김 파일 포함 전체 목록find . -type f -조건— 조건에 맞는 파일 검색grep "패턴" 파일— 파일에서 패턴 검색sort 파일 | uniq— 정렬 후 중복 처리strings 파일 | grep "패턴"— 바이너리에서 문자열 검색
막혔을 때 접근법
레벨 페이지에서 제공된 힌트 명령어 목록을 확인하고, 각 명령어의 man 페이지를 읽어보세요. 대부분의 레벨은 힌트 명령어들을 조합하면 풀 수 있어요. 정답을 검색하기 전에 30분 정도는 스스로 고민해보는 것이 실력 향상에 훨씬 도움이 돼요.
마무리
Bandit 워게임의 각 레벨은 특정 리눅스 개념을 가르치기 위해 설계되어 있어요. 단순히 정답을 찾는 것보다, 각 레벨에서 새로 배운 명령어를 완전히 이해하고 넘어가는 것이 중요해요.
막히더라도 포기하지 말고, 이 가이드의 핵심 명령어를 참고해서 스스로 해결해 보세요. Bandit을 완주하고 나면 리눅스 명령어와 기본 보안 개념에 대한 자신감이 크게 늘어날 거예요.