[overthewire] Bandit Level 19 → Level 20

moon_security·2025년 3월 20일

[OverTheWire] Bandit

목록 보기
21/32

문제 목표!

To gain access to the next level, you should use the setuid binary in the homedirectory. Execute it without arguments to find out how to use it. The password for this level can be found in the usual place (/etc/bandit_pass), after you have used the setuid binary.

다음 레벨로 접근하려면, 홈 디렉토리에 있는 setuid binary를 사용하라..?
흠... 어렵네요ㅠㅠ
같이 풀어 봅시다!

문제 풀이!

문제에서 언급된 setuid에 대해 알 필요가 있습니다.

📌 setuid
리눅스에서 실행 파일이 파일 소유자의 권한으로 실행되도록 하는 특수한 권한 비트
즉, setuid가 설정된 파일을 실행하면 파일 소유자의 권한을 일시적으로 얻게 되는 것!
-> 주로 루트(root) 권한이 필요한 명령어를 일반 사용자가 실행할 수 있도록 허용할 때 사용함
📌 setuid 확인 방법
리눅스에서 ls -l 명령어를 사용하면 setuid 비트가 적용된 파일 확인 가능함

아래 ls -l 명령어 실행 결과를 살펴보면 소유자 권한 쪽에 -rws가 되어 있는데, 여기서 s가 setuid를 말합니다!
해당 파일을 실행하면 bandit20의 권한으로 실행된 다는 말이지요!!

bandit19@bandit:~$ ls -l
total 16
-rwsr-x--- 1 bandit20 bandit19 14880 Sep 19 07:08 bandit20-do

홈 디렉토리에 있는 위 파일을 실행해 볼까요?

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)

uid를 보면 실제 사용자는 bandit19이지만, euid가 bandit20인 것으로 보아 실제 권한은 bandit20입니다 :)
아래 명령어 실행 결과처럼 각 레벨의 비밀번호는 해당 사용자만 읽을 수 있습니다!
물론, bandit20도 마찬가지구요!!

bandit19@bandit:/etc/bandit_pass$ ls -l
total 136
-r-------- 1 bandit0  bandit0   8 Sep 19 07:07 bandit0
-r-------- 1 bandit1  bandit1  33 Sep 19 07:07 bandit1
-r-------- 1 bandit10 bandit10 33 Sep 19 07:07 bandit10
-r-------- 1 bandit11 bandit11 33 Sep 19 07:07 bandit11
-r-------- 1 bandit12 bandit12 33 Sep 19 07:07 bandit12
-r-------- 1 bandit13 bandit13 33 Sep 19 07:07 bandit13
-r-------- 1 bandit14 bandit14 33 Sep 19 07:07 bandit14
-r-------- 1 bandit15 bandit15 33 Sep 19 07:07 bandit15
-r-------- 1 bandit16 bandit16 33 Sep 19 07:07 bandit16
-r-------- 1 bandit17 bandit17 33 Sep 19 07:07 bandit17
-r-------- 1 bandit18 bandit18 33 Sep 19 07:07 bandit18
-r-------- 1 bandit19 bandit19 33 Sep 19 07:07 bandit19
-r-------- 1 bandit2  bandit2  33 Sep 19 07:07 bandit2
-r-------- 1 bandit20 bandit20 33 Sep 19 07:07 bandit20
-r-------- 1 bandit21 bandit21 33 Sep 19 07:07 bandit21
-r-------- 1 bandit22 bandit22 33 Sep 19 07:07 bandit22
-r-------- 1 bandit23 bandit23 33 Sep 19 07:07 bandit23
-r-------- 1 bandit24 bandit24 33 Sep 19 07:07 bandit24
-r-------- 1 bandit25 bandit25 33 Sep 19 07:07 bandit25
-r-------- 1 bandit26 bandit26 33 Sep 19 07:08 bandit26
-r-------- 1 bandit27 bandit27 33 Sep 19 07:08 bandit27
-r-------- 1 bandit28 bandit28 33 Sep 19 07:08 bandit28
-r-------- 1 bandit29 bandit29 33 Sep 19 07:08 bandit29
-r-------- 1 bandit3  bandit3  33 Sep 19 07:08 bandit3
-r-------- 1 bandit30 bandit30 33 Sep 19 07:08 bandit30
-r-------- 1 bandit31 bandit31 33 Sep 19 07:08 bandit31
-r-------- 1 bandit32 bandit32 33 Sep 19 07:08 bandit32
-r-------- 1 bandit33 bandit33 33 Sep 19 07:08 bandit33
-r-------- 1 bandit4  bandit4  33 Sep 19 07:08 bandit4
-r-------- 1 bandit5  bandit5  33 Sep 19 07:08 bandit5
-r-------- 1 bandit6  bandit6  33 Sep 19 07:08 bandit6
-r-------- 1 bandit7  bandit7  33 Sep 19 07:08 bandit7
-r-------- 1 bandit8  bandit8  33 Sep 19 07:08 bandit8
-r-------- 1 bandit9  bandit9  33 Sep 19 07:08 bandit9

저희는 bandit20의 권한으로 실행할 수 있는 방법을 알았으니 비밀번호를 획득해 보겠습니다.

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

비밀번호 획득 완료 !!!

profile
모의해킹 & 보안 공부 기록 블로그

0개의 댓글