본문 바로가기

CTF_Write_UP/overthewire

Overthewire : Bandit Level 6 → Level 7

시작

안녕하세요!! :D

이번 시간엔 Level 6 → Level 7 을 풀어보겠습니다.

root@goorm:/# ssh bandit6@bandit.labs.overthewire.org -p2220

문제

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 어딘가에 패스워드 파일이 존재합니다.

조건은 아래와 같습니다.

  • user == bandit7
  • group == bandit6
  • size == 33 bytes

find 명령어를 적절하게 사용해서 패스워드를 찾아봅시다!

find / -user bandit7 -group bandit6 -size 33c

하나하나 무슨 옵션인지 알아볼까요?

  • / 는 서버의 최상위 경로를 뜻합니다. 시스템 전부에서 찾겠다는 옵션입니다.
  • -user 옵션은 파일의 소유자를 찾습니다.
  • -group 옵션은 파일이 속한 그룹을 찾습니다.
  • -size 옵션은 파일의 사이즈를 찾습니다. cbytes를 뜻합니다.

자, 출력을 해봅시다 !!

bandit6@bandit:~$ find / -user bandit7 -group bandit6 -size 33c
find: ‘/run/lvm’: Permission denied
find: ‘/run/screen/S-bandit22’: Permission denied
find: ‘/run/screen/S-bandit18’: Permission denied
find: ‘/run/screen/S-bandit17’: Permission denied
find: ‘/run/screen/S-bandit25’: Permission denied
find: ‘/run/screen/S-bandit9’: Permission denied
find: ‘/run/screen/S-bandit16’: Permission denied
find: ‘/run/screen/S-bandit5’: Permission denied
find: ‘/run/screen/S-bandit19’: Permission denied
find: ‘/run/screen/S-bandit7’: Permission denied
find: ‘/run/screen/S-bandit33’: Permission denied
find: ‘/run/screen/S-bandit29’: Permission denied
find: ‘/run/screen/S-bandit28’: Permission denied
find: ‘/run/screen/S-bandit27’: Permission denied
find: ‘/run/screen/S-bandit21’: Permission denied
find: ‘/run/screen/S-bandit15’: Permission denied
find: ‘/run/screen/S-bandit31’: Permission denied
find: ‘/run/screen/S-bandit30’: Permission denied
find: ‘/run/screen/S-bandit14’: Permission denied
find: ‘/run/screen/S-bandit2’: Permission denied
find: ‘/run/screen/S-bandit24’: Permission denied
find: ‘/run/screen/S-bandit23’: Permission denied
find: ‘/run/screen/S-bandit20’: Permission denied
find: ‘/run/shm’: Permission denied
find: ‘/run/lock/lvm’: Permission denied
find: ‘/var/spool/bandit24/bandit25’: Permission denied
find: ‘/var/spool/rsyslog’: Permission denied
find: ‘/var/spool/cron/crontabs’: Permission denied
find: ‘/var/log’: Permission denied
find: ‘/var/tmp’: Permission denied
find: ‘/var/cache/ldconfig’: Permission denied
find: ‘/var/cache/apt/archives/partial’: Permission denied
/var/lib/dpkg/info/bandit7.password
find: ‘/var/lib/apt/lists/partial’: Permission denied
find: ‘/var/lib/polkit-1’: Permission denied
find: ‘/cgroup2/csessions’: Permission denied
find: ‘/home/bandit28-git’: Permission denied
find: ‘/home/bandit30-git’: Permission denied
find: ‘/home/bandit31-git’: Permission denied
find: ‘/home/bandit5/inhere’: Permission denied
find: ‘/home/bandit27-git’: Permission denied
find: ‘/home/bandit29-git’: Permission denied
find: ‘/tmp’: Permission denied
find: ‘/lost+found’: Permission denied
find: ‘/root’: Permission denied
find: ‘/etc/ssl/private’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/sys/fs/pstore’: Permission denied
find: ‘/proc/tty/driver’: Permission denied
find: ‘/proc/23502/task/23502/fd/6’: No such file or directory
find: ‘/proc/23502/task/23502/fdinfo/6’: No such file or directory
find: ‘/proc/23502/fd/5’: No such file or directory
find: ‘/boot/lost+found’: Permission denied

워.. 굉장히 많은 출력이 나와서 당황스럽네요..

보시면 대부분이 Permission denied 입니다.. 잘 찾아보면 오류 메시지가 뜨지 않은 파일이 있긴 한데..
무척 지저분하네요.

여기서 간단하게 리눅스의 File Descriptor에 대해 알아보겠습니다.


File Descriptor : 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값

일반적으로 0, 1, 2번 파일 디스크립터는 특수한 목적으로 사용

  • 0 : Standard input, 표준 입력
  • 1 : Standard output, 표준 출력
  • 2 : Standard error, 표준 에러

지금 우리가 사용한 find 명령어에서 발생하는 출력들은 Permission denied, 즉 표준 에러입니다.

따라서 저 화면에 뿌려진 오류들을 출력하지 않으려면 표준 에러들을 다른 곳으로 보내면 되겠죠?

이 때 사용하는 것이 Redirection 입니다.

Redirection은 입, 출력의 방향을 지정할 때 사용합니다.

  • A > B : A의 결과를 B로 보냅니다(저장).
  • A >> B : A의 결과를 기존 B의 데이터에 추가합니다.
  • A < B : B의 데이터를 A(명령)에 입력합니다.

이제 우리는 표준에러, 즉 File Descriptor2번인 것들을 어딘가에 버리면 될 것 같습니다.

/dev/null : 리눅스의 쓰레기통

/dev/null은 모든 출력을 흡수하는 블랙홀과 같습니다. 더러운 에러들은 블랙홀로 보내버립시다!

2 > /dev/null : 표준에러를 /dev/null로 보내 출력하지 않습니다.


결론적으로 우리는
find / -user bandit7 -group bandit6 -size 33c 2>/dev/null 명령어를 만들었습니다.

바로 적용시켜보죠!!

bandit6@bandit:~$ find / -user bandit7 -group bandit6 -size 33c 2>/dev/null
/var/lib/dpkg/info/bandit7.password
bandit6@bandit:~$
bandit6@bandit:~$ ls -l /var/lib/dpkg/info/bandit7.password
-rw-r----- 1 bandit7 bandit6 33 Oct 16 14:00 /var/lib/dpkg/info/bandit7.password
bandit6@bandit:~$
bandit6@bandit:~$ cat /var/lib/dpkg/info/bandit7.password
HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs

깔-끔 하군요. :D

ls 로 파일 속성을 확인해 본 결과 문제의 조건과 정확히 맞아 떨어지는 것을 볼 수 있습니다!!

bandit7의 패스워드는 HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs 입니다.

마무리

find 명령어가 어느 정도 손에 익으셨나요..?

잘 알아두시면 유용하게 쓰일 때가 있을 거에요ㅎㅎ..

지금까지 find 명령어와

리눅스의 File Descriptor와 표준 입출력 및 에러, Redirection을 간단하게 건드려 보았습니다.

특히 Redirection은 사용 범위가 굉장히 넓기 때문에 사용법을 숙지하시는 것이 좋을 것 같습니다 !!

긴 글 따라오시느라 수고하셨습니다 !!

Level 7 → Level 8에서 뵙겠습니다 :D