SUID (Set owner User ID up on execution) 是给予文件的一个特殊类型的文件权限。在 Linux/Unix中,当一个程序运行的时候, 程序将从登录用户处继承权限。SUID被定义为给予一个用户临时的(程序/文件)所有者的权限来运行一个程序/文件。用户在执行程序/文件/命令的时候,将获取文件所有者的权限以及所有者的UID和GID。

查找suid文件

find / -perm -u=s -type f 2>/dev/null
/表示从文件系统的顶部(根)开始并找到每个目录
-perm 表示搜索随后的权限
-u = s表示查找root用户拥有的文件
-type表示我们正在寻找的文件类型
f 表示常规文件,而不是目录或特殊文件
2表示该进程的第二个文件描述符,即stderr(标准错误)
>表示重定向
/ dev / null是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。

  

利用方式:

find命令

sudo find . -exec /bin/sh \; -quit

  

chmod命令

sudo sh -c 'cp $(which chmod) .; chmod +s ./chmod'

  

ash,linux shell

sudo ash

  

cp命令

sudo sh -c 'cp $(which cp) .; chmod +s ./cp'

  

更多suid利用方式:https://gtfobins.github.io/gtfobins

转载一个白帽汇的文章

因此对于sudo命令来说,通过向/etc/sudoers配置文件添加特殊的指令,就可以让某个用户以另一个用户的身份运行命令。

例如,下面的命令可让用户test以任意非root身份运行/usr/bin/vim/usr/bin/id命令。

test ALL = (ALL, !root) /usr/bin/vim
test ALL = (ALL, !root) /usr/bin/id

对于test用户,他可以使用一个带-u参数的sudo命令来指定运行命令的身份。例如,下面的命令将以用户bleep-test的身份启动vim。

sudo -u bleeping-test vim

在Linux中创建用户时,每个用户都有一个UID。如下所示,用户test的UID为1001,用户bleep -test的UID为1002。

而在使用sudo命令时,你也可以直接指定用户的UID来代替用户名。例如,下面的命令将再次以bleep-test身份启动vim,只不过这一次是通过指定用户的UID。

sudo -u#1002 vim

sudo漏洞

苹果安全研究员Joe Vennix就在sudo上发现了一个漏洞,只要用户在使用sudo命令时指定UID为-14294967295,就可以以root身份执行命令。

这是因为命令在将UID转换为对应用户时,会将-14294967295这两个异常数字视为0,而0root用户的UID

例如,下面的命令就可以利用这个漏洞以root身份运行/usr/bin/id,即使/etc/sudoers文件明确拒绝用户test这样做。

sudo -u#-1 id

此时通过/usr/bin/id命令可以清楚看到权限得到了提升。

虽然这个漏洞看似非常强大,但是必须记住,它只能在某个用户通过sudoers文件的配置访问某个命令的权限时才能生效。如果不是这种设置——大多数Linux发行版默认都不是——那么这个漏洞将不会产生任何影响。

利用漏洞

为了真正利用这个漏洞,用户首先需要为某个能执行其他命令的命令配置好sudoer文件。

例如,我们可以针对vim命令做如下配置:

test ALL = (ALL, !root) /usr/bin/vim

在vim编辑文件时,用户可以使用:!符号启动另一个命令。例如,你可以输入!ls以当前文件夹为目标执行ls命令。

如果我们利用sudo -u#-1 vim命令来利用这个漏洞,vim将以root身份启动。你可以通过执行!whoami命令来确认这一点。

现在,我们可以确认vim以root身份启动,而它执行的任何命令也是以root身份运行。

因此,我们可以很轻易地用它来启动一个root权限的shell,执行任何命令。下面就演示了这种攻击。

综上所述,这个漏洞影响范围非常有限,它只能影响小部分非标准配置的Linux服务器。

对于那些为经常使用sudoers文件的用户,应尽快将软件升级到sudo 1.8.28或更高版本。

Linux suid 提权的更多相关文章

  1. Linux提权-suid提权

    0x1 suid概念 通俗理解为其他用户执行这个程序是可以用该程序所有者/组的权限 0x2 suid提权 简单理解为,一个文件有s标志(权限中包含s),并且对应的是root权限,那么当运行这个程序时就 ...

  2. Linux下用SUID提权

    关于SUID详细:Linux下的用户.组和权限 SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得 ...

  3. Linux常见提权

    常见的linux提权 内核漏洞提权 查看发行版 cat /etc/issue cat /etc/*-release 查看内核版本 uname -a 查看已经安装的程序 dpkg -l rpm -qa ...

  4. linux 全自动提权 exp perl脚本

    linux 全自动提权 exp perl脚本 作者: admin 日期: 2013/01/19发表评论 (0) 查看评论   国外流传过来的 地址 http://dl.packetstormsecur ...

  5. Linux下提权常用小命令

    有些新手朋友在拿到一个webshell后如果看到服务器是Linux或Unix操作系统的就直接放弃提权,认为Linux或Unix下的提权很难,不是大家能做的,其实Linux下的提权并没有很多人想象的那么 ...

  6. linux关于suid提权笔记

    suid全称是Set owner User ID up on execution.这是Linux给可执行文件的一个属性,上述情况下,普通用户之所以也可以使用ping命令,原因就在我们给ping这个可执 ...

  7. Os-hackNos-1(drupal7+suid提权)

    一.信息收集 得到 ip是 192.168.56.101 , 端口开启了22和80,扫目录发现drupal 7 访问一下呢 在exploit-db上面搜索到存在相关的漏洞,而且是用直接上msf 使用第 ...

  8. linux 内核提权

    不经意间找到了大牛总结的一些Linux提权exp 我直接借花献佛分享给大家 #CVE #Description #Kernels CVE-2017-1000367 [Sudo] (Sudo 1.8.6 ...

  9. Linux用户提权管理方案

    提权管理方案背景: 如果一个公司有10余个运维或网络安全人员,同时管理服务器,切换到管理员用户时(su - root),必须要有root管理员密码,如果其中一人修改过root密码,其他用户则登录不了, ...

随机推荐

  1. 【Java新特性】Lambda表达式典型案例,你想要的的都在这儿了!!

    写在前面 不得不说,有些小伙伴的学习热情真高,学完了Lambda表达式的语法,想来几个典型案例再强化下.于是问冰河能否给几个Lambda表达式的典型使用示例.于是乎,便有了这篇文章. 案例一 需求 调 ...

  2. B - Housewife Wind POJ - 2763 树剖+边权转化成点权

    B - Housewife Wind POJ - 2763 因为树剖+线段树只能解决点权问题,所以这种题目给了边权的一般要转化成点权. 知道这个以后这个题目就很简单了. 怎么转化呢,就把这个边权转化为 ...

  3. 时间日期相关类:Date类,DateFormat类&SimpleDateFormat类,Calendar类

    日期相关类 1.Date类:日期时间类 A.构造方法 Date(): 根据当前系统时间创建日期对象 ​ Date(Long time):根据传入的毫秒值时间创建日期对象 B.成员方法 Long get ...

  4. 05_CSS入门和高级技巧(3)

    上节课复习 !important不能影响就近原则,远的标签如果加上!important也干不过近的标签! !important不能影响继承权重是0,通过继承的标签加上!important也干不过直接选 ...

  5. 【Spark】帮你搞明白怎么通过SparkSQL整合Hive

    文章目录 一.创建maven工程,导包 二.开发代码 一.创建maven工程,导包 <properties> <scala.version>2.11.8</scala.v ...

  6. Azure AD(二)调用受Microsoft 标识平台保护的 ASP.NET Core Web API 上

    一,引言 上一节讲到Azure AD的一些基础概念,以及Azure AD究竟可以用来做什么?本节就接着讲如何在我们的项目中集成Azure AD 包含我们的API资源(其实这里还可以在 SPA单页面应用 ...

  7. Spring JDBC 框架使用JdbcTemplate 类的一个实例

    JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...

  8. Jmeter5.2.1 三种参数化

    Jmeter的相关操作,一定要会参数化,常见的参数化方法有如下几种: 一.用户定义的变量 常应用于设置一些全局变量,包括url.host.port等等 线程组--添加--配置元件--用户定义的变量,添 ...

  9. 【hdu1024】简单dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1024 最大m字段和,题目就不多说了,经典dp 这题坑爹...首先不说明m的范围(n<=1000000),还 ...

  10. javascript实现checkbox提交submit请求

    javascript实现checkbox提交submit请求 背景:使用django模板中for来形成多个checkbox,需要点击单个checkbox并查询数据触发submit请求到后台,djang ...