saulGoodman 一个专注于红队攻防研究的公众号 关注 Linux中SUID权限解读 做靶机的时候经常要通过Suid提权,例如使用命令: find / -user root -perm -4000 这时,便需要Set Uid权限了,简称SUID权限。 SUID权限的基本功能: ·SUID权限仅对二进制程序有效。 ·执行者对该程序具有x的可执行权限,才可利用SUID权限。 现在我们看一下passwd命令,该命令位于/usr/bin/目录下,是一个二进制程序 发现此命令并没有SUID权限(SUID权限的符号是s,位于程序拥有者的x权限上)。 那我们现在为passwd命令赋予SUID权限,看看效果会怎样: chmod u+s /usr/bin/passwd #为passwd命令赋予SUID权限 由图中看到,passwd权限变为-rwsr-xr-x ---- 看到这里应该就清楚了,利用SUID的前提是当前用户可执行该SUID权限的程序,拥有执行权。
Linux中SUID权限解读 做靶机的时候经常要通过Suid提权,例如使用命令: find / -user root -perm -4000 -print 2>/dev/nullfind / type 这时,便需要Set Uid权限了,简称SUID权限。 SUID权限的基本功能: ·SUID权限仅对二进制程序有效。 ·执行者对该程序具有x的可执行权限,才可利用SUID权限。 发现此命令并没有SUID权限(SUID权限的符号是s,位于程序拥有者的x权限上)。 那我们现在切换到test用户,看看在没有SUID权限的情况下,是否可以修改密码: ? 那我们现在为passwd命令赋予SUID权限,看看效果会怎样: chmod u+s /usr/bin/passwd #为passwd命令赋予SUID权限 ? ---- 看到这里应该就清楚了,利用SUID的前提是当前用户可执行该SUID权限的程序,拥有执行权。
说到这个话题,我们不得不先介绍一下两个东西: suid提权是什么 nmap为什么可以使用suid提权 通常来说,Linux运行一个程序,是使用当前运行这个程序的用户权限,这当然是合理的 有的同学说某某程序只要有suid权限,就可以提权,这个说法其实是不准确的。只有这个程序的所有者是0号或其他super user,同时拥有suid权限,才可以提权。 权限 lua脚本中限制了suid权限 新版Linux系统对子进程的suid权限进行了限制 这些猜想中变量太多,所以我需要控制一下。 (argv[1]);} 编译,并赋予其suid权限: root@linux:/tmp# gcc suid.c -o suidroot@linux:/tmp# chmod +s suid 接着我尝试在不同系统中 所以,可以看出,Ubuntu发行版官方对dash进行了修改:当dash以suid权限运行、且没有指定-p选项时,将会丢弃suid权限,恢复当前用户权限。
我们一般会再次把它们缩写为 suid 和 sgid。 事实上,tester 用户是可以修改 /etc/shadow 这个文件内的密码的,就是通过 SUID 的功能。 SGID 的特点与 SUID 相同,我们通过 /usr/bin/mlocate 程序来演示其用法。 SBIT 其实 SBIT 与 SUID 和 SGID 的关系并不大。 设置 SUID、SGID、SBIT 权限 以数字的方式设置权限 SUID、SGID、SBIT 权限对应的数字如下: SUID->4 SGID->
SUID是Linux的一种权限机制,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。如果拥有SUID权限,那么就可以利用系统中的二进制文件和工具来进行root提权。 具体来说,命令将尝试查找具有root权限的SUID的文件。 发现SUID可执行文件 以上所有二进制文件都将以root用户权限执行,因为它们的权限中包含"s",并且对应的是root权限。 SUID可执行文件 - Nmap NMAP 较旧版本的Nmap(2.02至5.21)具有交互模式,允许用户执行shell命令。 但是,如果以SUID运行的话,它会继承root用户的权限,因此可以读取系统上的所有文件。 vim.tiny /etc/shadow ?
suid提权 说到这个话题,我们不得不先介绍一下两个东西: suid提权是什么 nmap为什么可以使用suid提权 通常来说,Linux运行一个程序,是使用当前运行这个程序的用户权限,这当然是合理的。 有的同学说某某程序只要有suid权限,就可以提权,这个说法其实是不准确的。只有这个程序的所有者是0号或其他super user,同时拥有suid权限,才可以提权。 权限 lua脚本中限制了suid权限 新版Linux系统对子进程的suid权限进行了限制 这些猜想中变量太多,所以我需要控制一下。 (argv[1]); } 编译,并赋予其suid权限: root@linux:/tmp# gcc suid.c -o suid root@linux:/tmp# chmod +s suid 接着我尝试在不同系统中 所以,可以看出,Ubuntu发行版官方对dash进行了修改:当dash以suid权限运行、且没有指定-p选项时,将会丢弃suid权限,恢复当前用户权限。
第一部分:SUID 首先了解一下SUID主要功能:当用户执行某一程序时,临时获得该程序所有者的身份(非所有者以所有者身份运行) 这样的说法难免有些晦涩,打个比方: 普通用户是没有/etc/shadow 由上面的例子,我们可以知道 1.只有可执行的二进制程序才能设定SUID权限。(给一个非程序设定SUID是没有意义的) 2.命令的执行者必须对该程序拥有X(执行)权限,否则没有SUID没有意义。 3.SUID权限只在程序运行的过程中有效。(普通用户变身为root超人的时间和限制是非常严格的) 所以,大家在设定SUID是时一定要十分谨慎,因为SUID权限是十分危险的! 假设你给VIM设定的SUID权限,那么任何人都可以直接修改系统关键文件,包括但不仅限于shadow文件。 好了,了解完SUID的知识,终于可以设定SUID权限了。 如何设定SUID权限? 如何删除SUID权限? 很简单,将权限再次指回即可。
,此时就被称为Set UID,简称为SUID权限。此时,如果该文件的属主权限为root,并能够执行命令操作,攻击者便可以root身份进行操作Linux系统。 常见导致SUID提权的可执行程序包含:Nmap、vim、find、bash、more、less、nano、pkexec等,当查询这些可执行程序具有SUID权限时,可进一步排查是否存在权限提升安全问题,并对存在安全的程序进行修复和加固 接下来,本节将利用find命令,查询Linux系统中具有SUID权限的文件 find / -perm -u=s -type f 2>/dev/null find / -perm -g=s -type f 通过指令查询,可以看到find和pkexec具有SUID权限,接下来测试find和pkexec可行性程序是否能够提权成功,通过find指令进行操作使普通用户变成了root权限执行系统指令: /usr/bin ,如果导致权限提升安全威胁,可通过修改可执行程序权限的方式或更新软件进行打补丁的方式修复suid权限文件导致的安全问题,可以修改suid可执行文件权限的修复过程。
通过将ping程序标记为SUID(所有者为root),只要低特权用户执行ping程序,便会以root特权执行ping。 如果在程序中设置了suid,该位可以生成shell或以其他方式滥用,我们可以使用它来提升我们的特权。 以下是一些可用于产生SHELL的程序: nmap vim less more nano cp mv find 查找suid和guid文件 Find SUID find / -perm -u=s -type bin / nmap –让我们确认nmap是否设置了SUID位。 Nmap的SUID位置1。很多时候,管理员将SUID位设置为nmap,以便可以有效地扫描网络,因为如果不使用root特权运行它,则所有的nmap扫描技术都将无法使用。
@蜗牛师傅也写了一篇,大家可以参考学习下:权限提升 | suid提权及修复方式 0x01 SUID命令提权简介 setuid是set uid ID upon execution的缩写,我们一般会再次把它们缩写为 suid权限的命令进行提权,最终获得root权限。 下图展示了普通用户是如何通过passwd来修改/etc/shadow文件,正常情况下普通用户是无法直接修改/etc/shadow文件,因为passwd命令带有suid权限,所以普通用户在执行passwd 0x02 查找具有suid权限文件的命令 SUID的权限号是4000 -exec 是用来执行ls -al命令 {}表示前面find所查找到的所有结果 \; 是转义;来结束命令 2> 将标准错误输出输出到 suid,这里使用whereis,which都可以。
除此之外,还有特殊权限SUID,SGID,SBIT。 1.SUID SUID全称Set User ID,当小写字母s出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。 这就是Linux特有的SUID权限机制。 注意,如果在浏览文件时,发现文件所有者权限的第三位是一个大写的“S”则表明该文件的SUID属性无效,比如将SUID属性给一个没有执行权限的文件。 Linux中特有的SUID权限机制,其过程如下图所示: ? 使用SUID需要满足以下几点: (1)SUID只对二进制文件有效,不能作用于目录或Shell脚本; (2)调用者对该文件有执行权; (3)在执行过程中,调用者会暂时获得该文件的所有者权限; (4
权限提升 3.1 滥用特权控制机制:Setuid和Setgid bash命令具有root用户的suid权限 bash命令能够用于提权 最终获得root用户权限 3.2 创建或修改系统进程:Systemd
这些特殊权限的设定主要是SUID,SGID以及SBIT。这几个值并非一个单独的rwx,而是在文件或目录上的x权限上做动作,来达到实现文件或目录特殊权限的目的。 1、SUID SUID 是 Set User ID的缩写 SUID: 当运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者; chmod u+s FILE chmod u-s 因为 cat 不具有 SUID 的权限,所以 vbird 运行 『cat /etc/shadow』 时,是不能读取 /etc/shadow 的。 SUID:4 SGID:2 SBIT:1 假设要将一个文件权限改为『-rwsr-xr-x』时,由于s在使用者权限中,所以是 SUID ,因此, 在原先的 755 之前还要加上 4 ,也就是:『 结合上面描述的SUID,SGID,SBIT这组,也就是说需要4个位来设定umask。下面直接通过演示来理解umask的用法及作用。
一、初识SUID 1.suid的简介 suid即set user id,是一种授予文件的权限类型,它允许用户使用者以文件所有者的权限来执行文件。需要这种特殊权限的场景在Linux下很常见。 所以利用suid文件进行提权需要2个前提:文件的所有者是 0 号或其他super user 文件拥有suid权限 在os层面目前常见发行版linux也会对suid的权限进行限制,具体可以参考p神这篇文章 :/tmp# gcc suid.c -o suid root@linux:/tmp# chmod +s suid 2. 查找具有 SUID 权限位文件 以下命令可以找到正在系统上运行的所有SUID可执行文件。 : nmap在高版本中限制了suid权限; lua脚本中限制了suid权限; 新版Linux系统对子进程的suid权限进行了限制。
[suid@GeekDevOps root]$ passwd 更改用户 suid 的密码 。 为 suid 更改 STRESS 密码。 # chmod u+s /bin/passwd [root@GeekDevOps ~]# su suid [suid@GeekDevOps root]$ passwd 更改用户 suid 的密码 。 在我们去除suid用户的SUID权限时,命令执行错误。去除SUID权限之后我们还能执行passwd命令是因为文件passwd的权限是755。 [suid@GeekDevOps root]$ passwd 更改用户 suid 的密码 。
3种特殊权限 在Linux系统中,有3种特殊权限,它们分别是Setuid(SUID)、Setgid(SGID) 和 Sticky Bit。 最后的总结 SUID权限(Set User ID on execution):当一个可执行文件被设置了SUID权限时,当任何用户执行该文件时,该文件将以文件所有者的权限来运行,而不是执行者的权限。 SUID权限通常用于那些需要执行特定操作,而这些操作只能由具有特定权限的用户或组来执行的程序,例如passwd命令。这可以帮助管理员在系统中实现更严格的访问控制。 与SUID权限类似,SGID权限通常用于那些需要特定组的权限才能运行的程序。
第二章 文件、目录管理 2.18 特殊权限之 suid SUID的作用就是:让本来没有相应权限的用户运行这个程序时,可以访问没有权限访问的资源。passwd是一个很鲜明的例子。 suid=set uid # umask 0022 umask的数值0022中第一位代表的就是特殊权限,包括有suid、sgid、sticky_bit。 设置于可执行二进制文件时,作用和suid类似,即执行改文件的用户会临时获得改文件所属组的权限。设置在目录时,任何用户在此目录下创建的文件或目录都具有和该目录相同的所属组。
euid %d, suid %d\n", getpid(), ruid, euid, suid); else err_sys ("getresuid"); } int main 之前把这里理解成 SUID 从 RUID 复制了,粗心大意了! 问题验证 了解 SUID 设置规则后,回头来看上面的表,有进一步的理解: 调用参数 (root 身份) RUID EUID SUID SUID 复制 setreuid (bar, foo) bar * SUID 果然随之变更了!这个用例更能说明问题,因为调用 setreuid 前后 RUID 与 EUID 没有发生改变,SUID 却因为 ruid 参数有效而发生了变更,有点意思。 SUID 不会随 EUID 变更。
一、操作目的和应用场景 本文档介绍在CentOS 7系统中利用带有suid权限的程序提权从而获取root shell的方法。 首先简单介绍suid的概念: Linux进程在运行的时候有以下三个UID: Real UID:执行该进程的用户的UID。Real UID只用于标识用户,不用于权限检查。 为可执行文件添加suid权限的目的是简化操作流程,让普通用户也能做一些高权限才能做的的工作。但是如果SUID配置不当,则很容易造成提权。 的suid权限 chmod g+s prog2 //设置prog2的sgid权限 (二)查找带有suid/sgid权限的文件 find / -perm -u=s -type f 2>/dev/null //查找suid文件 find / -perm -g=s -type f 2>/dev/null //查找sgid文件 现在我们假设,后面介绍的用于提权的程序文件都被root用户设置了suid权限
问题报错: The SUID sandbox helper binary was found, but is not configured correctly. 解决方法: 问题产生 在Linux版AppImage的时候,打开无反应,使用命令行运行,出现了下面的报错信息: linux: FATAL:setuid_sandbox_host.cc(158)] The SUID