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 fakePASS — tr "바꿀 글자들" "새 글자들"은 자리 대 자리 치환입니다.
4. 미션과 연습문제
미션 — 레벨 0→10 체인 완성 + 명령어 정리 문서
- bandit0부터 bandit10까지 SSH 접속을 완료하고, 비밀번호 11개를 기록합니다.
- 위키에
bandit-0-10.md를 작성합니다 — 레벨별 "문제 요구 / 쓴 명령 / 배운 점" 3줄씩. - 오늘 새로 만난 명령(
file,find,strings,base64,uniq,tr) 각각의 한 줄 요약을 추가합니다. - 본문의 WSL 연습장 실습(3-3~3-8)을 내 컴퓨터에서 전부 재현하고, 출력을 문서에 붙입니다.
- 트러블슈팅 문서에 오늘의 실수(예:
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 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.