Step 91. 리눅스 복습 — OverTheWire Bandit 0~10

Step 91. 리눅스 복습 — OverTheWire Bandit 0~10

Level 1 — 프로그래밍과 컴퓨터 내부 | 난이도 ★★☆☆☆ | 예상 소요 시간 3시간

전제: Step 18~20의 리눅스 기본 명령어(ls, cd, cat, find, grep 등)를 마쳤다. 리눅스 터미널(WSL 포함)이 준비되어 있다.

  • 준비물: 인터넷, SSH 클라이언트(Windows 10 이상은 PowerShell에 내장, macOS/리눅스는 터미널 내장), 그리고 로컬 리눅스 터미널(WSL) 하나. 메모장(또는 위키)을 미리 열어 두세요 — 찾은 비밀번호를 기록하지 않으면 다음 레벨에 못 갑니다.
  • 주의: ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다. OverTheWire Bandit은 "공격해 보라고 만들어 둔" 공식 합법 워게임이므로 그 서버에 접속하는 것 자체는 합법입니다. 이 챕터의 명령어 실측은 로컬 WSL(Ubuntu 24.04)의 /tmp 연습장에서 수행했고, 플랫폼 접속 화면은 출력 예시로 표기했습니다.

오늘 처음으로 밖에 있는 서버에 접속합니다. 단, 그 서버는 "여러분을 공격해 보라고 만들어 둔" 합법적인 연습장, OverTheWire Bandit입니다. 규칙은 단순합니다 — 각 레벨의 서버에 SSH로 접속해, 어딘가 숨겨진 "다음 레벨의 비밀번호"를 찾는다. 찾으면 그 비밀번호로 다음 레벨에 접속한다. 화려한 해킹 도구가 아니라 ls, cat, find 같은 기본 명령이 무기입니다. Level 0에서 배운 리눅스 기본기가 "교과서 지식"에서 "문을 여는 열쇠"로 바뀌는 날입니다.


1. 학습 목표

이 챕터를 끝내면 다음을 할 수 있습니다:

  • SSH로 원격 서버에 접속하고 종료할 수 있다 (ssh 사용자@주소 -p 포트)
  • -로 시작하는 파일, 공백 있는 파일명 같은 특수한 이름을 올바르게 다룬다
  • ls -a, file, find, grep, sort | uniq, strings, base64 -d, tr을 상황에 맞게 고른다
  • 2>/dev/null로 에러 출력을 걸러 낸다
  • 레벨별 비밀번호 체인과 풀이 기록을 문서로 남긴다

2. 배경 지식 — 오늘의 도구와 개념

오늘의 도구 한눈에 보기

구분 내용
언어·환경 SSH 클라이언트 + Bandit 서버(bandit.labs.overthewire.org), 로컬 리눅스 터미널(WSL)
오늘의 명령 ssh, ls -a, cat ./파일, file, find -type -size -user, grep, sort | uniq, strings, base64 -d, tr
필요한 개념 SSH 접속, 숨은 파일, 파이프(|), 에러 출력 리다이렉션(2>), 비밀번호 체인
오늘의 산출물 레벨 0→10 비밀번호 체인 기록 + 레벨별 명령 정리 문서 bandit-0-10.md

2-1. SSH — 남의 컴퓨터에 합법적으로 들어가는 문

SSH(Secure Shell)는 원격 컴퓨터의 터미널을 내 화면에 가져오는 규약입니다. 통신은 암호화되어 있고, 접속하려면 아이디와 비밀번호(또는 키)가 필요합니다. 문법은 ssh 사용자@주소 -p 포트 — 이 한 줄이 오늘의 첫 관문입니다.

Bandit의 접속 정보는 전부 공식 사이트에 공개되어 있습니다. 저 서버는 원래 그렇게 쓰라고 열어 둔 연습장입니다. 이것이 중요합니다: "주소와 비밀번호가 공개된 연습 서버"와 "남의 서버"는 하늘과 땅 차이입니다. 전자는 교실이고, 후자에 무단으로 들어가는 것은 범죄입니다.

2-2. 워게임의 사고법 — 문제 읽기가 반이다

Bandit 각 레벨의 공식 페이지(overthewire.org/wargames/bandit)에는 이런 것들이 적혀 있습니다.

  • Level Goal: 이 레벨에서 찾을 것(대부분 "다음 비밀번호가 숨겨진 위치의 힌트")
  • Commands you may need: 필요할 수 있는 명령어 목록

여기서 이미 답의 절반이 나왔습니다. "commands you may need"에 file이 적혀 있다? 그럼 그 문제는 파일의 정체를 알아내는 문제라는 뜻입니다. 힌트를 읽고 → 시도하고 → 막히면 명령 설명(man)을 읽는 이 순환이 워게임의 공식 풀이법입니다.

2-3. 비밀번호 체인 — 기록이 곧 생명줄

레벨 N의 비밀번호를 찾아야 레벨 N+1로 갑니다. 즉 비밀번호는 한 번 쓰고 버리는 것이 아니라 체인의 다음 고리입니다. 찾는 족족 bandit5: 찾은문자열 형태로 기록하세요. 세션이 끊기거나 내일 다시 하려 할 때, 기록이 없으면 처음부터입니다. 서버에 여러분의 파일이 저장되는 게임이 아니라, 비밀번호가 곧 진도이기 때문입니다. 세션은 임시고, 기록은 영구입니다.


3. 따라 하기

플랫폼 접속과 문제 화면은 출력 예시로, 핵심 명령어는 여러분의 WSL(/tmp 연습장)에서 직접 재현할 수 있게 구성했습니다. 이 챕터의 실측은 전부 로컬 WSL의 연습장에서 수행했습니다.

3-1. 첫 SSH 접속 — Level 0

입력

ssh bandit0@bandit.labs.overthewire.org -p 2220

출력 예시 (플랫폼 접속 화면 — 환경에 따라 다를 수 있습니다):

The authenticity of host '[bandit.labs.overthewire.org]:2220' can't be established.
...
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
bandit0@bandit.labs.overthewire.org's password:        ← bandit0 입력 (화면에 안 보이는 것이 정상)

읽는 법: 처음 접속하는 서버에는 "이 서버를 신뢰하겠냐"는 지문(fingerprint) 확인이 뜹니다 — yes를 입력합니다. 프롬프트가 bandit0@bandit:~$처럼 바뀌면 성공입니다. 지금 여러분의 터미널은 남의 컴퓨터(합법 연습장) 안에 있습니다.

: Level 0의 목표는 접속 자체입니다. 사용자@주소 -p 포트라는 SSH의 문법이 몸에 배는 것이 첫 수확입니다.

3-2. Level 0 → 1: readme 읽기

서버 안에 들어왔습니다. 목표 페이지에는 "비밀번호가 홈 디렉터리의 readme 파일에 있다"고 적혀 있습니다.

입력

ls
cat readme

출력 예시: readme라는 파일 하나가 보이고, cat으로 읽으면 긴 문자열 — 이것이 bandit1의 비밀번호입니다.

읽는 법: ls로 파일을 보고 cat으로 읽는다. 리눅스의 가장 기본적인 두 동작이 첫 문제의 정답입니다. 찾은 문자열은 지금 즉시 메모하세요.

: 워게임의 리듬을 익히는 단계입니다. 문제 읽고 → 보고 → 읽는다.

3-3. Level 1 → 2: 이상한 이름의 파일 — WSL에서 실습

다음 레벨은 exit로 나온 뒤 ssh bandit1@... -p 2220(방금 찾은 비밀번호)로 접속합니다. 이번 목표: "-라는 이름의 파일에 있다."

이 문제는 로컬 WSL에서 똑같이 재현할 수 있습니다. 연습장을 만듭니다.

입력 (WSL)

mkdir -p /tmp/banditlab && cd /tmp/banditlab
echo "fakePASSlevel2" > ./-
cat -

출력 (2026-09-09 실측, WSL Ubuntu 24.04): cat -는 파일을 읽지 않고 입력을 기다립니다. -는 명령어 세계에서 표준 입력이라는 특별한 뜻이라 파일로 인식되지 않은 것입니다. Ctrl+C로 빠져나오세요.

해결

cat ./-

출력 (2026-09-09 실측):

fakePASSlevel2

읽는 법: ./-는 "이 폴더의 -라는 이름의 파일"이라는 명확한 경로입니다. 경로로 적어 주면 특별 해석을 피할 수 있습니다.

: Bandit의 교훈 1번 — 파일명이 명령어와 충돌하면 경로를 붙인다. 실무에서도 -rf 같은 이름의 파일 사고가 실제로 있기에, 습관으로 만들어 둘 가치가 있습니다.

3-4. Level 2 → 3: 공백 있는 파일명

목표: "이름에 공백이 있는 파일에 있다." 같은 실험을 이어서 합니다.

입력

echo "fakePASSlevel3" > "spaces in this filename"
cat spaces in this filename

출력 (2026-09-09 실측):

cat: spaces: No such file or directory
cat: in: No such file or directory
cat: this: No such file or directory
cat: filename: No such file or directory

해결

cat "spaces in this filename"

출력 (2026-09-09 실측): fakePASSlevel3

읽는 법: 따옴표 없이 치면 공백에서 단어가 잘려 네 개의 파일을 찾는 실패를 합니다. 따옴표로 감싸면 공백 포함 전체가 하나의 이름이 됩니다. 파일명을 Tab 키로 자동완성해도 셸이 알아서 이스케이프(공백 앞에 \ 삽입)해 줍니다.

: 공백 처리는 셸 사용의 기본 예의입니다. 나중에 스크립트를 짤 때 따옴표 누락은 대형 사고의 단골 원인입니다.

3-5. Level 3 → 4, 4 → 5: 숨은 파일과 파일의 정체

Level 3의 목표: "inhere 폴더의 숨은 파일에 있다."

입력

mkdir -p inhere && echo "fakePASSlevel4" > inhere/.hidden
ls inhere
ls -a inhere

출력 (2026-09-09 실측):

# ls inhere — 아무것도 안 보입니다
# ls -a inhere
.  ..  .hidden

읽는 법: .으로 시작하는 파일은 평범한 ls에 안 보입니다. -a(all)가 숨은 파일을 드러냅니다. cat inhere/.hidden으로 읽으면 됩니다.

Level 4의 목표: "inhere 폴더의 여러 파일 중, 사람이 읽을 수 있는 파일 단 하나에 있다."

입력

printf "fakePASSlevel5\n" > inhere/-file07
head -c 100 /dev/urandom > inhere/-file03
file ./inhere/-file03 ./inhere/-file07

출력 (2026-09-09 실측):

./inhere/-file03: data
./inhere/-file07: ASCII text

읽는 법: file 명령은 파일의 내용을 보고 "이 파일의 정체"를 알려 줍니다. 이름이 아니라 내용으로 판단한다는 점이 핵심입니다. ASCII text라고 판정된 파일 하나가 정답입니다. 파일명이 -로 시작하므로 ./를 붙인 것도 눈여겨보세요 — 3-3의 교훈이 바로 재활용됐습니다.

: 이 두 문제는 침해 분석의 기본기 그 자체입니다 — 숨은 것을 보고(ls -a), 정체를 밝히고(file). 침입자가 남긴 파일은 대부분 숨겨져 있거나 이름으로 위장되어 있습니다.

3-6. 예측해 보기 — find로 조건 검색

레벨 5의 목표는 이렇게 생겼습니다. "inhere 폴더 어딘가의 파일 중, 사람이 읽을 수 있고, 크기가 1033 바이트이고, 실행 파일이 아닌 파일에 있다."

예측: 폴더 안에 수십 개의 하위 폴더와 파일이 있습니다. 하나씩 file로 열어 보는 방법 말고, 한 번에 찾는 명령은 무엇일까요?

직접 확인 (WSL 연습장)

python3 -c "open('inhere/-file09','w').write('x'*1033)"
find inhere -type f -size 1033c ! -executable

출력 (2026-09-09 실측):

inhere/-file09

읽는 법: find 찾을곳 -조건입니다. -type f(파일만), -size 1033c(1033바이트, c는 바이트 표시), ! -executable(실행 가능하지 않은 것 — !은 부정).

: find는 보안 실무에서 "조건에 맞는 파일을 서버 전체에서 찾아라"라는 요구의 표준 도구입니다. 웹쉘 찾기, 최근 수정 파일 찾기 — 전부 find의 응용입니다.

3-7. Level 6~10 — 도구가 늘어가는 구간

나머지 레벨의 지도와, 각 명령의 로컬 실습입니다.

  • 6→7: 서버 전체에서 "특정 사용자 소유, 특정 크기" 파일 찾기. find /-user, -group, -size 조합. 권한 없는 폴더의 에러가 쏟아지므로 2>/dev/null로 에러를 버립니다.
  • 7→8: 커다란 텍스트 파일에서 "millionth라는 단어 옆"에 비밀번호.

입력 (WSL 실습)

printf "foo\nmillionth fakePASSlevel8\nbar\n" > data.txt
grep millionth data.txt

출력 (2026-09-09 실측):

millionth fakePASSlevel8
  • 8→9: "딱 한 번만 등장하는 줄" 찾기.

입력

printf "aaa\nbbb\nbbb\naaa\nONLYONCE\nccc\nccc\n" > uniqdata.txt
sort uniqdata.txt | uniq -u

출력 (2026-09-09 실측):

ONLYONCE

읽는 법: uniq인접한 중복만 보므로 반드시 sort가 먼저입니다. 정렬이 먼저, 중복 제거가 나중 — 이 순서가 레벨 8의 정답 구조입니다.

  • 9→10: 바이너리 파일 속에서 읽히는 문자열 찾기. Bandit에서는 비밀번호 앞에 =가 여러 개 붙어 있습니다.

입력

printf "==========\n3f3f3f3f3f\n========== the password is fakePASSlevel10\n7x7x7x7x7x7x\n" > bin.dat
head -c 500 /dev/urandom >> bin.dat
strings bin.dat | grep "=="

출력 (2026-09-09 실측):

==========
========== the password is fakePASSlevel10

읽는 법: strings는 바이너리 덩어리 속에서 "사람이 읽을 수 있는 구간"만 건져 냅니다. 뒤섞인 쓰레기 바이트(/dev/urandom) 속에서도 문장 두 줄만 골라냈습니다.

  • 10→11: base64로 인코딩된 데이터 해독.

입력

echo "The password is fakePASSlevel11" | base64
echo "VGhlIHBhc3N3b3JkIGlzIGZha2VQQVNTbGV2ZWwxMQo=" | base64 -d

출력 (2026-09-09 실측):

VGhlIHBhc3N3b3JkIGlzIGZha2VQQVNTbGV2ZWwxMQo=
The password is fakePASSlevel11

읽는 법: base64는 번역, base64 -d는 되돌리기입니다. 끝의 = 꼬리를 보면 Base64를 의심할 수 있습니다(Step 50 복습).

막혔을 때의 공식 절차: 20분 고민 → 레벨 페이지의 "commands you may need" 재독 → 그 명령의 man 페이지(또는 --help) 읽기. 그래도 안 되면 다른 사람의 write-up을 찾아 읽되, 이해한 뒤 창을 닫고 손으로 다시 치는 것까지가 풀이입니다.

3-8. 파이프의 감각 — 명령을 레고처럼 조립하기

레벨 8→9에서 등장한 sort | uniq -u를 분해해 봅시다. 세로 막대 |파이프라고 하며, 뜻은 "왼쪽 명령의 출력을 오른쪽 명령의 입력으로 넘겨라"입니다.

입력

printf "apple\nbanana\napple\ncherry\n" > fruits.txt
cat fruits.txt | sort
cat fruits.txt | sort | uniq -c

출력 (2026-09-09 실측):

apple
apple
banana
cherry
      2 apple
      1 banana
      1 cherry

읽는 법: cat이 뱉은 내용이 화면 대신 sort의 입으로 들어갔고, 다시 uniq -c의 입으로 들어갔습니다. uniq -c는 인접한 같은 줄의 개수를 세어 줍니다. "정렬하고 → 세고"라는 두 단계 공장이 파이프로 연결된 것입니다.

: 리눅스 명령어의 철학은 "작은 도구 하나가 한 가지를 잘하게 하고, 조립은 파이프로"입니다. Bandit의 후반 문제들은 거의 전부 이 조립 문제이고, 실무 로그 분석도 이 방식 그대로입니다. cat 로그 | grep ERROR | sort | uniq -c | sort -nr 같은 한 줄이 하루치 로그의 요약이 됩니다.

보너스 — tr: 더 위의 레벨(11→12)에서는 ROT13이라는 치환 암호가 나옵니다. 알파벳을 13글자 밀어낸 것인데, tr 한 줄로 되돌립니다.

echo "Gur cnffjbeq vf snxrCNFF" | tr "A-Za-z" "N-ZA-Mn-za-m"

출력 (2026-09-09 실측): The password is fakePASStr "바꿀 글자들" "새 글자들"은 자리 대 자리 치환입니다.


4. 미션과 연습문제

미션 — 레벨 0→10 체인 완성 + 명령어 정리 문서

  1. bandit0부터 bandit10까지 SSH 접속을 완료하고, 비밀번호 11개를 기록합니다.
  2. 위키에 bandit-0-10.md를 작성합니다 — 레벨별 "문제 요구 / 쓴 명령 / 배운 점" 3줄씩.
  3. 오늘 새로 만난 명령(file, find, strings, base64, uniq, tr) 각각의 한 줄 요약을 추가합니다.
  4. 본문의 WSL 연습장 실습(3-3~3-8)을 내 컴퓨터에서 전부 재현하고, 출력을 문서에 붙입니다.
  5. 트러블슈팅 문서에 오늘의 실수(예: cat - 사건)를 기록합니다.

연습문제

문제 1. cat -가 파일을 읽지 못하는 이유와, 해결책 두 가지(경로 붙이기 외 하나 더)를 말해 보세요. (힌트: cat < ./- 같은 입력 리다이렉션)

문제 2. find inhere -type f -size 1033c ! -executable에서 각 조건의 뜻과, !의 역할을 설명해 보세요.

문제 3. sort data.txt | uniq -u에서 sort를 빼면 왜 "딱 한 번 등장하는 줄"을 제대로 못 찾는지 설명해 보세요.

문제 4. find / 조건을 쳤더니 "Permission denied" 에러가 화면을 도배합니다. 어느 레벨 문제에서 이 상황이 나오며, 정상 결과만 남기는 명령 형태를 써 보세요.


5. 모범 답안과 완료 기준

미션 모범 답안

비밀번호 체인 기록의 형식 예(값은 여러분이 직접 찾은 것):

bandit0: bandit0 (공개된 초기 비밀번호)
bandit1: <readme에서 찾은 문자열>
bandit2: <cat ./- 로 찾은 문자열>
...

레벨별 정리 문서 bandit-0-10.md의 한 칸 예:

[Level 2 → 3]
- 문제 요구: 이름에 공백이 있는 파일을 읽어라
- 쓴 명령: ls → cat "spaces in this filename"
- 배운 점: 공백 있는 파일명은 따옴표로 감싼다. Tab 자동완성도 이스케이프해 준다.

검증하는 법: ① 기록만 보고 ssh bandit10@bandit.labs.overthewire.org -p 2220에 바로 접속되는가. ② 정리 문서에 레벨 11칸이 모두 있는가. ③ WSL 연습장 실습 출력이 문서에 붙어 있는가. 셋이 전부 ‘예’이면 완성입니다. 내일 다시 와도 기록만 보고 10번 레벨까지 갈 수 있어야 진짜 완성입니다.

연습문제 해답

문제 1 해답. -는 표준 입력(키보드 입력)을 뜻하는 특별한 이름이라, cat이 파일이 아니라 입력 대기 상태에 들어가기 때문입니다 (2026-09-09 실측 — 아무 출력 없이 대기). 해결책: 경로를 붙여 cat ./-로 명확히 지정하거나, cat < ./-처럼 입력 리다이렉션으로 파일을 직접 물려 주는 방법이 있습니다.

문제 2 해답. -type f는 일반 파일만(폴더 제외), -size 1033c는 크기가 정확히 1033바이트(c는 바이트 단위 표시), -executable은 실행 권한이 있는 파일을 뜻하고 앞의 !는 그것을 부정합니다 — 즉 "실행 불가능한 것만". 세 조건은 AND로 동시에 만족해야 합니다 (2026-09-09 실측: 조건에 맞는 파일 경로 하나만 출력됨).

문제 3 해답. uniq인접한 줄끼리만 중복으로 보기 때문입니다. 같은 내용이 흩어져 있으면 서로 이웃이 아니라서 중복으로 인식되지 않습니다. sort로 같은 줄을 나란히 모은 뒤에야 uniq -u가 진짜 "한 번만 등장"을 골라낼 수 있습니다 (2026-09-09 실측: 정렬 후 ONLYONCE만 출력).

문제 4 해답. 레벨 6→7(서버 전체에서 찾기)에서 나옵니다. find /는 권한 없는 폴더마다 에러를 냅니다. 해결: find / -user bandit7 -group bandit6 -size 33c 2>/dev/null처럼 2>/dev/null을 붙입니다. 2>는 에러 출력을, /dev/null은 "아무 데도 없는 곳"을 뜻해, 정상 결과만 화면에 남습니다.

완료 기준 체크리스트

  • [ ] SSH로 원격 서버에 접속하고 종료(exit)할 수 있다
  • [ ] -로 시작하는 파일과 공백 있는 파일명을 올바르게 읽을 수 있다
  • [ ] ls -a, file, find, grep, sort | uniq, strings, base64 -d, tr을 상황에 맞게 고를 수 있다
  • [ ] 2>/dev/null로 에러 출력을 걸러 낼 수 있다
  • [ ] 레벨 0→10 비밀번호 체인을 기록해 두었다
  • [ ] 레벨별 명령 정리 문서를 개인 위키에 작성했다
  • [ ] 미션: 체인 완성과 WSL 연습장 재현을 모두 마쳤다

6. 흔한 실수와 해결

벽 1. ssh 접속이 바로 끊겨요

증상: 접속하자마자 연결이 닫히거나 비밀번호가 거부됩니다.

원인: 셋 중 하나 — 포트(-p 2220) 누락, 비밀번호 오타, 사용자명과 레벨 불일치(bandit1 비밀번호로 bandit0 접속 등).

해결: 명령을 천천히 다시 확인하세요. 비밀번호는 화면에 안 보이는 것이 정상이며, 복사·붙여넣기 시 앞뒤 공백에 주의합니다. 복사가 불안하면 손으로 직접 쳐 보세요.

벽 2. find를 쳤더니 "Permission denied"가 쏟아져요

증상: 에러 메시지가 화면을 도배해 정답이 묻힙니다.

원인: find /는 서버 전체를 뒤지며, 권한 없는 폴더마다 에러를 냅니다.

해결: 에러를 버리는 마법 — find / 조건 2>/dev/null. 정상 결과만 남습니다.

벽 3. cat -를 쳤더니 아무것도 안 나오고 멈췄어요

증상 (2026-09-09 실측): 명령이 끝나지 않고 커서만 깜빡입니다.

원인: -는 표준 입력이라는 특별한 뜻이라, cat이 키보드 입력을 기다리는 중입니다.

해결: Ctrl+C(또는 Ctrl+D)로 빠져나온 뒤 cat ./-처럼 경로를 붙이세요. 파일명이 -로 시작하는 모든 명령에 통하는 규칙입니다.

벽 4. 비밀번호를 찾았는데 다음 레벨이 안 열려요

증상: 방금 찾은 문자열로 접속이 거부됩니다.

원인: 복사할 때 앞뒤 공백이나 줄바꿈이 딸려 온 경우가 대부분입니다. 종종 읽은 파일이 "다음"이 아니라 다른 레벨의 것인 경우도 있습니다.

해결: 문자열을 직접 쳐 보세요. 그래도 안 되면 지금 읽은 파일이 정말 "다음 레벨용"이었는지 목표 페이지를 다시 확인합니다.

벽 5. sort | uniq -u를 쳤는데 여러 줄이 나와요

증상: "딱 한 번 등장하는 줄"이 한 줄이 아닙니다.

원인: uniq는 인접한 중복만 봅니다. sort를 빠뜨리면 흩어진 중복을 못 잡습니다.

해결: 파이프 순서 확인 — 반드시 sort data.txt | uniq -u. 정렬이 먼저, 중복 제거가 나중입니다 (3-7절 실측 참조).


7. 정리

오늘의 개념

개념 한 줄 설명
SSH 사용자@주소 -p 포트로 원격 터미널을 여는, 암호화된 문
워게임(wargame) 공격해 보라고 만들어 둔 합법 연습 서버 — Bandit이 입문 표준
비밀번호 체인 레벨 N의 비밀번호가 레벨 N+1의 열쇠 — 기록이 곧 진도
숨은 파일 .으로 시작, ls -a로만 보임
파이프(|) 왼쪽 출력을 오른쪽 입력으로 넘기는 조립 부품
2>/dev/null 에러 출력을 "없는 곳"으로 버리는 필터

오늘의 명령어

명령 하는 일
ssh 사용자@주소 -p 포트 원격 서버 접속, exit로 종료
cat ./- / cat "공백 파일" 특수한 파일명을 경로·따옴표로 읽기
ls -a 숨은 파일까지 보기
file ./파일 이름이 아니라 내용으로 정체 판정
find 경로 -type f -size Nc ! -executable 조건에 맞는 파일 찾기
grep 단어 파일 단어가 있는 줄만 골라내기
sort 파일 | uniq -u 딱 한 번 등장하는 줄 찾기 (정렬 먼저)
strings 파일 바이너리 속 읽히는 문자열 건져내기
base64 / base64 -d Base64 번역 / 되돌리기
tr "A-Za-z" "N-ZA-Mn-za-m" ROT13 등 자리 대 자리 치환

명령어보다 중요한 감각

Bandit 경험자들이 공통으로 하는 말이 있습니다 — "어려운 명령을 배운 게 아니라, 문제에서 힌트를 뽑아 명령과 연결하는 법을 배웠다." 실무 침해 분석도 같습니다. 로그 한 줄, 파일 하나가 문제이고, 여러분의 도구 상자가 답입니다. 도구를 아는 것보다 "지금 어떤 도구가 필요한가"를 읽는 것이 이 챕터의 진짜 수확입니다.

그리고 기록의 습관을 잊지 마세요. 워게임 도중 인터넷이 끊겨도 진도는 사라지지 않습니다 — 비밀번호가 곧 진도이고, 메모한 체인만 있으면 아무 때나 ssh bandit7@...로 바로 복귀할 수 있습니다. 레벨 10의 문을 여는 순간, 여러분은 "리눅스 명령어를 아는 사람"에서 "문제를 푸는 사람"으로 바뀝니다. 첫 워게임의 열한 고지를 넘은 것이고, 그 과정에서 만든 위키 문서가 여러분의 첫 워게임 정복 기록입니다.


전부 체크되면 Step 91 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.