AnbyMata의 해킹 노트

[Bandit] Level 5 → Level 6 본문

OverTheWire/Bandit

[Bandit] Level 5 → Level 6

AnbyMata 2026. 1. 24. 22:00

OverTheWire - Bandit : Level 5 → Level 6. Write-up!

출처: https://overthewire.org/wargames/bandit/bandit6.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 a file somewhere under the inhere directory and has all of the following properties: human-readable 10

overthewire.org

시작을 위해 "ssh -p 2220 bandit5@bandit.labs.overthewire.org" ssh 로그인합니다!

( 비밀번호: Level 4 → Level 5 에서 얻은 비밀번호 )

 

[1]  문제 요약

inhere 디렉토리 아래 어딘가에 있는 파일에 다음 레벨의 비밀번호가 저장되어 있습니다.

비밀번호가 저장된 파일은 다음의 조건들을 만족합니다.

- 사람이 읽을 수 있음 (human-readable)

- 크기는 1033 bytes

- 실행 파일이 아님 (not executable)

 

 


[2]  사용되는 명령어들

- ls : 현재 디렉토리 또는 지정한 경로의 파일과 폴더 목록 출력

- cd : 현재 작업 중인 디렉토리를 변경 (= 현재 위치에서 다른 디렉토리로 이동)

- cat : 파일의 내용을 화면에 출력

- file : 파일의 종류 및 타입 확인

- du : 디렉토리나 파일의 디스크 사용량 표시

- find : 지정한 경로에서 조건에 맞는 파일이나 디렉토리 검색

 

 

 


[3]  문제 접근 과정

1)  inhere 디렉토리 안의 파일/디렉토리 목록 확인

ls → cd inhere → ls

 = "maybehere00"부터 "maybehere19"까지 총 20개의 디렉토리가 존재합니다.

 

 

 

2)  20개 디렉토리 중 일부 디렉토리의 파일 목록 확인

 - "maybehere00", "maybehere01", "maybehere03"의 파일 목록을 확인해봅니다.

ls maybehere00 → ls maybehere01 → ls maybehere03

 = 각 디렉토리 안에 총 6개의 파일이 들어있습니다.

 - 이름이 "-"로 시작하는 파일과 공백이 있는 파일 2가지 유형이 있습니다.

 - 세 디렉토리 안의 파일들이 이름이 다 동일한 것으로 보아 다른 디렉토리들도 동일한 이름의 파일들을 가지고 있을 것입니다.

 

 

 

3)  하나의 디렉토리로 이동한 후, file 명령어로 파일들의 타입 확인

 - maybehere00 디렉토리의 파일들의 타입을 확인해봅니다.

 - 이름이 "-"로 시작하는 파일과 공백이 있는 파일 2가지 유형이 있습니다.

 - 그래서 file 명령어에 와일드카드 ( * )를 활용하는 것은 힘듭니다.

[보충 설명]
"-"로 시작하는 파일이 옵션으로 해석되는 문제를 해결하기 위해
file ./* 명령어를 사용하면,
공백이 있는 파일이 'file ./spaces file1'이 되면서 'file ./spaces' 라는 없는 파일을 지정하게 됩니다.

공백이 있는 파일이 2가지 인자로 해석되는 문제를 해결하기 위해
file "*" 명령어를 사용하면,
"-"로 시작하는 파일이 'file "-file1"'이 되면서 옵션으로 해석하게 됩니다.

즉, 와일드카드를 사용하기 굉장히 힘듭니다.

 - 이름이 "-"로 시작하는 파일은 상대 경로, 이름에 공백이 있는 파일은 따옴표( " " )를 활용합니다.  

cd mayhere00 → file ./-file1 → file "spaces file1"

 = 파일 타입을 통해 각 파일의 human-readable 여부만 판단할 수 있습니다.

 = 파일 크기, 실행 파일인지 여부는 파악할 수 없습니다.

 

 

 

4)  ls 명령어에 '-l' 옵션을 사용하여 파일의 상세 정보 확인하기

 - 'ls -l' 옵션은 파일의 상세 정보를 출력해줍니다.

 - 'ls -l'로 maybehere00 디렉토리 안의 파일들의 상세 정보를 확인해보면,

ls -l maybehere00

 = 파일크기, 실행 파일인지 여부를 파악할 수 있습니다.

 = 하지만, 이번에는 파일타입을 몰라 human-readable한지는 판단할 수 없습니다.

[보충 설명]
'ls -al' 명령어의 결과로 출력되는 값들을 왼쪽부터 차례대로 알려드리면,
- "-rwxr-x---" = 파일 타입 + 권한
- "1" = 링크 수
- "root" = 소유자
- "bandit5" = 파일이 속한 그룹
- "1039" = 파일크기 (bytes 단위)
- "Oct 14 09:26" = 최종 수정 시간
- "-file1" = 파일 이름
입니다. (그렇구나 정도로만..)

"-file1"의 상세 정보 중 파일 타입 + 권한 부분을 자세히 살펴봅시다.
"-rwxr-x---"는 4가지 부분으로 구성됩니다. (1 + 3 + 3 + 3 구조)
첫 글자 "-" = 파일 타입입니다. "-"는 일반 파일, "d"는 디렉토리, "l"은 심볼릭 링크라는 것을 의미합니다.

나머지 9글자는 3글자씩 구분지어 각각 소유자 권한, 그룹 권한, 기타 권한을 나타냅니다.
"r"은 읽기, "w"는 쓰기, "x"는 실행 권한을 의미하며, 해당 권한이 없다면 "-"로 표시됩니다.
"rwx" = 소유자 권한으로 세 가지 권한을 모두 가지고 있습니다.
"r-x" = 그룹 권한으로 읽기와 실행 권한을 가집니다.
"---" = 기타 권한으로 아무 권한도 없습니다.

즉, 실행 권한을 나타내는 "x"가 세 구간 중 하나라도 존재하면 실행 가능하다는 뜻이기에 실행 파일로 판단할 수 있습니다.
하지만 보통, CTF에서는 소유자 (owner) 권한 기준으로 판단하면 됩니다.

최종적으로 maybehere00 디렉토리의 "-file1" 파일은 실행 파일입니다.

 

 

 

5)  'ls -l *' 이후, file 명령어로 조건 확인하는 아이디어

 - ls 명령어와 file 명령어로 두 번에 걸쳐서 파일크기, 실행파일 여부, human-readable 여부까지 파악한다라는 생각입니다.

 - 'ls -l *' 로 와일드 카드 ( * )를 사용해 20개 디렉토리 안의 모든 파일들의 상세 정보를 확인합니다.

 - 그 중 파일 크기가 1033 bytes면서 실행 파일인 파일들만 file 명령어로 human-readable 여부까지 확인합니다.

 - 하지만, 20개의 디렉토리 각각에 6개의 파일들이 들어있어 총 120개의 파일을 일일이 파악하는 것은 좋은 방법이 아닌 것 같습니다.

 

 

 

6)  조건이 구체적으로 주어졌으므로, 조건에 맞는 파일을 탐색하는 방법 사용

find 명령어를 사용하자!

[보충 설명]
find 명령어의 옵션들을 살펴보면,
1. 파일 타입
- "-type f" = 일반 파일 / "-type d" = 디렉토리
2. 파일 크기
- "-size 1000c" = 1000 bytes / "-size +1k" = 1KB 초과
3. 실행 권한 여부
- "-executable" = 실행 가능한 파일 / "! -executable" = 실행 불가능한 파일
4. 파일 이름
- "-name "example" = 파일 이름이 "example"

'find [조건1] [조건2] ...' 방식으로 만족해야 되는 조건들을 추가할 수 있습니다. (AND)

 

 

 

7)  숨김 파일도 혹시 있을까?

 → 'ls -a' 옵션으로 maybehere00 디렉토리의 파일목록을 다시 확인해봅니다.

 - 'ls -a' 옵션은 숨겨진 파일까지 모두 포한한 파일 목록을 출력해줍니다.

 - 사실 뒤늦게 깨달은 사실입니다..

ls -a maybehere00

 = 사실 ".file1", ".file2", ".file3" 라는 3개의 숨김 파일들도 존재했습니다.

 - 즉, 각 디렉토리에는 6개가 아닌 9개의 파일이 존재하는 것입니다.

 - 파일 개수가 더욱 늘어났기에 더더욱 find 명령어를 사용해야될 것 같습니다.

 

 

 


[4]  문제 풀이 및 분석

1)  홈 디렉토리에서 inhere 디렉토리를 확인한 후, inhere 디렉토리 안의 내용 확인

ls → cd inhere → ls

 = inhere 디렉토리 안에 "maybehere00"부터 "maybehere19"까지 총 20개의 디렉토리가 존재합니다.

 

 

 

2)  각 디렉토리의 파일 목록 확인

 - '-a' 옵션으로 숨김 파일까지 포함하여 파일 목록들을 확인합니다.

 - "maybehere00", "maybehere01", "maybehere02" 디렉토리를 살펴보면 패턴이 보입니다.

 = 3개의 디렉토리를 살펴보면, 아마 다른 디렉토리들에도 동일한 이름으로 9개의 파일이 들어있을 것입니다.

[보충 설명]
Level 3에서 나왔던 내용입니다.
" . "은 현재 디렉토리, " .. "은 부모 디렉토리를 의미하는 특수 디렉토리입니다.
이 둘은 숨김 디렉토리가 아닌 파일 탐색을 위한 디렉토리들로 자동으로 포함됩니다.

 

 

 

[4-1] find 명령어 + file 명령어를 사용하여 파일 찾아내기

3)  find 명령어로 우리가 원하는 파일 탐색

 - find 명령어의 옵션들을 조건에 맞게 설정하자면, (human-readable 여부는 제외)

  + "-type f" = 일반 파일 (디렉토리는 아니니까)

  + "-size 1033c" = 파일의 크기는 1033 bytes

  + "! -executable" = 실행 불가능한 파일

find -type f -size 1033c ! -executable

 = 1033 byte의 크기를 가진 실행 불가능한 파일은 maybehere07 디렉토리에 들어있는 ".file2" 파일입니다.

 

 

 

4)  file 명령어로 사람이 읽을 수 있는지 확인

 - 최종적으로 maybehere07 안의 ".file2"가 human-readable한지까지 확인해봅니다.

file ./maybehere07/.file2

 = maybehere07의 ".file2" 파일은 human-readable 합니다.

 = 즉, 우리가 찾던 파일이 맞습니다.

[보충 설명]
Level 4에서 나왔던 내용입니다.
사람이 읽도록 만들어진 파일은 Text 파일입니다.
ASCII / UTF-8 등의 문자 인코딩을 한 파일들이 이에 해당됩니다.
따라서, "ASCII text" 타입은 human-readable 하다는 뜻입니다.

 

 

 

5)  조건에 부합하는 maybehere07 디렉토리의 ".file2" 파일 내용 출력하기

cat ./maybehere07/.file2

 = maybehere07 디렉토리의 ".file2" 파일 안에 있던 비밀번호 획득!

 

 

 

[4-2] find 명령어만으로 파일 찾아내기

3)  find 명령어로 우리가 원하는 파일 탐색

 - 아까의 명령어에 옵션을 추가하여 find 명령어만으로 파일을 찾아낼 것입니다.

 - find 명령어의 옵션들을 조건에 맞게 설정하자면, 

  + "-type f" = 일반 파일 (디렉토리는 아니니까)

  + "-size 1033c" = 파일의 크기는 1033 bytes

  + "! -executable" = 실행 불가능한 파일

  + "-readable" = 사람이 읽을 수 있는 파일 (human-readable)

find -type f -size 1033c ! -executable -readable

 = maybehere07 디렉토리의 ".file2" 파일이 우리가 찾던 파일입니다.

 

 

 

4)  조건에 부합하는 maybehere07 디렉토리의 ".file2" 파일 내용 출력하기

cat ./maybehere07/.file2

 = maybehere07 디렉토리의 ".file2" 파일 안에 있던 비밀번호 획득!

 

 

[4-3] ls 명령어로 일일이 찾아보기

3)  'ls -al *' 명령어로 모든 파일들의 상세 정보 출력

 - 'ls -al' 옵션은 숨김 파일까지 모두 포함하여 상세 정보를 출력해줍니다.

 - 와일드카드 ( * )를 활용하여 maybehere00, maybehere01, ... 순으로 디렉토리들이 인자로 전달됩니다.

ls -al *

 = maybehere00부터 maybehere19까지 각 디렉토리 안에 있는 모든 파일들의 상세 정보가 출력되었습니다.

 - (화면을 내리면 파일들의 상세 정보가 나열되어 있습니다)

 

 

 

4)  조건에 맞는 파일 찾아내기 (human-readable 조건은 제외)

 - 출력된 화면을 확인해가며 파일 크기가 1033 bytes이고, 실행 파일이 아닌 파일을 찾아냅니다.

 - 'ls -al' 만으로는 사람이 읽을 수 있는지 없는지 여부는 확인할 수 없습니다.

 - "-rw-r-----" 은 "x" 권한이 없기에 실행 파일이 아닙니다.

 - (기억이 나지 않는다면 [3] 문제 접근 과정을 다시 살펴보세요)

찾았다!

 = maybehere07 디렉토리의 ".file2" 파일이 크기가 1033 bytes이며 실행 파일이 아닙니다.

 

 

 

5)  file 명령어로 사람이 읽을 수 있는지 확인

 - 최종적으로 maybehere07 안의 ".file2"가 human-readable한지까지 확인해봅니다.

cd maybehere07 + ls -a + file .file2

 = maybehere07의 ".file2" 파일은 human-readable 합니다.

 = 즉, 우리가 찾던 파일이 맞습니다.

[보충 설명]
"cat ./maybehere07/.file2" 명령어로 하던 작업을,
cd 명령어로 maybehere07 디렉토리로 이동한 후, 'file .file2'로 file 명령어를 수행했습니다.
그냥 정답으로 가는 풀이법에는 여러 가지가 존재한다는 것을 기억해주셨으면 합니다.
풀이 방법이 정해져있지는 않으니 자유롭게 풀어보세요.

 

 

 

6)  조건에 부합하는 maybehere07 디렉토리의 ".file2" 파일 내용 출력하기

 - 이전 방법들과 다르게 maybehere07 디렉토리로 이동한 상태입니다.

cat .file2

 = maybehere07 디렉토리의 ".file2" 파일 안에 있던 비밀번호 획득!

 

bandit 비밀번호는 반드시 따로 복사해서 저장해두기! (메모장 등으로)

 

 


[Bandit] Level 5 → Level 6. Clear.

 

[Bandit] Level 6 → Level 7. Continue...

https://anbymata.tistory.com/48

 

[Bandit] Level 6 → Level 7

OverTheWire - Bandit : Level 6 → Level 7. Write-up!출처: https://overthewire.org/wargames/bandit/bandit7.html Level Goal The password for the next level is stored somewhere on the server and has all of the following properties: owned by user bandit7 ow

anbymata.tistory.com

'OverTheWire > Bandit' 카테고리의 다른 글

[Bandit] Level 7 → Level 8  (0) 2026.02.09
[Bandit] Level 6 → Level 7  (1) 2026.02.06
[Bandit] Level 4 → Level 5  (0) 2026.01.15
[Bandit] Level 3 → Level 4  (0) 2026.01.12
[Bandit] Level 2 → Level 3  (0) 2026.01.10