文章目录
- 1. sudo 提权原理
- 1.1 原理
- 1.2 sudo文件配置
- 2. 提权利用方式
- 2.1 sudo权限分配不当
- 2.2 sudo脚本篡改
- 2.3 sudo脚本参数利用
- 2.4 sudo绕过路径执行
- 2.5 sudo LD_PRELOAD环境变量
- 2.6 sudo caching
- 2.7 sudo令牌进程注入
- 3. 参考
1. sudo 提权原理
1.1 原理
sudo
是一个用于在Linux和类Unix系统中以超级用户(root)或其他用户身份执行命令的程序。它的全称是 “superuser do”,允许普通用户以更高权限运行命令。
sudo 命令的工作原理是通过suid
权限来实现的。具体来说,它的工作过程可以简要概述如下:
-
设置 setuid 权限:sudo 程序本身被设置了 setuid 属性,这意味着当任何用户执行这个程序时,它会以程序拥有者(通常是 root)的权限运行。
-
执行权限继承:当用户执行 sudo 后面跟随的命令时,这个命令会继承 sudo 的权限。在这种情况下,虽然用户是普通用户,但由于 sudo 在以 root 用户的身份执行,随后的命令则也可以在 root 权限下运行。
-
权限验证:在执行命令之前,sudo 会检查用户在
/etc/sudoers
文件中的配置,确保该用户被授权运行指定的命令。如果用户没有权限,则会被拒绝执行。 -
审计和日志:sudo 还会记录所有使用 sudo 的命令,这样管理员可以审计用户的行为,以确保系统安全。
总体流程可以用以下流程来表示:
用户执行 sudo command 命令
↓
└── 检查用户权限(/etc/sudoers)
↓
└── command 继承 root 权限执行命令
1.2 sudo文件配置
*****************GPT生成***************
在 Linux 系统中,sudoers
文件用于定义哪些用户或用户组可以使用 sudo
命令,并在使用时可以执行哪些命令。通过对 sudoers
文件的配置,管理员能够为用户提供特定的权限控制。
编辑 sudoers
文件
要安全地编辑 sudoers
文件,推荐使用 visudo
命令,因其会进行语法检查,防止语法错误导致的安全风险。
打开终端输入以下命令:
sudo visudo
这将打开 sudoers
文件,通常使用 vi
或者 nano
编辑器。
基本配置格式
sudorers
文件的基本格式如下:
user host = (runas) command
user
:指定用户或用户组。host
:允许执行命令的主机(通常使用ALL
表示所有主机)。(runas)
:指定用户在执行该命令时可以以哪个用户身份运行(使用ALL
表示以所有用户身份运行)。command
:允许用户执行的命令,可以使用ALL
表示所有命令,也可以指定具体的命令路径。
示例配置
-
允许用户
alice
执行所有命令:alice ALL=(ALL) ALL
-
允许用户组
admin
以任何用户身份运行所有命令:%admin ALL=(ALL) ALL
-
允许用户
bob
在不需要密码的情况下执行/usr/bin/systemctl
命令:bob ALL=(ALL) NOPASSWD: /usr/bin/systemctl
-
只允许用户
charlie
执行/usr/bin/apt
和/usr/bin/dpkg
命令:charlie ALL=(ALL) /usr/bin/apt, /usr/bin/dpkg
其他常用选项
NOPASSWD
:用户可以不输入密码执行特定命令。Defaults
:用于设置默认行为,例如锁定sudo
命令的执行超时等。Defaults timestamp_timeout=15
保存和退出
在编辑结束后:
- 如果使用
vi
:按Esc
,输入:wq
,然后按Enter
保存并退出。 - 如果使用
nano
:按Ctrl+X
,然后根据提示选择Y
来确认保存。
注意事项
- 使用
visudo
:始终通过visudo
编辑sudoers
文件,以避免语法错误。 - 备份:在修改前备份
sudoers
文件。sudo cp /etc/sudoers /etc/sudoers.bak
- 权限限制:尽量给用户分配最小权限,避免不必要的安全风险。
2. 提权利用方式
sudo
权限配置不当,如果这些可执行文件本身又可以调用其他可执行文件,或者可以更改系统的一些配置选项,就可以达到提权的目的。
2.1 sudo权限分配不当
使用sudo -l
查看当前sudo配置,看当前用户可以使用sudo执行的命令。 一些可用于执程序的命令可直接用于提权。
路径 | 提权命令 | 路径 | 提权命令 |
---|---|---|---|
/usr/bin/bash | bash -p | /usr/bin/find | find /etc/passwd -exec bash -p |
/usr/bin/csh | csh -p | /usr/bin/awk | awk ‘BEGIN {system(“/bin/bash”)}’ |
/usr/bin/sh | sh -p | /usr/bin/man | !/bin/bash |
/usr/bin/ksh | ksh -p | /usr/bin/more | !/bin/bash |
/usr/bin/zsh | zsh -p | /usr/bin/less | !/bin/bash |
2.2 sudo脚本篡改
管理员将某个shell脚本设置为sudo免密执行,且低权限用户对其可写,那么可将后门程序或反弹shell的代码写入该脚本,完成提权。
2.3 sudo脚本参数利用
回到2.2
中的脚本,在无权限修改脚本内容时,可以通过阅读脚本代码来判断此脚本是否允许带入参数执行。如果脚本允许带参数执行且该参数可控,也可以进行提权。
2.4 sudo绕过路径执行
管理员在配置sudoers文件时使用了通配符,可利用这种情况执行命令或读取敏感文件。
2.5 sudo LD_PRELOAD环境变量
2.6 sudo caching
2.7 sudo令牌进程注入
3. 参考
[1] 《权限提升技术-攻防实战与技巧》
[2] Linux SUID提权
[3] sudo官网