OverTheWire : Bandit Level 6 → Level 7

heuniy·2023년 9월 24일

bandit_write up

목록 보기
8/10

문제

https://overthewire.org/wargames/bandit/bandit7.html

Bandit Level 6 → Level 7
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 bandit6
33 bytes in size

server 어딘가에 password 파일이 존재한다.

조건은 owned by user bandit7 owned by group bandit6 33 bytes in size 이다.


풀이

조건이 주어졌으므로 저번처럼 find 명령어를 사용해 찾으면 될 듯하다.

bandit6@bandit:~$ find / -user banit7 -group bandit6 -size 33c

  • / : 최상위 경로를 뜻하므로 전체에서 파일을 찾는다.
  • -user : find 주요 옵션으로 user 소유의 파일을 찾는다.
  • -group : find 옵션으로 group 소유의 파일을 찾는다.
  • -size : 지정된 크기의 파일을 찾는다. (bytes 는 뒤에 c 가 붙는다.)

bandit6@bandit:~$ find / -user banit7 -group bandit6 -size 33c
find: ‘banit7’ is not the name of a known user
bandit6@bandit:~$ find / -user bandit7 -group bandit6 -size 33c
find: ‘/var/log’: Permission denied
find: ‘/var/crash’: Permission denied
find: ‘/var/spool/rsyslog’: Permission denied
find: ‘/var/spool/bandit24’: Permission denied
find: ‘/var/spool/cron/crontabs’: Permission denied
find: ‘/var/tmp’: Permission denied
find: ‘/var/lib/polkit-1’: Permission denied
/var/lib/dpkg/info/bandit7.password
find: ‘/var/lib/chrony’: Permission denied
find: ‘/var/lib/apt/lists/partial’: Permission denied
find: ‘/var/lib/amazon’: Permission denied
find: ‘/var/lib/update-notifier/package-data-downloads/partial’: Permission denied
find: ‘/var/lib/snapd/void’: Permission denied
find: ‘/var/lib/snapd/cookie’: Permission denied
find: ‘/var/lib/ubuntu-advantage/apt-esm/var/lib/apt/lists/partial’: Permission denied
find: ‘/var/lib/private’: Permission denied
find: ‘/var/snap/lxd/common/lxd’: Permission denied
find: ‘/var/cache/ldconfig’: Permission denied
find: ‘/var/cache/apt/archives/partial’: Permission denied
find: ‘/var/cache/pollinate’: Permission denied
find: ‘/var/cache/private’: Permission denied
find: ‘/var/cache/apparmor/a4dd844e.0’: Permission denied
find: ‘/var/cache/apparmor/8eeb6286.0’: Permission denied
find: ‘/drifter/drifter14_src/axTLS’: Permission denied
find: ‘/home/bandit29-git’: Permission denied
find: ‘/home/drifter6/data’: Permission denied
find: ‘/home/bandit28-git’: Permission denied
find: ‘/home/drifter8/chroot’: Permission denied
find: ‘/home/ubuntu’: Permission denied
find: ‘/home/bandit5/inhere’: Permission denied
find: ‘/home/bandit27-git’: Permission denied
find: ‘/home/bandit30-git’: Permission denied
find: ‘/home/bandit31-git’: Permission denied
find: ‘/boot/efi’: Permission denied
find: ‘/proc/tty/driver’: Permission denied
find: ‘/proc/2129477/task/2129477/fd/6’: No such file or directory
find: ‘/proc/2129477/task/2129477/fdinfo/6’: No such file or directory
find: ‘/proc/2129477/fd/5’: No such file or directory
find: ‘/proc/2129477/fdinfo/5’: No such file or directory
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/ssl/private’: Permission denied
find: ‘/etc/multipath’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/dev/mqueue’: Permission denied
find: ‘/dev/shm’: Permission denied
find: ‘/tmp’: Permission denied
find: ‘/snap’: Permission denied
find: ‘/lost+found’: Permission denied
find: ‘/run/chrony’: Permission denied
find: ‘/run/user/11026’: Permission denied
find: ‘/run/user/11013’: Permission denied
find: ‘/run/user/11021’: Permission denied
find: ‘/run/user/11010’: Permission denied
find: ‘/run/user/11028’: Permission denied
find: ‘/run/user/11020’: Permission denied
find: ‘/run/user/11023’: Permission denied
find: ‘/run/user/11011’: Permission denied
find: ‘/run/user/11002’: Permission denied
find: ‘/run/user/11027’: Permission denied
find: ‘/run/user/11017’: Permission denied
find: ‘/run/user/11019’: Permission denied
find: ‘/run/user/11004’: Permission denied
find: ‘/run/user/11025’: Permission denied
find: ‘/run/user/11009’: Permission denied
find: ‘/run/user/11003’: Permission denied
find: ‘/run/user/11007’: Permission denied
find: ‘/run/user/11032’: Permission denied
find: ‘/run/user/11000’: Permission denied
find: ‘/run/user/11008’: Permission denied
find: ‘/run/user/11001’: Permission denied
find: ‘/run/user/11024’: Permission denied
find: ‘/run/user/11012’: Permission denied
find: ‘/run/user/11006/systemd/inaccessible/dir’: Permission denied
find: ‘/run/user/11005’: Permission denied
find: ‘/run/sudo’: Permission denied
find: ‘/run/screen/S-bandit18’: Permission denied
find: ‘/run/screen/S-bandit20’: Permission denied
find: ‘/run/screen/S-bandit21’: Permission denied
find: ‘/run/multipath’: Permission denied
find: ‘/run/cryptsetup’: Permission denied
find: ‘/run/lvm’: Permission denied
find: ‘/run/credentials/systemd-sysusers.service’: Permission denied
find: ‘/run/systemd/propagate’: Permission denied
find: ‘/run/systemd/unit-root’: Permission denied
find: ‘/run/systemd/inaccessible/dir’: Permission denied
find: ‘/run/lock/lvm’: Permission denied
find: ‘/root’: Permission denied
find: ‘/sys/kernel/tracing’: Permission denied
find: ‘/sys/kernel/debug’: Permission denied
find: ‘/sys/fs/pstore’: Permission denied
find: ‘/sys/fs/bpf’: Permission denied

엄청나게 많은 출력이 나오는데 살펴보면 거의 다 Permission denied 라고 뜬다.

검색을 해봤더니 파일 디스크립터(File Descriptor) 에 대해 알아야 풀 수 있는 문제였다.


파일 디스크립터(File Descriptor)

  • 리눅스 혹은 유닉스 계열의 시스템에서 프로세스(process)가 파일(file)을 다룰 때 사용하는 개념으로, 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값

  • 프로그램이 프로세스로 메모리에서 실행될 때, 기본적으로 할당되는 파일디스크립터는 표준입력(Standard Input), 표준 출력(Standard Output), 표준에러(Standard Error)이며 이들에게 각각 0, 1, 2라는 정수가 할당된다.


이 문제에서 발생한 Permission denied 는 표준에러 이므로 이를 모두 다른 곳으로 보내면 문제를 해결할 수 있을 것이다.

출력의 방향을 지정할 때 알아야 하는 것이 바로 리다이렉션(redirection) 이다.


리다이렉션(redirection)

  • 프로세스의 입력 또는 출력 대상을 변경한다.
  • 일반적으로 출력 값을 파일로 저장하는 용도로 사용한다.
  • 표준 입출력 및 표준 에러에 대한 처리 기능이 있다.

  • A < B : B로부터 입력 받음
  • A > B : A의 표준 출력 스트림의 도착 지점을 B로 설정(덮어쓰기)

그렇다면 에러들은 어디로 보내야 할까


/dev/null

/dev/null 파일은 항상 비어있으며, /dev/null에 전송된 데이터는 버려진다.
따라서 특정 명령어를 실행 후, 출력이 필요없는 경우는 /dev/null에 출력을 지정하는 것이 좋다.


bandit6@bandit:~$ find / -user bandit7 -group bandit6 -size 33c 2>/dev/null
/var/lib/dpkg/info/bandit7.password

password 가 들어있는 경로를 찾았다.


bandit6@bandit:~$ cat /var/lib/dpkg/info/bandit7.password
z7WtoNQU2XfjmMtWA8u5rN4vzqu4v99S

passwordz7WtoNQU2XfjmMtWA8u5rN4vzqu4v99S 이다.


기타

리눅스 명령어 정리 (누적)

pwd : 현재 작업중인 디렉토리 정보(경로) 출력

ls : 디렉토리 목록 확인

  • ls -a : 모든 파일(숨겨진 파일 혹은 디렉토리)을 출력

cat [파일명] : [파일명] 내용 출력

  • cat ./[파일명] : 현재 디렉토리에 있는 [파일명] 내용을 출력
  • cat '[파 일 명]' : space가 있는 [파일명] 내용 출력
  • cat [파\ 일\ 명] : space가 있는 [파일명] 내용 출력

file [파일명] : [파일명] 종류(타입) 확인

find [옵션][경로][표현식] : 특정 파일 / 디렉토리 찾기

  • find ./* -size [bytes]c : file 명령어의 표현식, 현재 디텍토리에서 [bytes]파일 찾기
  • find -user(group) : find 명령어의 옵션, user(group) 소유의 파일 찾기
profile
고양이 귀여워

0개의 댓글