| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- 워게임
- write-up
- Cyber Security
- OverTheWire
- 정보보호
- 보안 스터디
- Blue Team
- 모의해킹
- Bandit
- 보안 관제
- 사이버 보안
- 리눅스
- 정보보안
- IR
- 해킹 스터디
- CTF
- Cross-Site Scripting
- linux
- XSS
- TryHackMe
- 리눅스 기초
- web hacking
- Web
- 해킹
- 해커
- THM
- SoC
- cert
- http
- 블루팀
- Today
- Total
AnbyMata의 해킹 노트
[Bandit] Level 6 → Level 7 본문
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'로 숨겨진 디렉토리/파일 목록까지 확인합니다.

= 홈 디렉토리 안에 3개의 숨김 파일들이 존재합니다.
2) 홈 디렉토리 안에 있는 파일들의 상세 정보 확인
- ls 명령어에 '-l' 옵션을 추가하여 user와 group, 파일 크기 정보까지 확인합니다.

= 세 파일 모두 user와 group이 "root"이고, 파일 크기도 33 bytes가 아닙니다.
→ 홈 디렉토리에는 우리가 찾는 파일이 없습니다.
→ 홈 디렉토리에 없으니 홈 디렉토리의 상위 디렉토리를 살펴보자!
| [보충 설명] level 5에서 설명했듯이 'ls -al' 명령어를 사용하면, 파일 타입과 권한 / 링크 수 / user(소유자) / group(속한 그룹) / 파일 크기 / 최종 수정 시간 / 파일 이름 순으로 출력됩니다. 이를 통해서 .bash_logout 파일을 예시로 보면, "root root 220" 부분을 통해 user는 "root", group도 "root", 파일 크기는 220 bytes임을 알 수 있습니다. |
3) 홈 디렉토리의 상위 디렉토리 살펴보기
- 홈 디렉토리에 없으니 우리가 이동할 수 있는 상위 디렉토리로 이동하여 어떤 디렉토리/파일들이 있는지 살펴봅니다.

= 홈 디렉토리의 상위 디렉토리인 /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"

= /home 디렉토리 안에는 우리가 찾는 파일이 없습니다.
- 접근이 가능한 디렉토리들에는 조건을 만족하는 파일이 없어서 출력되지 않았고,
- 접근이 불가능한 디렉토리들에서 "Permission denied" 메시지가 출력되었습니다.
→ /home 디렉토리의 상위 디렉토리인 root 디렉토리에서 파일을 찾아보자!
| [보충 설명] /home 디렉토리는 최상위 디렉토리가 아닙니다. 그래서 우리는 현재 파일 시스템의 전체를 찾아본 것이 아닌 일부만을 찾아본 상태입니다. |
5) 최상위 디렉토리인 root 디렉토리에서 find 명령어로 파일 찾기
- root 디렉토리는 파일 시스템 계층 구조의 사작점입니다.
- 그래서 모든 디렉토리와 파일은 root 디렉토리의 아래에 존재합니다.
→ 즉, 우리가 찾는 파일은 무조건 root 디렉토리 안에 존재합니다.

= 수많은 "Permissions denied" 메시지 사이에 우리가 원하는 파일의 경로가 출력되었을 것입니다.
6) 비밀번호가 들어있는 파일의 경로 찾기
- root 디렉토리 아래에는 무조건 존재하니까, 잘 찾아봐야 합니다.

= 우리가 찾던 파일의 경로를 찾아냈습니다.
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'이라는 명령어를 완성하게 됩니다.

= 비밀번호가 들어있는 파일의 경로를 확인했습니다.
2) 얻어낸 파일이 조건에 부합하는지 검토
- 'ls -l' 명령어를 통해 얻은 파일의 user, group, 파일 크기를 확인해봅니다.

= 얻어낸 파일이 조건에 부합하는 파일임을 확인했습니다.
3) '/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""라는 명령어를 완성하게 됩니다.

= 에러 메시지들이 많이 사라져서 원하는 답을 쉽게 찾아낼 수 있습니다.
2) grep 명령어로 나머지 에러 메세지도 제거
- "No such file or directory"라는 에러 메시지도 제거해서 원하는 답만을 남겨놓겠습니다.
- "Permission deneid"와 "No such file or directory" 메시지를 같이 필터링시켜야 합니다.

= 비밀번호가 숨겨진 파일의 경로만 깔끔하게 출력됩니다.
3) '/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 |