AnbyMata의 해킹 노트

[Bandit] Level 6 → Level 7 본문

OverTheWire/Bandit

[Bandit] Level 6 → Level 7

AnbyMata 2026. 2. 6. 22:00

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

출처: https://overthewire.org/wargames/bandit/bandit7.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 somewhere on the server and has all of the following properties: owned by user bandit7 owned by group ban

overthewire.org

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

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

 

[1]  문제 요약

서버 어딘가에 다음 레벨의 비밀번호가 저장되어 있습니다.

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

- user(소유자)bandit7

- group(소유 그룹)bandit6

- 크기가 33 bytes

 

 


[2]  사용되는 명령어들

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

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

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

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

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

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

- grep : 파일 또는 입력 내용에서 특정 문자열(패턴)을 필터링

 

 


[3]  문제 접근 과정

1)  디렉토리와 파일 목록 파악

 - 'ls -a'로 숨겨진 디렉토리/파일 목록까지 확인합니다.

ls -a

 = 홈 디렉토리 안에 3개의 숨김 파일들이 존재합니다.

 

 

 

2)  홈 디렉토리 안에 있는 파일들의 상세 정보 확인

 - ls 명령어에 '-l' 옵션을 추가하여 user group, 파일 크기 정보까지 확인합니다.

ls -al

 = 세 파일 모두 user와 group이 "root"이고, 파일 크기도 33 bytes가 아닙니다.

 → 홈 디렉토리에는 우리가 찾는 파일이 없습니다.

 → 홈 디렉토리에 없으니 홈 디렉토리의 상위 디렉토리를 살펴보자!

[보충 설명]
level 5에서 설명했듯이 'ls -al' 명령어를 사용하면,
파일 타입과 권한 / 링크 수 / user(소유자) / group(속한 그룹) / 파일 크기 / 최종 수정 시간 / 파일 이름 순으로 출력됩니다.
이를 통해서 .bash_logout 파일을 예시로 보면, "root root 220" 부분을 통해
user는 "root", group도 "root", 파일 크기는 220 bytes임을 알 수 있습니다.

 

 

 

3)  홈 디렉토리의 상위 디렉토리 살펴보기

 - 홈 디렉토리에 없으니 우리가 이동할 수 있는 상위 디렉토리로 이동하여 어떤 디렉토리/파일들이 있는지 살펴봅니다.

cd .. + ls -a

 = 홈 디렉토리의 상위 디렉토리인 /home 디렉토리에 무수히 많은 디렉토리들이 존재합니다.

 → 이 중 어딘가에 있지 않을까?

[보충 설명]
여기서 말하는 홈 디렉토리는 우리가 처음 로그인 했을 때, 위치하는 곳입니다.
홈 디렉토리의 경로는 "/home/bandit6"입니다. 즉, bandit6의 홈 디렉토리라고 할 수 있습니다.
bandit6의 홈 디렉토리의 상위 디렉토리는 "/home"입니다. 이름이 "home"일 뿐이지, 우리가 흔히 말하는 홈 디렉토리는 아닙니다.
추가적으로 "/home"를 통해 이 디렉토리 위에 파일 시스템의 최상위 디렉토리인 root 디렉토리가 존재함을 알 수 있습니다.

 

 

 

4)  /home 디렉토리에서 find 명령어로 파일 찾기

 - 사용된 find 명령어의 옵션들은

  + "-size 33c" = 파일 크기가 33 bytes

  + "-user bandit7" = user(소유자)가 "bandit7"

  + "-group bandit6" = 속한 group이 "bandit6"

find -size 33c -user bandit7 -group bandit6

 = /home 디렉토리 안에는 우리가 찾는 파일이 없습니다.

 - 접근이 가능한 디렉토리들에는 조건을 만족하는 파일이 없어서 출력되지 않았고,

 - 접근이 불가능한 디렉토리들에서 "Permission denied" 메시지가 출력되었습니다.

 → /home 디렉토리의 상위 디렉토리인 root 디렉토리에서 파일을 찾아보자!

[보충 설명]
/home 디렉토리는 최상위 디렉토리가 아닙니다.
그래서 우리는 현재 파일 시스템의 전체를 찾아본 것이 아닌 일부만을 찾아본 상태입니다.

 

 

 

5)  최상위 디렉토리인 root 디렉토리에서 find 명령어로 파일 찾기

 - root 디렉토리는 파일 시스템 계층 구조의 사작점입니다.

 - 그래서 모든 디렉토리와 파일은 root 디렉토리의 아래에 존재합니다.

 → 즉, 우리가 찾는 파일은 무조건 root 디렉토리 안에 존재합니다.

cd .. + find -size 33c -user bandit7 -group bandit6

 = 수많은 "Permissions denied" 메시지 사이에 우리가 원하는 파일의 경로가 출력되었을 것입니다.

 

 

 

6)  비밀번호가 들어있는 파일의 경로 찾기

 - root 디렉토리 아래에는 무조건 존재하니까, 잘 찾아봐야 합니다.

수많은 Permission denied 사이에 있는 find 명령어의 결과

 = 우리가 찾던 파일의 경로를 찾아냈습니다.

 

 

 

7)  상위 디렉토리로 이동하는 불편한 과정 생략하기

 - 홈 디렉토리에 위치한 상태에서도 root 디렉토리( / )를 기준으로 파일을 탐색하는 방법이 존재합니다.

 - find 명령어의 형식은 다음과 같습니다.

  + 지금까지는 [탐색_경로]를 생략해서 현재 위치한 디렉토리[탐색_경로]가 되는 방식이었습니다.

  + [탐색_경로]를 설정해준다면, 그 위치에서부터 탐색을 시작합니다.

  + 즉, [탐색_경로]root 디렉토리를 지정하면, 파일 시스템의 최상위 위치부터 탐색하여 사실상 파일 시스템 전체를 탐색하게 됩니다.

 

 

 

8)  불필요한 메시지 제거해 파일 경로 찾기

 - root 디렉토리에서 find 명령어를 통해 파일 위치를 찾을 때, 수많은 "Permission denied" 메시지때문에 원하는 답을 찾아내기 번거로웠습니다.

 - 이 불필요한 메시지들을 걸러내는 2가지 방법이 떠올랐습니다

  + 1. "Permission denied" 메시지들을 다른데로 보내서 보이지 않게 만들기

  + 2. grep 명령어로 원하는 결과값만 필터링하기

 

 


[4]  문제 풀이 및 분석

 

[4-1] 표준 에러 redirection을 활용하여 에러 메시지 필터링

1)  find 명령어에 '2>/dev/null'을 이용하여 에러 메시지 제거

 - 표준 에러 (stderr)을 리다이렉션하여 제거하는 방법입니다.

 - '2>/dev/null' 을 자세히 뜯어보면,

  + "2>" = 2번 출력 stderr redirection

  + "/dev/null" = 에러 메시지를 버리는 곳

[보충 설명]
리눅스에서 모든 프로그램의 입출력은 번호로 관리됩니다.
0번은 표준 입력인 stdin / 1번은 표준 출력인 stdout / 2번은 표준 에러 출력인 stderr를 뜻합니다.
그래서 "2>"는 2번에 해당되는 표준 에러 출력 (stderr)를 뜻합니다.

redirection(리다이렉션)은 명령어의 입력이나 출력을 터미널이 아닌 다른 곳으로 보내는 것입니다.
터미널이 아닌 곳으로 보내기 때문에, 터미널 화면에 출력되지 않습니다.

 - 최종적으로 'find / -size 33c -user bandit7 -group bandit6 2>/dev/null'이라는 명령어를 완성하게 됩니다.

find / -size 33c -user bandit7 -group bandit6 2>/dev/null

 = 비밀번호가 들어있는 파일의 경로를 확인했습니다.

 

 

 

2)  얻어낸 파일이 조건에 부합하는지 검토

 - 'ls -l' 명령어를 통해 얻은 파일의 user, group, 파일 크기를 확인해봅니다.

ls -l /var/lib/dpkg/info/bandit7.password

 = 얻어낸 파일이 조건에 부합하는 파일임을 확인했습니다.

 

 

 

3)  '/var/lib/dpkg/info/bandit7/password' 파일 내용 출력하기

cat /var/lib/dpkg/info/bandit7.password

 = 서버 어딘가에 저장되어 있던 비밀번호 획득!

 

 

 

[4-2] grep 명령어를 활용하여 에러 메시지 필터링

1)  grep 명령어로 "Permission denied" 메시지 제거

 - "Permission denied" 에러 메시지가 많아서 원하는 답을 찾기 힘들었으니 해당 메시지들을 필터링합니다.

 - grep 명령어는 1번 출력인 표준 출력 (stdout)만을 입력으로 받습니다.

 → 2번 출력인 표준 에러 (stderr)은 필터링 대상이 아닙니다

 → "2>&1"을 추가하여 표준 에러(2번)를 표준 출력(1번)으로 만들어줍니다.

[보충 설명]
사실 이 방법은 그리 좋은 방법은 아닙니다.
에러를 처리하는 방식이 아닌 단순히 숨기는 방식이기 때문입니다.
"2>&1" 로 에러를 stdout에 섞은 뒤, grep -v문자열을 제거하는 방식입니다.
이 방식은 에러의 의미나 종류는 고려하지 않은 채로 단순히 텍스트를 삭제하는 방식입니다.

"2>&1" 을 사용하면 모든 에러가 정상 출력으로 취급되기 때문에 중요한 에러들도 정상 출력으로 취급되어버릴 수 있습니다.

 - 결과적으로 "find / -size 33c -user bandit7 -group bandit6 2>&1 | grep -v "Permission denied""라는 명령어를 완성하게 됩니다.

find / -size 33c -user bandit7 -group bandit6 2>&1 ❘ grep -v "Permission denied"

 = 에러 메시지들이 많이 사라져서 원하는 답을 쉽게 찾아낼 수 있습니다.

 

 

 

2)  grep 명령어로 나머지 에러 메세지도 제거

 - "No such file or directory"라는 에러 메시지도 제거해서 원하는 답만을 남겨놓겠습니다.

 - "Permission deneid"와 "No such file or directory" 메시지를 같이 필터링시켜야 합니다.

find / -size 33c - user bandit7 -group bandit6 2>&1 ❘ grep -v "Permission denied" ❘ grep -v "No such file or directory"

 = 비밀번호가 숨겨진 파일의 경로만 깔끔하게 출력됩니다.

 

 

 

3)  '/var/lib/dpkg/info/bandit7/password' 파일 내용 출력하기

cat /var/lib/dpkg/info/bandit7.password

 = 서버 어딘가에 저장되어 있던 비밀번호 획득!

 

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

 

 


[Bandit] Level 6 → Level 7. Clear.

 

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

https://anbymata.tistory.com/50

 

[Bandit] Level 7 → Level 8

OverTheWire - Bandit : Level 7 → Level 8. Write-up!출처: https://overthewire.org/wargames/bandit/bandit8.html Level Goal The password for the next level is stored in the file data.txt next to the word millionth Commands you may need to solve this level

anbymata.tistory.com

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

[Bandit] Level 8 → Level 9  (0) 2026.02.10
[Bandit] Level 7 → Level 8  (0) 2026.02.09
[Bandit] Level 5 → Level 6  (0) 2026.01.24
[Bandit] Level 4 → Level 5  (0) 2026.01.15
[Bandit] Level 3 → Level 4  (0) 2026.01.12