Bandit

[9월 17일] Bandit Walkthrough Level 1~10

ljm 2025. 9. 17. 16:01

 

OverTheWire Wargames는 해킹과 보안 기술을 익히고 연습할 수 있도록 설계된 온라인 게임 플랫폼이다.

 

다양한 난이도의 챌린지를 해결하면서 리눅스 명령어, 웹 보안, 리버스 엔지니어링, 암호학 등 다양한 컴퓨터 보안 개념을 배울 수 있다.

 

https://overthewire.org/wargames/

 

OverTheWire: Wargames

We're hackers, and we are good-looking. We are the 1%. <!-- Please read and accept the Rules! --> Wargames The wargames offered by the OverTheWire community can help you to learn and practice security concepts in the form of fun-filled games. To find out m

overthewire.org

 

 

오늘 해볼것은 <Bandit> 

Bandit은 OverTheWire 워게임 중 가장 기초적인 단계의 워게임이다.

각 레벨을 클리어할 때마다 다음 레벨로 넘어갈 수 있는 비밀번호를 찾게 되며,

이 비밀번호는 보통 특정 파일 안에 숨겨져 있으며 레벨이 올라갈수록 난이도는 증가한다.

 

SSH 접속정보 : bandit.labs.overthewire.org / port : 2220

 

 


 

Bandit0 

 

비밀번호 bandit0

 

bandit0 접속 > cat readme를 통해 비밀번호 획득

 

 


Bandit1

 

아까 얻은 비밀번호 붙여넣고 로그인

 

 

- 파일 열어서 비밀번호 획득

 

cat 명령어에서 -는 stdin 으로 인식하기 때문에 cat - 를 입력하게되면, 입력한 값이 그대로 출력된다. (stdin:Standard input)

그러므로, 현재 디렉토리라는 뜻의 ./ 를 추가해줘야한다.


Bandit2

 

--spaces in this filename-- cat 명령어로 비밀번호 획득하기

 

 

cat 명령어는 공백을 기준으로 서로다른 파일이라고 인식한다.

따라서 cat spaces in this filename이라고 입력하면 spaces, in, this, filename 의 이름을 가진 4개의 파일의 내용을 출력하려고 한다. 공백까지 포함해서 파일이름으로 인식하려면, 공백앞에 \ 기호(백슬래쉬)를 붙여줘서 문자라는것을 알려준다.

 

파일 이름에서 공백 앞에 \ 기호를 붙이는 것은 '이스케이프(escape) 문자'라고 하며, "이 다음에 오는 문자는 특별한 의미가 아니라 일반 문자로 취급하라" 는 것을 운영체제에 알려주는 역할

 


Bandit3

 

숨겨진 파일 내용 출력

 

 

.으로 시작하는 파일은 숨김 파일(hidden file) 이다.

숨김 파일은 주로 시스템 설정이나 사용자 환경 설정과 관련된 정보를 저장하는 데 사용됩니다.

시스템 파일, 설정 파일은 운영체제나 애플리케이션이 원활하게 작동하기 위해 필요한 설정 정보를 담고 있다. 예를 들어, 웹 브라우저의 캐시나 특정 프로그램의 구성 파일 등이 .cache나 .config 같은 이름으로 존재한다.

수많은 시스템파일과 설정 파일들이 모두 보이게되면 사용자에게 혼란을 줄 수 있기때문에 숨김 처리를 하여 중요한 파일만 보이도록 한다.

 


 

Bandit4

Non ASCII text라서 읽을 수 없음

 

유일한 human-readable file에 비밀번호가 저장되어있음

 

사용자가 읽을 수있는 -file07 파일에서 비밀번호 발견

 

 


 

Bandit5

수많은 파일들이 있어서 비밀번호가 적힌 파일을 찾는게 쉽지않음

 

비밀번호파일은 1033 바이트이고 실행불가능하다는 힌트 발견

 

 

-size 1033c 옵션과 ! - executable 옵션을 넣어서 파일 검색 명령어 find 사용

 

 

가이드에서 먼저 1033바이트이고, 실행 불가능한 파일이라는 힌트가 있었기 때문에

find ./ -size 1033c ! -executable 명령어를 실행

 


 

Bandit6

 

 

수많은 파일들
user : bandit7 / group : bandit6 / 33 bytes

 

user와 group 이름으로 찾기 옵션

 

파일의 소유자가 bandit7 이고, 파일의 그룹이 bandit6 이고, 파일의 크기가 33 바이트인 파일을 최상위 디렉토리부터 검색→ 모든 오류메세지(예:Permission denied)는 즉시 폐기(/dev/null)

 

 


 

Bandit7

 

data.txt 파일 내용

 

패스워드는 data.txt안의 millionth 단어 다음에 나옴

 

 

 

grep 명령어 사용하여 해당하는 텍스트 줄 찾기

 

grep 명령어는 특정 패턴을 포함하는 텍스트 줄을 찾는 강력한 도구이다. 'Global Regular Expression Print'의 약자로, 파일이나 다른 명령어의 출력에서 원하는 정보를 필터링할 때 주로 사용한다.

 

 

 


 

Bandit8

파일의 내용이 너무 길어서 알아볼 수 없음
비밀번호는 한번만 발생하는 텍스트의 라인

 

 

 

 

sort data.txt | uniq -u 명령어는 data.txt 파일에서 중복되지 않은 유일한 줄만 찾아 출력하는 명령어

 

sort data.txt

→  data.txt 파일의 내용을 읽어서 알파벳 순서나 숫자 순서대로 정렬

 

| (파이프)

→  앞선 sort 명령어의 출력(output)을 uniq 명령어의 입력(input)으로 전달

 

uniq -u

→  인접한 줄들을 비교하여 중복된 줄을 모두 제거하고, 한 번만 나타난 유일한 줄만 출력

 

 


 

Bandit9

 

기계어라서 읽을 수 없다

 

비밀번호는 사람이 읽을 수 있는 몇개의 문자열 중에서 하나이고, 여러개의 = 문자뒤에 나옴

 

data.txt 에서 사람이 읽을 수 있는 모든 문자열을 추출한 다음, 그중에서 = 문자를 포함하는 줄만 추출

 

 

strings 는 실행 파일이나 바이너리 파일 내에서 출력 가능한 문자열(string)을 추출하는 명령어이다.

strings 명령어는 이러한 바이너리 파일에서 ASCII 또는 유니코드 텍스트로 된 부분을 찾아내어 보여준다.

이는 파일이 어떤 역할을 하는지, 어떤 라이브러리를 사용하는지, 에러 메시지나 숨겨진 정보는 없는지 등을 파악하는 데 유용하다.

 

 


 

Bandit10

 

 

비밀번호는 base64로 인코딩된 데이터를 포함하고있음

 

 

base64로 data.txt 파일 디코딩

 

 

base64 --decode data.txt

base64 명령어는 바이너리 데이터를 ASCII 문자열로 변환하거나, 그 반대로 다시 변환하는 데 사용한다.

base64 명령어에 --decode 옵션을 넣어서 인코딩된 data.txt 파일을 디코딩해서 출력한다. 

 

'Bandit' 카테고리의 다른 글

[9월 18일] Bandit Walkthrough Level 17~28  (0) 2025.09.18
[9월 18일] Bandit Walkthrough Level 11~16  (0) 2025.09.18