WAR GAME/Bandit

[OverTheWire: Bandit] level19 -> level20

jir4vvit 2020. 3. 1. 16:42

사용 툴: cygwin

 

1) 문제

level19 -> level20 문제

다음 레벨로 가기 위해선 홈디렉터리의 setuid 바이너리를 사용해야한다.

setuid 바이너리를 사용하기 위해 알규먼트 없이 실행해봐라.

패스워드는 setuid 바이너리를 사용한 후 /etc/bandit_pass 아래서 찾을 수 있다.

 

 

2) 문제풀이

bandit19로 로그인해주고 홈디렉터리를 살펴본다.

bandit19@bandit:~$ ls -al
total 28
drwxr-xr-x  2 root     root     4096 Oct 16  2018 .
drwxr-xr-x 41 root     root     4096 Oct 16  2018 ..
-rwsr-x---  1 bandit20 bandit19 7296 Oct 16  2018 bandit20-do
-rw-r--r--  1 root     root      220 May 15  2017 .bash_logout
-rw-r--r--  1 root     root     3526 May 15  2017 .bashrc
-rw-r--r--  1 root     root      675 May 15  2017 .profile
bandit19@bandit:~$

소유자의 permission 부분의 실행여부 부분에 s라고 적혀져있다.

이는 setuid가 걸린 파일임을 뜻한다.

 

이는 일시적으로 자신의 id를 변경할 수 있는 파일임을 뜻한다.

한마디로 저 파일을 실행하면 일시적으로 id가 bandit20으로 변경이 되는 것이다.

 

모 워게임(FTZ)는 setuid가 걸린 파일을 이용하여 다음레벨의 권한을 얻으며 게임을 진행한다...

 

아무튼 저 파일을 실행시켜 보겠다.

bandit19@bandit:~$ ./bandit20-do
Run a command as another user.
  Example: ./bandit20-do id
bandit19@bandit:~$ ./bandit20-do id
uid=11019(bandit19) gid=11019(bandit19) euid=11020(bandit20) groups=11019(bandit19)
bandit19@bandit:~$

 euid가 bandit20이라고 한다.

EUID에 저장된 UID에 따라 프로세스의 권한이 결정된다고 한다.

 

그럼 cat명령어로 bandit20의 패스워드만 읽어와야겠다.

 

bandit19@bandit:~$ ./bandit20-do cat /etc/bandit_pass/bandit20
GbKksEFF4yrVs6il55v6gwY5aVje5f0j
bandit19@bandit:~$

 

SHJ@DESKTOP-CK691IG ~
$ ssh -p 2220 bandit20@bandit.labs.overthewire.org
bandit20@bandit:~$ id
uid=11020(bandit20) gid=11020(bandit20) groups=11020(bandit20)
bandit20@bandit:~$

 이로써 bandit20 계정에도 로그인에 성공하였다.!