Level 19
Level Goal
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.
Solution
提示執行bandit20-do程序,貌似是以bandit20的身份執行命令,先執行一下看看:
bandit19@bandit:~$ ./bandit20-do id
uid=11019(bandit19) gid=11019(bandit19) euid=11020(bandit20) groups=11019(bandit19)
這裏有一個euid的概念:
實際用戶ID(RUID):用於標識一個系統中用戶是誰,一般是在登錄之後,就被唯一確定的,就是登陸的用戶的uid
有效用戶ID(EUID):用於系統決定用戶對系統資源的權限。也就是說當用戶做任何一個操作時,最終看它有沒有權限,都是在判斷有效用戶ID是否有權限,如果有,則OK,否則報錯不能執行。在正常情況下,一個用戶登錄之後(我們假設是A用戶),A用戶的有效用戶ID和實際用戶ID是相同的,但是如果A用戶在某些場景中想要執行一些特權操作,而上面我們說到用戶的任何操作,LINUX內核都是通過檢驗有效用戶ID來判斷當前執行這個操作的用戶是否具有權限,顯然是特權操作,A用戶沒有權限,所以A用戶就只能通過一定的手段來修改當前的有效用戶ID使其具有執行特權操作的權限。這裏說明了爲什麼我們需要修改有效用戶ID,就是想再某一時刻能夠執行一些特權操作。
保存設置用戶ID(SUID):是有效用戶ID副本,既然有效用戶ID是副本,那麼它的作用肯定是爲了以後恢復有效用戶ID用的。
可以看到執行bandit20-do可以以bandit20的身份執行命令,那麼就很簡單了,直接用bandit20-do看password即可:
bandit19@bandit:~$ ./bandit20-do ls /etc/bandit_pass/
bandit0 bandit11 bandit14 bandit17 bandit2 bandit22 bandit25 bandit28 bandit30 bandit33 bandit6 bandit9
bandit1 bandit12 bandit15 bandit18 bandit20 bandit23 bandit26 bandit29 bandit31 bandit4 bandit7
bandit10 bandit13 bandit16 bandit19 bandit21 bandit24 bandit27 bandit3 bandit32 bandit5 bandit8
bandit19@bandit:~$ ./bandit20-do cat /etc/bandit_pass/bandit20
VxCazJaVykI6W36BkBU0mJTCM8rR95XT